一、填空题:
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其它学生的数据不变。
请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #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__, -(long)sizeof(STU), SEEK_END); /**********found**********/ fwrite(&n, sizeof(STU), 1, __3__); fclose(fp);
} 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<=\"\">
{printf(\"\\nNo: %ld Name: %-8s Scores: \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<=\"\">
{printf(\"\\nNo: %ld Name: %-8s Scores: \j].sno, ss[j].name); for (i=0; i<3; i++) printf(\"%6.2f \ss[j].score[i]); printf(\"\\n\"); } }
解题答案:
/**********第一空**********/ fp = fopen(filename, \"rb+\"); /**********第二空**********/
fseek(fp, -(long)sizeof(STU), SEEK_END); /**********第三空**********/ fwrite(&n, sizeof(STU), 1, fp);
******************************************
二、改错题:给定程序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; 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; }
outlink(NODE *h) {NODE *p; p=h->next;
printf(\"\\n\\nTHE LIST :\\n\\n HEAD \"); while(p)
{printf(\"->%d \p=p->next; }
printf(\"\\n\"); } main() {NODE *head; head=Creatlink(8,22); outlink(head); }
解题答案:
/**********found***********/ p=(NODE *)malloc(sizeof(NODE)); /**********found***********/ return h;
三、程序题:请编写函数fun, 函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入, 规定所有单词由小写字母组成,单词之间由若干个空格隔开, 一行的开始没有空格。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
给定源程序: #include #include #define N 80 int fun(char *s) {
} main()
{char line[N]; int num=0;void NONO (); printf(\"Enter a string :\\n\"); gets(line); num=fun(line);
printf(\"The number of word is : %d\\n\\n\NONO(); }
void NONO ()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
FILE *rf, *wf ; int i, num ; char line[N], *p ; rf = fopen(\"in.dat\wf = fopen(\"out.dat\for(i = 0 ; i < 10 ; i++) { fgets(line, N, rf); p = strchr(line, '\\n'); if(p != NULL) *p = 0 ; num = fun(line); fprintf(wf, \"%d\\n\num); }
fclose(rf); fclose(wf); }
参考答案:
int fun( char *s) {
int k = 1 ; while(*s) {
if(*s == ' ') k++ ; s++ ; }
return k ; }
一、填空题:给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到 文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #include
void WriteText(FILE *); void ReadText(FILE *); main() {FILE *fp;
if((fp=fopen(\"myfile4.txt\
{printf(\" open fail!!\\n\"); exit(0);} WriteText(fp); fclose(fp);
if((fp=fopen(\"myfile4.txt\{printf(\" open fail!!\\n\"); exit(0);} ReadText(fp); fclose(fp); }
/**********found**********/ void WriteText(FILE ___1___) {char str[81];
printf(\"\\nEnter string with -1 to end :\\n\"); gets(str);
while(strcmp(str,\"-1\")!=0) { /**********found**********/ fputs(___2___,fw); fputs(\"\\n\gets(str); } }
void ReadText(FILE *fr) {char str[81];
printf(\"\\nRead file and output to screen :\\n\"); fgets(str,81,fr); while(!feof(fr)) {
/**********found**********/ printf(\"%s\fgets(str,81,fr); } }
解题答案:
/**********第一空**********/ void WriteText(FILE *fw) /**********第二空**********/ fputs(str,fw); fputs(\"\\n\/**********第三空**********/ printf(\"%s\
******************************************
二、改错题:给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中奇数位 上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
例如,当s中的数为:7654321时,t中的数为:7531。 请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include
/************found************/ void fun (long s, long t) {long sl=10; *t = s % 10;
while (s > 0) {s = s/100;
*t = s%10 * sl + *t;
/************found************/ sl = sl*100; } } main() {long s, t;
printf(\"\\nPlease enter s:\"); scanf(\"%ld\&s); fun(s, &t);
printf(\"The result is: %ld\\n); }
解题答案:
/************found************/ void fun (long s, long *t) /************found************/ sl=sl*10;
******************************************
三、程序题:函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上, b数的十位 和个位数依次放在c数的千位和十位上。
例如,当a=45,b=12时,调用该函数后,c=1524。
注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序: #include
void fun(int a, int b, long *c) { } main()
{int a,b; long c; void NONO (); printf(\"Input a, b:\"); scanf(\"%d,%d\&a, &b); fun(a, b, &c);
printf(\"The result is: %ld\\n\c); NONO(); }
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。FILE *rf, *wf ; int i, a,b ; long c ; rf = fopen(\"in.dat\\"r\"); wf = fopen(\"out.dat\for(i = 0 ; i < 10 ; i++) { fscanf(rf, \"%d,%d\&a, &b);
*/
fun(a, b, &c);
fprintf(wf, \"a=%d,b=%d,c=%ld\\n\a, b, c); }
fclose(rf); fclose(wf); }
解题答案: {
*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10); }
一、填空题:给定程序中,函数fun的功能是:将自然数1~10以及它们的平方根写到名为 myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构!
给定源程序: #include #include
int fun(char *fname) {FILE *fp; int i,n; float x;
if((fp=fopen(fname, \"w\"))==NULL) return 0; for(i=1;i<=10;i++)
/**********found**********/
fprintf(___1___,\"%d%f\\n\
printf(\"\\nSucceed!!\\n\"); /**********found**********/ ___2___;
printf(\"\\nThe data in file :\\n\"); /**********found**********/ if((fp=fopen(___3___,\"r\"))==NULL) return 0;
fscanf(fp,\"%d%f\while(!feof(fp))
{printf(\"%d %f\\n\fscanf(fp,\"%d%f\&n,&x);} fclose(fp); return 1; } main()
{char fname[]=\"myfile3.txt\"; fun(fname); }
解题答案:
/**********第一空*********/
fprintf(fp,\"%d %f\\n\printf(\"\\nSucceed!!\\n\"); /**********第二空**********/ fclose(fp);
/**********第三空**********/
if((fp=fopen(fname,\"r\"))==NULL) ******************************************
二、改错题:给定程序MODI1.C中fun函数的功能是:将n个无序整数从小到大排序。请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include fun (int n, int *a) {int i, j, p, t; for (j = 0; j<=\"\"> {p = j;
/************found************/ for (i=j+1; i<=\"\"> if (a[p]>a[i])
/************found************/ t=i; if (p!=j)
{t = a[j]; a[j] = a[p]; a[p] = t;} } }
putarr(int n, int *z) {int i;
for (i = 1; i <= n; i++, z++)
{printf(\"%4d\*z); if (!(i%10)) printf(\"\\n\"); } printf(\"\\n\"); } main()
{int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11;
printf(\"\\n\\nBefore sorting %d numbers:\\n\n); putarr(n, aa); fun(n, aa);
printf(\"\\nAfter sorting %d numbers:\\n\n); putarr(n, aa); }
解题答案: #include #include fun (int n, int *a) {int i, j, p, t; for (j = 0; j<=\"\"> {p = j;
/************found************/
for(i=j+1;i
******************************************
三、程序题:函数fun的功能是: 将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是: 将a数的十位和个位数依次放在c数的个位和百位上, b数的十位 和个位数依次放在c数的十位和千位上。
例如, 当a=45, b=12时, 调用该函数后, c=2514。
注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序: #include
void fun(int a, int b, long *c) { } main()
{int a,b; long c; void NONO (); printf(\"Input a, b:\"); scanf(\"%d,%d\&a, &b); fun(a, b, &c);
printf(\"The result is: %ld\\n\c); NONO(); }
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。FILE *rf, *wf ; int i, a,b ; long c ;
*/
rf = fopen(\"in.dat\\"r\"); wf = fopen(\"out.dat\for(i = 0 ; i < 10 ; i++) { fscanf(rf, \"%d,%d\&a, &b); fun(a, b, &c);
fprintf(wf, \"a=%d,b=%d,c=%ld\\n\a, b, c); }
fclose(rf); fclose(wf); }
解题答案: {
*c=(b%10)*1000+(a%10)*100+(b/10)*10+a/10; }
因篇幅问题不能全部显示,请点此查看更多更全内容