
计算机二级C语言上机试题 汇编100套 第01套: 给定程序中,函数的功能是:将形参n所指变量中,各位上为偶数的数去除.剩余的数按原来从高位到低位 的顺序组成一个新的数,并通过形参指针传回所指变量 例如,输入一个数:27638496,新的数:为739。 请在程序的下划线处填入正确的内容并把下划线除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKIC中,不得增行或刷行,也不得更改程序的结构 给定源程序: #include void fun(usigned ong) unsigned longx,intt. i=1: 作本市中中神本来率中0U门来单华本来布车带率 作中中年来单中f0Undt4单4车车单单中 it%21=2) {xxt*10, *n=*n/10 *e_3_ main( unsigned long n=-1: while(n>9999999n<0 printf"Please input(0<n<100000000):")scanf"%ld".&n): fun(&n): result is:%) 解题思路: 第一处:1是通过取桓的方式来得到◆n的个位数字,所以应填:10: 第二处:判断是否是奇数,所以应填:0. 第三处:最后通过形参n来返回新数x,所以应填:X。 车率率家味中事率本车神车车事家率中车中本率市车事家率辣来中本水家有水事本家来车率中水市车家率车率中来 给定程序MODI.C中函数fun的功能是:计算nl。 -1-
- 1 - 计算机二级 C 语言上机试题 汇编 100 套 第 01 套: 给定程序中,函数 fun 的功能是:将形参 n 所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位 的顺序组成一个新的数,并通过形参指针 n 传回所指变量。 例如,输入一个数:27638496,新的数:为 739。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(unsigned long *n) { unsigned long x=0, i; int t; i=1; while(*n) /**********found**********/ { 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=-1; while(n>99999999||n<0) { printf("Please input(0<n<100000000): "); scanf("%ld",&n); } fun(&n); printf("\nThe result is: %ld\n",n); } 解题思路: 第一处:t 是通过取模的方式来得到*n 的个位数字,所以应填:10。 第二处:判断是否是奇数,所以应填:0。 第三处:最后通过形参 n 来返回新数 x,所以应填:x。 *************************************************** 给定程序 MODI1.C 中函数 fun 的功能是:计算 n!

例如,给n输入5,则输出120.000000, 请政正程序中的错误,使程序能输出正确的结果。 注意:不要政动mn函数,不得增行或行,也不得更改程序的结构: 给定源程序: #include double fun(intn) double result 1.0; 作*found**+华 ifn==0 retum 1.0. while(n) 作年年年年华华年年车年华f0und华来来年甲华华票年年 retum result: nma( {intn; print"nput N:") scanfl"%d",&n): printf"nn%d!=%lfnin".n.fun(n)): 解愿思路: 第一处:条件语句书写格式错误,应政为:f(=0). 第二处:语句后缺少分号。 请编写一个函数,它的功能是:将一个数字字符中转换为一个整数(不得调用C语言提供的将字符申转换为 整数的函数)。例如。若输入字符串1234"侧函数把它转换为整数值-1234。函数u中给出的语句仅供参考。 注意:部分源程序存在文件PROG1.C文件中。 请勿改动主函数mm和其它函数中的任何内容,仅在函数n的花括号中填入你编写的若干语句 给定源程序: #include long fun (char*p) 作以下代码仅供参考制 inti,len,t严lcn为中长,t为正负标识/ -2-
- 2 - 例如,给 n 输入 5,则输出 120.000000。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include double fun ( int n ) { double result = 1.0 ; /************found************/ if n = = 0 return 1.0 ; while( n >1 && n #include long fun ( char *p) { /* 以下代码仅供参考 */ int i, len, t; /* len 为串长,t 为正负标识 */

longx=0. len=strlen(p). (E-1;len-p++;) clse t=1; 以下完成数字字符中转换为个数字 retum x't } maim0产主函数/ {char s] long n. printf"Enter astring) gets(s). n=fun(s). printf"%n"n). NONO( NONO() 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 FILE*fp,*wf; inti; char s] long n; fp=fopen(""" wf=fopen("c:lestloutdat","w"); for0=0:i<10;i4+) fscanf(fp."%s"s): n=fun(s); fprinf wf."%dn) fclose(fp): felose(w) 解题思路: 本腿是将一个数字字符串转换为一个整数. 参考答案: 3
- 3 - long x=0; len=strlen(p); if(p[0]=='-') { t=-1; len-; p++; } else t=1; /* 以下完成数字字符串转换为一个数字 */ return x*t; } main() /* 主函数 */ { char s[6]; long n; printf("Enter a string:\n") ; gets(s); n = fun(s); printf("%ld\n",n); NONO ( ); } NONO ( ) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i ; char s[20] ; long n ; fp = fopen("c:\\test\\in.dat","r") ; wf = fopen("c:\\test\\out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%s", s) ; n = fun(s); fprintf(wf, "%ld\n", n) ; } fclose(fp) ; fclose(wf) ; } 解题思路: 本题是将一个数字字符串转换为一个整数。 参考答案:

