为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

国家计算机二级c语言历年机试

2014-02-04 37页 doc 245KB 25阅读

用户头像

is_751228

暂无简介

举报
国家计算机二级c语言历年机试历届全国二级C语言 第一套 1.填空题 请补充main函数,该函数的功能是:从键盘输入一个字符串并保存在字符str1中,把字符串str1中下标为偶数的字符保存在字符串str2中并输出。例如,当str1=“cdefghij”,则str2=“cegi”。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #define LEN 80 main() { char str1[LEN],str2[LEN]; ...
国家计算机二级c语言历年机试
历届全国二级C语言 第一套 1.填空 请补充main函数,该函数的功能是:从键盘输入一个字符串并保存在字符str1中,把字符串str1中下标为偶数的字符保存在字符串str2中并输出。例如,当str1=“cdefghij”,则str2=“cegi”。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干达式或语句。 试题程序: #include #include #define LEN 80 main() { char str1[LEN],str2[LEN]; char *p1=str1,*p2=str2; int i=0,j=0; clrscr(); printf("Enter the string:\n"); scanf(【1】); printf("***the origial string***\n"); while(*(p1+j)) { printf("【2】",*(p1+j)); j++; } for(i=0;i标准
输入函数scanf()的调用格式,当输入字符串时,格式控制字符串为″%s″,题目要求输入的字符串保存在str1中,所以地址表列应为字符串的首地址,即为str1。填空2:本题考查对标准输出函数printf()的调用格式,当输出为字符型变量时,格式控制字符串为″%c″。填空3:题目要求将str1中下标为偶数的字符保存在字符串str2中并输出,所以printf()函数的输出表列是str2 2. 改错题 在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。下列给定程序中,函数fun()的功能是计算数组元素中值为负数的平均值(不包括0)。 例如:数组中元素的值依次为43,-47,-21,53,-8,12,0,则程序的运行结果为-25.333333。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include double fun(int x[ ]) { double sum=0.0; int c=0, i=0; /**********************found***********************/ while(x[i]==0) { if(x[i]<0) { sum=sum+x[i]; c++; } i++; } /**********************found***********************/ sum=sum\c; return sum; } main() { int x[1000]; int i=0; clrscr(); printf("\nPlease enter some data(end with 0) :"); do { scanf("%d",&x[i]); }while(x[i++]!=0); printf("%f\n",fun(x)); } 答案及评析: (1)错误:while(x[i]==0) 正确:while(x[i]!=0) (2)错误:sum=sum\c; 正确:sum=sum/c; 【解析】错误1:此处考查的是对循环条件的理解,当被判断的数组元素为0时,说明这是数组的最后一个元素,此时要跳出循环。 错误2:C语言中的除法运算符是"/",而不是"\"。 3. 编程题 请编写一个函数int fun(int *s,int t,int *k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。 例如,输入如下整数: 234 345 753 134 436 458 100 321 135 760 则输出结果为6,100。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include int fun(int *s,int t,int *k) { } main() { int a[10]={234,345,753,134,436,458,100,321,135,760},k; clrscr(); fun(a, 10, &k); printf("%d, %d\n ", k, a[k]); } 答案及评析: int fun(int *s,int t,int *k) { int i; *k=0; /*k所指的数是数组的下标值*/ for(i=0;is[i]) *k=i; /*找到数组的最小元素,把该元素的下标赋给k所指的数*/ return s[*k]; /*返回数组的最小元素*/ } 【解析】本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值,即*k=0。 第二套 1.填空题 请补充函数fun(),该函数的功能是:从‘a’到‘z’统计一个字符串中所有字母字符各自出现的次数,结果保存在数组alf中。注意:不区分大小写,不能使用字符串库函数。 例如,输入:“A=abc+5*c”,结果为:a=2,b=1,c=2。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #define N 100 void fun(char *tt,int alf[]) { int i; char *p=tt; for(i=0;i<26;i++) 【1】; while(*p) { if(*p>='A'&&*p<='Z') 【2】; if(*p>='a'&&*p<='z') alf[*p-'a']++; 【3】; } } main() { char str[N]; char a='a'; int alf[26],k; clrscr(); printf("\nPlease enter a char string:"); scanf("%s",str); printf("\n**The original string**\n"); puts(str); fun(str,alf); printf("\n**The number of letter**\n"); for(k=0;k<26;k++) { if(k%5==0) printf("\n"); printf("%c=%d ",a+k,alf[k]); } printf("\n"); } 答案及评析: 【1】alf[i]=0 【2】*p+=32 【3】p++ 【解析】填空1:数组alf[26]用来存放字母字符出现的次数,在使用之前需要清零。填空2:题目要求不区分大小写,所以可以先将所有的大写字母都转换为对应的小写字母,然后一并记录出现的次数。将大写字母转换为对应的小写字母,只需将ASCII码加上32就可以了。填空3:指针p指向字符串tt,通过p自加1来移动指针,访问字符串中的所有字符。 2. 改错题 下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。例如,当s中的数为4576235时,t中的数为4725。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include /**********************found***********************/ int fun(long s,long *t) { long s1=10; *t=s%10; while(s>0) { /**********************found***********************/ s=s%100; *t=s%10*s1+*t; s1=s1*10; } } main() { long s, t; clrscr(); printf("\nPlease enter s: "); scanf("%ld",&s); fun(s,&t); printf("The result is: %ld\n ",t); } 答案及评析: (1)错误:int fun(long s,long *t) 正确:void fun(long s,long *t) (2)错误:s=s%100; 正确:s=s/100; 【解析】错误1:函数由指针来完成参数的传递,所以没有返回值,应定义函数的类型为void。 错误2:此处要注意特殊运算符号"%"--取余和"/"--整除的区别。将一个数整除100则可得到由其百位数以上的数组成的新数字,将一个数整除100取余则可得到由十位数和个位数组成的新数。 3. 编程题 请编写一个函数fun(),它的功能是:求出一个4×M整型二维数组中最小元素的值,并将此值返回调用函数。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #define M 4 #include fun (int a[][M]) { } main() { int arr[4][M]={11,3,9,35,42,-4,24,32,6,48,-32,7,23,34,12,-7}; printf("min=%d\n",fun(arr)); } 答案及评析: fun (int a[][M]) { int i,j,min=a[0][0]; for(i=0;i<4;i++) for(j=0;ja[i][j]) min=a[i][j]; /*求出二维数组的最小值*/ return min; } 【解析】此类求最大值或最小值的C语言问题,我们可以采用逐个比较的方式。要求数组中的所有元素走动一遍,并从中找出最大、最小值,要注意一开始应使min存放数组中的第一个元素的值。可按逐行查找也可按逐列查找的方式,本题采用的是逐行查找的方式。即行下标在外层循环,列下标在内层循环,因为在循环的嵌套中越在内层循环,循环变化就越快。 第三套 1.填空题 请补充函数fun(),该函数的功能是求一维数组x[N]的平均值,并对所得结果进行四舍五入(保留两位小数)。 例如:当x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0, 10.0,16.0},结果为:avg=15.030000。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include #include double fun(double x[10]) { int i; long t; double avg=0.0; double sum=0.0; for(i=0;i<10;i++) 【1】; avg=sum/10; avg=【2】; t=【3】; avg=(double)t/100; return avg; } main() { double avg,x[10]={15.6,19.9,16.7,15.2, 18.3,12.1,15.5,11.0,10.0,16.0}; int i; clrscr(); printf("\nThe original data is :\n"); for(i=0;i<10;i++) printf("%6.1f",x[i]); printf("\n\n"); avg=fun(x); printf("average=%f\n\n",avg); } 答案及评析: 【1】sum+=x[i] 【2】avg*1000 【3】(avg+5)/10 【解析】填空1:通过for循环求出10个数的累加和,存于变量sum中。填空2:为了实现四舍五入保留两位小数的功能,应将平均值先扩大1000倍。填空3:将平均值加上5,再除以10,实现四舍五入的功能。 2. 改错题 下列给定程序中,函数fun()的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。 请改正函数fun()中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include int fun() { int a[3][3],mul; int i,j; mul=1; for (i=0;i<3;i++) { /**********************found***********************/ for (i=0;j<3;j++) scanf("%d",&a[i][j]); } for(i=0;i<3;i++) /**********************found***********************/ mul=mul*a[i][j]; printf("Mul=%d\n",mul); } main() { fun(); } 答案及评析: (1)错误:for (i=0;j<3;j++) 正确:for (j=0;j<3;j++) (2)错误:mul=mul*a[i][j]; 正确:mul=mul*a[i][i]; 【解析】错误1:循环结构中,要给变量j赋初值0。 错误2:主对角元素的行号和列号相等,所以参加乘法的是a[i][i],而不是a[i][j]。 3. 编程题 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:把分数最低的学生数据放在h所指的数组中。注意:分数低的学生可能不只一个,函数返回分数最低学生的人数。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #define N 16 typedef struct { char num[10]; int s ; }STREC; int fun (STREC *a, STREC *b) { } main () { STREC s[N]={{"GA005",82},{"GA003",75},{"GA002",85},{"GA004",78}, {"GA001",95},{"GA007",62},{"GA008",60},{"GA006",85}, {"GA015",83},{"GA013",94},{"GA012",78},{"GA014",97}, {"GA011",60},{"GA017",65},{"GA018",60},{"GA016",74}}; STREC h[N]; int i, n; FILE *out; n=fun(s,h); printf("The %d lowest score :\n",n); for (i=0; ia[i].s) min=a[i].s; /*找出最小值*/ for(i=0;i #include #define N 100 void fun(char *str,int bb[]) { char *p=str; int i=0; for(i=0;i<6;i++) 【1】; while(*p) { switch(*p) { case 'A': case 'a':bb[0]++;break; case 'E': case 'e':bb[1]++;break; case 'I': case 'i':bb[2]++;break; case 'O': case 'o':bb[3]++;break; case 'U': case 'u':bb[4]++;break; default:【2】; } 【3】 } } main() { char str[N],ss[6]="AEIOU"; int i; int bb[6]; clrscr(); printf("Input a string: \n"); gets(str); printf("the string is: \n"); puts(str); fun(str,bb); for(i=0;i<5;i++) printf("\n%c:%d",ss[i],bb[i]); printf("\nother:%d",bb[i]); } 答案及评析: 【1】bb[i]=0 【2】bb[5]++ 【3】p++; 【解析】填空1:数组bb[6] 用来存放5个元音字母和其他字符的个数,在使用之前需要清零。 填空2:数组元素bb[5] 用来存放其他字符的个数,当指针p所指的字符不是元音字母时,则认为是其他字符,bb[5]加1。填空3:指针p指向字符串str,通过p自加1来移动指针,访问字符串中的所有字符。 2. 改错题 下列给定的程序中,函数fun()的功能是:计算并输出k以内最大的6个能被7或11整除的自然数之和。K的值由主函数传入,若k的值为500,则函数的值为2925。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include int fun(int k) { int m=0,mc=0, j; /**********************found***********************/ while(k>=2)&&(mc<6) { /**********************found***********************/ if((k%7=0)||(k%11=0)) { /**********************found***********************/ m=k; mc++; } k--; } return m; } main() { clrscr(); printf("%d\n ",fun(500)); } 答案及评析: (1)错误:while(k>=2)&&(mc<6) 正确:while((k>=2)&&(mc<6)) (2)错误:if((k%7=0)||(k%11=0)) 正确:if((k%7==0)||(k%11= =0)) (3)错误:m=k; 正确:m=m+k; 【解析】错误1:C语言while语句后的表达式两侧必须要有圆括号。 错误2:if语句的判断条件应用关系运算符,而不是赋值运算符。 错误3:根据题意,将满足条件的数求累加和。 3. 编程题 请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为偶数位置的字母转换为小写(若该位置上不是字母,则不转换)。 例如,若输入ABC4efG,则应输出aBc4efg。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include void fun(char *ss) { } main() { char tt[81]; clrscr(); printf("\nPlease enter an string within 80 characters:\n"); gets(tt); printf("\n\nAfter changing, the string\n \%s",tt); fun(tt); printf("\nbecomes\n \%s\n",tt); } 答案及评析: void fun(char *ss) { int i; for(i=0;ss[i]!='\0';i++) /*将ss所指字符串中所有下标为偶数位置的字母转换为小写*/ if(i%2==0&&ss[i]>='A'&&ss[i]<='Z') ss[i]=ss[i]+32; } 【解析】从C语言的学习中我们知道,只要将小写字母减去32则转成大写字母,将大写字母加上32则转成小写字母。该程序是用if语句实现该功能转化的。 第五套 1.填空题 从键盘输入一组无符号整数并保存在数组xx[N]中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入函数fun()。请补充函数fun(),该函数的功能是:从数组xx中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。 例如:当xx[8]={123,11,25,222,42,333,14,5451}时, bb[4]={25,42,333,5451}。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。 试题程序: #include #define N 1000 int fun(int xx[],int bb[],int num) { int i, n=0; int g, s; for(i=0;i5) 【2】; } return【3】; } main() { int xx[N]; int yy[N]; int num=0,n=0,i=0; printf("Input number :\n"); do { scanf("%u",&xx[num]); } while(xx[num++]!=0); n=fun(xx,yy,num); printf("\nyy="); for(i=0;i /**********************found***********************/ void fun(char p) { char min, *q; int i=0; min=p[i]; while (p[i]!=0) { if (min>p[i]) { /**********************found***********************/ p=q+i; min=p[i]; } i++; } while(q>p) {*q=*(q-1); q--; } p[0]=min; } main() { char str[80]; printf("Enter a string: "); gets(str); printf("\nThe original string: "); puts(str); fun(str); printf("\nThe string after moving: "); puts(str); printf("\n\n"); } 答案及评析: (1)错误:void fun(char p) 正确:void fun(char *p) (2)错误:p=q+i; 正确:q=p+i; 【解析】错误:由于本题中函数的功能是对字符串进行处理,而不是对单个字符进行处理,因此,函数的参数应为字符串指针。 错误2:使指针q指向ASCII码最小的字符 本题解答需要3个步骤: (1)找到字符串中ASCII码值最小的字符,并保存。 (2)将该字符复制,并将该字符前面的字符串顺次后移。 (3)将ASCII码值最小的字符赋给字符串的第1个字符。找到ASCII码值最小的字符可以通过定义一个字符min,该字符初始时等于字符串的第1个字符,若字符串的下一个字符小于min,则将下一个字符赋给min,如此循环到字符尾,即可得到ASCII码值最小的字符,同时令指针q指向最小字符。之后对最小字符前面的子串顺次后移,可采用while语句实现。 此题需要熟练掌握和灵活应用C语言的字符与整型变量的关系以及字符串操作。 3. 编程题 N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:找出学生的最低分,由函数值返回。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #define N 8 struct slist { double s; struct slist *next; }; typedef struct slist STREC; double fun(STREC *h) { } STREC * creat (double *s) { STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeof(STREC)); p->s=0; while(is=s[i]; i++; p->next=q; p=q; } p->next=NULL; return h; /*返回链表的首地址*/ } outlist(STREC *h) { STREC *p; p=h; printf("head"); do {printf("->%2.0f ",p->s);p=p->next;} /*输出各分数*/ while(p!=NULL); printf("\n\n "); } main() { double s[N]={56,89,76,95,91,68,75,85}, min; STREC *h; h=creat(s); outlist(h); min=fun(h); printf("min=%6.1f\n ",min); } 答案及评析: double fun(STREC *h) { double min=h->s; while(h!=NULL) /*通过循环找到最低分数*/ {if(min>h->s) min=h->s; h=h->next; } return min; } 【解析】在本题中,h为一个指向结构体的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符"->"。由于是链表,所以要使h逐一往后移动,使用的是h=h->next。 第六套 1.填空题 请补充main函数,该函数的功能是:从一个字符串中截取前面若干个给定长度的子字符串。其中,str1指向原字符串,截取后的字符存放在str2所指的字符数组中,n中存放需截取的字符个数。 例如:当str1=“cdefghij”,然后输入4,则str2=“cdef”。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include #include #define LEN 80 main() { char str1[LEN],str2[LEN]; int n,i; clrscr(); printf("Enter the string:\n"); gets(str1); printf("Enter the position of the string deleted:"); scanf(【1】); for(i=0;i #include void fun(char *s) { int i,j; for(i=0,j=0; s[i]!= '\0'; i++) /**********************found***********************/ if((s[i]>= 'A'&&s[i]<= 'Z')&&(s[i]>= 'a'&&s[i]<= 'z')) s[j++]=s[i]; /**********************found***********************/ s[j]= "\0"; } main() { char item[80]; clrscr(); printf("\nEnter a string: "); gets(item); printf("\n\nThe string is:\%s\n",item); fun(item); printf("\n\nThe string of changing is :\%s\n",item); } 答案及评析: (1)错误:if((s[i]>= 'A'&&s[i]<= 'Z')&&(s[i]>= 'a'&&s[i]<= 'z')) 正确:if((s[i]>= 'A'&&s[i]<= 'Z')||(s[i]>= 'a'&&s[i]<= 'z')) (2)错误:s[j]= "\0"; 正确:s[j]='\0'; 【解析】错误1:字母包括小写字母和大写字母,这里是"或"的关系,所以用"||"运算符。 错误2:字符串的结束标志符为字符,而不是字符串。 3. 编程题 下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是:使数组右上半三角元素中的值全部置成0。例如a数组中的值为 a=4 5 6 1 7 9 3 2 6, 则返回主程序后a数组中的值应为 0 0 0 1 0 0 3 2 0 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #include #include #define N 5 int fun (int a[][N]) { } main() { int a[N][N],i,j; clrscr(); printf("*****The array*****\n"); for(i=0;i #define N 80 void fun(char *s,int *num) { int i,n=0; for(i=0;【1】;i++) { if(s[i]>='a'&&s[i]<='z'&&(s[i+1]== ' '||s[i+1]=='\0')) 【2】; } 【3】; } main() { char str[N]; int num=0; printf("Enter a string:\n"); gets(str); while(str[num]) num++; fun(str,&num); printf("The number of word is : %d\n\n",num); } 答案及评析: 【1】i<*num 【2】n++ 【3】*num=n 【解析】填空1:*num传入字符串的长度,所以for循环中变量i的变化范围是从0到*num-1。填空2:如果当前判断的字符是小写字母,并且它的下一个字符是空格或者是字符串结束标记符,则表示当前字符是一个单词的最后一个字母,统计单词数的变量n要加上1。填空3:题目要求结果由变量num传回,所以要将n的值赋给指针num所指的单元。 2. 改错题 下列给定程序中,fun()函数的功能是:根据形参m,计算下列的值。 t=1-1/2+1/3-1/4+…+(-1)(m+1)/m 例如,若输入5,则应输出0.783333。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include /**********************found***********************/ int fun(int m) { double t=1.0,j=1.0; int i; /**********************found***********************/ for(i=1;i #include void fun(int *a,int *n) { } main( ) { int aa[1000], n, k; clrscr( ); fun(aa,&n); for(k=0;k #include #define N 40 void fun(char *str1,char *str2) { int i=0; char *p1=str1; char *p2=str2; while(【1】) i++; for( ;【2】;i++) *(p1+i)=【3】; *(p1+i)='\0'; } main() { char str1[N],str2[N]; clrscr(); printf("*****Input the string str1 & str2*****\n"); printf(" \nstr1:"); gets(str1); printf(" \nstr2:"); gets(str2); printf("**The string str1 & str2**\n"); puts(str1); puts(str2); fun(str1,str2); printf("*****The new string *****\n"); puts(str1); } 答案及评析: 【1】*(p1+i) 【2】*p2 【3】*p2++ 【解析】填空1:变量i用来记录字符串str1的长度,当指针指到字符串str1结束标志符‘\0'时,while循环结束,变量i停止累加。填空2:指针p2指向字符串str2,通过for循环将字符串str2接在str1后面,循环结束的条件是指针p2所指的字符是字符串结束标志符‘\0'。填空3:指针p2最初指向字符串str2的首字符,通过自加1,使指针p2依次向后移动,指向str2的各个字符,实现将字符串str2接在str1后面的功能。 2. 改错题 下列给定程序中,函数fun()的作用是:将字符串tt中的小写字母都改为对应的大写字母,其他字符不变。例如,若输入"edS,dAd",则输出"EDS,DAD"。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include #include /**********************found***********************/ char fun(char tt[]) { int i; for(i=0;tt[i];i++) { /**********************found***********************/ if((tt[i]>='A')&&(tt[i]<= 'Z')) tt[i]-=32; } return(tt); } main() { int i; char tt[81]; clrscr(); printf("\nPlease enter a string: "); gets(tt); printf("\nThe result string is: \n%s",fun(tt)); } 答案及评析: (1)错误:char fun(char tt[]) 正确:char *fun(char tt[]) (2)错误:if((tt[i]>='A')&&(tt[i]<= 'Z')) 正确:if((tt[i]>='a')&&(tt[i]<= 'z')) 【解析】错误1:函数的返回值是字符串的首地址,是指针类型,所以在函数名前要加'*'号。 错误2:题目要求将小写字母改为大写字母,所以if语句的判断条件是小写字母。 3. 编程题 请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p到n-1(p≤n-1)的数组元素平移到数组的前面。 例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为6。移动后,一维数组中的内容应为7,8,9,10,10,11,12,13,14,15,1,2,3,4,5,6。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include #define N 80 void fun(int *w, int p, int n) { } main() { int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i, p, n=15; printf("The original data:\n"); for(i=0;i=0;j--) /*实现循环右移*/ w[j+1]=w[j]; w[0]=t; } } 【解析】本题采用"循环右移"的算法。和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。 第九套 1.填空题 str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数fun(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。 例如:str=“Bcd123e456hui890”,结果为:123456890。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include #define N 80 int bb[N]; int fun(char s[],int bb[],int num) { int i,n=0; for(i=0;i= ′0′ &&s[i]<= ′9′ 【2】s[i]- ′0′ 【3】n 【解析】填空1:如果当前字符的ASCII码大于字符′0′的ASCII码,而小于字符′9′的ASCII码,则说明当前字符是数字字符。填空2:将数字字符转换为数字的方法是,用当前数字字符的ASCII码减去字符′0′的ASCII码。填空3:题目要求函数返回数组bb的长度,而变量n记录了数字字符的个数,也就是数组bb的长度,所以函数应该返回n。 2. 改
/
本文档为【国家计算机二级c语言历年机试】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索