经典C语言100套填空题.docx
第01套给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:27638496,新的数:为739。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>void fun(unsigned long *n) unsigned long x=0, i; int t;i=l;while(*n)/*found*/100 t=*n %_1_;/* found */if(t%2!=_2_) x=x+t*i; i=i*10;*n =*n /10;)/*found*/*n=_3_;main() unsigned long n=-l;while(n>99999999lln<0) printf("Please input(0<n<100000000):"); scanf("%ld",&n);fun(&n);printf("nThe result is:%ldn",n);)解题思路:第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10。第二处:判断是否是奇数,所以应填:0.第三处:最后通形参n来返回新数x,所以应填:Xo第02套给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>FILE *void fun(char *s, int a, double f)-1fp; char ch;fp = fopen(',filel.txtn, uwn); fprintf(fp,"%s %d %fn", s, a, f); fclose(fp);fp = fopen(nfilel.txt", Y'); printf(MnThe result :nnu); ch = fgetc(fp);while (!feof(_2_) putchar(_3_); ch = fgetc(fp); putchar(1n);fclose(fp);)main() char a10=MHeUo!M; int b=12345;double c=98.76;fun(a,b,c);解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕上。第一处:定义文本文件类型变量,所以应填:FILE *。第二处:判断文件是否结束,所以应填:fp。第三处:显示读出的字符,所以应填:ch。第03套程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其它学生的数据不变。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>#define N 5typedef struct student long sno;char name 10;float score3; STU;void fun(char * filename, STU n) FILE *fp;/*found*/fiI enamefpfpfp = fopen(_l_,"rb+");/* found */fseek(_2_,-lL*sizeof(STU), SEEK_END);/*found*/fwrite(&n, sizeof(STU),1,_3_);fclose(fp);main() STU tN=10001 JMaChao”,91,92,77,10002,nCaoKaiM,75,60,88,10003JLiSi”,85,70,78,10004,TangFang",90,82,87,10005,"ZhangSann,95,80,88);STU n=10006,HZhaoSiH,55,70,68, ssN;int i,j; FILE *fp;fp = fopen("student.dat","wb");fwrite(t, sizeof(STU), N, fp);fclose(fp);fp = fopen(Mstudent.dat"rbH);fread(ss, sizeof(STU), N, fp);fclose(fp);printf("nThe original data :nnH);for (j=O;j<N;j+) printf(MnNo:%ld Name:%-8s Scores: M,ssj.sno, ssj.name);for (i=0; i<3; i+) printf("%6.2f H, ssj.scorei);printf(',nM);fun(Hstudent.datn, n);printf("nThe data after modifing :nnH);fp = fopenCtudent.dat1', nrbM);fread(ss, sizeof(STU), N, fp);fclose(fp);for (j=0; j<N; j+) printf(MnNo:%ld Name:%-8s Scores: n,ssj.sno, ssj.name);for (i=0; i<3; i+) printf(M%6.2f H, ss|jj.scorei);printf(,nH);解题思路:本题是考察如何从文件中读出数据,再把结构中的数据写入文件中。第一处:从指定的文件中读出数据,所以应填:filename。第二处:读取文件fp的最后一条记录,所以应填:fpo第三处:再把读出的记录,写入文件fp指定的位置上,所以应填:fpo第04套程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>#define N 5typedef struct student long sno;char name10;float score3; STU;void fun(char *filename) FILE *fp; int i, j;STU sN, t;/*found*/“rb”fwritefp = fopen(filename,_1_);fread(s, sizeof(STU), N, fp);fclose(fp);for (i=0; i<N-l;i+)for (j=i+l; j<N; j+)/*found*/if (si.sno _2_ s|jj.sno) t = si;si= sj;sj= t;fp = fopen(filename,"wb");/*found*/_3_(s, sizeof(STU), N, fp);/*二进制输出*/ fclose(fp); main() STU tN=10005,MZhangSanH,95,80,88,10003,MLiSiM,85,70,78),10002,uCaoKain,75,60,88,10004/FangFangn,90,82,87,10001,HMaChaoM,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 :nnn);for (j=0; j<N; j+) printf(HnNo:%ld Name:%-8s Scores: H,tj.sno, lj.name);for (i=0; i<3; i+) printf(H%6.2f ", tj.scorei);prinlf("n");)fun(,student.datH);printf("nnThe data after sorting :nnH);fp = fopen("studenl.dat"JTb”);fread(ss, sizeof(STU),5, fp);fclose(fp);for (j=0; j<N; j+) printf(MnNo:%ld Name:%-8s Scores: H,ssj.sno, ss|j.name);for (i=0; i<3; i+) printf(H%6.2f n, ss|j.scorei);printf(MnM);解题思路:本题是考察把结构中的数据写入文件。第一处:建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的字符)从文件中读出,所以应填:"rb"。第二处:判断当前学号是否大于刚读出的学号进行相比,如果大于,则进行交换,所以应填:>.第三处:把已排序的结构数据,重新写入文件,所以应填:fwrite。第05套给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>#include <stdlib.h>void fun(char *s, int a, double f)/*found*/-1fp;FILE *char str100, strlflOO, str2100;int al; double fl;fp = fopenClel.txf, nwM);fprintf(fp, n%s %d %fn", s, a, f);/*found*/2;fcIose(fp)fp = fopen(Hfilel.txt","rn);/* found */ fscanf(_3_,%s%s%sH, str, strl, str2);fpfclose(fp); al = atoi(strl); fl = atof(str2); printf(MnThe result :nn%s %d str, al, fl);) main() char a10=MHello!M; int b=12345; double c=98.76; fun(a,b,c);)解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。第一处:定义文本文件类型变量,所以应填:FILE *。第二处:关闭刚写入的文件,所以应填:fclose(fp)。第三处:从文件中读出数据,所以应填:fp。第06套给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时,程序输出:xl=5.000000, x2=3.000000, xl*xl+xl*x2=40.000(M)0请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h> double fl (double x) return x*x; double f2(double x, double y) return x*y;/*found*/_1_ fun(int i, double x, double y)doub I e if(i=l)/*found*/ return _2_(x);flelsereturn _3_(x, y);main() double xl=5, x2=3, r;r = fun(l, xl, x2);r+= fun(2, xl, x2);printf("nxl=%f, x2=%f, x 1*x 1+x 1*x2=%fnn'*,x 1, x2, r);解题思路:本题是根据给定的公式来计算函数的值。第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所以应填:doubleo第二处:当i等于1时,则返回代函数的值,所以应填:f1o第三处:如果i不等于1,则返回f2函数的值,所以应填:f2o第07套程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数fun的功能是输出这位学生的信息。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>lypedef struct int num;char name9;char sex;struct int year,month,day ; birthday;float score3;STU;/*found*/void show(STU1)tt int i;printf(Hn%d %s %c %d-%d-%d”, tt.num, tt.name, tt.sex, tt.birthday.year, tt.birthday.month, tt.birthday.day);for(i=0; i<3; i+)/* found */tt. scoreiprintf(MnM);)main() STU std=1/,Zhanghua,;M;1961,10,8,76.5,78.0,82.0; printf(MnA student data:n");/*found*/ show(3);stdI 解题思路:本题是利用结构体变存储了一名学生的信息。第一处:tt变量在函数体fun已经使用,所以应填:tto 第二处:利用循环分别输出学生的成绩数据,所以应填:tt. scorei.第三处:函数的调用,所以应填:std。第08套给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩.函数fun的功能是将该学生的各科成绩都乘以一个系数a.请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h> typedef struct int num;char name9; float score3;STU; void show(STU tt) int i; printf(H%d %s : U,tt.num,tt.name); for(i=0; i<3; i+) printf(,%5.1f,tt.scorei); printf(MnH);)/* found */ void modify(1*ss,float a)STU int i;for(i=0; i<3; i+)/* found */ ss->2*=a;score i) main() STU std=1/'Zhanghua",76.5,78.0,82.0; float a;printf(MnThe original number and name and scores :nn); show(std);printf(HnInput a number :“); scanf("%f&a);&stdmodify(3,a);printf("nA result of modifying :nH);show(std);解题思路:本题是利用结构体存储学生记录并由实参SS返回。第一处:实参SS是一个结构型指针变量,所以应填:STU»第二处:该学生的各科成绩都乘以一个系数a,所以应填:scor/i。第三处:函数的调用,由于函数定义时使用的指针结构型变置,所以应填:&std.第09套给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#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_;p->next/*found*/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->nextNODE *creatlist(int a) NODE *h,*p,*q; int i;h=NULL;for(i=0; i<N; i+) q=(NODE *)malloc(sizeof(NODE);q->data=ai;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) printfC'The list is NULL!nu);else printf(MnHead "); do printf(M->%d", p->data); p=p->next;while(p!=NULL);printf(M->Endnn);) main() NODE "head;int a(N=0,10,4,2,8,6;head=creatlist(a);printf(MnThe original list:nn);outlist(head);fun(head);printf(nnThe list after inverting :nM);outlist(head);)解题思路:本题是考察使用链表方法,使用两重while循环语句,对链表的结点数据进行升序排列。第一处:由于外循环变量使用p指针,内循环变量使用q指针,所以q指向必须指向p的 next指针,因此应填写:p->next。第二处:判断内循环q指针是否结束,所以应填:q。第三处:外循环控制变量p指向自己的next指针,所以应填:p->next.第10套给定程序中,函数fun的功能是:判定形参a所指的NXN (规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值为1;不是,函数返回值为0.”幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。例如,以下3X3的矩阵就是一个“幻方”:492357816请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>#define N 3int fun(int (*a)N) int i,j,m 1,m2,row,colum;m 1=m2=0;for(i=0; i<N; i+)j=N-i-l; ml+=aii; m2+=aij;if(ml !=m2) return 0;for(i=0; i<N; i+) row=colum=_1_;for(j=0; j<N; j+) row+=aij; colum+=aji;/*fou nd */if(row!=colum)_2_(row!=ml) return 0;return _3.main()intxNN,ij;printf("Enter number for array:n");for(i=0; i<N; i+)for(j=0; j<N; j+) scanf(H%dM,&xij);printf(nArray:nH);for(i=0; i<N; i+) for(j=0;j<N;j+) printf(H%3d",xij);printf("nM);if(fun(x) printf("The Array is a magic squareAn"); else printf(nThe Array isn't a magic square.nK);解题思路:第一处:行列变量row和co I urn的值初始化为0。第二处:两个条件只要有一个不满足就返回0,所以应填:|。第三处:如果矩阵是“幻方”,则返回1。第11套给定程序中,函数fun的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6,4、2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK 1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#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_;next/*found*/if (p=2) return;0q = p->next;p->next = NULL;while (q) r = q->next; q->next = p;/*found*/p = q;q =_3_;rh->next = p;)NODE *creatlist(int a) NODE *h,*p,*q; int i;h =(NODE *)malloc(sizeof(NODE);h->next = NULL;for(i=0; i<N; i+) q=(NODE *)malloc(sizeof(NODE);q->data=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(MThe list is NULL!nu);else printf(nnHead ");do printf(M->%dH, p->data); p=p->next;while(p!=NULL);printf(H->EndnH);)main() NODE *head;int aN=2,4,6,8,10;head=creatlist(a);printf(MnThe original list:nM);outlist(head);fun(head);printf("nThe list after inverting :nM);outlist(head);)解题思路:本题是考察使用链表方法,对链表的结点数据进行降序排列。第一处:使用结构指针P,来控制链表的结束,p必须指向h结构指针的next指针,来定位P的初始位置。所以应填写:h->next.第二处:判断p指针是否结束,所以应填写:0.第三处:q指向原q的next指针,所以应填:r。第12套给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>#include <stdlib.h>#define N 5lypedef struct node int data;struct node *next; NODE;NODE *next_1_* fun(NODE *h) NODE *p,*q,*r;p = h;if(p = NULL)return NULL;q = p->next;p->next = NULL; while (q)/*found*/ r = q->_2_;q->next = p;p = q;/* found*/ q =_3.return p;)NODE *creatlist(int a) NODE *h,*p,*q; int i; h=NULL;for(i=0; i<N; i+) q=(NODE *)malloc(sizeof(NODE);q->data=ai;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) printfC'The list is NULL!nn);else printf(MnHead ");do printf(M->%dM, p->data); p=p->next; while(p!=NULL);printf(M->EndnM);main() NODE *head;int aN=2,4,6,8,10);head=creatlist(a);printf("nThe original list:nn);outlist(head);head=fun(head);printf("nThe list after inverting :n");outlist(head);解题思路:本题是考察使用链表方法,对链表的结点数据进行降序排列,最后通过函数进行返回。第一处:由于链表中的所有结果要求通过函数进行返回,所以应填:NODE *。第二处:中间变量用来保存q的next指针,所以应填:next。第三处:q指向原q的next指针,所以应填:r。第13套给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#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;/*fou nd */h->nextp->nextp =_1_;while (p)/*found*/q =_2_;while (q)(/*found*/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; i<N; i+) q=(NODE *)maUoc(sizeof(NODE);q->data=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!nM);else printf("nHead ");do printf(,->%d,', p->data); p=p->next;while(p!=NULL);printf(">Endn"); main() NODE *head;int aNJ=0,10,4,2,8,6);head=creatlist(a);printf(HnThe original list:n");outlist(head);fun(head);printf(nnThe list after sorting :nH);outlist(head);)解题思路:本题是考察使用链表方法,对链表的结点数据进行升序排列。第一处:使用结构指针P,来控制链表的结束,p必须指向h结构指针的next指针,来定位P的初始位。所以应填写:h->next.第二处:使用while循环,对链表中结点的数据进行排序,q必须指向p结构指针的next 指针。所以应填写:p->next.第三处:如果当前结点中的数据大于(大于等于)循环中的结点数据,那么进行交换,所以应填写:>(或>=)。第14套给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用。规定在_2处使f指向函数口,在_3处使f指向函数当调用正确时,程序输出:x 1=5.000000, x2=3.000000, xl*xl+xl*x2=40.00000ft请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include <stdio.h>double fl (double x) return x*x;double f2(double x, double y) return x*y;double fun(double a, double