计算机二级C语言考试试题与答案解析2

考试难度:
4人已考
  • 卷面总分:100
  • 试卷类型:模拟试题
  • 测试费用: 免费
  • 关注人数:56
  • 作答时间:120分钟
  • 解析:
关闭
试卷简介:
计算机二级C语言考试试题与答案解析2
试题类型:
  • 程序填空题
  • 程序修改题
  • 程序设计题
试卷预览
  • 程序填空题
  • 程序修改题
  • 程序设计题
1
使用VC ++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是统计带头节点的单向链表中节点的个数,并将其存放在形参n所指的存储单元中。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>#include <stdlib.h>#define N 8typedef struct list{int data;struct list * next;} SLIST;SLIST * creatlist(int *a);void outlist(SLIST *);void fun(SLIST *h, int *n){SLIST *p;/********* found *********/【1】=0;p=h ->next;while(p){(*n)++;/********* found *********/p=p->【2】;}}main (){SLIST * head;int a[N]={12,87,45,32,91,16,20,48 }, num;head=creatlist(a);outlist(head);/********* found *********/fun(【3】,&num);printf (“\nnumber=%d\n”,num);}SLIST * creatlist(int a[ ]){SLIST *h, *q; int i;h=p=(SLIST * )malloc (sizeof (SLIST));for(i=0; idata=a [i] ; p - >next=q;p=q;}p ->next=0;return h;}void outlist (SLIST * h){SLIST * p;p=h ->next;if (p==NULL)printf (“The list is NULL! \n”);else{printf(M\nHead ”);do{printf (“- >%d”, p ->data);p=p ->next; }while (p!=NULL);printf (“->End\n”);}}
2
使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是判定形参a所指的NxN(规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值为1;若不是,函数返回值为0。“幻方”的判定条件是矩阵每行、每列、主对角线及反对角线上元素之和都相等。例如,以下3×3的矩阵就是一个“幻方”:4  9  23  5  78  1  6请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:部分源程序在文件blank1.c中。不得增行或删行,也不得更改程序的结构!试题程序:1 #include2 #defineN33 intfun(int(*a)[N])4 {inti,j,m1,m2,row,colum;5 m1=m2=0;6 for(i=0;i7 {j=N-i-1;m1+=a[i][i];8 m2+=a[i][j];}9 if(m1!=m2)return0;10 for(i=0;i11 {/*********found*********/12 row=colum=【1】;13 for(j=0;j14 {row+=a[i][j];15 colum+=a[j][i];}16 /*********found*********/17 if((row!=colum)【2】\(row!=m1))18 return0;19 }20 *********found*********/21 return【3】;22 }23 main()24 {intx[N][N],i,j;25 printf("Enternumberforar-ray:\n");26 for(i=0;i27 for(j=0;j28 scanf("%d",&x[i][j]);29 printf("Array:\n");30 for(i=0;i31 {for(j=0;j32 printf("%3d",[i][j]),33 printf("\n");34 }35 if(fun(x))36 printf("TheArrayisamagicsquare.\n");37 else38 printf("TheArrayisn'tamagicsquare.\n");39 }
3
使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是将不带头节点的单向链表节点数据域中的数据从小到大排序。即若原链表节点数据域从头至尾的数据为10、4、2、8、6,排序后链表节点数据域从头至尾的数据为2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>#include <stdlib.h>#define N 6typedef struct node {int data;struct node *next;} NODE;void fun (NODE *h){NODE *p, *q; int t;p=h;while (p) {/********* found ********* /q=【1】;/********* found ********* /while(【2】){if (p ->data >q->data){t=p ->data;p ->data=q ->data;q ->data=t; }q=q ->next ;}/********* found *********/P=【3】;}}NODE * creatlist (int a[]){NODE *h,*p,*q;inti;h=NULL;for(i=0; idata=a[i];q ->next=NULL;if (h==NULL) h=p=q;else {p ->next=q;p=q;}}return h;}void outlist (NODE *h){NODE * p;p=h;if(p==NULL)printf (“The list is NULL! \n”);else{printf (“\nHead”);do{printf (“->%d”, p ->data);p=p ->next; }while (p!=NULL);printf (“->End\n”);}}main (){NODE * head;int a[N]={0, 10, 4, 2, 8, 6 };head=creatlist(a);printf (“\nThe original list:\n”);outlist(head);fun(head);printf (“\nThe list after inverting:\n”);outlist(head);}
4
使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为“def5adh3kjsdf7”,执行后结果为“def3 * 5 * adh3*kjsdf7*”。请在程序的下划线处填入正确的内容并将下划 线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>void fun (char * s){int i,j,n;for (i=0 ; s[ i] !=‘\0’; i++)/********* found ********* /if (s[i]>=‘0’,【1】s[i]<=‘9’){n=0 ;/********* found ********* /while (s[i +1 +n]!=【2】)n + + ;for (j=i+n+1;j >i;j --)/********* found ********* /s[ j +1]=【3】;s[j +1]=‘*’;i=i +1 ;}}main (){char s[60]=“def35adh3kjsdf7”;printf(“\nThe original string is:%s\n”, s);fun(s);printf (“\nThe result is:%s\n”, s);}
5
使用VC ++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是找出100~x(x≤999)之间各位上的数字之和为15的所有整数,并输出;将符合条件的整数的个数作为函数值返回。例如,当n为500时,各位数字之和为15的整数有159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、 456、465、474、483、492,共有26个。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>int fun (int x){int n, s1, s2, s3,t;/********* found ********* /n=【1】;t=100;/********* found *********/while (t<=l2l){s1=t%10; s2=(t/10)%10;s3=t/100;if (s1+s2+s3==15){printf (“%d”,t);n++;}/********* found ********* /【3】;}return n;}main (){int x=-1 ;while (x>99||x<0){printf(“Please input (0
6
使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是将带头节点的单向链表逆置,即若原链表 中从头至尾节点数据域依次为2、4、6、8、10,逆置后,从头至尾节点数据域依次为10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>#include <stdlib.h>#define N 5typedef struct node {int data;struct node * next;} NODE;void fun (NODE *h){NODE *p, *q, *r;/********* found ********* /p=h ->【1】;/********* found *********/if (p==【2】) return;q=p ->next;p ->next=NULL;while (q){r=q->next; q->next=p;/********* found ********* /P=q; q=【3】;}h ->next=p;}NODE * creatlist (int a[ ]){NODE *h, *p, *q; int i;h=(NODE *) malloc(sizeof (NODE));h->next=NULL;for(i=0; idata=a[i];q->next=NULL;if (h->next==NULL)h ->next=p=q;else {p ->next=q; p=q;}}return h;}void outlist (NODE * h){NODE * p;p=h ->next;if (p==NULL)printf (“The list is NULL!\n”);else{printf(“\nHead”);do{printf (“->%d”,p ->data);p=p ->next; }while (p!=NULL);printf(“->End\n”);}}main (){NODE * head;int a[N]={2,4,6,8,10};head=creatlist (a);printf (“\nThe original list:\n”);outlist(head);fun(head);printf (“\nThe list after inverting: \n”);outlist (head);}
1
使用VC ++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun()和funx()的功能是用二分法求方程2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。例如,若给m输入-100,为n输入90,则函数求得的一个根为2. 000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>#include <math.h>double funx(double x){return (2*x*x*x-4*x*x+3*x-6 );}double fun (double m, double n){/********* found *********/int r;r=(m+n)/2;/********* found *********/while (fabs (n -m)<0.001){if (funx (r) * funx (n)< 0)m=r;elsen=r;r=(m + n) /2 ;}return r;}main (){double m, n, root;printf(“Enter m n:\n”);scanf(“%lf%lf”,&n);root=fun(m,n);printf (“root=%6.3f \n”, root);}
2
使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,fun()函数的功能是分别统计字符串中大写字母和小写字母的个数。例如,给字符串s输入AAaaBBbbl23CCcccd,则应输出:upper=6,lower=8请改正程序中的错误,使它得出正确的结果。注意:部分源程序在文件modi1.c中,不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:
3
使用VC ++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun()的功能是判断一个整数是否为素数,若是素数返回1,否则返回0。在main()函数中,若fun()返回1输出YES,若fun()返回0输出NO!。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行, 也不得更改程序的结构!试题程序:#include <stdlib.h>#include <conio.h>#include <stdio.h>int fun (int m){int k=2 ;while (k<=m&& (m%k))/********* found *********/k + +/********* found *********/if (m=k)return 1 ;else return 0;}void main (){int n;system (“CLS”);printf (“\nPlease enter n:”);scanf(“%d”,&n);if(fun(n)) printf(“YES\n”);else printf(“NO! \n”);}
4
使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun()的功能是求两个非0正整数的最大公约数,并将其 作为函数值返回。例如,若num1和num2分别为49和21,则输出的最大公约数为7;若num1和num2分别为27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:#include <stdio.h>int fun(int a, int b){int r, t;if (a/******** found ******** /t=a; b=a; a=t;}r=a% b;while(r!=0 ){ a=b; b=r; r=a%b; }/******** found ******** /return (a);}void main (){int num1, num2 , a;printf (“Input num1 num2 :”);scanf (“%d%d”,&num1, &num2);printf (“num1=%d num2=%d\n\n”, num1, num2);a=fun (num1, num2 );printf (“The maximum common divisor is %d\n\n”, a);}
5
使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。此程序建立了一个带头节点的单向链表,并用随机函数为各节点赋值。函数fun()的功能是将单向链表节点(不包括头节点)数据域为偶数的值累加起来,并将结果作为函数值返回。请改正函数fun()中的错误,使它能得出正确的结果。注意:部分源程序在文件modi1.c中,不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:1 #include2 #include3 #include4 typedefstructaa5 {intdata;6 structaa*next;7  }NODE;8 intfun(NODE*h)9 {intsum=0;10 NODE*p;11 p=h->next;12 /*********found*********/13 while(p->next)14 {if(p->data%2==0)15 sum+=p->data;16 /*********found*********/17 p=h->next;18 }19 returnsum;20 }21 NODE*creatlink(intn)22 {23 NODE*h,*p,*s;24 inti;25 h=p=(NODE*)malloc(sizeof_(NODE));26 for (i =1; i < n; i++)27 {28 s = (NODE * ) malloc (sizeof (NODE));29 s -> data = rand () % 16;30 s->next=p->next;31 p->next=s;32 p=p->next;33 }34 p->next=NULL;35 returnh;36 }37 outlink(NODE*h)38 {NODE*p;39 p=h->next;40 printf("\n\nTheList:\n\nHEAD");41 while(p)42 {printf("->%d",p->data);43 p=p>next;}44 printf("\n");45 }46 voidmain()47 {NODE*head;intsum;48 system("CLS");49 head=creatlink(10);50 outlink(head);51 sum=fun(head);52 printf("\nSUM=%d",sum);53 }
6
1
使用VC++2010打开触文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是移动字符串中的内容,移动的规则是把第1~m个字符,移动到字符串的最后,把第m+1到最后的字符移动到于符串的前面。例如,字符串中原有的内容为“ABCDEFGHIJK”,m的值为3,移动后,字符串中的内容应该是“DEFGHUKABC”。注意:部分源程序在文件prog1.c中。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:
2
使用vc++2010打开文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun(),其功能是在一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回该值。函数形参a指向存放得分的数组,形参n中存放得分个数(n>2)。例如,若输入9.98.57.68.59.39.58.97.88.68.4共10个得分,则输出结果为8.687500。注意:部分源程序存放在文件prog1.c中,请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:
3
使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写一个函数,用来删除字符串中的所有空格。例如,输入asdafaaz67,则输出为asdafaaz67。注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:
4
使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,定义了NxN的二维数组,并在主函数中赋值。请编写函数fun(),其功能是求出数组周边元素的平均值并将其作为函数值返回给主函数中的s。例如,若a数组中的值为0  1  2  7  91  9  7  4  52  3  8  3  14  5  6  8  25  9  1  4  1 则返回主程序后s的值应为3.375。注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1 #include < stdio.h >2 #include < conio.h >3 #include < stdlib.h >4 #define N 55 double fun (int w[ ] [n])6 {78 }9 void main ()10 {11  FILE * wf ;12  int a[N][N] ={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,13 int i , j ;14 double s;15 system("CLS");16 printf ("*** The array *** \n ");17 for (i=0; i<N; i++)18  { for (j =0 ; j <N; j ++ )19    {printf ("% 4d ",a[i][ j ]);}20   printf ("\n ");21  }22 s = fun (a);23 printf (" *** The Result *** \n");24 printf ("The sum is : % lf\n",s);25 /******************/26  wf = fopen("out.dat","w");27 fprintf (wf,"% if",s);28 fclose(wf);29 /******************/30 }