9.以下程序段的输出结果是____【11】____
main
{
int a=2,b=3,c=4;
a*=16+(b++)-(++c);
printf(″%d″,a);
}
【参考答案】
【11】 28
10.设i,j,k均为int型变量,则执行完下面的for语句后,k的值为____【12】____。
for(i=0,j=10;i<=j;i++,j--)k=i+j;
【参考答案】
【12】 10
11.以下程序的输出结果是____【13】____。
void fun()
{
static int a=0;
a+=2;printf(″%d″,a);
}
main()
{
int cc;
for(cc=1;cc<4;cc++)fun();
printf(″\n″);
}
【参考答案】
【13】246
12.用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。
st=(char*)____【14】____。
【参考答案】www.Examw.CoM
【14】 malloc(11)或malloc(sizeof(char)*11)
13.以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。
FILE *myf;long f1;
myf=____【15】____(″test.t″,″rb″);
fseek(myf,0,SEEK_END);f1=ftell(myf);
fclose(myf);
printf(″%d\n″,f1);
【参考答案】
【15】 fopen
14.以下程序的输出结果是____【16】____。
main()
{ 〖ZK(〗int a=0;
a+=(a=8);
printf(″%d\n″,a);〖ZK)〗
}
【参考答案】
【16】 16
15.函数fun的功能是根据以下公式求p的值,结果由函数值返回。m与n为两个正数且要求m>n。
P=〖SX(〗m!〖〗n!(m-n)!〖SX)〗
例如: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++)____【17】____;
for(i=1;i<=n;i++)____【18】____;
for(i=1;i<=m-n;i++)p=p/i;
return p;
}
main()
{ clrscr();
printf(″p=%f\n″,fun(12,8));
}
【参考答案】
【17】 p=p*i 【18】 p=p/i
16.下列程序的功能是求出ss所指字符串中指定字符的个数,并返回此值。
例如,若输入字符串123412132,输入字符1,则输出3,请填空。
#include
#include
#define M 81
int fun(char * ss,char c)
{ int i=0;
for(____【19】____;ss++)
if(*ss==c)i++;
return i;
}
main()
{ char a[M],ch;
clrscr();
printf(″\nPlease enter a string: ″);gets(a);
printf(″\nPlease enter a char: ″);ch=getchar();
printf(″\nThe number of the char is:%d\n″,fun(a,ch));
}
【参考答案】
【19】 *ss!=′\0
17.设有如下宏定义
#define MYSWAP(z,x,y)
{z=x;x=y;y=z;}
以下程序段通过宏调用实现变量a,b内容交换,请填空。
float a=5,b=16,c;
MYSWAP(____【20】____,a,b);
【参考答案】
【20】 c
上机部分
一、填空题
给定程序中,函数fun的功能是:将形参n中各位上为偶数的数取出,按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。
例如,从主函数输入一个整数27638496,函数返回值为26846。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include
unsigned long fun(unsigned long n)
{
unsigned long x=0,s,i;
int t;
s=n;
i= 1 ;
while( 2 )
{
t=s;
if(t%2==0)
{
x=x+t*i; i= ( 3 ) ;
}
s=s/10;
}
return x;
}
main()
{
unsigned long n=-1;
while(n>99999999||n<0)
{
printf("input(0 } printf("\nThe result is: %ld\n",fun(n)); } 【参考答案】 (1)1或1L (2)s>0或s!=0或s (3)i*10 【解析】 (1)从x=x+t*i;语句,可以看到i是将t放到正确数位上的幂指数,相当于t*10n,空1给i赋初值,连乘的初值为1,因此应填入:1或1L。(2)空2是考查对循环条件表达式的判断,由于是取s每一位上的数给t,判断是否为偶数,同时s除10,显然s的值越来越小,当s不为零时,继续循环,因此应填入:s>0或s!=0或s。(3)空3是对i进行操作,由于随着循环的进行,所取出的数t的幂指数越来越大,每次增大10,因此应填入:i*10。 给定程序中,函数fun的功能是:根据整型形参m,计算如下公式的值: y=1+1/(2*2)+1/(3*3)+1/(4*4)+…+1/(m*m) 例如:若m中的值为5,则应输出1.463611。 请改正程序中的错误,使其能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include double fun(int m) { double y=1.0; int i; for(i=2;i y+=1/(i*i); return(y); } main() { int n=5; printf("\nThe result is %lf\n", fun(n)); } 【参考答案】 (1)将for(i=2;i (2)将y+=1/(i*i); 改为:y +=1.0/(i*i); 【解析】 (1)第1处错误for循环的终止条件是i 三、编程题 函数fun的功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。 例如,若s所指字符串中的内容为“ABCDEFG 123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后,t所指的数组中的内容应是“246”。 注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 #include void fun(char *s, char t[]) { }考试用书 main() { char s[100],t[100]; printf("\nPlease enter string S:"); scanf("%s", s); fun(s,t); printf("\nThe result is: %s\n",t); } 【参考答案】 #include #include void fun(char *s,char t[]) { int k,n=0; for(k=0;k if(k%2==0 && s[k]%2==0) t[n++]=s[k]; t[n]= '\0'; } main() { char s[100],t[100]; printf("\nPlease enter string S:"); scanf("%s", s); fun(s,t); printf("\nThe result is: %s\n",t); } 【解析】 (1)本题主要考查对奇偶数的判断以及库函数strlen的使用。根据题意可知,只保留下标为偶数、同时ASCII值也为偶数的字符,这就需要用循环变量k将字符串查看一遍,逐个字符判断是否满足条件k%2== 0 && s[k]%2==0,并将满足条件的字符复制到t中,再设一个计数器变量n,统计复制到t的字符数。复制完毕,在串尾设字符串结束符'\0'。{ (2)按上述解析写出的函数是: void fun(char *s,char t[]) { int k,n=0; for(k=0;k if(k%2==0 && s[k]%2==0) t[n++]=s[k]; t[n]= '\0'; }
二、改错题
#include