2009年4月全国计算机等级二级C笔试考前练习习题(29)计算机二级考试
文章作者 100test 发表时间 2009:04:10 01:29:28
来源 100Test.Com百考试题网
2009年4月,全国计算机等级二级C考试你准备好了没?考计算机等级二级C语言考试的朋友可以多关注一下百考试题为大家整理的2009年4月,全国计算机等级二级C语言考前练习!希望对大家的备考有好的帮助!百考试题祝各位考个好成绩!大家每天都来练习哦!不断的加强巩固!每天都有更新哦!
(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
评析:函数中的变量i和j分别存放两个形参的最小数和最大数,在语句i=a和i=b执行之前,要将a和b分别变为最小数和最大数,当a>.b时,程序使用中间变量将两者交换,所以题中第一个空中应当填写"b=m";为求两个整数的最大公约数,程序的where循环条件必须为j整除i成立,所以题_中第二个空中应当填写"j%i";程序要通过i的值返回最大公约数,因此在循环中要将每次整除的公约数赋给i,以保证最后返回的是两个整数的最大公约数,所以第三个空中应当填写"n"。