新视野二级C语言上机题库4.docx
第1套题、程序填空题砲人da确 週的5.正 fur级le入 遭fi填 调。顎 是同为线 3皆名力 功话率 的电写的 序和块序 程名龍 定姓数在 给、个请 号中构 AN序 BL程 的改 下更 件不 文也 生, 考行 在删 放或 査E 序增 源不编为果/include<stdio.h>/include<stdlib.h>/define N 5 typedef struct int num;char name10;char tel10;STYPE;void check();/* f und*/ int fun(1*std)int/*found*/*fp;if(fp=fopen("myfile5.dat'7'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,'Ll/,bbbbb"z"222222",l;,ccccc","333333"L lz"ddddd,/"444444,/l,"eeeee";'555555"int k;k=fun(s);if (k=l) printf("Succeed!"); check(); elseprintf("Fail!");void check() FILE *fp; int i;STYPE s10;if(fp=fopen("myfile5.dat"/"rb")=NULL)printf("Fail !nH); exit(O);printf(HnRead 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);先将在字符串S中的字符按正序存放二、程序改错题H中,難把s中的呈符按逆序连覧t串的后面。应为:"ABCDEEDCBA”。笥申为:"ABCDE”时,请改正程序中的错误,使它能卷出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!/include <stdio.h>#include <string.h> void fun (char *sz char *t) int i, si;si = strlen(s);/* f und*/for( i=0; i<=sl; i +) ti = si;for (i=0; i<sl; i+) tsl+i = ssl-i-l;tsl = '0'main() char 5100, t100;printf("nPlease enter string s:"); scanfs”, s);fun(s, t);printf("The result is: %sn“,t);三、程序编写题函数fun的功能是:将两个两位数的正整数a、b合 合并的方式是:喟酸的十位和个位数依次放在c数的二和个位数依次放在C数的百位和个位上。例如,当a=45, b=:12时,调用该函数后,c=4152o注意:邮分源程序存在文件PR0G1.C中。数齡件IN. DAT中的数据不得修改。请勿改动主国票7: n廿食爾粘rh砧局rt!英 A7左歩粘c.砧尤幷其rtr+吉 入你编写的若干语句。mai福口其它函数中的任何内容,仅在函数fun的花括号中填#include <stdio.h>void fun(int a, int b, long *c)main() int azb; long c;void NONO ();printf("lnput a b:“); scanf("%d%d"/ &a, &b);fun(a, b, &c);printf("The result is: %dn", c);NONO();)void NONO ()/本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。FILE *rf, *wf;int , azb; long c;rf = fopen("K:k0124010001in.dat"z "r");wf = fopen("K:k0124010001out.da Jw”);for(i = 0 ; i < 10 ; i+) fscanf(rfz "%dz%d"z &az &b);fun(az bz &c);fprintf(wfz "a=%dzb=%dzc=%ldn"z az bz c);fclose(rf);fclose(wf);第2套题、程序填空题给定程序的功能是:从键盘喻入若干行文本(每程不超过80个字徴),写到 文件冊txta用1(独立一行)作为字符串输入结束的标志。然后将文件 内苕决出显不在屏票上。文件的读身分身岫自定义函竅ReadTextWriteText实请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结°注意:源野序存放在考生文件隽下的BLANK1.C中。不替增或删行,也不福更改程序的结构!/include#include /include<stdio.h><string.h><stdlib.h> void WriteText(FILE *);void ReadText(FILE *);main() FILE *fp;if(fp=fopen(',myfile4.txt";'w")=NULL) printf(" open fail!lnM); exit(O); WriteText(fp);fclose(fp);if(fp=fopen("myfile4.txt"/"r")=NULL) printf(" open fail!n"); exit(O); ReadText(fp);fclose(fp);void WriteText(FILE 1) char str81;printf("nEnter string with -1 to end :n"); gets(str);while(strcmp(str,""l")!=O) 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) /*nd*/printf("%s",3);fgets(stc81Jr);J 7耀勁中S 量开位.甚 位高为靜 低在数幾幅 是談t中正行 能博,出增功,g在43它,好放65使数酸数7 ,函授新XJ:误iin冲个妙错Ima的动中改Mo构序要 星当程不 1,正 定,如改意 给数注/include <stdio.h> /*found* void fun (long s, long t) long sl=10;*t = s % 10;while ( s > 0) s = s/100;*t = s%10 *sl + *t;sl = sl*100;main() long s, t;printf(”nPlease enter s:"); scanf(”ld", &s);fun(s, &t);printf("The result is: %ldn", t);三、程序编写题学生的记录由学号和成绩组成,N名学生的数据己在主函数中放入结构体数组 s適编瞽数fun,它的功能是:把分数最低的学生数据放在b防指的数组中, 注魚数盘低的学生可熊不止个,函数返回分数最低留学生的人数。注意:部分源程序在殳住PR0G1.C文件中。请勿改动主函薮main和箕它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。/include <stdio.h>/define N 16 typedef struct char numflOl;int s; STREC;int fun( STREC *a, STREC *b )main() STREC sN="GA05"/85/"GA03"/76/"GA02"/69/"GA04"/85/ "GA01",91/"GA07"#72/"GA08"/64/"GA06"#87/ "GA015"/85,"GA013"/91/"GA012"/64,"GA014"/91, ,GA011",91/"GA017,1/64/"GA018"z64/"GA016"/72;STREC hN;int i,n;FILE *out;n=fun( s,h );printf("The %d lowest score :n",n);for(i=0;i<n; i+)printf("%s %4dn”,hi.num,hi.s);printf("n");out = fopen("K:k0124010001out.dat"/"wn);fprintf(out, "dn”,n);for(i=0;i<n; i+)fprintf(out, ,%4dn",hi.s);fclose(out);第3套题、程序填空题,函数fun的功给定程序里.一1nyfile3.txt的文本文件中,然后请在程序的下划枝处填入正确的内容耻疋:将自然数170以及它们的平方根写到名为顺序丿奉把"使程序得出正确的结注意:源野序存放在考生文件隽下的BLANK1. C中。 不容增籽或删行,也不容更改程序的结构!#include<math.h>#include<stdio.h>int fun(char *fname) FILE *fp;int i,n;float x;if(fp=fopen(fname, "w")=NULL) return 0;for(i=l;i<=10;i+)/*-fQ|Jp£|*/fprintf<_1_,"%d %fn"Jzsqrt(double)i);printf("nSucceed! nu);/* f und*/一2一;printf("nThe data in file :n");/*found*/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函数,不容增行或删行,也不得更改程序的结构!#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;for (i=j+l; i<n-l; i+ ) /*found*t=i;if(p!=j)t = aU;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( Hn"); printf("n");)main() int aa20=9,3,0,4,1,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 numbers:n", n ); putarr( n, aa );)三、程序编写题案在45源函句 加:放分主语 蟬疋次当野干 fur式依,:改若 数方数如意勿的 函的位豐请写鮭的嫡姬to函L中 四踢n该OG数 乱品林用PR函 宀匕 ,文其 将齡體興 義啓br此在 40俱仅 阳警 C数何 后1任 数e的数 賛。入 改填 修中 醤节 不括 据花 数的 的.,Un#include <stdio.h>void fun(int a, int b, long *c)main() int a,b; long c;void NONO ();printf("lnputab:H);scanf(H%d%d", &a, &b);fun(a, b, &c);printf("The result is: %ldn"/ c);NONO();void NONO ()/本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 FILE*rf,*wf;int i, azb; long c;rf = fopen(',K:k0124010001in.dat"/ HrH);wf = fopen("K:k0124010001out.da Jw“);for(i = 0 ; i < 10 ; i+) fscanf(rf, ”%d,%d", &a, &b);fun(a, b, &c);fprintf(wf, "a=%d/b=%d/c=%ldn", a, b, c);fclose(rf);fclose(wf);第4套题、程序填空题的,件定妻 旨呈示给定程序的功能是:阴用函数fun将:文件中,复制或功时函数位回值为1,失为 前関内容器岀到终瑞屏幕。主函数中源文, 在变里t fname中使程序得岀正确的结注意,请在程序南下划线处填入正确的内容并把下划线删除,源程序存放在考生文件隽下的BLANK1. C中。不得增后或删行,也不彳專更改程序的结构!/include<stdio.h>/include<stdlib.h> int fun(char *source, char *target) FILEchar ch;/*found*/if(fs=fopen(source,1)=NULL)return 0;if(ft=fopen(targetz "w")=NULL)return 0;printf("nThe data in file :n");ch=fgetc(fs);/* f und*Iwhile(!feof(2) putchar( ch );/*found*/fputc(ch,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(sfname/"w");printf("nThe original data :n");for(i=l; i<30; i+) c=,A'+rand()%25;fprintf(myf;,%c"/c); printf("%cH,c); fclose(myf);printf("nn");if (fun(sfnamez tfname) printf("Succeed!");else printf("Fail!");二、程序改错题次取出,请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不博增行或删行,也不得更改程序的结构!繁露響蟒翳清飜蠱般欝雌上为偶数的数依 例如,当S中的救为:87653142时,t顿数为:8642。#include <stdio.h> void fun (long s, long *t)int d;long sl=l;*t = 0;while ( s > 0) d = s%10;/*|Qgp£|* /if (d%2=0) *t=d* sl+ *t;si *= 10;)s= 10; main() long s, t;printf("nPlease enter s:"); scanf("ld”,&s);fun(s, &t);printf("The result is: %ldn"/1);为偶数、同的个新串三、程序编写题例如,若S所指字符串中的内容为:"ABCDEFG123456”,其中字符A的ASCII码 值为奇数,因此应当删除;其中例B的ASCH码值为偶数,但左数组中的下杯为- -"'数,所在数组中的下标也为偶函数fun的功能是:将s所指 数的字符外,其余的全都删除;串 中。奇数,因此也应当删除;而字符2的ASCII碣值为偶娄“.一.救,因此不应当删除,其它喩曲类推。最為所指数组中的内容应是:"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 ()/本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 chars100Lt100;FILE *rf, *wf;int i;rf = fopen("K:k0124010001in.daJr“);wf = fopen("K:k0124010001out.dat";'w");for(i = 0 ; i < 10 ; i+)fscanf(rf, "%s", s);fun(s, t);fprintf(wf, "%sn"z 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 *h, int x) SLIST *p, *q, *s;s=(SLIST *)malloc(sizeof(SLIST);/*found*/s->data=1q=h; p=h->next;while(p!=NULL && x>p->data) */q=一2一; p=p->next;s->next=p;*/*found*q->next=3SLIST *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=O;return h;)void outlist(SLIST *h) SLIST *p; p=h->next;if (p=NULL) printf("nThe list is NULL!nH); else printf(nnHead");do printf("->%d"/p->data); p=p->next; while(p!=NULL); printf("->Endn");)main() SLIST *head; int x;int aN=11,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:nH); outlist(head);给定程序M0DI1.C史函数fun的功能是:让笄正整数nun的各位上的数字之积。 200若输入:202»则输出应该是:二、程序改错题例如,若输入:252,则萌出应该是:一,一.一.一请改正程序中的错鼠 使它能醤出正确的结果。注意:不要改动main函数,不椁增行或删行,也不得更改程序的结构!/include <stdio.h> long fun (long num)long k; dok*=num%10;/* found*/ 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则歯致歯值为: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 *fp, *wf;int i,j;float aver; score5;fp = fopen("K:k0124010001in.dat";'rn);wf = fopen(',K:k0124010001out.dat,7'wH);for(i = 0 ; i < 10 ; i+) for(j = 0 ; j < 5 ; j+) fscanf(fpj%f,”,&scorej);aver = fun(score, 5);fprintf(wf, "%5.2fn", aver);fclose(fp);fclose(wf);第6套题、程序填空题函数蠶罐躡嚼!!链裏缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件考下的BLANKl. C中。 不得增杆或删行,也不得更改程序的结构!#include<stdio.h>#include<stdlib.h>#define N 8 typedef struct list int data;struct list *next; SLIST;void fun( SLIST *p) SLIST *t, *s;t=p->next; s=p;while(t->next != NULL)/*found*/t=t->_1_;)*found* printf(" %d 2); s->next=NULL;*/free(_3_);SLIST *creatlist(int *a) SLIST *h,*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(M->EndnH);)main() SLIST *head;int aN卜11,12,15,18,19,22,25,29;head=creatlist(a);printf(nnOutput from head:n"); outlist(head);printf("nOutput from tail: n");while (head->next != NULL)fun(head);printf("nn");printf("nOutput from head again :n"); outlist(head);)程中,正.定串如改意给加请注宀L 动DI書中改Mo内宀序要输濯 应能不 则它, ,使数 cd歯 ab限link 为错ma。的行 ba确删 de正或 .出行 出聶#include <stdio.h>/* found*/ fun (char a) if(*a) fun(a+l);/* found*/ printf("%c" *a);) main() char s10="abcd"printf("处理前字符串=%sn处理后字符串=",s);fun(s); printf("n");)三、程序编写题请编写个函数fun,它的功能是:比校两个字符串的长度,(不得颯用C语言 提供的求字符里长度的函数),函竅返回较萇的字符串。若两个字符串W度相同, 则返回第一个字符串。例如,输入beijing <CR> shanghai CR> (CR>为回车键),函数将返回shanghai 注意:部分源程序存在文件PR0G1. C中。请勿改親主函薮main!其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。#include <stdio.h>char *fun ( char *s, char *t) main()char a20/b20;void NONO ();printf("lnput 1th string:1');gets( a);printff'lnput 2th string:");gets( b);printf("%sn"zfun (a, b);NONO ();void NONO ()/本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE *fp, *wf;inti;char a20, b20;fp = fopen(“K:k01240100Olin.datr”);wf = fopen("K:k0124010001out.dat";'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的功能是:删除链表中数据域值相同的结点,使之只根留一请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 注意:源僕序存放在考生文件房下的BLANK1.C中。不容増或删行,也不得更改程序的结构!#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;/*found*/free(1-);*/*found*q=p->一2.)elseP=q;q=q->一3一;)SLIST *creatlist(int *a) SLIST *h/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(H->Endn");)main() SLIST *head; int aN:1,2,2,3,4,4,4,5;head=creatlist(a);printf("nThe list before deleting :n"); outlist(head);fun(head);printf("nThe list after deleting :n"); outlist(head);二、程序改错题 给定隹用K)DH. C中函数如n的功能是:用选择法对数组中的n个元素按从小到 鳴體離軸错误,使它能甕出正确的结果。注意:不要改动main函数,不擦增行和删行,也不得更改程序的结构!include <stdio.h>#define N 20void fun(int a, int n)int i,j, t, p;for (j = 0 ;j < n-1 ;j+) /* *found* * *P = Jfor (i = j+l;i