第二处:判断是否是奇数,所以应填:〇〇第三处:最后通形参n来返回新数x,所以应填:x给定程序MODI 1.C中函数fun的功能是:计算n!例如,给n输入5,则输出120.000000请改正程序中的错误,使程序能输出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include double fun (int n ){ double result =1.0;/************ fou nd ************ /if n = = 0return 1.0 ;while( n >1 && n < 170 )/************ fou nd ************/result *= n-return result;)main (){ int n ;printf(nInput N:M);scanf(H%dM, &n);printf("ヽn\n%d! =%lf\n\nM, n, fun(n));}解题思路:第一处:条件语句书写格式错误,应改为:if(n==0)第二处:语句后缺少分号请编写ー个函数fun,它的功能是:将一个数字字符串转换为ー个整数(不得 调用C语言提供的将字符串转换为整数的函数)。
例如,若输入字符串"-1234",则 函数把它转换为整数值•1234»函数fun中给出的语句仅供参考注意:部分源程序存在文件PROG1.C文件中请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填 入你编写的若干语句给定源程序:#include #include long fun ( char *p)/*以下代码仅供参考・/ int i, len, t;/* len为串长,t为正负标识*/long x=0;len=strlen(p);if(p[0]==«J){ t=-l; len—; p++; }else t=l;/・以下完成数字字符串转换为ー个数字・/return x*t;}main()/・ 主函数 ・/{ char s[6];long n;printf(HEnter a string:\nH);gets(s);n = fun(s);printf("%ld\n”,n);NONO ();)NONO(){/・本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件/FILE 小・wf;int i;char s[20J ;long n ;fp = fopen("c:\\test\\in.daf'Jr");wf = fopen(,,c:\\test\\out.dat,,,,,w,');for(i = 0 ; i < 10 ; i++) {fscanf(fp, n%sM, s);n = fun(s);fprintf(wf, H%ld\n'; n);}fclose(fp);fclose(wf);)解题思路:本题是将一个数字字符串转换为ー个整数。
参考答案:#include #include long fun ( char *p)(/*以下代码仅供参考*/inti, len, t;/*len为串长,t为正负标识*/long x=0;len=strlen(p);if(p[0D{ t=-l; len—; p++; }else t=l;/・以下完成数字字符串转换为ー个数字・/while(*p) x = x*10-48+(*p++);return x*t;1main() /・ 主函数 ・/{ char s[6];long n;printf(nEnter a string:\nH);gets(s);n = fun(s);printf(”%ld\n",n);NONO ();)NONO(){/・本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件/FILE *fp, *wf;inti;char s[20J ;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);n = fun(s);fprintf(wf, "%ld\n",n);fclose(fp);fclose(wf);1注意:由于NONO()这个函数是改卷人用的,与考生没有什么关系,故下面从第2套试题 开始均省略NONO()※※※※※※※※※※※※※※※※※※※※※※※※※第02套:给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本 文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果注意:源程序存放在考生文件夹下的BLANK1.C中不得增行或删行,也不得更改程序的结构!给定源程序:#include void fun(char *s, int a, double f)/* ********* found **********/ -1—fp; char ch;fp = fopenCfilel.txt", "w");fprintf(fp, M%s %d %f\nH, s, a, f); fclose(fp);fp = fopenCfilel.txtu, V);printf("\nThe result :\n\nH);ch = fgetc(fp);/********** fou nd **********/ while (!feof(_2_)) {/豕********* fou nd **********/ putchar(-3_); ch = fgetc(fp); } putcharCXn');fclose(fp);} main() { char a[10]=nHello!H; int b=12345; double c= 98.76; fun(a,b,c);解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕上。
第一处:定义文本文件类型变量,所以应填:FILE*.第二处:判断文件是否结束,所以应填:fp.第三处:显示读出的字符,所以应填:ch给定程序MODI1.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串请改正函数fun中指定部位的错误,使它能得出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include void fun(char *s){ int i,j;fdr(i=Oj=O; s[i]!=W; i++)if(s[iJ>=<0, && s[i]<=9,)/* ********* found **********/s|j]=s[i];/* ********* fou nd**********/s[j]="\O";)main(){ char item[80J;printf("\nEnter a string : n);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];。
第二处:置新字符串的结束符,所以应改为:sU]=MT;.请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据,按列的 顺序依次放到ー个字符串中例如,二维数组中的数据为:W W W WSSSSHHHH则字符串中的内容应是:WSHWSHWSH注意:部分源程序在文件PROG1.C中请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句给定源程序:#include #define M 3#define N 4 void fun(char s[][NJ, char *b)(int i,j,n=O;for(i=0; i < N;i++) /*请填写相应语句完成其功能・/()b[n]='\0';}main(){ char a[ 100],w[M)[N]={ {•W/W'/W'/W},{S;S;S',S},{; int i,j;printf("The matrix:\nH);for(i=0; i
1 .计算存放到ー维数组中的位置2 .取出ニ维数组中的字符存放到ー维数组(已计算出的位置)中 参考答案:void fun(char s[J[NJ, char *b) (int i,j,n=O;for(i=0; i < N;i++) /・请填写相应语句完成其功能*/ (for(j = 0 ;j < M ;j++) { b[n] = s[j][i];n = i * M + j + 1;) ) b[n]=V)';)※※※※※※※※※※※※※※※※※※※※※※※派※第03套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩所 有学生数据均以二进制方式输出到文件中函数fun的功能是重写形参filename所 指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其它学 生的数据不变请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果注意:源程序存放在考生文件夹下的BLANK1.C中 不得增行或删行,也不得更改程序的结构! 给定源程序:#include #define N 5typedef struct student { long sno;char name [10];float score[3];} STU;void fun(char *filename, STU n){ FILE *fp;/寧********* fou nd **********/fp = fopen(_l_, "rb+");/********** fou nd **********/fseek(_2_, -lL*sizeof(STU), SEEK.END);/********** fou nd **********/fwrite(&n, sizeof(STU), 1, _3_);fclose(fp);)main(){ STU t[N]={ {10001;'MaChaoM, 91, 92, 77}, {10002,nCaoKain, 75, 60, 88},{10003,nLiSiH, 85, 70, 78}, {10004,“FangFang”,90, 82, 87},{10005,“ZhangSan",95, 80, 88}};STU n={ 10006,"ZhaoSiu, 55, 70, 68}, ss[NJ;int i,j; FILE *fp;fp = fopen(Hstudent.datH, "wb");fwrite(t, sizeof(STU), N, fp);fclose(fp);fp = fopen(Mstudent.datM, Mrbn);fread(ss, sizeof(STU), N, fp);fclose(fp);printf(n\nThe original data :\n\nM);for (j=0; j
第一处:从指定的文件中读出数据,所以应填:filename, 第二处:读取文件fp的最后一条记录,所以应填:fPo 第三处:再把读出的记录,写入文件fp指定的位置上,所以应填:fp给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并 为各结点数据域赋〇到m-l的值请改正函数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=l; i<=n; i++){ s=(NODE *)malloc(sizeof(NODE));s->data=rand()%m; s->next=p->next;p->next=s; p=p->next;}/********** found * **********/return p;1outlink(NODE *h){ NODE *p;p=h->next;printf(M\n\nTHE LIST :\n\n HEAD M);while(p){ printf(H->%d u,p->data);p=p->next;printf(n\nH);1main(){ NODE *head;head=Creatlink(8,22);outlink(head);1解题思路:第一处:指向刚分配的结构指针,所以应改为:p=(NODE *)malloc(sizeof(NODE));第二处:在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置, 最后返回不能使用P,是因为p的位置已经发生了变化,所以应改为返回h。
请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返 回一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干 个空格隔开,一行的开始没有空格注意:部分源程序在文件PROG 1.C中请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句给定源程序:#include #include #define N 80int fun( char *s)()main(){ char line[N]; int num=0;printf(nEnter a string :\nH); gets(line);num=fun( line );printf(nThe number of word is : %d\n\n",num);NONO();}解题思路:本题是统计字符串中的单词数1 .利用while循环语句和指针变量,当字符为空格时,则单词数k加12 .循环结束返回k参考答案:int fun( char *s)(int k = 1 ;while(*s) {if(*s == 1 *) k++ ;s++ ;)return k ;)※※※※※※※※※※※※※※※※※※※※派※※※※第04套:程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
所有学生数据均以二进制方式输出到文件中函数fun的功能是从形参filename所指 的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的 学生数据输出到filename所指的文件中,覆盖原来的文件内容请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果注意:源程序存放在考生文件夹下的BLANK1.C中不得增行或删行,也不得更改程序的结构!给定源程序:#include #define N 5typedef struct student {long sno;char name[ 10];float score[3];} STU;void fun(char * filename){ FILE *fp; int i,j;STU s[N], t;/不 ********* fou nd **********/fp = fopen(filename, _1_);fread(s, sizeof(STU), N, fp);fclose(fp);for (i=0; i
第一处:建立文件的类型,考虑到是把结构中的数据(结构中的数据包含不打印的字符) 从文件中读出,所以应填:"rb"第二处:判断当前学号是否大于刚读出的学号进行相比,如果大于,则进行交换,所以应 填:>«第三处:把已排序的结构数据,有新写入文件,所以应填:fwriteo给定程序MODI 1.C中函数fun的功能是:在字符串的最前端加入n个・号,形成新串,并且覆盖原审注意:字符串的长度最长允许为79请改正函数fun中指定部位的错误,使它能得出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include #include void fun ( char s[], int n )(char a[80], *p;int i;/********** found ***********/s二p;for(i=0; i
N个年龄通过调用随机 函数获得,并放在主函数的age数组中;要求函数把〇至9岁年龄段的人数放在d[0] 中,把!0至19岁年龄段的人数放在仇1]中,把20至29岁年龄段的人数放在出2]中, 其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]中结果在主函数 中输出注意:部分源程序在文件PROG 1.C中请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句给定源程序:#include #define N 50#define M 11void fun( int *a, int *b)()double rnd(){ static t=29,c=217,m= 1024,r=0;r=(r*t+c)%m; return((double)r/m);)main(){ int age[N], i, d[M];for(i=0; i
1 .初始化各年龄段人数为〇2 .使用for循环以及求出各年龄的十位数字作为存放人数的地址,如果大于值大于10,则 存入"10]中(大于110岁的人)参考答案:void fun( int *a, int *b)(intij ;for(i = 0 ; i < M ; i++) b|i] = 0 ;for(i = 0 ; i < N ; i++) {j = a[i]/ 10;if(j > 10) b[M - 1]++; else b[j]++ ;)}double md(){ static t=29,c=217,m= 1024,r=0;r=(r*t+c)%m; retum((double)r/m);)※※※※※※※※※※※※※※※※※※※※※※※派※第05套:给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将 字符串转换成相应的整数、浮点数,然后将其显示在屏幕上请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果注意:源程序存放在考生文件夹下的BLANK1.C中不得增行或删行,也不得更改程序的结构! 给定源程序:#include #include void fun(char *s, int a, double f)_1_ fp;char str[100], strl[100], str2[100];int al; double fl;fp = fopenC,filel.txtn, nwn);fprintf(fp, M%s %d %f\nM, s, a, f);/********** fou nd **********/_2_;fp = fopenC^filel.txt1', nrH);/********** fou nd **********/fscanf(_3_,M%s%s%sM, str, strl, str2);fclose(fp);al = atoi(strl);fl = atof(str2);printfC'\nThe result :\n\n%s %d %f\n”, str, al, fl);)main(){ char a[10]=nHello!H; int b= 12345;double c= 98.76;fun(a,b,c);)解题思路:本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮 点数显示在屏幕上。
第一处:定义文本文件类型变量,所以应填:FILE*.第二处:关闭刚写入的文件,所以应填:fclose(fp).第三处:从文件中读出数据,所以应填:fp.给定程序MODI1.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的 顺序找出前m(m<10)名学生来,并将这些学生数据存放在一个动态分配的连续存 储区中,此存储区的首地址作为函数值返回.请改正函数fun中指定部位的错误,使它能得出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include #include #include #define N 10typedef struct ss { char num[10];int s;} STU;STU *fun(STU a[], int m){ STU b[N], *t;int i,j,k;/********** fou nd **********/t=(STU *)calloc(sizeof(STU),m)for(i=0; ib|j].s)j=i;/********** fou nd **********/t(k)=b(j);b[jJ.s=O;)return t;)outresult(STU a[], FILE *pf){ int i;for(i=0; i10 ){ printf("\nGive the number of the students who have better score: 0); scanf("%dn,&m);}pOrder=fun(a,m);printf(n***** THE RESULT *****\nn);printf("The top :\nH);for(i=0; i
第二处:应该使用方括号,而不是圆括号像此类,使用编译,即可发现请编写函数fun,函数的功能是:删去ー维数组中所有相同的数,使之只剩ー个数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数例如,一维数组中的数据是:2223445666677 899 10 10 10删除后,数组中的内容应该是:2 34567 89 10注意:部分源程序在文件PROG1.C中请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句给定源程序:#include #define N 80int fun(int a[], int n)(}main(){ int a[N]={2,2,2,3,44,5,6,6,6,6,7,7,8,9,9』〇』〇』〇/},i,n=20;printf(HThe original data :\nM);for(i=0; i
1 .取出数组中的第1个数存放在临时变量k中,再利用for循环来依次判断所有的数2 .如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制, 接着把这个数重新存入k如果相同,则取下ー数参考答案:int fun(int a[], int n)(int i, j = 1, k = a[0];for(i = 1 ; i < n ; i++)if(k != a[i]) {a[j++]=a[i];k = a[i];)a[j] = 0 ;return j ;)※※※※※※※※※※※※※※※※※※※※派※※※※第06套:给定程序中,函数fun的功能是根据形参i的值返回某个函数的值当调用正 确时,程序输出:x 1=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; }/* ********* fou nd **********/_1_ fun(int i, double x, double y){ if(i=l)/豕********* fou nd **********/return _2_(x);else********* fou nd **********/return _3_(x, y);)main(){ double xl=5, x2=3, r;r = fun(l, xl, x2);r += fun(2, xl, x2);printf(M\nxl=%f, x2=%f, xl*xl+xl*x2=%f\n\n'*,xl, x2, r);1解题思路:本题是根据给定的公式来计算函数的值。
第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所 以应填:double0第二处:当i等于1时,则返回fl函数的值,所以应填:门第三处:如果i不等于1,则返回f2函数的值,所以应填:的给定程序MODI 1.C中函数fun的功能是:比较两个字符串,将长的那个字符串 的首地址作为函数值返回请改正函数fun中指定部位的错误,使它能得出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include /********** fou nd **********/char fun(char *s, char *t){ int sl=O,tl=O; char *ss, *tt;ss=s; tt=t;while(*ss){ sl++;/********** fou nd .*********/(*ss)++;}while(*tt){ tl++;********* fou nd**********/(*tt)++;1if(tl>sl) return t;else return s;}main(){ char a[80],b[80],*p,*q; int i;printf(**\nEnter a string : gets(a);printf(u\nEnter a string again : "); gets(b);printfC'\nThe longer is へn\n\"%s\“\n”,fun(a,b));解题思路:第一处:试题要求返回字符串的首地址,所以应改为:char *fun(char *s,char *t) 第二处:取字符串指针ss的下ー个位置,所以应改为:SS++;。
第三处:取字符串指针tt的下ー个位置,所以应改为:tt++;请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第!到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部 例如,字符串中原有的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串 中的内容应该是:DEFGHIJKABCo注意:部分源程序在文件PROG 1.C中请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句给定源程序:#include #include #define N 80void fun 1 (char *w) /*本函数的功能是将字符串中字符循环左移ー个位置*/ (int i; char t;t二w ⑼;for(i=0;i
1 .由于函数funl是将字符串中字符循环左移ー个位置,并通过实参w返回循环左移一个位 置的字符串2 .利用循环for语句来操作多少个字符(m)需要循环左移参考答案:void funl(char *w) /*本函数的功能是将字符串中字符循环左移ー个位置*/(int i; char t;t二w [〇];for(i=0;itypedef struct{ int num;char name[9];char sex;struct ( int year,month,day ;} birthday;float score[3];)STU;/********** fou nd **********/void show(STU 1 ) { int i;printf(u\n%d %s %c %d-%d-%dn, tt.num, tt.name, tt.sex, tt.birthday.year, tt.birthday.month, tt.birthday.day);for(i=0; i<3; i++)********* fou nd **********/ printf("%5.lf\_2_) printf(“也”);) main() { STU std={ l;'Zhanghua,,;M,,1961,10,8,76.5,78.0,82.0 };printf("\nA student data:\nn);/********** fou nd **********/解题思路:本题是利用结构体变量存储了一名学生的信息。
第一处:tt变量在函数体fun已经使用,所以应填:心第二处:利用循环分别输出学生的成绩数据,所以应填:tl.score[i]第三处:函数的调用,所以应填:std给定程序MODII.C中函数fun的功能是:求出数组中最大数和次最大数,并 把最大数和a[0]中的数对调、次最大数和a[l]中的数对调请改正程序中的错误,使它能得出正确的结果注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include #define N 20int fun (int * a, int n ){ int i, m, t, k ;for(i=0;i<2;i++) {/* ********* found **********/m=0;for(k=i+l ;ka[m]) k=m;t=a[i] ;a[i]=a[m] ;a[m]=t;1} main(){ int x, b[N]={ 11,5,12,0,3,6,9,7,10,8}, n=10, i;for( i=0; ia[m])m=k;。
请编写ー个函数unsigned fun ( unsigned w ), w是ー个大于10的无符号整数,若w是n(n22)位的整数,函数求出w的低n-1位的数作为函数值返 回例如:w值为5923,则函数返回923; w值为923则函数返回23 注意:部分源程序存在文件PROG1.C中请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句给定源程序:#include unsigned fun ( unsigned w )( } main() { unsigned x;printf ( "Enter a unsigned integer number : " ); scanf ( "%u", &x );printf ( "The original data is : %u\n", x ); if(x< 10) printf (nDataerror !");else printf ("The result: %u\n",fun ( x ));NONO();解题思路:本题是考察考生怎样获取ー个符合要求的无符号整数本题是应用if条件语句首先判断给 出的数是几位数,再模相应的值,最后得出的余数就是结果。
参考答案:unsigned fun ( unsigned w )(if(w> 10000) w %= 10000 ;else if(w>1000) w %= 1000 ;else if(w>100) w %= 100 ;else if(w>10) w %=10 ;return w ;)※※※※※※※※※※※※※※※※※※※※派※※※※第08套:给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩函数fun的功能是将该学生的各科成绩都乘以ー个系数a请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果注意:源程序存放在考生文件夹下的BLANK1.C中不得增行或删行,也不得更改程序的结构!给定源程序:#include typedef struct{ int num;char name[9];float。