输入 第一行输入一个整数n(1 <= n <= 100)表示测试样例个数 接下来n行,一

输入
第一行输入一个整数n(1 <= n <= 100)表示测试样例个数
接下来n行,一个字符串(大小不超过20),保证字符串不包含除小写字母外的任何其他字符
输出
对于每个单词输出a或者an,每个a或者an单独占一行,表示应该使用的不定冠词

#include

#include

#include

#define STRLEN 100

void ifree(char**p,int i);

int CheckAndChange(char*p);

int main()

{

int T;/*样例个数*/

int i;/*循环参数*/

char**p=NULL;/*指针p指向的内存空间存放指向各个字符串的指针*/

scanf("%d\n",&T);/*读取T*/

if((p=malloc(T*sizeof(char*)))==NULL)

{

printf("malloc p fail!\n");

return-1;

}

for(i=0;i&lt;T;i++)

{

if((*(p+i)=malloc((STRLEN+1)*sizeof(char)))==NULL)

{

printf("malloc p+%d fail!\n",i);

ifree(p,i);/*释放之前分配的空间*/

free(p);/*释放p*/

return-1;

}

gets(*(p+i));

}

for(i=0;i&lt;T;i++)

{

if(CheckAndChange(*(p+i))&gt;0)/*判断是否都是大写字符,如果是,则变成小写*/

{

printf("%s\n",*(p+i));

}

else

{

printf("string%d contains incorrect character!\n",i+1);

}

}

ifree(p,T);

free(p);

return 0;

}

void ifree(char**p,int i)

{

int j;

for(j=0;j&lt;i;j++)

{

free(*(p+j));

}

}

int CheckAndChange(char p)

{

int i;

for(i=0;i&lt;strlen(p);i++)

{

if(((p+i)&gt;='A')&&(*(p+i)&lt;='Z'))

{

*(p+i)+='a'-'A';

}

else

{

return-1;

}

}

return 1;

}

扩展资料:

return是C++的关键字,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值.

说到return,有必要提及主函数的定义,下面是从网络上找到的资料,好好消化吧,对了解主函数中返回值的理解有很大的帮助.

很多人甚至市面上的一些书籍,都使用了void main(),其实这是错误的。C/C++中从来没有定义过void main()。C++之父Bjarne Stroustrup

在他的主页上的FAQ中明确地写着The definition void main(){/*...*/}is not and never has been C++,nor has it even been C.(void main()从来就不存在于C++或者C)。

1.C

在C89中,main()是可以接受的。Brian W.Kernighan和Dennis M.Ritchie的经典巨著The C programming Language 2e(《C程序设计语言第二版》)用的就是main()。不过在最新的C99标准中,只有以下两种定义方式是正确的:

int main(void)

int main(int argc,char*argv[])

(参考资料:ISO/IEC 9899:1999(E)Programming languages—C 5.1.2.2.1 Program startup)

当然,我们也可以做一点小小的改动。例如:char*argv[]可以写成char**argv;argv和argc可以改成别的变量名(如intval和charval),不过一定要符合变量的命名规则。

如果不需要从命令行中获取参数,请用int main(void);否则请用int main(int argc,char*argv[])。

main函数的返回值类型必须是int,这样返回值才能传递给程序的激活者(如操作系统)。

如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中(如exe文件)加入return 0;,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯。

注意,vc6不会在目标文件中加入return 0;,大概是因为vc6是98年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上return语句了吧!不过,gcc3.2(Linux下的C编译器)会在生成的目标文件中加入return 0;。

参考资料:

百度百科——return(C语言语句)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-29

你看这样满意不

2018.12.29更改过一次。。。。。

#include <cstdio>
#include <cstdlib>

int main(int argc, char const *argv[])
{
    char ch[25]; // 不超过20
    int n;
    
    scanf("%d", &n);
    getchar(); // 吃空格符
    
    while(n--){
        gets(ch);
        if(ch[0]=='a' || ch[0]=='e' || ch[0]=='i' || ch[0]=='o' || ch[0]=='u'){
            printf("an\n");
        }else{
            printf("a\n");    
        }
    }
    
    // system("pause");   
    return 0;
}

/*
在devc++中的运行结果为
3
apple
you
fucker
an
a
a
*/

第2个回答  2016-12-03
这题有点问题:不定冠词用a或an并不单是由单词的第一个字母是元音还是辅音决定,不发音的h开头的单词前也要用an。那么这种情况怎么处理,题目有没有明确要求?本回答被网友采纳
第3个回答  推荐于2018-02-27
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>


int main( )
{
char **a=NULL;
int n=0,i=0;
scanf("%d",&n);
a = (char **)malloc(sizeof(char*)*n);
fflush(stdin);
for (i=0;i<n;i++)
{
a[i] = (char*)malloc(sizeof(char)*20);
gets(a[i]);
}
for (i=0;i<n;i++)
{
if (a[i][0]=='a' ||a[i][0]=='e' || a[i][0]=='i' || a[i][0]=='o' || a[i][0]=='u' )
{
printf("an\n");
}else
{
printf("a\n");
}
}
return 0 ;
}
3
earth
apple
dog
an
an
a
Press any key to continue

本回答被网友采纳
第4个回答  2021-05-13
char **a=NULL; int n=0,i=0; scanf("%d",&n); a = (char **)malloc(sizeof(char*)*n); fflush(stdin); for (i=0;i<n;i++) { a[i] = (char*)malloc(sizeof(char)*20); gets(a[i]); } for (i=0;i<n;i++) { if (a[i][0]=='a' ||a[i][0]=='e' || a[i][0]=='i' || a[i][0]=='o' || a[i][0]=='u' ) { printf("an\n"); }else { printf("a\n"); } }
相似回答