国家二级C语言机试(操作题)模拟试卷671
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,通过定义学生结构体数组,存储若干名学生的学号、姓名和三门课的成绩。函数fun的功能是:将存放学生数据的结构体数组,按姓名的字典序(从小到大)排序。
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#inclucle<stdio.h>
#include<string.h>
struct student{
longsno;
char flame[10];
float score[3];
};
void fun(struct student a[],int n)
{
/*********found*********/
【1】t;
int i,j;
/*********found*********/
for(i=0;i<【2】;i++)
for(j=i+1;j<n;j++)
/*********found*********/
if(strcrnp(【3】)>0)
{t=a[i];a[i]=a[j];
a[j]=t;
}
}
main()
{struct student s[4]={{10001,\\
(1)struct student
(2)n-1
(3)a[i].name,a[i].name
解析:填空1:变量t是中间变量,用来存放结构体数组中的元素,因此应定义为结构体类型。
填空2:for循环语句用来遍历结构体数组,n是数组的长度,因此循环变量的取值范围是0~n-1。
填空3:字符串比较函数strcmp的一般格式为“strcmp(字符串1,字符串2)”。
功能:按照ASCII码顺序比较两个字符数组中的字符串,并由函数返回值返回比较结果。
字符串1=字符串2,返回值=0;
字符串1>字符串2,返回值>0;
字符串1<字符串2,返回值<0。
程序修改题
2.使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun和funx的功能是:用二分法求方程23-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。
例如,若给m输入-100,给n输入90,则函数求得的一个根为2.000。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<math.h>
double funx(double x)
{
return(2*x*x*x-4*x*x+3*x-6);
}
double fun(double m,double n)
{
/*********found*********/
int r;
r=(m+n)/2;
/*********found*********/
while(fabs(n-m)<0.001)
{
if(funx(r)*funx(n)<0)
m=r;
elSe
n=r;
r=(m+n)/2;
}
return r;
}
main()
{
double m,n,root;
printf(\\
(1)double r;
(2)while(fabs(n-m)>0.001)
解析:(1)程序中会发现r=(m+n)/2,而m和n都是double型的,并且根据题意可知,变量r需要定义为double型。
(2)绝对误差不超过0.001,所以循环条件应为fabs(n-m)>0.001。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串中尾部的木号不多于n个,若多于n个,则删除多余的*号;若少于或等于n个,则不做任何操作,字符串中间和前面的*号不删除。
例如,字符串中的内容为“****A*BC*DEF*G*******”,若n的值为4,删除后,字符串中的内容应为“****A*BC*DEF*G****”;若n的值为7,则字符串中的内容扔为“****A*BC*DEF*G*******”。n的值在主函数中输入。编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<stdio.h>
void fun(char*a,int n)
{
}
main()
{char s[81];int n;
printf(\\
void fun(char*a,int n)
{
int i=0,k=0;
char*p,*t;
p=t=a;
/*将指针移动到字符串末尾*/
while(*t)
t++;
t–;
/*从后往前如果是‘*’则使k++,找到最后一个*所在的位置,并记录‘*’的个数*/
while(*t==’*’)
/*指针t指向前一个,同时标量k增加一*/
{k++,t–;}
/*如果最后*的个数大于允许的个数*/
if(k>n)
/*循环次数不大于前面的字符与最大允许*的个数之和*/
{while(*p&&p<t+n
解析:字符串中尾部*号不能多于n个,多余的要删除。首先需要通过while循环统计字符串尾部*号,然后通过if条件语句完成尾部木号数和n的比较,若尾部木号数多于n个,则需要把n个*号和其余字符重新保留。
本文档预览:3600字符,共3279字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载