(1)下面的if语句与y=(x>=10)?3*x-11:(x<1)?x:2'x.1;的功能相同,请补充完整。
If( 【1】 )
if( 【2】 )y=2*x-1;
else y=x;
else y=3*x-11:
答案:【1】x<10
【2】x>=1
评析:条件表达式的一般形式为:表达式l?表达式2:表达式3
条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值;若表达式1的值为O(假),则求解表达式3,表达式3的值就是整个条件表达式的值。y。(x>。10)?3。x-1 1:(x>=1)?x:2*x-1;的功能是先求(x>=1)?x:2*x-1:的值,所的的结果再与前面的语句构成条件表达式进行求值。所以【1】应该填x<10,【2】应该填x>=1。
(2)以下程序中用户由键盘输入一个文件名,然后输入一串字符(用拌结束输入)存放到此
文件中,形成文本文件,并将字符的个数写到文件的尾部。请填空。
#include
main()
{ FILE *fp;
char ch,fname[32];im count=0;
printf("Input the filename:");
scanf("%s",fname);
if((币=fopen( 【3】 ,"w+"))==NULL)
{ print印Can't open file:%s\n",fname};exit(0);}
printf("Enter data:in");
while((ch=getchar())!_1≠)')
{ fputc(ch,fp);count++;}
fprintf( 【4】 ,"\n%d\n",count);
fclose(fp);
}
答案:【3】fname
【4】fp
评析:fopen()函数实现打开文件的功能,通常的调用方式为:FILE*fp;fp=fopen(文件名,使用文件方式),因此,第一个横线处要求填写要打开文件的名字fname。fprintf()函数的一般调用方式为:fprintf (文件指针,格式字符串,输出表列),所以第二个横线处应填写fb。
(3)函数void fun(noat*sn,int n)的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请补全程序。
S=I-1/3+1/5-1/7+...+1/(2n+1)
void fun(float*sn,int n)
{ float s=O.O,w,f=-1.0;
int i=0:
for(I=0;i<=n;i++)
{ f= 【5】 *f;
w=f/(2*i+1);
S+=W:
}
【6】 =s;
}
答案:【5】-1或-1.0
【6】*sn
评析:由于在对s求和时,相诹较畹姆鸥蘸孟喾矗诤齠un中没有对数据进行取反的操作,故第一空的目的是对数据进行取反,以保证序列中相邻两项的符号不同。故第一个应填-1或-1.0。在执行完循环体后,要将求和结果通过指针参数的形式传递给调用fun的函数,故第二空应填*sn。
(4)下面的函数strcat(strl,str2)实现将字符串str2拼接到字符串strl后面的功能。请填空使之完整。
Char*strcat(strl,str2)
char*strl.*str2;
{ char*t=strl;
while( 【7】 )strl++;
while( 【8】 );
return(t);}
答案:【7】*strl或*str1!='\0'或*str1!=0或*strl!=NULL
【8】*strl++=*str2++或*strl++=*str2,*str2++
评析:函数strcat(strl,str2)实现将字符串str2连接到字符串strl后面,所以首先要找到字符串strl的串尾,根据c语言的语法规定,一个串的串尾一定是一个隐含字符"\0",而在程序中,对字符串中字符的访问是通过两/卜指针变量来完成的,因此要找到字符串strl的串尾,要判断*strl是否为"\0",要找到字符串str2的串尾,要判断*str2是否为"\0",程序中必须可以使字符串中字符逐一顺序体现,所以在题中我们应填写"*str1"和"*strl++=*str2++"。
(5)以下函数fun用于求两个整数a和b的最大公约数。
fun(a'b)
int a'b;
{int I,J,m,n;
if(a>b)
{m=a;a=b; 【9】 ;}
i=a.j=b;
while((n= 【10】 )!=O)
{j=i;i= 【11】 ;}
retum(i);
}
答案:【9】b=m
【10】j%i
【11】n