《计算机二级C语言机试题库.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言机试题库.docx(253页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、填空题第01套给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,从主函数输入一个整数:27638496,函数返回值为:26846。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1. C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include unsigned long fun(unsigned long n) unsigned long x=0, st i; int t;s=n;/*found*/i=_1_;1/*found*/whi
2、le (_2_)s t=s%10;if(t%2=0)/*found*/x=x+t*i; i=_3_;i*10)s=s/10;)return x;)main() unsigned long n=T;while(n99999999|n0) printf(Please input(0n100000000):); scanf&n);printf(*nThe result is:%ldn, fun(n);)解题思路:第一处:对变量i赋初值,根据i的使用规则来看,i应等于1.第二处:while循环要求计算后的s应大于0,所以应填:s。第三处:每循环一次,i要乘以10,所以应填:i*10。第02套给定程序中
3、,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。例如,有10个正数:4630324061745154826,平均值为:30.500000主函数中输出:m=30.0请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include #define N 10 double fun(double x, double *av) int i, j; double d,
4、s; s=0;for(i=0; iN; i+) s = s +xi;/*f oiind*/_1_=s/N;*avd=32767; for(i=0; iN; i+) if(xi*av &*av - xi=d)/*found*/ d=*av-xi; j=_2_;i/*found*/ return _3_;xj mainO int i; double xN, av, m;for(i=0; iN; i+) xi=rand()%50; printf(*%4. Of ,xi);printf(*nO;m=fun (x,&av);printf(*nThe average is:%fn, av);printf
5、(*m=%5. If m);解题思路:第一处:计算好的平均值通过形参av返回,所以应填:*avo第二处:计算小于平均值且最接近平均值的位置j,所以应填:i。第三处:返回该数,所以应填:xj第03套给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到则返回-1。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1. C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include
6、 #include #define N 5#define M 8int fun(char (*ss)M, char *t) int i;/*found*/for(i=0; i_1_; i+)/*found*/if(strcmp(ssi, t)=0) return _2_;ireturn T;) main() char chN=*while*,*switch*,*int*,*for*, tM; int n, i;printf(*nThe original stringnn*);for(i=0;iN;i+)puts(chi); printf(*n*);printf(*nEnter a string
7、 for search:*); gets(t); n=fun (ch, t);/*f oiind*/if(n=_3_) printf(*nDon* t found!n*);-1else printf(*nThe position is %d .n*,n);)解题思路:本题是考察在字符串查找指定的子串。第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了 N个字符串,所以应填:No 第二处:在字符串已经找到,则返回字符串数组中的位置(下标值),所以应填:i。第三处:如果没有发现,则显示没有找到信息,所以应填:-lo第04套程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成
8、绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1. C中。不得增行或删行,也不得更改程序的结构!给定源程序: tfinclude #define N 5 typedef struct student long sno; char name10; float score3; STU;void fun(char
9、*filename) FILE *fp; int i, j; STU sN, t;/*found*/fp = fopen(filename,_1_);“rb”fread(s, sizeof (STU), N, fp); fclose(fp); for (i=0; iN-l; i+) for (j=i+l; j t = si; si= sj; sj= t;fp = fopen(filename,wb);/*found*/_3_(s, sizeof (STU), N, fp);/*二进制输出/fwritefclose(fp);main() STU tN=10005,ZhangSan”,95,80,
10、88,10003,LiSi”,85,70,78,10002,CaoKai”,75,60,88,10004,FangFang”,90,82,87,10001,MaChao”,91,92,77, ssN;int i, j; FILE *fp;fp = fopen(student.dat,wb);fwrite (t, sizeof (STU),5, fp);fclose(fp);printf(*nnThe original data :nn);for (j=0; jN; j+) printf(*nNo:%ld Name:%-8s Scores:*,tj. sno, tj.name);for (i=0
11、; i3; i+) printf (*%6.2f , tj. scoreti);printf(iT);fun (student, dat);printf(nnThe data after sorting :nn);fp = fopen(student.dat,rb);fread(ss, sizeof (STU),5, fp);fclose(fp);for (j=0; jN; j+) printf(nNo:%ld Name:%-8s Scores:, ssj. sno, ssj. name);for (i=0; i3; i+) printf (*%6.2f ”, ssj. scoreti);pr
12、intf(*n*);解题思路:本题是考察把结构中的数据写入文件。第一处:建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的字符)从文件中读出,所以应填:rb:第二处:判断当前学号是否大于刚读出的学号进行相比,如果大于,则进行交换,所以应填:.第三处:把已排序的结构数据,重新写入文件,所以应填:fwrite.第05套给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果
13、。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!给定源程序:#include ttinclude void fun (char *s, int a, double f)(/*f oiind*/_1_ fp;FILE *char str100, strl100, str2100;int al; double fl;fp = fopen(*filel. txt*,w);fprintf (fp,%s %d s, a, f);/*f oiind*/_2_;fclose(fp)fp = fopenCfilel.txt,r);/*found*/fscanf(_3_
14、,*%s%s%s*, str, strl, str2);fpfclose(fp);al = atoi(strl);fl = atof(str2);printf(*nThe result :nn%s %d %fn”, str, al, fl);) mainO char a10=*Hello!r; int b=12345;double c=98.76;fun (a, b, c);)解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。第一处:定义文本文件类型变量,所以应填:FILE *。第二处:关闭刚写入的文件,所以应填:fclose(fp)o
15、第三处:从文件中读出数据,所以应填:fPo第06套给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时,程序输出:xl=5.000000, x2=3.000000, xl*xl+xl*x2=40.000000请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include double fl(double x) return x*x; double f2(double x, double y) return x*y;/*found*/_1_ fun(
16、int i, double x, double y)double if (i=D/*f oiind*/return _2_(x);flelse/*found*/return _3_(x, y);f2)main() double xl=5, x2=3, r;r = fun(l, xl, x2);r += fun (2, xl, x2);printf(*nxl=%f, x2=%f, xl*xl+xl*x2=%fnn*,xl, x2, r);)解题思路:本题是根据给定的公式来计算函数的值。第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所以应填:double。
17、第二处:当i等于1时,则返回fl函数的值,所以应填:flo第三处:如果i不等于1,则返回f2函数的值,所以应填:f2o第07套程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数fun的功能是输出这位学生的信息O请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1. C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include typedef struct int num;char name9;char sex;struct int year, month, day ; birthday;float sc
18、ore3;STU;/*found*/void show (STU 1)tt int i;printf (*n%d %s %c %d-%d-%d*, tt. num, tt. name, tt. sex, tt. birthday, year, tt. birthday, month, tt. birthday, day); for(i=0; i3; i+)/*f oiind*/printf (*%5. If*,2);tt. scoreiprintf(*n*);)main() STU std= l/Zhanghua*/M1,1961,10,8,76.5,78.0,82.0;printf(nA s
19、tudent data:n);/*found*/show (3);std)解题思路:本题是利用结构体变量存储了一名学生的信息。第一处:tt变量在函数体fun已经使用,所以应填:tt。第二处:利用循环分别输出学生的成绩数据,所以应填:tt. scoreti.第三处:函数的调用,所以应填:std.第08套给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun 的功能是将该学生的各科成绩都乘以一个系数a.请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的
20、结构!给定源程序:ttinclude typedef struct int num;char name 9;float score3;STU;void show(STU tt) int i;printf(*%d %s : tt. num, tt. name);for(i=0; i3; i+)printf (*%5. If*, tt. score i);printf(*n*);)/*found*/void modify (1*ss, float a)STU int i;for(i=0; i2*=a;score imain() STU std=1,*Zhanghua*,76.5,78.0,82.0
21、;float a;printf(*nThe original number and name and scores :n);show(std);printf(*nlnput a number :); scanf&a);/*found*/modify (3, a);&stdprintf(*nA result of modifying :n);show(std);)解题思路:本题是利用结构体存储学生记录并由实参SS返回。第一处:实参SS是一个结构型指针变量,所以应填:STUo第二处:该学生的各科成绩都乘以一个系数a,所以应填:scorei。第三处:函数的调用,由于函数定义时使用的指针结构型变量,所
22、以应填:&stdo第09套给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1. C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include ttinclude #define N 6 typedef struct node int data;struct node *next; NODE;void fun(NODE
23、*h) NODE *p,*q; int t; p = h; while (p)/*f oiind*/ q =_1_;p-next/*f oiind*/ while (2)q if (p-data q-data) t = p-data; p-data = q-data; q-data = t; q = q-next;)/*found*/p =_3_;p-next) NODE *creatlist(int a) NODE *h,*p,*q; int i;h=NULL;for(i=0; idata=ai;q-next = NULL;if (h = NULL) h = p = q;else p-nex
24、t = q; p = q;)return h;)void outlist(NODE *h) NODE *p;p=h;if (pNULL) printf(*The list is NULL!n); else printf(*nHead *); do printfp-data); p=p-next; while(p!=NULL);printf(*-Endn*);) mainO NODE *head;int aN=0,10,4,2,8,6;head=creat1i st(a);printf(*nThe original list:n);outlist(head);fun(head);printf(*
25、nThe list after inverting :n); outlist(head);解题思路:本题是考察使用链表方法,使用两重while循环语句,对链表的结点数据进行升序排列。第一处:由于外循环变量使用p指针,内循环变量使用q指针,所以q指向必须指向P的next指针,因此应填写:p-nexto第二处:判断内循环q指针是否结束,所以应填:qo第三处:外循环控制变量p指向自己的next指针,所以应填:p-next。第10套给定程序中,函数fun的功能是:判定形参a所指的NXN (规定N为奇数)的矩阵是否是“幻方,若是,函数返回值为1;不是,函数返回值为0。幻方的判定条件是:矩阵每行、每列、主
26、对角线及反对角线上元素之和都相等。例如,以下3X3的矩阵就是一个“幻方。492357816请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1. C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include #define N 3int fun(int (*a)N) int i, j, ml, m2, row, colum;ml=m2=0;for(i=0; iN; i+) j=N-i-l; ml+=aii; m2+=aij; if(ml!=m2) return 0;for(i=0; iN; i+)/*f oiind*/r
27、ow=colum=_1_;0for(j=0; jN; j+) row+=aij; colum+=aji;/*f oiind*/if(row!=colum)_2_(row!=ml) return 0;/*found*/return _3_;1)mainO int xNN, i, j;printf(*Enter number for array:n*);for(i=0; iN; i+)for(j=0; jN; j+) scanf C%d*,&xij);printf(Array:n);for(i=0; iN; i+) for(j=0; jN; j+) printf(*%3d* xij);printf
28、(*n*);)if(fun(x) printf(The Array is a magic square.n*);else printf(*The Array isnt a magic square.n*);)解题思路:第一处:行列变量row和colum的值初始化为0。第二处:两个条件只要有一个不满足就返回0,所以应填:|。第三处:如果矩阵是“幻方”,则返回1。第11套给定程序中,函数fun的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2O请在程序的下划线处填入正确的内容并把下划线删除,使程序得出
29、正确的结果。注意:源程序存放在考生文件夹下的BLANK1. C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include tfinclude #define N 5typedef struct node int data;struct node *next; NODE;void fun(NODE *h) NODE *p,*q,*r;/*f oiind*/p = h-_1_;next/*f oiind*/if (p=_2_) return;0q = p-next;p-next = NULL;while (q) r = q-next; q-next = p;/*found*/P = q
30、; Q =_3_;r)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=ai;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
31、printf(*nHead *);do printf(*-%d*, p-data); p=p-next;while(p!=NULL);printf(Endn*);) main() NODE *head;int aN=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);解题思路:本题是考察使用链表方法,对链表的结点数据进行降序排列。第一处:使用结构指针P,来控制链表的结束,p必
32、须指向h结构指针的next指针,来定位p的初始位置。所以应填写:h-nexto第二处:判断p指针是否结束,所以应填写:0o第三处:q指向原q的next指针,所以应填:ro第12套给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKLC中。不得增行或删行,也不得更改程序的结构!给定源程序: tfinclude #include ftdefine N 5typedef
33、 struct node int data;struct node *next; NODE;/*found*/_1_* fun (NODE *h)NODE * NODE *p,*q,*r;p = h;if (p = NULL) return NULL; q = p-next;p-next = NULL; while (q)/*found*/r = q-_2_;nextq-next = p;P = q;/*found*/return p;)NODE *creatlist(int a) NODE *h,*p,*q; int i;h=NULL;for(i=0; idata=ai;q-next = N
34、ULL;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 printfp-data); p=p-next;while(p!=NULL);printf(*-Endn*);)main() NODE *head;int aN=2,4,6,8,10);head=creat1i st(a);printf(*nThe original list:
35、n*);outlist(head);head=fun(head);printf(*nThe list after inverting :n);outlist(head);)解题思路:本题是考察使用链表方法,对链表的结点数据进行降序排列,最后通过函数进行返回。第一处:由于链表中的所有结果要求通过函数进行返回,所以应填:NODE *o第二处:中间变量r用来保存q的next指针,所以应填:next。第三处:q指向原q的next指针,所以应填:r。第13套给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后
36、链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:ttinclude #include ttdefine N 6typedef struct node int data;struct node *next; NODE;void fun(NODE *h) NODE *p,*q; int t;/*f oiind*/p =_1_;h-nextwhile (p)/*found*/q =_2_;p-nextwhile (q)/*f
37、 oiind*/if (p-data _3_ q-data) t = p-data; p-data = q-data; q-data = t;q = q-next;)p = p-next;)NODE *creatlist(int a) NODE *h,*p,*q; int i;h =(NODE *)malloc(sizeof(NODE);h-next = NULL;for(i=0; idata=ai;q-next = NULL;if (h-next = NULL) h-next = p = q;else p-next = q; p = q;return h;)void outlist(NODE
38、 *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(*-Endn*);)main() NODE *head;int aN=0,10,4,2,8,6;head=creat1i st(a);printf(*nThe original list:n*);outlist(head);fun(head);printf(*nThe list after sorting :n*);
39、outlist(head);解题思路:本题是考察使用链表方法,对链表的结点数据进行升序排列。第一处:使用结构指针P,来控制链表的结束,p必须指向h结构指针的next指针,来定位p的初始位置。所以应填写:h-nexto第二处:使用while循环,对链表中结点的数据进行排序,q必须指向p结构指针的next指针。所以应填写: p-nexto第三处:如果当前结点中的数据大于(大于等于)循环中的结点数据,那么进行交换,所以应填写:(或=)。第14套给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用。规定在_2_处使f指向函数fL在_3处使f指向函数f2。当调用正确时,程序输出:xl=5
40、.000000, x2=3.000000, xl*xl+xl*x2=40.000000请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1. C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include double fl(double x) return x*x;double f2(double x, double y) return x*y;double fun(double a, double b)/*f oiind*/_1_(*f)();doubledouble rl, r2;/*found*/f =_2_;/* point fount ion fl */flrl = f (a);/*f oiind*/f =_3_;/ point f