国家二级C语言机试(操作题)模拟试卷550
程序填空题
1.给定程序中,函数fun的功能是:
根据形参i的值返回某个函数的值。当调用正确时,程序输出:
x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000。
注意:部分源程序在文件BT,ANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
double f1(double x)
{retuEn x*x;)
double f2(double x,double y)
{return x*y;)
/*********found*********/
【1】[11 fun(int i,double x,double y)
{if(i==1)
/*********found*********/
return 【2】(x);
else
/*********found*********/
return 【3】(x,y);
}
main()
{double x1=5,x2=3,r;
r=fun(1,x1,x2);
r+=fun(2,x1,x2);
printf(\\
(1)double
(2)f1
(3)12
解析:填空1:本空函数fun的返回值,根据return可知,不论返回的是n还是f2,它们的返回值均为double型的,故此空应该填写double。
填空2:因为函数fun的功能是根据形参i的值返回某个函数的值,当i等于1时,应该返回的是f1。
填空3:如果不满足if的话,应该返回的是f2。
程序修改题
2.下列给定程序中,函数fun的功能是:比较两个字符串,将长的字符串的首地址作为函数值返回。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件NODll.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<conio.h>
#include<stdio.h>
/*********found*********/
double fun(char*s,char*t)
{
int s1=0,t1=0;
char*ss,* tt;
ss=s;
tt=t;
while(*ss)
{
s1++;
/*********found*********/
(*ss)++;
}
while(*tt)
{
t1++;
/*********found*********/
(*tt)++;
}
if(t1>s1)
Eeturn t;
else
return s;
}
void main()
{
char a[80],b[80];
printf(\\
(1)char*fun(char*s,char*t)
(2)ss++;
(3)tt++;
解析:(1)在主函数的输出语句中,函数fun是以字符串格式输出的,所以定义函数时应为
char*fun(char*s,char*t)。
(2)和(3)这里是地址加1,而不是内容加1,所以改为ss++和tt++。
程序设计题
3.请编写函数fun,其功能是:移动字符串中的内容,移动的规则是把第1~m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的内容为\\
void fun(char*w,int m)
{
int i,j;
char t;
for(i=1;i<=m;i++)/*进行m次的循环左移*/
{t=w[0];
for(j=1;w[j]! =’\0’;j++)
/*从第2个字符开始以后的每个字符都依次前移一个字符*/
w[j一1]=w[j];
w[j一1]=t;/*将第1个字符放到最后一个字符中*/
}
}
解析:本题应采用“循环左移”的算法,多层循环用于控制移动的字符的个数,即需进行多少次循环,内嵌循环的作用是将从第2个字符以后的每个字符依次前移一个位置,最后将第1个字符放到最后一个字符中。
本文档预览:3600字符,共2500字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载