全国计算机等级考试C语言上机考试题库4160套.docx
- 文档编号:12229343
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:131
- 大小:85.24KB
全国计算机等级考试C语言上机考试题库4160套.docx
《全国计算机等级考试C语言上机考试题库4160套.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试C语言上机考试题库4160套.docx(131页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试C语言上机考试题库4160套
2017年全国计算机等级考试C语言上机考试题库
学生练习用第41套至第60套
第四十一套
1、程序填空
下列给定程序中,函数fun的功能是:
将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后将新字符串的首地址作为函数值返回。
例如,若s所指字符串为:
"asd123fgh543df",处理后新字符串为:
"asdfghdf123543"。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:
部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
-----------------------------------------------------------------------------------------------------------------
#include
#include
#include
char*fun(char*s)
{inti,j,k,n;char*p,*t;
n=strlen(s)+1;
t=(char*)malloc(n*sizeof(char));
p=(char*)malloc(n*sizeof(char));
j=0;k=0;
for(i=0;i {if(((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='Z'))){ /**********found**********/ t[j]=__1__;j++;} else {p[k]=s[i];k++;} } /**********found**********/ for(i=0;i<__2__;i++)t[j+i]=p[i]; /**********found**********/ t[j+k]=__3__; returnt; } main() {chars[80]; printf("Pleaseinput: ");scanf("%s",s); printf("\nTheresultis: %s\n",fun(s)); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 (1)s[i]? ? (2)k? ? (3)'\0'或0 【考点分析】 本题考查: 数组元素赋值操作;for循环语句中循环变量的取值范围;字符串结束标识'\0'。 【解题思路】 填空1: 将字符串s中所有字母元素赋给数组t。 填空2: 字符串中所有非字母元素放到字母元素后面,所以取值范围是0~k。 填空3: 最后给字符串加入结束标识'\0'。 2、程序修改 下列给定程序中函数fun的功能是: 将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。 要求t1和t2所指字符串的长度相同。 例如,当s所指字符串中的内容为: "abcdabfabc",t1所指串中的内容为"ab",t2所指子串中的内容为"99"时,结果在w所指的数组中的内容应为"abcdabf99c"。 请改正程序中的错误,使它能得出正确的结果。 注意: 部分源程序在文件MODI1.C中,不得增行或删行,也不得更改的程序的结构! ----------------------------------------------------------------------------------------------------------------- #include #include voidfun(char*s,char*t1,char*t2,char*w) { char*p,*r,*a; strcpy(w,s); /************found************/ while(w) {p=w;r=t1; while(*r) /************found************/ IF(*r==*p) {r++;p++;} elsebreak; if(*r=='\0')a=w; w++; } r=t2; while(*r){*a=*r;a++;r++;} } main() { chars[100],t1[100],t2[100],w[100]; printf("\nPleaseenterstringS: ");scanf("%s",s); printf("\nPleaseentersubstringt1: ");scanf("%s",t1); printf("\nPleaseentersubstringt2: ");scanf("%s",t2); if(strlen(t1)==strlen(t2)) {fun(s,t1,t2,w); printf("\nTheresultis: %s\n",w); } elseprintf("\nError: strlen(t1)! =strlen(t2)\n"); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 (1)while(*w) (2)if(*r==*p) 【考点分析】 本题考查: ? while循环语句,C语言中的关键字。 【解题思路】 (1)这里要判断的是值的真假,而不是地址,所以改为while? (*w)。 (2)C语言中关键字区分大小写,只需运行程序,就可以根据错误提示找到。 3、程序设计 编写函数fun,其功能是: 将s所指字符串中ASCII值为奇数的字符删除,剩余字符形成的新串放在t所指数组中。 例如,若s所指字符串中的内容为: "ABCDEFG12345",其中字符A的ASCII码值为奇数,字符1的ASCII码值也为奇数,都应当删除,其它依此类推。 最后t所指的数组中的内容应是: "BDF24"。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 ----------------------------------------------------------------------------------------------------------------- #include #include voidfun(char*s,chart[]) { } main() { chars[100],t[100];voidNONO(); printf("\nPleaseenterstringS: ");scanf("%s",s); fun(s,t); printf("\nTheresultis: %s\n",t); NONO(); } voidNONO() {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ chars[100],t[100]; FILE*rf,*wf; inti; rf=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<10;i++){ fscanf(rf,"%s",s); fun(s,t); fprintf(wf,"%s\n",t); } fclose(rf); fclose(wf); } #include #include voidfun(char*s,chart[]) { } main() { chars[100],t[100];voidNONO(); printf("\nPleaseenterstringS: ");scanf("%s",s); fun(s,t); printf("\nTheresultis: %s\n",t); NONO(); } voidNONO() {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ chars[100],t[100]; FILE*rf,*wf; inti; rf=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<10;i++){ fscanf(rf,"%s",s); fun(s,t); fprintf(wf,"%s\n",t); } fclose(rf); fclose(wf); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 void? fun(char? *s,char? t[]) { ? ? ? ? int? i,j=0,n; ? ? ? ? n=strlen(s); ? ? ? ? for(i=0;i ? /*找出ASCII码值为偶数的字符依次存入数组中*/ ? ? ? ? if(s[i]%2==0) ? ? ? ? {? t[j]=s[i]; ? ? ? ? ? ? j++; ? ? ? ? } ? ? t[j]='\0'; } 【考点分析】 本题考查: ASCII码值为奇数或偶数的判定方法,同时掌握删除字符的思想,即重新保留非删除字符。 【解题思路】 要删除ASCII码值为奇数的字符,也就是要保留ASCII码值为偶数的字符,由于最终是要求出剩余字符形成的新串,所以本题的算法是对原字符串从头到尾扫描,并找出ASCII码值为偶数的字符依次存入数组中。 第四十二套 1、程序填空 给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意: 部分源程序在文件BLANK1.C中。 请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 ----------------------------------------------------------------------------------------------------------------- #include #include voidfun(char*s,inta,doublef) { /**********found**********/ __1__fp; charstr[100],str1[100],str2[100]; inta1;doublef1; fp=fopen("file1.txt","w"); fprintf(fp,"%s%d%f\n",s,a,f); /**********found**********/ __2__; fp=fopen("file1.txt","r"); /**********found**********/ fscanf(__3__,"%s%s%s",str,str1,str2); fclose(fp); a1=atoi(str1); f1=atof(str2); printf("\nTheresult: \n\n%s%d%f\n",str,a1,f1); } main() {chara[10]="Hello! ";intb=12345; doublec=98.76; fun(a,b,c); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 (1)FILE*? ? (2)fclose(fp)? ? (3)fp 【解题思路】 填空1: 从使用fp=fopen("file1.txt","w")可知fp应该是文件类型指针,因此本空因该填写FILE*。 填空2: 当对fp作打开操作的时候,并进行不同的操作前,应该对其关闭,因为在第一次打开时是对fp进行写操作,而在第二次打开后进行的是读操作,因此应该先对fp进行关闭,本空填fclose(fp)。 填空3: fscanf()是把文本文件输出,因此本空只能填写fp。 2、程序修改 下列给定程序中,函数fun的功能是: 对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意: 部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。 ----------------------------------------------------------------------------------------------------------------- #include #include #include #include #include #defineN10 typedefstructss {charnum[10]; ints; }STU; STU*fun(STUa[],intm) {STUb[N],*t; inti,j,k; /*************found**************/ *t=calloc(m,sizeof(STU)); for(i=0;i for(k=0;k {for(i=j=0;i if(b[i].s>b[j].s)j=i; /*************found**************/ t[k].num=b[j].num; t[k].s=b[j].s; b[j].s=0; } returnt; } outresult(STUa[],FILE*pf) {inti; for(i=0;i fprintf(pf,"No=%sMark=%d\n", a[i].num,a[i].s); fprintf(pf,"\n\n"); } voidmain() {STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77}, {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}}; STU*pOrder; inti,m; system("CLS"); printf("*****THERESULT*****\n"); outresult(a,stdout); printf("\nGivethenumberofthestudentswhohavebetterscore: "); scanf("%d",&m); while(m>10) {printf("\nGivethenumberofthestudentswhohavebetterscore: "); scanf("%d",&m); } pOrder=fun(a,m); printf("*****THERESULT*****\n"); printf("Thetop: \n"); for(i=0;i printf("%s%d\n",pOrder[i].num,pOrder[i].s); free(pOrder); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 (1)t=calloc(m,sizeof(STU)); (2)t[k]=b[j]; 【解题思路】 (1)calloc应用于分配内存空间。 调用形式为? (类型说明符*)calloc(n,size),功能: 在内存动态存储区中分配n块长度为"size"字节的连续区域,函数的返回值为该区域的首地址,(类型说明符*)用于强制类型转换。 calloc函数与malloc? 函数的区别在于calloc函数一次可以分配n块区域。 例如,ps=(struct? stu*)? calloc(2,sizeof? (struct? stu));,其中的sizeof(struct? stu)是求stu的结构长度。 该语句的意思是: 按stu的长度分配两块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。 在本题中不用考虑那么复杂,根据定义类型STU? b[N],*t;就可以看出*t=calloc(m,sizeof(STU))中的错误。 (2)t[k].num=b[j].num的错误旨在考查对结构体概念的掌握和灵活应用程度。 3、程序设计 请编写函数fun,该函数的功能是: 删除一维数组中所有相同的数,使之只剩一个。 数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,若一维数组中的数据是: 2? 2? 2? 3? 4? 4? 5? 6? 6? 6? 6? 7? 7? 8? 9? 9? 10? 10? 10 删除后,数组中的内容应该是: 2? 3? 4? 5? 6? 7? 8? 9? 10 注意: 部分源程序在文件PROG1.C中。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 ----------------------------------------------------------------------------------------------------------------- #include #defineN80 intfun(inta[],intn) { } voidmain() { FILE*wf; inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20; printf("Theoriginaldata: \n"); for(i=0;i printf("%3d",a[i]); n=fun(a,n); printf("\n\nThedataafterdeleted: \n"); for(i=0;i printf("%3d",a[i]); printf("\n\n"); /******************************/ wf=fopen("out.dat","w"); for(i=0;i fprintf(wf,"%3d",a[i]); fclose(wf); /*****************************/ } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 int? fun(int? a[],? int? n) { ? ? int? i,j=1; ? ? for(i=1;i ? ? ? ? ? if(a[j-1]! =a[i])? /*若该数与前一个数不相同,则要保留*/ a[j++]=a[i]; ? ? return? j;? /*返回不相同数的个数*/? } 【解题思路】 该程序的流程是: 定义变量i和j,其中j用于控制删除后剩下的数在数组中的下标,i用于搜索原数组中的元素。 j始终是新数组中最后一个元素的下一个元素的下标,所以if语句中的条件是a[j-1]! =a[i],其中a[j-1]就是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以a[i]要保留到新数组中。 注意本题中i和j的初值都要从1开始,该算法只能用于数组已排序的题目中。 第四十三套 1、程序填空 下列给定程序中,函数fun的功能是: 计算N×N矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。 要求先累加主对角线元素中的值,再累加反向对角线元素中的值。 例如,若N=3,有下列矩阵: 首先累加1、5、9,然后累加3、5、7,函数返回值为30。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意: 部分源程序在文件BLANK1.C中。 不得增行或删行,也不得更改程序的结构! ----------------------------------------------------------------------------------------------------------------- #include #defineN4 fun(intt[][N],intn) {inti,sum; /**********found**********/ ___1___; for(i=0;i /**********found**********/ sum+=___2___; for(i=0;i /**********found**********/ sum+=t[i][n-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 语言 上机 考试 题库 4160