#include long fun(charp) 体以下代码仅供参考/ int i,len.产kn为中长,t为正负标识y long x=0. len=strlen(p): ifp[o]=) {te-l:len-pt+:】 else =1; 作以下完成数字字符串转换为一个数字 while("p)x=x*10-48+(p++); main0产主函数/ (char s] long n; printf"Enter astringn"); gets(s); n=fun(s); NONO( NONO() {本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 FILE*fp.*wf: inti; char s2] long n: fp=fopen("c:Wtestlin.dat","r"): wf=fopen("e:","w") fori=0;i<10;i+)( fscanflfp."%s") n=fun(s); fprintf wf."%ldn"n): 4
- 4 - #include #include long fun ( char *p) { /* 以下代码仅供参考 */ int i, len, t; /* len 为串长,t 为正负标识 */ long x=0; len=strlen(p); if(p[0]=='-') { t=-1; len-; p++; } else t=1; /* 以下完成数字字符串转换为一个数字 */ while(*p) x = x*10-48+(*p++); return x*t; } main() /* 主函数 */ { char s[6]; long n; printf("Enter a string:\n") ; gets(s); n = fun(s); printf("%ld\n",n); NONO ( ); } NONO ( ) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i ; char s[20] ; long n ; fp = fopen("c:\\test\\in.dat","r") ; wf = fopen("c:\\test\\out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%s", s) ; n = fun(s); fprintf(wf, "%ld\n", n) ;

fclose(fp) felose(wf) 注意:由于NONO()这个函数是改卷人用的,与考生没有什么关系,故下面从第2套试愿开始均省略NONO() ※※※※※※※※※※※※※※※※※※※※※※※ 第02套: 给定程序中,函数f的功能是将形参给定的字符中、整数、浮点数写到文本文件中,再用字符方式从此文本文 件中逐个读入并显示在终端屏帮上。 请在程序的下划线处填入正确的内容并把下划线刷除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKI.C中。 不得增行或行,也不得更改程序的结构! 给定源程序: ncudesdio. void fun(chars.int a double f) /作中中年来单中f0Undt4单4车车单单中 1 fp: char ch; fp=fopen("filel.txt"',"w"). fprintf fp,"%%d%). fp=fopen("filel.xt",""). printf"The) ch=fgetc(fp). 体本率率来来本率率幸found率率华中本率率客华中/ while(o_2_》f 作卡华车幸中*华幸中ound草车特*华幸车移制 putchar(3).ch=fgetc(fp). putchar(). fclose(fp). main( char a10"Hellol":int b=12345; double.76 fun(a.b.c)
- 5 - } fclose(fp) ; fclose(wf) ; } 注意:由于 NONO( )这个函数是改卷人用的,与考生没有什么关系,故下面从第 2 套试题开始均省略 NONO( ) ※※※※※※※※※※※※※※※※※※※※※※※※ 第 02 套: 给定程序中,函数 fun 的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文 件中逐个读入并显示在终端屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(char *s, int a, double f) { /**********found**********/ _1_ fp; char ch; fp = fopen("file1.txt", "w"); fprintf(fp, "%s %d %f\n", s, a, f); fclose(fp); fp = fopen("file1.txt", "r"); printf("\nThe result :\n\n"); ch = fgetc(fp); /**********found**********/ while (!feof(_2_)) { /**********found**********/ putchar(_3_); ch = fgetc(fp); } putchar('\n'); fclose(fp); } main() { char a[10]="Hello!"; int b=12345; double c= 98.76; fun(a,b,c); }

