计算机等级考试二级C语言考前密卷一10
(11) 用高级语言编写的程序称为【11】程序,它可以通过解释程序翻译一句执行一句的方式执行,也可以通过编译程序一次翻译产生目标程序,然后执行。
解析: 用高级语言编写的程序称为源程序,源程序不能在计算机上直接运行,运行源程序有两种方式:一种是通过解释程序,对源程序逐句解释执行;另一种是先让编译程序将源程序一次翻译产生目标程序(目标程序是计算机可直接执行的机器语言程序,它是一种二进制代码程序),然后执行目标程序。
(12) 以下程序的输出结果是【12】。
以下是引用片段: main() {int a=0; a+=(a=8); printf("%d ",a);} |
解析: 赋值表达式的值就是所赋值变量的值,本题中a+=8相当于a=a+8,对表达式逐步进行求解:
a+=(a=8)此时,a的值由于赋值为8,而不是0
a+=8
a=a+8
a=16
(13)函数 void fun(float *sn, int n)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。
以下是引用片段: void fun( float *sn, int n) { float s=0.0, w, f=-1.0; int i=0; for(i=0; i<=n; i++) { f=【13】* f; w=f/(2*i+1); s+=w; } 【14】=s;} |
解析: C语言中实参变量和形参变量的数据传递是单向的“值传递”方式。指针变量作函数也要遵循这一规则。调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。
(14)函数fun的功能是:根据以下公式求p的值,结果由函数值返回。m与n为两个正数且要求m>n。
例如:m=12,n=8时,运行结果应该是495.000000。请在题目的空白处填写适当的程序语句,将该程序补充完整。
以下是引用片段: #include #include float fun (int m, int n) { int i; double p=1.0; for(i=1;i<=m;i++)【15】; for(i=1;i<=n;i++)【16】; for(i=1;i<=m-n;i++)p=p/i; return p;} main () { clrscr(); printf ("p=%f ",fun (12,8));} |
解析:本题中,欲求p的值,需要先求m,n,m-n的阶乘值,可用循环语句实现。
(15)该程序运行的结果是【17】。
以下是引用片段: #include #include #define M 100 void fun(int m, int *a, int *n) { int i,j=0; for(i=1;i<=m;i++) if(i%7==0||i%11==0) a[j++]=i; *n=j;} main() { int aa[M],n,k; clrscr(); fun(10,aa,&n); for(k=0;k if((k+1)%20==0)printf(" "); else printf("%4d",aa[k]); printf(" ");} |
解析: 解答本题的关键是要读懂程序,试题要找出能被7或11整除的所有整数,注意数学中的“或”和C语言中的“或”的区别,但在此处,if条件语句中用了“||”运算符,若要找能同时被7和11整除的所有整数则在if()中应用“&&”运算符。
当然,如果m的值输入50,即表达式fun(10,aa,&n);为fun(50,aa,&n);时输入结果为:7 11 14 21 22 28 33 35 42 44 49。
(16)下列程序的功能是:求出ss所指字符串中指定字符的个数,并返回此值。
例如,若输入字符串123412132,输入字符1,则输出3,请填空。
以下是引用片段: #include #include #define M 81 int fun(char *ss, char c) { int i=0; for(; 【18】;ss++) if(*ss==c)i++; return i;} main() { char a[M], ch; clrscr(); printf(" Please enter a string: "); gets(a); printf(" Please enter a char: "); ch=getchar(); printf(" The number of the char is: %d ", fun(a,ch));} |
解析: 从字符串ss中找出子字符串的方法是:从第1个字符开始,对字符串进行遍历;若ss串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串的结尾,则跳出循环;若ss串的字符和c串的字符对应不同,继续对ss串的下一个字符进行处理。本程序是采用逐一比较的方式找出出现的次数。循环的作用是在串中从左到右逐一走动,if()的作用是进行判断是否相同,若与c相同则表示又出现一次。
(17)下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中,请填空。
以下是引用片段: #include "stdio.h" FILE *fp; { char ch; if((fp=fopen(【19】))==NULL)exit(0); while((ch=getchar( ))!=’@’)fputc (ch,fp); fclose(fp);} 解析: fopen函数的调用方式通常为: FILE *fp fp=fopen(文件名,使用文件方式); (18)设有如下宏定义 #define MYSWAP(z,x,y) {z=x;x=y;y=z;} 以下程序段通过宏调用实现变量a,b内容交换,请填空。 float a=5,b=16,c; MYSWAP(【20】,a,b); |