C.i>nD.i<=n
(3)A.item=flag/denominator
B.item=1/denominator
C.item=flag*1.0/denominator
D.item=1.0/denominator
(4)A.flag=-1B.flag=0
C.flag=-flagD.flag=flag
试题2(每小题3分,共12分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序说明】验证哥德巴赫猜想:
任何一个大于6的偶数均可表示为两个素数之和。
例如6=3+3,8=3+5,…,18=7+11。
将6~20之间的偶数表示成两个素数之和,打印时一行打印5组。
要求定义和调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。
素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
运行示例:
6=3+38=3+510=3+712=5+714=3+11
16=3+1318=5+1320=3+17
【程序】
#include
#include
intprime(intm)
{inti,n;
if(m==1)return0;/*注意:
返回0表示不是素数*/
n=sqrt(m);
for(i=2;i<=n;i++)
if(m%i==0)return0;
(5)}
main()
{intcount,i,number;
count=0;
for(number=6;number<=20;number=number+2){
for(i=3;i<=number/2;i=i+2)
if((6)){
printf("%d=%d+%d",number,i,number-i);
count++;
if((7))printf("\n");
(8)}
}}
在本题中,函数prime(i)用来判断是不是素数。
返回0,不是素数,返回1,是素数。
【供选择的答案】
(5)A.;B.return1;
C.return0;D.elsereturn1;
(6)A.prime(i)!
=0||prime(number-i)!
=0
B.prime(i)!
=0&&prime(number-i)!
=0/*表示两个都是素数*/
C.prime(i)==0||prime(number-i)==0
D.prime(i)==0&&prime(number-i)==0
(7)A.count%5==0B.count%5!
=0
C.(count+1)%5==0D.(count+1)%5!
=0
5个就换行。
(8)A.break;B.elsebreak;
C.continue;D.;
退出内层循环。
试题3(每小题3分,共12分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序说明】
输入一行字符,统计并输出其中数字字符、英文字母和其它字符的个数。
要求定义并调用函数count(s,digit,letter,other)分类统计字符串s中数字字符、英文字母和其它字符的个数,函数形参s的类型是字符指针,形参digit,letter,other的类型是整型指针,函数类型是void。
运行示例:
Entercharacters:
f(x,y)=5x+2y-6
Digit=3letter=5other=6
【程序】
#include
voidcount(char*s,int*digit,int*letter,int*other)
{(9)
while((10)){
if(*s>='0'&&*s<='9')
(*digit)++;/*等于digit++*/
elseif((*s>='a'&&*s<='z')||(*s>='A'&&*s<='Z'))
(*letter)++;/*等于letter++*/
else
(*other)++;/*等于other++*/
s++;}}
main()
{inti=0,digit,letter,other;
charch,str[80];
printf("Entercharacters:
");
ch=getchar();
while((11)){
str[i]=ch;
i++;
ch=getchar();
}
str[i]='\0';
(12);
printf("Digit=%dletter=%dother=%d\n",digit,letter,other);
}
本题的思想很简单,只不过使用了指针而已。
(9)A.intdigit=0,letter=0,other=0;
B.int*digit=0,*letter=0,*other=0;
C.digit=letter=other=0;
D.*digit=*letter=*other=0;
内容赋值为0.不是指针赋值为0.
(10)A.*s++!
='\0'B.*s++!
='\n'
C.*s!
='\0'D.*s!
='\n'
只能在A和C中选择。
但因为A在结束循环后还要移动指针S,此时已经指向了\0,再移动指针会出错,所以选择C。
(11)A.ch!
='\0'B.ch!
='\n'
C.ch=='\0'D.ch=='\n'
(12)A.count(str,&digit,&letter,&other)
B.count(&str,&digit,&letter,&other)
C.count(*str,digit,letter,other)
D.count(*str,*digit,*letter,*other)
传地址,注意str就是字符串的首地址。
由此判断其他几个选项都是错误的。
试题4(每小题3分,共12分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序】
程序1
#include
main()
{intflag=0,i;
inta[7]={8,9,7,9,8,9,7};
for(i=0;i<7;i++)
if(a[i]==7){
flag=i;
break;
}
printf("%d\n",flag);
flag=-1;
for(i=6;i>=0;i--)
if(a[i]==8){
break;/*注意1,跳出循环,下一句没有执行,所以flag还是-1*/
flag=i;
}
printf("%d\n",flag);
flag=0;
for(i=0;i<7;i++)
if(a[i]==9){
printf("%d",i);
}
printf("\n");
flag=0;
for(i=0;i<7;i++)
if(a[i]==7)flag=i;
printf("%d\n",flag);
}
(13)程序运行时,第1行输出(13)。
A.2B.0
C.3D.6
因为第2个元素等于7,所以flag=i=2
(14)程序运行时,第2行输出(14)。
A.4B.-1
C.0D.5
看注意1
(15)程序运行时,第3行输出(15)。
A.246B.4
C.135D.6
a[1]=9,a[3]=9.a[5]=9,所以答案是C。
(16)程序运行时,第4行输出(16)。
A.246B.2
C.135D.6
最后一个7是第7个元素,即a[6]=7,此时i=6,所以:
flag=i=6.
试题5(每小题3分,共12分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序】
intf1(intn)
{if(n==1)return1;
elsereturnf1(n-1)+n;}
intf2(intn)
{switch(n){
case1:
case2:
return1;
default:
returnf2(n-1)+f2(n-2);}}
voidf3(intn)
{printf("%d",n%10);
if(n/10!
=0)f3(n/10);}
voidf4(intn)
{if(n/10!
=0)f4(n/10);
printf("%d",n%10);}
#include
main()
{printf("%d\n",f1(4));
printf("%d\n",f2(4));
f3(123);
printf("\n");
f4(123);
printf("\n");
}
(17)程序运行时,第1行输出(17)。
A.10B.24
C.6D.1
f1(4)=4+f1(3)=4+(3+f1
(2))=4+(3+(2+f1
(1)))=4+3+2+1=10
(18)程序运行时,第2行输出(18)。
A.1B.3
C.2D.4
f2(4)=f2
(2)+f2(3)=1+(f2
(1)+f2
(2))=1+1+1=3
(19)程序运行时,第3行输出(19)。
A.123B.3
C.321D.1
第1次输出3,(123%10=3)
第2次输出2,(12%10=2)
第3次输出2,(1%10=1)
(20)程序运行时,第4行输出(20)。
A.1B.123
C.3D.321
试题6(每小题3分,共12分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序】
#include
structnum{inta,b;};
voidf(structnums[],intn)
{intindex,j,k;
structnumtemp;
for(k=0;kindex=k;
for(j=k+1;jif(s[j].b
temp=s[index];
s[index]=s[k];
s[k]=temp;}}
main()
{intcount,i,k,m,n,no;
structnums[100],*p;
scanf("%d%d%d",&n,&m,&k);
for(i=0;is[i].a=i+1;
s[i].b=0;}
p=s;
count=no=0;
while(noif(p->b==0)count++;
if(count==m){
no++;
p->b=no;
count=0;}
p++;
if(p==s+n)
p=s;}
f(s,n);
printf("%d:
%d\n",s[k-1].b,s[k-1].a);
}
(21)程序运行时,输入543,输出(21)。
A.3:
5B.2:
3
C.1:
2D.4:
1
(22)程序运行时,输入534,输出(22)。
A.3:
5B.1:
2
C.4:
3D.4:
2
(23)程序运行时,输入752,输出(23)。
A.1:
5B.6:
1
C.2:
3D.2:
4
(24)程序运行时,输入424#,输出(24)。
A.3:
3B.4:
2
C.2:
4D.4:
1
一、
通过分析以下一段程序,
for(i=0;is[i].a=i+1;
s[i].b=0;}
我们知道:
结构体s的最初情况是:
S[0].a=1,s[0].b=0
S[1].a=2,s[1].b=0
S[2].a=3,s[2].b=0
S[3].a=4,s[4].b=0
S[4].a=5,s[0].b=0
二、通过分析以下一段程序,
voidf(structnums[],intn)
{intindex,j,k;
structnumtemp;
for(k=0;kindex=k;
for(j=k+1;jif(s[j].b
temp=s[index];
s[index]=s[k];
s[k]=temp;}}
我们知道,函数f是按照s[j].b的大小排序,小的在前、大的在后。
注意,排序时s[j].a也相应改变。
三、分析以下程序:
count=no=0;/*赋初值,为0*/
while(noif(p->b==0)count++;/*2*/
if(count==m){/*3*/
no++;/*4*/
p->b=no;/*5*/
count=0;}/*6*/
p++;/*7,指针向后移动一次*/
if(p==s+n)/*8这两句的意思是,如果指到头,再返回起点*/
p=s;}
当循环进行了4次时,语句3的条件得到满足,所以语句4得到执行,no=1
此时,指针指向s[3].b,所以s[3].b=1;
注意,此后语句7继续执行,但语句8的条件不满足,所以继续,但因为语句6已经执行,所以count=0
然后,语句2再执行一次,语句8条件满足,又指向s[0].
这样,当下次语句3的条件满足时,no=2,而指针指向s[2],所以,s[2].b=2
依次类推,我们得到结构体s的最后结果:
S[0].a=1,s[0].b=5
S[1].a=2,s[1].b=4
S[2].a=3,s[2].b=2
S[3].a=4,s[4].b=1
S[4].a=5,s[5].b=3
特别应该注意的是,这里m的次数是4,而n=5,所以不匹配。
四,调用函数f对以上结构体排序后,结果如下:
S[0].a=4,s[0].b=1(注意是原来的s[4].b,所以S[0].a=4)
S[1].a=3,s[1].b=2
S[2].a=5,s[2].b=3
S[3].a=2,s[4].b=4
S[4].a=1,s[0].b=5
五.
S[k-1].b=s[3-1].b=s[2].b=3
S[k-1].a=s[3-1].a=s[2].a=5
所以,(21)题的答案是A.
其余各题类似。
试题7(28分)
(1)定义函数fact(n)计算n的阶乘:
n!
=1*2*……*n,函数形参n的类型是int,函数类型是double。
(2)定义函数cal(x,e)计算下列算式的值,直到最后一项的值小于e,函数形参x和e的类型都是double,函数类型是double。
要求调用自定义函数fact(n)计算n的阶乘,调用库函数pow(x,n)计算x的n次幂。
(3)定义函数main(),输入两个浮点数x和e,计算并输出下列算式的值,直到最后一项的值小于精度e。
要求调用自定义函数cal(x,e)计算下列算式的值。
#include
doublefact(intn)
{
intk;
doubleresult=1;
for(k=1;k<=n;k++)
result*=k;
returnresult;
}
doublepow(doublex,intn)
{
intk;
doubleresult=1;
for(k=1;k<=n;k++)
result*=x;
returnresult;
}
doublecal(doublex,doublee)
{
doubles=0.0;
doublet=1;
intk;
for(k=1;t>=e;k++)
{t=pow(x,k)/fact(k);
s=s+t;
}
returns;
}
voidmain()
{
intt=1;
doubles=0.0;
doublex,e;
scanf("%lf,%lf",&x,&e);
printf("s=%lf\n",cal(x,e));
}