解愿思路: 本题是考察先把给定的数据写入到文本文件中,再从该文件读出并是示在屏据幕上。 第一处:定义文本文件类型变量,所以应填:E“ 第二处:判断文件是否结束,所以应填:印。 第三处:显示读出的字符,所以应填:h。 给定程序MODI1.C中函数fm的功能是:依次取出字符串中所有数字字符,形 成新的字符申,并取代原字符中。 请政正函数中指定部位的错误,使它能得出正确的结果 注意:不要政动man函数,不得增行或刷行,也不得更改程序的结构! 给定源程序: 年include void fun(chars) {nti fo(=0,j=0:s=0:it+) i讽sp=0&s=9y 4*found sUl-s[] found s="0 main( char item/801. printf"Enter astring:").gcts(itcm) printf"nThe string is:item) fun(item): printf"nThe string of changing 解愿思路: 第一处:要求是取出原字符中中所有数字字符组成一个新的字符,程序中是使用变量」来控制新字符中的位 置,所以应政为:s+=. 第二处:置新字符中的结来符,所以应政为:s0, 幸率家幸率神率家幸来神车家家非中幸家中华率中率中幸家中中中学率率幸车中车家草车率车率率率中率家家中家中 请编写函数f,函数的功能是:将M行N列的二雏数组中的字符数据,按列的顺序依次放到一个字符串中。 例如,二雄数组中的数据为 w www ssss .6
- 6 - 解题思路: 本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕上。 第一处:定义文本文件类型变量,所以应填:FILE *。 第二处:判断文件是否结束,所以应填:fp。 第三处:显示读出的字符,所以应填:ch。 *************************************************** 给定程序 MODI1.C 中函数 fun 的功能是: 依次取出字符串中所有数字字符, 形 成新的字符串, 并取代原字符串。 请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include void fun(char *s) { int i,j; for(i=0,j=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') /**********found**********/ s[j]=s[i]; /**********found**********/ s[j]="\0"; } main() { char item[80]; printf("\nEnter a string : ");gets(item); printf("\n\nThe string is : \"%s\"\n",item); fun(item); printf("\n\nThe string of changing is : \"%s\"\n",item ); } 解题思路: 第一处: 要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量 j 来控制新字符串的位 置,所以应改为:s[j++]=s[i];。 第二处: 置新字符串的结束符,所以应改为:s[j]='\0';. *************************************************** 请编写函数 fun, 函数的功能是: 将 M 行 N 列的二维数组中的字符数据, 按列的顺序依次放到一个字符串中。 例如, 二维数组中的数据为: W W W W S S S S

HHHH 则字符串中的内容应是:WSHWSHWSH。 注意:部分源程序在文件PROG1.C中, 请勿改动主函数mi和其它函数中的任何内容.仅在函数un的花括号中填入你编写的若干语句 给定源程序: #define M3 #define N4 void fun(char sN],char"b) int iin=0: fo0,i<Nt+):请填写相应语句完成其功能/ b[n]-W. main( {char al100].w[M],W.W.W)t'S.S'SSH.H,H,H: int ii printf"The matrix:n") for(=0,i<M;++) for(j=0.j<N:++)printf7"%3c",wlilljl) fun(w.ak. printf"The Astring)puts(a) printf"\nin"): NONOO: 解题思路: 本愿是把二维数组中的字符数据按列存放到一个字符中中, 1.计算存放到一维数组中的位置。 2.取出二维数组中的字符存放到一锥数组(已计算出的位置)中。 参考答案: void fun(char sl[N].char "b) 7
- 7 - H H H H 则字符串中的内容应是: WSHWSHWSH。 注意:部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include #define M 3 #define N 4 void fun(char s[][N], char *b) { int i,j,n=0; for(i=0; i < N;i++) /* 请填写相应语句完成其功能 */ { } b[n]='\0'; } main() { char a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}}; int i,j; printf("The matrix:\n"); for(i=0; i<M; i++) { for(j=0;j<N; j++)printf("%3c",w[i][j]); printf("\n"); } fun(w,a); printf("The A string:\n");puts(a); printf("\n\n"); NONO(); } 解题思路: 本题是把二维数组中的字符数据按列存放到一个字符串中。 1. 计算存放到一维数组中的位置。 2. 取出二维数组中的字符存放到一维数组(已计算出的位置)中。 参考答案: void fun(char s[][N], char *b) {

int iin=o fo(C,i<N,+)请填写相应语句完成其功能 for(j=0;j<M;j++) b=s时: n=i*M+i+l: b[n]=10; ※※※※※※※※※※※※※※※※※※※※※※※ 第03套: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成。所有学生数据均以二进制方式输出到 文件中。函数fum的功能是重写形参eame所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原 来的数据,其它学生的数据不变。 请在程序的下划线处填入正确的内容并把下划线除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中 不得增行或刑行,也不得更改程序的结构! 给定源程序: #define N5 typedef struct student long sno. char namel10l float score STU: void fun(char *filename,STU n) 体水家来*华幸率率率f山门d像率事华幸水单车家中 fp=fopen(I,"rb+"): fseck(_2_-lL*sizcof(STU),SEEK_END): fwrite(&n,sizeof(STU),1.3_). felose(fp): -8-
- 8 - int i,j,n=0; for(i=0; i #define N 5 typedef struct student { long sno; char name[10]; float score[3]; } STU; void fun(char *filename, STU n) { FILE *fp; /**********found**********/ fp = fopen(_1_, "rb+"); /**********found**********/ fseek(_2_, -1L*sizeof(STU), SEEK_END); /**********found**********/ fwrite(&n, sizeof(STU), 1, _3_); fclose(fp);

main() STUINH{{10001,"MaChao,"91,92,77,I0002,CaoKai,75,60,883 {10003,"LiS,85,70,783.{10004,"FangFang",90,82,87, f10005,ZhangSan",95,80,88} STU=10006,Zha0S7,55,70,68,sN int ii:FILE *fp; fp=fopen("student.dat","wb") fwrite(sizeof(STU),N.fp). felosc(fp) fp=fopen("studentdat") fread(ss,sizeofSTU),N,fp). fclose(fp): for(j=0.j<N:j++) print"nNo:%d Name%s Scores:".sslname) for (3)printf".score printfr"\n") fun("student dat".n) printf"nThe data after modifing nin"): fp=fopen("student dat) fread(ss,sizeoflSTU).N.fp). fclose(p). for(j-0.j<N.j++) printf"nNo:Name Scores:"ss[ilsno,sslilname). for (3)print") printf"\n"): 解题思路: 本恩是考察如何从文件中读出数据,再把结构中的数据写入文件中。 第一处:从指定的文件中读出数据,所以应填:lename. 第二处:读取文件中的最后一条记录,所以应填:印: 第三处:再把读出的记录,写入文件印指定的位置上,所以应填:中 9
- 9 - } main() { STU t[N]={ {10001,"MaChao", 91, 92, 77}, {10002,"CaoKai", 75, 60, 88}, {10003,"LiSi", 85, 70, 78}, {10004,"FangFang", 90, 82, 87}, {10005,"ZhangSan", 95, 80, 88}}; STU n={10006,"ZhaoSi", 55, 70, 68}, ss[N]; int i,j; FILE *fp; fp = fopen("student.dat", "wb"); fwrite(t, sizeof(STU), N, fp); fclose(fp); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); printf("\nThe original data :\n\n"); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } fun("student.dat", n); printf("\nThe data after modifing :\n\n"); fp = fopen("student.dat", "rb"); fread(ss, sizeof(STU), N, fp); fclose(fp); for (j=0; j<N; j++) { printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name); for (i=0; i<3; i++) printf("%6.2f ", ss[j].score[i]); printf("\n"); } } 解题思路: 本题是考察如何从文件中读出数据,再把结构中的数据写入文件中。 第一处:从指定的文件中读出数据,所以应填:filename。 第二处:读取文件 fp 的最后一条记录,所以应填:fp。 第三处:再把读出的记录,写入文件 fp 指定的位置上,所以应填:fp。 ***************************************************

