全国计算机等级考试C语言上机考试题库96103套共8套新题.docx
- 文档编号:27949155
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:79
- 大小:67.96KB
全国计算机等级考试C语言上机考试题库96103套共8套新题.docx
《全国计算机等级考试C语言上机考试题库96103套共8套新题.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试C语言上机考试题库96103套共8套新题.docx(79页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试C语言上机考试题库96103套共8套新题
2017年全国计算机等级考试C语言上机考试题库
学生练习用第96套至第103套内涵8套新题
第九十六套
1、程序填空
下列给定程序中,函数fun的功能是:
有N×N矩阵,将矩阵的外围元素做顺时针旋转。
操作顺序是:
首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,再使临时数组中的元素成为最后一列。
例如,若N=3,有下列矩阵:
操作后应为:
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:
部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
-----------------------------------------------------------------------------------------------------------------
#include
#defineN4
voidfun(int(*t)[N])
{intj,r[N];
for(j=0;j for(j=0;j /**********found**********/ t[0][N-j-1]=t[j][___1___]; for(j=0;j t[j][0]=t[N-1][j]; /**********found**********/ for(j=N-1;j>=0;___2___) t[N-1][N-1-j]=t[j][N-1]; for(j=N-1;j>=0;j--) /**********found**********/ t[j][N-1]=r[___3___]; } main() {intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j; printf("\nTheoriginalarray: \n"); for(i=0;i {for(j=0;j printf("\n"); } fun(t); printf("\nTheresultis: \n"); for(i=0;i {for(j=0;j printf("\n"); } } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 (1)0 (2)j-- (3)j 【考点分析】 本题考查: 数组元素的引用;for循环语句。 【解题思路】 填空1: N×N矩阵,第一列元素表示为t[0][N-j-1],第一行元素表示为t[j][0],将第一列赋值给第一行,因此填入0。 填空2: for循环语句中,变量j的变化范围为从N-1递减到0,因此j做自减1操作。 填空3: 最后将临时数组r中的元素赋值给矩阵最后一列。 【解题宝典】 二维数组周边元素的表示方法,通过设定数组下标来完成。 我们举个简单的例子来说明,如二维数组a[3][3],我们列出它的所有数组元素: a[0][0],a[0][1],a[0][2] a[1][0],a[1][1],a[1][2] a[2][0],a[2][1],a[2][2] 那么其周边元素有a[0][0],a[0][1],a[0][2], a[1][0], a[1][2] , a[2][0],a[2][1],a[2][2]。 如果我们把a[3][3]改为a[i][j],就不难表示出该数组的周边元素: 2、程序修改 下列给定程序中函数fun的功能是: 计算S=f(-n)+f(-n+1)+…+f(0)+f (1)+f (2)+…+f(n)的值。 例如,当n的值为5时,函数值应为10.407143。 f(x)函数定义如下: 请改正程序中的错误,使程序能输出正确的结果。 注意: 部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构! ----------------------------------------------------------------------------------------------------------------- #include #include #include #include /*************found**************/ f(doublex) { if(x==0.0||x==2.0) return0.0; elseif(x<0.0) return(x-1)/(x-2); else return(x+1)/(x-2); } doublefun(intn) { inti;doubles=0.0,y; for(i=-n;i<=n;i++) {y=f(1.0*i);s+=y;} /*************found**************/ returns } voidmain() {system("CLS"); printf("%f\n",fun(5)); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 (1)double f(double x) (2)return s; 【考点分析】 本题考查: 函数定义,其一般形式为“类型标识符 函数名(形式参数列表)”,其中类型标识符指明了本函数的类型,函数的类型实际上就是函数返回值的类型。 【解题思路】 该程序的流程是: fun()函数对f(n)项循环累加,fun()函数采用条件选择语句计算函数f(x)的值。 第一处错误在于未定义函数f(double x)的类型,因为返回值类型为double型,所以此处函数应定义为double。 第二处错误的语法错误。 【解题宝典】 我们在做改错题目时候,首先应该检查C语言语法是否有问题,在很多题目中都有类似的错误。 3、程序设计 编写函数fun,其功能是计算: s作为函数值返回。 在C语言中可调用log(n)函数求ln(n)。 log函数的引用说明为: double log(double x)。 例如,若m的值为20,则fun函数值为6.506583。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 ----------------------------------------------------------------------------------------------------------------- #include #include doublefun(intm) { } main() { voidNONO(); printf("%f\n",fun(20)); NONO(); } voidNONO() {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE*fp,*wf; inti,n; doubles; fp=fopen("in.dat","r"); wf=fopen("out.dat","w"); for(i=0;i<10;i++){ fscanf(fp,"%d",&n); s=fun(n); fprintf(wf,"%f\n",s); } fclose(fp); fclose(wf); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 double fun(int m) { int i; double s=0.0; for(i=1;i<=m;i++) s=s+log(i); /*计算s=ln (1)+ln (2)+ln(3)+…+ln(m)*/ return sqrt(s); /*对s求平方根并返回*/ } 【考点分析】 本题考查: 计算表达式的值运用for循环语句通过累加操作求和;平方根函数sqrt()的使用。 【解题思路】 首先计算从1到m的对数的和,因此循环变量的范围是1~m,每次循环都进行一次累加求和。 该题需要注意的是,log()函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换。 在返回的时候求出平方根。 第九十七套 1、程序填空 下列给定程序中,函数fun的功能是: 在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串,并输出,若没找到则输出相应信息。 ss所指字符串数组中共有N个字符串,且串长小于M。 程序中库函数strstr(s1,s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,函数值为非0。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意: 部分源程序在文件BLANK1.C中。 不得增行或删行,也不得更改程序的结构! ----------------------------------------------------------------------------------------------------------------- #include #include #defineN5 #defineM15 voidfun(char(*ss)[M],char*substr) {inti,find=0; /**********found**********/ for(i=0;i<__1__;i++) /**********found**********/ if(strstr(ss[i],__2__)! =NULL) {find=1;puts(ss[i]);printf("\n");} /**********found**********/ if(find==__3__)printf("\nDon'tfound! \n"); } main() {charx[N][M]={"BASIC","Clangwage","Java","QBASIC","Access"},str[M]; inti; printf("\nTheoriginalstring\n\n"); for(i=0;i printf("\nEnterastringforsearch: ");gets(str); fun(x,str); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 (1)N (2)substr (3)0 【考点分析】 本题考查: for循环语句;strstr()字符串函数的使用;if语句条件表达式。 【解题思路】 填空1: 此处考查for循环语句中循环变量i的取值范围,题目指出共有N个字符串,所以i的取值范围为0~N-1。 填空2: strstr(s1,s2)的功能是在s1串中查找s2子串。 题目要求在ss字符串数组中,查找substr所指的字符串,故应填substr。 填空3: 此处使用if条件语句来判断查找结果,由printf("\nDon′t found! \n")可知此处需填写没有找到的条件,即是find==0。 【解题宝典】 strstr(s1,s2)的功能是在s1串中查找s2子串,若没有找到,则函数值为0,若找到,函数值为非0。 2、程序修改 下列给定程序中函数fun的功能是: 求三个数的最小公倍数。 例如,若给主函数中的变量x1、x2、x3分别输入15,11,2,则输出结果应当是330。 请改正程序中的错误,使它能得出正确的结果。 注意: 部分源程序在文件MODI1.C中,不得增行或删行,也不得更改的程序的结构! ----------------------------------------------------------------------------------------------------------------- #include /************found************/ fun(intx,y,z) {intj,t,n,m; j=1; t=j%x; m=j%y; n=j%z; while(t! =0||m! =0||n! =0) {j=j+1; t=j%x; m=j%y; n=j%z; } /************found************/ returni; } main() {intx1,x2,x3,j; printf("Inputx1x2x3: ");scanf("%d%d%d",&x1,&x2,&x3); printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3); j=fun(x1,x2,x3); printf("Theminimalcommonmultipleis: %d\n",j); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 (1)fun(int x,int y,int z)或int fun(int x,int y,int z) (2)return j; 【考点分析】 本题考查: 函数定义,注意有参函数的参数列表;函数返回值,通过return语句返回给主调函数。 【解题思路】 (1)定义函数时,必须为每个形参分别定义变量类型。 (2)通过return语句将最小公倍数j返回主调函数。 【解题宝典】 几个自然数公有的倍数中最小的一个,叫做这几个数的最小公倍数。 求几个数的最小公倍数的方法为: 定义一个变量从1开始增加,每增加1即对几个数进行求余运算,直到几个数的余数全部为0,此时该数为这几个数的最小公倍数。 3、程序设计 规定输入的字符串中只包含字母和*号。 请编写函数fun,其功能是: 只删除字符前导和尾部的*号,串中字母间的*号都不删除。 形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中尾部*号的个数。 在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为: "****A*BC*DEF*G*******",删除后,字符串中的内容应当是: "A*BC*DEF*G"。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填 ----------------------------------------------------------------------------------------------------------------- #include voidfun(char*a,intn,inth,inte) { } main() {chars[81],*t,*f;intm=0,tn=0,fn=0;voidNONO(); printf("Enterastring: \n");gets(s); t=f=s; while(*t){t++;m++;} t--; while(*t=='*'){t--;tn++;} while(*f=='*'){f++;fn++;} fun(s,m,fn,tn); printf("Thestringafterdeleted: \n");puts(s); NONO(); } voidNONO() {/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE*in,*out; inti;chars[81],*t,*f; intm=0,tn=0,fn=0; in=fopen("in.dat","r"); out=fopen("out.dat","w"); for(i=0;i<10;i++){ fscanf(in,"%s",s); t=f=s; m=0;tn=0;fn=0; while(*t){t++;m++;} t--; while(*t=='*'){t--;tn++;} while(*f=='*'){f++;fn++;} fun(s,m,fn,tn); fprintf(out,"%s\n",s); } fclose(in); fclose(out); } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 void fun(char *a,int n,int h,int e) { int i,j=0; for(i=h;i a[j++]=a[i]; a[j]='\0'; /*在字符串最后加上结束标识*/ } 【考点分析】 本题考查: 删除字符串前导*号和尾部*号,其主要思想就是把不删除的字符保留起来。 【解题思路】 由于程序已经给出前导*号和尾部*号的个数,所以只要用循环语句将中间的字符保留起来。 注意循环变量i的初值(h)和终止值(n-e),由于h和e分别表示a中的前导*号和尾部*号的个数,n是字符串的长度,所以从a[h]到a[n-e-1]之间的所有字符都要保留。 循环结束后在新串的尾部加上结束符'\0'。 【解题宝典】 本题技巧: void fun(char *a,int n,int h,int e ) { a[n-e]='\0'; strcpy(a,a+h); } a[n-e]的作用是在最后一个字母后加上字符串结束符。 本程序采用了strcpy()库函数。 第九十八套 1、程序填空 下列给定程序中,函数fun的功能是: 计算一个带头结点的单向链表中各结点的数据域中数值之和,结果作为函数值返回。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意: 部分源程序在文件BLANK1.C中。 不得增行或删行,也不得更改程序的结构。 ----------------------------------------------------------------------------------------------------------------- #include #include #defineN8 typedefstructlist {intdata; structlist*next; }SLIST; SLIST*creatlist(int*); voidoutlist(SLIST*); intfun(SLIST*h) {SLIST*p;ints=0; p=h->next; while(p) { /**********found**********/ s+=p->___1___; /**********found**********/ p=p->___2___; } returns; } main() {SLIST*head; inta[N]={12,87,45,32,91,16,20,48}; head=creatlist(a);outlist(head); /**********found**********/ printf("\nsum=%d\n",fun(___3___)); } SLIST*creatlist(inta[]) {SLIST*h,*p,*q;inti; h=p=(SLIST*)malloc(sizeof(SLIST)); for(i=0;i {q=(SLIST*)malloc(sizeof(SLIST)); q->data=a[i];p->next=q;p=q; } p->next=0; returnh; } voidoutlist(SLIST*h) {SLIST*p; p=h->next; if(p==NULL)printf("ThelistisNULL! \n"); else {printf("\nHead"); do {printf("->%d",p->data);p=p->next;} while(p! =NULL); printf("->End\n"); } } ----------------------------------------------------------------------------------------------------------------- 【参考答案】 (1)data (2)next (3)head 【考点分析】 本题考查: 链表数据结构,结点的表示方法;掌
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 语言 上机 考试 题库 96103 套新题