二级C语言题库1.docx
第1套题#i-娄itH 人da确点的5.正 fur级le入 遭fi填 调。毁 是码为线 W野节名为 功话率 的电写的 序和块序 程名置 定姓数在 给、个请 号一中构 C吉 阖 BL程 的改 下更 港 件正 文也 生, 考行 在删 放或 也俨 源不编为果ude <stdio.h> #include <stdlib.h> #define N 5 typedef struct int num;char name10;char tel10;JSTYPE;void check();/* * found* int fun(1_ *std) /* fo und*I-2_ *fp; int i;if(fp=fopen("myfile5.dat"/"wb'')=NULL) return(O);printf("nOutput data to file !n");for(i=0; i<N; i+)*found*/ fwrite(&stdi, sizeof(STYPE), 1,3);fclose(fp);return (1);)main() STYPE s10=l/,aaaaa"/"llllll"/l;'bbbbb',"222222,/l;,ccccc,/"333333"/ l,”ddddd”J444444”,L“eeeee”J555555”;int k;k=fun(s);if (k=l) printf("Succeed!H); check(); elseprintf("Fail!");)void check() FILE *fp; int i;STYPE s10;if(fp=fopen("myfile5.dat"/"rb")=NULL)printf("Fail !n"); exit(O);printf("nRead file and output to screen :n");printf(*'n num name telnn);for(i=0; i<N; i+) fread(&si,sizeof(STYPE),l, fp);printf("%6d %s %sn",si.num/si.name/si.tel);fclose(fp);)二、程序改错题给定程序M0DI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放 到t串中,密后把s中的字符按逆序连接到漳的后面。例如:当s中的定位里为:"ABCDE”吼贝U t中的字符串应为,"ABCDEEDCBA”。请改正程序中的锚吴,使它能空出正确的结果。注意:不要改动main函数,不椁增行或删行,也不得更改程序的结构!#include <stdio.h>#include <string.h>void fun (char *s, char *t) int i, si;si = strlen(s);/* f0 und*/for( i=0; i<=sl; i +)ti = si;for (i=0; i<sl; i+)tsl+i = ssl-i-l;tsl = '0'main() charstlOO, t100;printf("nPlease enter string s:"); scanf("%s", s);fun(s, t);printf("The result is: %sn", t);三、程序编写题函数fun的功熊是:将两个两位数的正整数a、b合 合并的方式是:嗡般的十位和个位数依次放在c数的斗1、整姒加仕c ,位上,b数的,)和个位数依次放在c数的百位和个位上。例如,当a=45, b=12时,调用该函数后,c=4152。注意:部分源程序存在文件PR0G1.C中。数强3件IN. DAT中的数据不得修改。请勿改粉主函薮mai向其它函数中的任何幡,仅在函数fun的花括导中填 入你编写的若干语句。#include <stdio.h>void fun(int a, int b, long *c)main() int a,b; long c;void NONO ();printf("lnput a b:n); scanf("%d%d"z &a, &b);fun(a, b, &c);printf("The result is: %dn"/ c);NONO();)void NONO ()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE *rf, *wf;int i, a,b; long c;rf = fopenC'KiWkOlWAOlOOOlWin.dat", "r");wf = fopenf'KAXkOlWAOlOOOlWout.dat'V'w");for(i = 0 ; i < 10 ; i+)fscanf(rf, ,%d,%d"/ &a, &b);fun(az b, &c);fprintf(wf, "a=%d/b=%d/c=%ldn"/ a, b, c);)伺ose(rf);fclose(wf);第2套题一、程序填空题文件盟瞟道制膘监羸登豁题鼐黑常露端内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果°注意:源程序存放在考生文件隽下的BLANK1.C中。不容增存或删行,也不得更改程序的结构!#include <stdio.h>#include<string.h>include<stdlib.h>void WriteText(FILE *);void ReadText(FILE *);main() FILE *fp;if(fp=fopen(,'myfile4.txt"/"w")=NULL) printf(" open fail!n"); exit(O); WriteText(fp); fclose(fp);if(fp=fopen("myfile4.txt","r")=NULL) printf(" open fail!n"); exit(O); ReadText(fp); fclose(fp); )* *found* * */void WriteText(FILE _1_) char str81;printf("nEnter string with -1 to end :n");gets(str);while(strcmp(str/,-l")(=O) /*found*/ fputs(2,fw); fputs("n",fw);gets(str);)void ReadText(FILE *fr) char str81;printf("nRead file and output to screen :n"); fgets(str,81,fr); while( !feof(fr) * *found* * */ printf("%s",-3_); fgets(str,81,fr);)给定程序M0DI1.C中函数fun的功能是:从低位开始取出长整型变量s中奇数位 上的数,俵茨构成一个新数放在t中。高位伤在高位,低位仍在低位:构成一个新数放在t中。高位仍在高位,低位仍在低位。二、程序改错题例如,当s中的数为:7654321町,t中的数为:7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不椁增行或删行,也不得更改程序的结构!#include <stdio.h> /* fo und*/ void fun (long s, long t) long sl=10;*t = s% 10;while ( s > 0) s = s/100;*t = s%10 *sl + *t;/*found*/si = si *100;)main() long s, t;printf("nPlease enter s:M); scanf("%ld' &s);fun(s, &t);printf("The result is: %ldn", t);),函数返回分数最低的学生的人数。三、程序编写题学生的记录由学号和成绩组成,N.S学生的数据己在主函数中四人结构体数组 s%.谓编番数fun,它的功能是:把分数最低的学生数据放在b断指的数组中,PR0G1.C文件中。注意:部分源程序在受住PR0G1., .#incl请勿改翱主函薮mai丽箕它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。ude <stdio.h> #define N 16 typedef struct char num10; int s; STREC;int fun( STREC *az STREC *b )( ) main() STREC sN=,'GA05"z85,"GA03"/76,,GA02,'z69,"GA04",85, "GA01"/91/,'GA07"/72/"GA08"/64/"GA06",87/ "GA015"/85/"GA013",91/"GA012"/64z"GA014"z91/ ,GA011"/91,"GA017,'/64/"GA018"/64/"GA016"/72;STREC hN;int izn;FILE *out;n=fun( s,h );printf("The %d lowest score :n"zn);for(i=0;i<n; i+)printf("%s %4dnM,hi.num/hi.s);printfC'Xn1');out = fopenC'KiWkOlWAOlOOOlWout.dat'V'w");fprintf(out, "dn",n);for(i=0;i<n; i+)fprintf(outz "%4dn"zhi.s); fclose(out);)第3套题一、程序填空题给定程序史,函数fun的呦3是:将自然麴10以及它们的平方根写到名为 inyfile3. txt的文本文伴中,麴信即阿匠读出叁T在屏幕上。请在程序的下划枝处填入正赢内容并把T划线喧,使程序得出正确的结 果。#incl注意:源程序存放在考生文件隽下的BLANK1.C中。 不得增存或删行,也不暮更改程序的结构!ude <math.h>#include <stdio.h> int fun(char *fname) FILE *fp; int i,n; float x;if(fp=fopen(fname/ "wH)=NULL) return 0;for(i=l;i<=10;i+)/*found*/#include <stdio.h>#include <stdlib.h>void fun (int n, int *a ) int i,j, p,t;for (j = 0; j<n-l; j+ ) p = j;*/fprintff_1,"%d %fn",i,sqrt(double)i);printf("nSucceed! n");/*found*2 _;printf("nThe data in file :nn);if<(fp=fopen(3;'r")=NULL) return 0;fscanf(fp/'%d%f"/&n/&x);while(!feof(fp) printf("%d %fn"/n/x); fscanf(fp/"%d%f"/&n/&x); fclose(fp);return 1;)main() char fname="myfile3.txt" fun(fname);)二、程序改错题给定程序M0DI1. C中fun函数的功能是:粉n个无序整数从小到大排序。请改正建序中的错误,使它能强出正确而结果。注意:不要改动main函数,不特增行或删行,也不得更改程序的结构!for (i=j+l; i<n-l; i+ ) if (ap>ai)#incl/* f 0 und*/ t=i;if (p!=j)t = aj; aj = ap; ap = t;) void putarr( int n, int *z) int i;for (i = 1; i <= n; i+, z+ ) printf( "%4d”,*z );if( !(i%10) printf( "n"); printf("nM);)main() int aa20=9,3,0,4,l,2,5,6,8,10,7, n=ll;printf( "nnBefore sorting %d numbers:n",n ); putarr( n, aa );fun( n, aa);printf( "nAfter sorting %d numbersAn", n ); putarr( n, aa );)三、程序编写题函数fun的哪E是:将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是:嗝热的十位和个位数依次放在c数的个技和百位上,b数的1位 和个位数依次放在c数的十位和千位上。,当a=45, b=12时,调用该函数后,c=2514o:部分源程序存在文侔PR0G1.C中。数敷件IN. DAT中的数据不得修改。请勿改反)主函薮main其它函数中的任何福,仅在函数fun的花括号中填入 你编写的若干语句。ude <stdio.h>void fun(int a, int b, long *c)main() int a,b; long c;void NONO ();printf("lnput a b:");scanf("%d%d"/ &a, &b);fun(a, b, &c);printf("The result is: %ldn"/ c);NONO();void NONO ()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE *rt *wf;int i, a,b; long c;rf = fopenC'KiWkOlWAOlOOOlWin.dat", "r");wf = fopen("K:k0124010001out.dat,J,w");for(i = 0; i < 10; i+) fscanf(rf, ”d,%d“,&a, &b);fun(az b, &c);fprintf(wf, "a=%d/b=%d/c=%ldn"/ a, bz c);)fclose(rf);fclose(wf);)第4套题一、程序填空题给定程序的功能是:调,赛制成功时函数返回值为1 失败时返回值为0。在 容输出乳终端屏幕。主函致中源支件名放在变量sfname中,目标文件名变 JEtfname 中。请在程序南下划线处填入正确的内容并把下划线删除,使程序得出正确的结c吉 需 BL程 的改 下更 港 件不 文也 生, 考行 在删 放或 5-伊 序增 源不ude <stdio.h>#include <stdlib.h>int fun(char *source, char *target) FILE *fs/ft; char ch;/*found*/ if(fs=fopen(source,1)=NULL)return 0;if(ft=fopen(target/ "w")=NULL)return 0;printf(MnThe data in file :n");ch=fgetc(fs);*/while(!feof(2) putchar( ch);*/*found*fputcfch,_3_);ch=fgetc(fs);fclose(fs); fclose(ft);printf("nn");return 1;main() char sfname20 ="myfilel,/tfname20="myfile2"FILE *myf; int i; char c;myf=fopen(sfnamez"wH);printf(MnThe original data :n");for(i=l; i<30; i+) c='A'+rand()%25;fpnntf(myf;'%c"/c); pnntf("%c",c); fclose(myf);printf("nn',);if (fun(sfnamez tfname) printf("Succeed!");else printf(Fail!,);二、程序改错题次取出,请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不椁增行或删行,也不得更改程序的结构!#include <stdio.h>void fun (long s, long *t)int d;long sl=l;*t = 0;while ( s > 0) d = s%10;if (d%2=0) *t=d* sl+ *t;si *= 10;s= 10;)main() long s, t;printf("nPlease enter s:"); scanf("%ld"z &s);fun(s, &t);printf("The result is: %ldn", t);)三、程序编写题维定噩誓显耀得鬻歌装糯雌上为偶数的数依 例如,当S中的数为:87653142时,t顿)数为:8642。函数fun的功能是:将s所指 数的字符外,其余的全都删除;串中。奇数,因此也应当删除为:"ABCDEFG123456”,其中字符A的ASCH码 :B的ASCH码值为偶数,但在数组中的下杯为 ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它 推。最后t所指的数组中的内容应是:"246”。注意:南分源程序存在文件PR0G1.C中。请勿改办主函薮mai湎其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。#include <stdio.h>#include <string.h> void fun(char *s, char t) main()char s100, t100;void NONO ();printf("nPlease enter string S:"); scanf("%s", s);fun(s, t);printf("nThe result is: %sn", t);NONO();void NONO ()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/char s100, t100;FILE *rf, *wf;inti;rf = fopen("K:k0124010001in.dat","r");wf = fopen("K:k0124010001out.dat","w");for(i = 0; i < 10 ; i+) fscanffrf, "%s", s);fun(s, t);fprintffwf, "%sn", t);)fclose(rf);fclose(wf);)第5套题一、程序填空题给定程序牛 域中的数递通 入到链表电,用已建立一个带有头结点的单向链表,链表中的各结点按结点数果。丁翳嬴嬲巡最螂靠的值放入一个新结点并插 请在程序的下划线处填入正确的内容并把下说聂删除,使程序得出正确的结注意:源辑序存放在考生文件隽下的BLANK1.C中。 不辱增后或删行,也不得更改程序的结构!#include <stdio.h>#include <stdlib.h>#define N 8 typedef struct list int data;struct list *next; SLIST;void fun( SLIST *hz int x) SLIST *p, *q, *s;s=(SLIST *)malloc(sizeof(SLIST);/*found*/ s->data=1;q=h; p=h->next; while(p!=NULL && x>p->data) /* fo und*/ q=_2_; p=p->next;)s->next=p;/*found*/ q->next=3;SLIST *creatlist(int *a) SLIST *hz*pz*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST);for(i=0; i<N; i+) q=(SLIST *)malloc(sizeof(SLIST); q->data=ai; p->next=q; p=q;) p->next=O; return h;)void outlist(SLIST *h) SLIST *p; p=h->next; if (p=NULL) printf("nThe list is NULL!n"); else printf("nHead");do printf(,->%d"/p->data); p=p->next; while(p!=NULL); printf("->Endn");main() SLIST *head;int x;#inclint aN=ll,12,15,18,19,22,25,29;head=creatlist(a);printf("nThe list before inserting:n"); outlist(head);printf("nEnter a number: "); scanf("%d",&x);fun(head,x);printf("nThe list after inserting:n"); outlist(head);)二、程序改错题给定程序M0DI1. C中函数fun的功能是:计笄正整数num的各位上的数字之积。 例如,若播入:252,则输出应该是:20。若输入:202,则输出应该是:0。请改正程序中的错良使它能卷出正确的将果。注意:不要改动main函数,不持增行或删行,也不得更改程序的结构!ude <stdio.h> long fun (long num)long k;dok*=num%10;/* fo und*num=10; while(num);return (k);) main()long n;printf("nPlease enter a number:"); scanf("ld”,&n);printf("n%ldn"/fun(n);)三、程序编写题遹编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函 数值报回。例如:若有5门磔的成绩是,90.5, 72, 80, 61.5, 55则X的指位71.80.注意:部分源程序存在文件PR0G1. C中。请勿改凝主函薮mai向其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。#include <stdio.h>float fun (float *a, int n)main()float score30=90.5, 72, 80, 61.5, 55, aver;void NONO ();aver = fun( score, 5 );printf( "nAverage score is: %5.2fn", aver);NONO();)void NONO ()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE *fpz *wf;int i, j;float aver; score5;fp = fopen("K:k0124010001in.dat“Jr");wf = fopenC'KiWkOlWAOlOOOlWout.daf'/'w");for(i = 0 ; i < 10 ; i+) for(j = 0 ; j < 5 ; j+) fscanf(fp/fj,&scorej);aver = funfscore, 5);fprintf(wf, ”5.2fn”, aver);)fclose(fp);fclose(wf);第6套题一、程序填空题给定举序中己建立一个带有去结点的单向链表,在main函数中将多次朋fun 函数,每国用一次fun函数,输出雍表尾部结点中的数据,并释放该结支模链表 缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果注意:源程序存放在考生文件隽下的BLANK1.C中。不彳导增存或删行,也不建更改程序的结构!#include <stdio.h>include <stdlib.h>#define N 8typedef struct list int data;struct list *next; SLIST;void fun( SLIST *p) SLIST *tz *s;t=p->next; s=p; while(t->next != NULL) S=t;/* fo und*/t=t->_1 /* *found* * */printf(" %d,2);s->next=NULL;/* f0 und*/free(_3_);)SLIST *creatlist(int *a) SLIST *hz*p,*q; int i;h=p=(SLIST *)malloc(sizeof(SLIST);for(i=0; i<N; i+) q=(SLIST *)malloc(sizeof(SLIST); q->data=ai; p->next=q; p=q;)p->next=0;return h;)void outlist(SLIST *h) SLIST *p;p=h->next;if (p=NULL) printf("nThe list is NULL!n"); else printf("nHead");do printf("->%d"zp->data); p=p->next; while(p!=NULL);printf(">Endn“);)main() SLIST *head;int aN卜11,12,15,18,19,22,25,29;head=creatlist(a);printf("nOutput from head:n"); outlist(head);printf("nOutput from tail: n");while (head->next != NULL)fun(head);printf(Hnn");printf("nOutput from head again :n"); outlist(head);)二、程序改错题#incl。的行 ba确删 de正或 .出行 出覆应能不 则已, ,使数 cd,函 ab限int 为错InaL O-BS-S 动 DI-?中防 MO内停要雷若程不程中,正: 定串如改意 给意请注字变ude <stdio.h> fun (char a) if(*a) fun(a+l);printf("%c" *a);) main() char s10="abcd',;printf("处理前字符串二sn处理后字符串s);fun(s); printf("n");)三、程序编写题cInI CXT 得串 不符r比较<CR>.回 是返 功函 的, 它物OG数PR函件它文其个史大回分主语 一符个覆.干 写字一,将:改若 编求第如数意勿的 请的回例函注请写 1g aU内 n hf O i g<c。在供返 提则ude <stdio.h>char *fun ( char *s, char *t) main()char a20,b20;void NONO ();printf("lnput 1th string:");gets( a);printf("lnput 2th string:");gets( b);printf("%sn",fun (a, b);NONO ();void NONO ()/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE *fp, *wf;int i;char a20, b20;fp = fopen("K:k0124010001in.dat";'r");wf = fopenC'KiWkOlWAOlOOOlWout.daf'/w");for(i = 0; i < 10; i+)fscanf(fp, "%s %s", a, b);fprintf(wf, "%sn”, fun(a, b);)fclose(fp);fclose(wf);第7套题一、程序填空题给定程序中己建立一个带有头结点的单向链表,链表中的各结点按数雷域递 增有序链箍。函数fun的功能是:删除链表中数据域值相同的结点,使之只操留一请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结注意课瞬编簟韩耀麟弱#include <stdio.h>#include <stdlib.h>#define N 8 typedef struct list int data;struct list *next; SLIST;void fun( SLIST *h) SLIST *p, *q;p=h->next; if (p!=NULL) q=p->next;while(q!=NULL) if (p->data=q->data) p->next=q->next;free(_1_);/*found*/ q=p->一2-; ) else p=q;/* fo und*/q=q->一3一;)SLIST *creatlist(int *a) SLIST *h,*p,*q; int i;h=p=(SLIST*)malloc(sizeof(SLIST);for(i=0; i<N; i+) q=(SLIST *)malloc(sizeof(SLIST); q->data=ai; p->next=q; p=q;)p->next=0;return h;)void outlistfSLIST *h) SLIST *p;p=h->next;if (p=NULL) printf("nThe list is NULL!n"); else printf("nHead");do printf("->%d",p->data); p=p->next; while(p!=NULL); printf("->Endn");)main()int aN=l,2,2,3,4,4,4,5; SLIST *head;head=creatlist(a);printf("nThe list before deleting :nH); outlist(head);fun(head);printf("nThe list after deleting :n"); outlist(head);)二、程序改错题 void fun(int az int n) int i, j, t, p;L。的动 DI医改 MO背要 序