知ing

最新计算机二级C语言上机试题汇编100套

NCRE研究组 编 / 高等教育出版社

゛Zirro、Y 上传

查看本书

85套: 

给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。 

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

#include <stdlib.h> 

#define N 5 

typedef struct 

{ int num; 

char name[10]; 

char tel[10]; 

}STYPE; 

void check(); 

/ **********found**********/ 

int fun(___1___ *std) 

/ **********found**********/ 

___2___ *fp; int i; 

if((fp=fopen("myfile5.dat","wb"))==NULL) 

return(0); 

printf("\nOutput data to file !\n"); 

for(i=0; i<N; i++) 

/ **********found**********/ 

fwrite(&std[i], sizeof(STYPE), 1, ___3___); 

fclose(fp); 

return (1); 

main() 

{ STYPE s[10]={ {1,"aaaaa","111111"},{1,"bbbbb","222222"},{1,"ccccc","333333"}, {1,"ddddd","444444"},{1,"eeeee","555555"}}; 

int k; 

k=fun(s); 

if (k==1) 

{ printf("Succeed!"); check(); } 

else 

printf("Fail!"); 

void check() 

{ FILE *fp; int i; 

STYPE s[10]; 

if((fp=fopen("myfile5.dat","rb"))==NULL) 

{ printf("Fail !!\n"); exit(0); } 

printf("\nRead file and output to screen :\n"); 

printf("\n num name tel\n"); 

for(i=0; i<N; i++) 

{ fread(&s[i],sizeof(STYPE),1, fp); 

printf("%6d %s %s\n",s[i].num,s[i].name,s[i].tel); 

fclose(fp); 

解题思路: 

本题是要求把指定的学生记录输出到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 

第一处:结构定义自变量,因此应填写STYPE。 

第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp已经给出,这样,此处只能填写FILE。 

每三处:fwrite是把变量中的内容写入指定文件中,再根据fwrite参数的使用要求,所以只能填写文件流变量fp。 

*************************************************** 

给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。 

例如:当s中的字符串为:"ABCDE"时,则t中的字符串应为:"ABCDEEDCBA"。 

请改正程序中的错误,使它能得出正确的结果。 

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构

给定源程序: 

#include <stdio.h> 

#include <string.h> 

void fun (char *s, char *t) 

{ int i, sl; 

sl = strlen(s); 

/ ************found************/ 

for( i=0; i<=s1; i ++) 

t[i] = s[i]; 

for (i=0; i<sl; i++) 

\TAB t[sl+i] = s[sl-i-1]; 

/ ************found************/ 

t[sl] = '\0'; 

main() 

{ char s[100], t[100]; 

printf("\nPlease enter string s:"); scanf("%s", s); 

fun(s, t); 

printf("The result is: %s\n", t); 

解题思路: 

第一处:变量sl错写成了s1。 

第二处:新串t的字符串结束位置不正确,应该是两倍的sl距离。 

*************************************************** 

函数fun的功能是:将两个两位数的正整数ab合并形成一个整数放在c中。 

合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位和个位数依次放在c数的百位和个位上。 例如,当a45b=12时,调用该函数后,c=4152。 

注意部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

void fun(int a, int b, long *c) 

main() 

{ int a,b; long c; 

printf("Input a, b:"); scanf("%d,%d", &a, &b); 

fun(a, b, &c); 

printf("The result is: %d\n", c); 

NONO(); 

解题思路: 

本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。 

a十位数字的方法:a/10 

a个位数字的方法:a%10 

参考答案: 

void fun(int a, int b, long *c) 

*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10); 

※※※※※※※※※※※※※※※※※※※※※※※※※ 


查看更多