国家二级C语言机试(操作题)模拟试卷221 (题后含答案及解析)
全部题型 2. 程序填空题 3. 程序修改题 4. 程序设计题
程序填空题
1. 给定程序中,函数fun的功能是:将形参S所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 例如,形参s所指的字符串为:Abe@1x56*,程序执行后t所指字符数组中的字符串应为:A@156*。 注意:部分源程序在文件BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 试题程序:1 #include<stdio.h>2 int fun(char*s,char*t)3 {int n=0;4 while(*s)5 {if(*s<97){6 /*********found*********/7 *(t+n)=【1】; n++;}8 /*********found*********/9 【2】;10 }11 *(t+n)=0;12 /********* found*********/13 return【3】;14 }15 main( )16 {char s[81],t[81]; int n;17 printf(‘‘\nEnter a string:\n’’);18 gets(s);19 n=fun(s,t);20 printf(‘‘\nThere are%d letter which ASCII code is less than 97:%s\n’’, n,t);21 }
正确答案:(1)*s (2)s++ (3)n
解析:填空1:判断s所指向的字符串中的字符符合条件时,将当前字符存放到t指向的字符串中,所以应填*s。填空2:判断完一个字符之后,将字符串的指针移到下一个位置,所以应填s++。填空3:题目要求函数要返回符合条件的字符个数n,所以应填n。
程序修改题
2. 下列给定程序中,函数fun的功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。要求t1和t2所指字符串的长度相同。 例如,当s所指字符串中的内容为“abcdab-fabc”,t1所指串中的内容为“ab”,t2所指子串中的内容为“99”时,结果在W所指的数组中的内容应为“abcdabf99c”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1 #include<conio.h>2 #include<stdio.h>3 #include<string.h>4 void fun(char * s,char t1,char t2,char w)5 {6 char* p,*r,*a;7 strcpy(w,s);8 /*********found*********/9 while(w)10 {11 p=w;12 r=t1;13 while(*r)14 /*********found*********/15 IF(*r==*p)16 {17 r++;18 p++;19 }20 else21 {22 break;23 }24 if(*r==‘\0’)25 a=w;26 w++;27 }28 r=t2;29 whil
e(*r)30 {31 *a=*r;32 a++;33 r++;34 }35 }36 main( )37 {38 char s[100],t1[100],t2[100],w[100];39 printf(‘‘\nPlease enter string s:’’);40 scanf(‘‘%s’’,s);41 printf(‘‘\nPlease enter substring tl:’’);42 scanf(‘‘%s’’,t1);43 print f(‘‘\nPlease enter substring t2:’’);44 scanf(‘‘%s’’,t2);45 if(strlen(t1)==strlen(t2))46 {47 fun(s,t1,t2,w);48 printf(‘‘\nThe result is:%s\n’’,w);49 }50 else51 {52 printf(‘‘\nError:strlen(t1)!=strlen(t2)\n’’);53 }54 }
正确答案:(1)while(*w) (2)it(*r==*p)
解析:(1)此处要判断的是值的真假,而不是地址,所以改为while(*w)。(2)C语言中关键字区分大小写,只需运行程序,就可以根据错误提示到。
程序设计题
3. 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,其功能是:把低于平均分的放入b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。 注意:部分源程序给出如下。 请勿改动主
函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 试题程序:1 #include<stdio.h>2 #define N 83 typedef struct4 {5 char num[10];6 double s;7 } STREC;8 double fun(STREC*a, STREC*b,int * n)9 {1011 }12 void main( )13 {14 STREC s[N]={{‘‘GA05’’,85}, {‘‘GA03’’,76},{‘‘GA02’’,69},{‘‘GA04’’,85},{‘‘GA01’’,91},{‘‘GA07’’,72},{‘‘GA08’’, 64},{‘‘GA06’’, 87}};15 STREC h[N];16 int i,n;17 double ave;18 ave=fun(s,h,&n);19 printf(‘‘The%d student data which is lower than %7.3f:\n’’, n , ave);20 for(i=0;i<n , i++)21 /*输出成绩低于平均值的学生记录*/22 printf(‘‘%s%4.1 f\n’’,h[i].num,h[i].s);23 printf(‘‘\n’’);24 }
正确答案:1 double fun(STREC *a,STREC *b,int *n)2 {3 int i,j=0;4 double av=0.0 ;5 for(i=0;i<N;i++)6 av=av+a[i].s;7 av=av/N; /*求平均值*/8 for(i=0;i<N;i++)9 if(a[i].s<av)10 b[j++]=a[i];11 /*将低于平均值的学生记录存入结构体数组b中*/12 *n=j;/*指针传回低于平均值的学生人数*/13 return av;/*返回平均值*/14 }
解析:本题使用循环语句和条件判断语句来实现程序操作,第1个循环语句的作用是求出总分,然后求出平均分av。第2个循环的作用是将分数低于平均分的学生记录存人结构体数组b中。
05网全部答案
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论