您的当前位置:首页正文

计算机二级c语言机试真题

2023-01-11 来源:爱站旅游
导读计算机二级c语言机试真题


一、填空题:

程序通过定义学生结构体变量,存储了学生的学号、姓名和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 /************found************/ p=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; }

因篇幅问题不能全部显示,请点此查看更多更全内容