国家二级(C语言)机试模拟试卷937
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,程序通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。函数fun的功能是:将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。
例如,a所指变量中的学号、姓名和三门课的成绩依次是: 10001、 \\
(1)a (2)b.name (3)score[i]
解析:结构体数据类型;strcpy字符串拷贝函数。
填空1:题目要求先将形参a所指结构体变量中的数据赋给函数中的结构体变量b,所以此处b= a。
填空2:通过strcpy函数修改b中的学生姓名,注意结构变量成员的表示方法。
填空3:printf函数输出结果。
结构变量成员的一般形式是:
结构变量名成员名
例如:
student1 .num即第一个学生的学号。
student2. sex即第二个学生的性别。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:删除s所指字符串中所有的小写字母c。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件modi1.c中。
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
void fun(char *s)
{ int i,j;
for(i=j=0; s[i]!=’\\\\0’; i++)
if(s[i]!=’c’)
/************found************/
\\t s[j]=s[i];
/************found************/
s[i]=0;
}
void main( )
{ char s[80];
printf(\\
(1)s[j++]=s[i];
(2)s[j]=0;
解析:字符串及其下标。
由循环条件if(s[i]!=’c’)可知,如果字符串中的字符不是’c’,则将保留该字符到s[j]位置,然后下标j进行加1操作。循环结束后要在新串的结尾加上结束标识符’\\\\0’,因为’\\\\0’的ASCII码值为0,所以赋值0是对的,需要修改的地方是下标,末尾元素也就是下标为j的数组元素需要赋值0,所以第二处错误是修改下标为j。
程序设计题
3.使VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:将字符串中的前导*号全部移到字符串的尾部。
例如,字符串中的内容为: “*******A*BC*DEF*G****”,移动后,字符串中的内容应当是: “A*BC*DEF*********”。在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序在文件prog1.c中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun(char *a)
{
}
void main( )
{ char s[81]; int n=0; void NONO ( );
printf(\\
void fun(char*a)
{
int i=0.n=0;
char *p
p=a;
while(*p==’*’)/*判断*p是否是*号,并统计*号的个数*/
{
n++;p++;
}
while(*p) /*将前导*号后的字符传递给a*/
}
a[i]=*p;i++:p++;
}
while(n!=0)
{
a[i]=’*’;i++;n–;
}
a[i]=’\\\\0’; }
解析:移动字符串中指定字符的位置,一般采用while循环语句,通过指针型变量来完成。
函数fun的功能:将字符串中的前导*号全部移到字符串的尾部。本题解题思路:
(1)定义一个指针并指向字符串的首地址;
(2)利用循环语向找出字符串的前导*号的个数n;
(3)利用循环语句把剩余的字符拷贝到另一个字符串中;
(4)在字符串的末尾接上n个*号。
本文档预览:3600字符,共2453字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载