给定程序MODI.C中的函数Creatlink的功能是创建带头结点的单向表,并为各结点数据域赋0到m-1的值。 请政正函数Creatlink中指定部位的错误,使它能得出正确的结果。 注意:不要改动mn函数,不得增行或行,也不得更政程序的结构, 给定源程序: #include typedef struct aa {int data; NODE NODE*Creatlink(int n,intm) NODE*h-NULL "p.*s, int i: 作found p=(NODE )malloc(sizeof(NODE)). h=p; p->next-NULI fo=1:in:i计+) =(NODE)malloc(sizoNODE)). s->data-rand%ms>nexi-p->next p->next=s:p=p->next: 伸本率中中单幸来率率山nd像率幸率李水单幸率中中) retum p; outlink(NODE*h) {NODE*p. p=h->next printf"nnTHE LISTnn HEAD") while(p) {printf%d"p->data) p=p->next, printf("n"). main() (NODE*head. .10
- 10 - 给定程序 MODI1.C 中的函数 Creatlink 的功能是创建带头结点的单向链表, 并为各结点数据域赋 0 到 m-1 的值。 请改正函数 Creatlink 中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include typedef struct aa { int data; struct aa *next; } NODE; NODE *Creatlink(int n, int m) { NODE *h=NULL, *p, *s; int i; /**********found***********/ p=(NODE )malloc(sizeof(NODE)); h=p; p->next=NULL; for(i=1; idata=rand()%m; s->next=p->next; p->next=s; p=p->next; } /**********found***********/ return p; } outlink(NODE *h) { NODE *p; p=h->next; printf("\n\nTHE LIST :\n\n HEAD "); while(p) { printf("->%d ",p->data); p=p->next; } printf("\n"); } main() { NODE *head;