1、国家二级( C语言)机试模拟试卷 192及答案与解析 一、程序填空题( 30分) 1 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3门课的成绩。函数fun的功能是对形参 b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。 例如: b所指变量 t中的学号、姓名、和三门课的成绩依次是:10002、 ”ZhangQi”、 93、 85、 87,修改后输出 t中的数据应为: 10004、 ”LiJie”、93、 85、 87。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得
2、更改程序的结构 ! #include #include struct student long sno; char name10; float score3; ; void fun(struct student *b) *found* b【 1】 =10004; *found* strcpy(b【 2】, ”LiJie”); main() struct student t=(10002, ”ZhangQi”, 93, 85, 87); int i; printf(” n nThe original data: n”); printf(” nNo: id Name: sknScores: ”,
3、t sno, t name); for(i=0; i void fun(char*p, char*b) int i, k=0; while(*p) i=1; while(i #include void fun(char *ss) void main(void) char tt51; void NONO(); printf(“inPlease enter an character string within 50 characters: n“); gets(tt); printf(“ininAfter changing, the stringn “ si“, tt); fun(tt); prin
4、tf(“inbecomesin i“ si“, tt); NONO(); void NONO() (*请在此函数内打开文件,输入测试数据, 调用 fun函数,输出数据,关闭文件。 * char tt51, ch; FILE*rf, *wf ; int len, i=0; rf=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); while(isno (2)一 name (3)&t 【试题解析】 第一空: “b【 1】 =10004; “等号右边是整型值,故这里是修改结构体成员 sno的值, b是结构体指针,访问结构体数据成员时使用 “-“运算符,因此
5、第一空为 “b-sno“。 第二空: “strcpy(b【 2】, “LiJie“); “, strcpy是字符串拷贝函数,因此这里是修改结构体 name成员值,故 第二空处为 “b-name“。 第三空: fun函数的定义形式是: void fun(struct student ),可知 fun的参数是指针,因此主函数内调用 fun函数时传入的参数是结构体 t的地址,故第三空处为“&t“。 二、程序修改题( 30分) 2 【正确答案】 (1)bk=*p; (2)bk+=; 【试题解析】 (1)p是指针。 p存放的内容是地址值,第一标识下 “bk=p; “含义是将 p存放的地址内容赋给 bk,
6、而不是把 p指向豹字符拷贝到 bk,显然不符合题意,应改 成 “bk=*p; “, *p是取 p指向的字符的内容。 (2)第二个标识符下是复制三个字符后在 b中插入空格,原题中给出的“bk+=“; “,在 c语言中字符常量是由单引号括起的单个字符,即空格字符应为 “,而 “是表示字符串常量且该字符串中只有一个空格字符。第二标识下是将空格字符复制给 bk+,因此第二标识下应改为 “bk+=“; “。 三、程序设计题( 40分) 3 【正确答案】 char*p=ss; int i=0; while(*p) if(i 2)&(*p=a&*p=z) *p一 =32; p+; i+; 【试题解析】 (1)首先取得字符串中下标为奇数的字符。 (2)判断奇数位置的字符是否为小写字母。 (3)若 (2)中的判断结果是小写字母,则对其进行转换。