(26)以下程序的输出结果是________。
main()
{ int k=4,m=1,p;
p=func(k,m);printf("%d,",p);
p=func(k,m);printf("%d\n",p);
}
func(int a,int b)
{ static int m:O,i=2;
i+=m+l;m=i+a+b;
return(m);
}
A)8,17 B)8,16 C)8,20 D)8.8
答案:A
评析:k和m的值带入函数func中,第一次调用完func()后,其中m和i的值要保留,并在第二次调用时使用,这是因为两者都是局部静态变量。所以最后的结果是8和17。
(27)以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空:
#include
findmax(int*s,int t,int*k)
{ int p;
for(p=0,*k=p;p
if(s[p]>s[*k])___________;
}
main()
{ int a[10],i,k;
for(i=0;i<10;i++)scanf("%d",&a[I]);
findmax(a,lO,&k);
printf("%d,%d\n",k,a[k]);
}
A)k=p B)*k=p-s C)k=p-s D)*k=p
答案:D
评析:k是一个指针,它的值是一个地址,要通过它为主函数的变量改变数据,必须使用*p,这样就可以把一个下标数赋给p指针指向的那个内存单元,所以横线处应填入*k=p。
(28)在执行以下程序时,为了使输出结果为t=4,给a和b输入的值应该满足的条件是_________。
main()
{
int s,t,a,b;
scanf("%d%d",&a,&b);
s=l;t=I;
if(a>O)s=s+1;
if(a>b)t=s+t;
else if(a==b)t=5;
else t=20s:
printf("t=%d\n",t);
}
A)a>b B)a
a>b
答案:C
评析:要使输出结果为t=4,必须要执行else t=2*s;和if(a>b)t=s+t;语句。如果执行if(a>b)t=s+t;语句,则条件为a>b,要求s=3,在该语句前面的语句中没有条件可以满足s=3;如果执行else t=2*s;语句,则条件为a
O)s=s+l;语句,所以应满足条件0
(29)以下函数调用语句中含有_________个实参。
func((expl,exp2),(exp3,exp4,exp5));
A)l B)2 C)4 D)5
答案:B
评析:实参可以是常量、变量或表达式,(expl,exp2)是逗号表达式,它的值是exp2的值;(exp3,exp4,exp5)是逗号表达式,它的值是exp5的值。所以该函数调用语句含有的实参个数是2,即:(expl,exp2)和(exp3,exp4,exp5)。
(30)执行以下程序后,输出的结果是__________。
main()
{
int y=10;
do{y--;}while(--y);
printf("%d\n",y--);
}
A)一l B)l C)8 D)0
答案:D
评析:do-while语句的特点是先执行循环体,然后判断循环条件是否成立,当循环条件的值为0时循环结束。当y=O时循环结束,printf("%d\n",y--);语句是先输出y再自减,所以输出结果为0。
(31)在C语言中,要求运算数必须是整型的运算符是__________。
A)% B)/ C)< D)!
答案:A
评析:题目的四个选项中,(B)(c)(D)都不要求运算数必须为整数,参与模运算(%)的运算数必须是整型数据。
(32)c语言提供的合法的数据类型关键字是__________。
A)DoubIe B)noat C)integer D)Char
答案:B
评析:选项A和D中第一个字母大写,不正确;
选项c是PASCAL中的整型关键字,不是c语言中的关键字。
(33)设有以下定义:
int a[3][3]={1,2,3,4,5,6,7,8,9};
int(*ptr)[3]=a,*p=a[0];
则下列能够正确表示数组元素a[1][2]的表达式是___________。
A)*((*ptr+1)[2]) B)*(*(p+5))
C)(*ptr+1)+2 D)*(*(a+1)+2)
答案:D
评析:+(p+5)所指向的数组元素是a[1][2],所以B不对;ptr所指向的是一个含有三个元素的一维数组,所以A和C是错误的。
(34)若有以下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则值为6的表达式是__________。
A)*p+6 B)*(p+6) C)*p+=5 D)p+5
答案:C
评析:选项A,*p+6,其值等于1+6=7;选项B,*(p+6),其值等于a[6]=7;选项c,*p+=5,其值等于*p=*p+5=l+5=6;选项D,p+5是个地址值。
(35)下列程序的输出结果是__________。
fun()
{
static int x=5:
if(x++>5)printtf("%dft,x);
else printf("%d.',)汁+);
}
mainO
{
fun();fun();
}
A)67 B)69 C)68 D)78
答案:C
评析:模块的代码开始运行后,使用static语句声明的变量会一直保持其值,直至该模块复位或重新启动。在第1次调用fun函数时,x的初值为5,if语句的条件不成立,执行else printf("%d"x++);语句,输出6,执行后x的值变为7,由于x是静态局部变量,在函数调用结束后,它并不释放,仍保留x=7。在第2次调用fun函数时,if语句的条件成立,执行print掣%∽x);语句,输出8。
(36)下面程序的输出是__________。
main()
{
int m=Oxa,n=2;
m+=n:
printf(""%x\n"",m);
}
A)C B)c C)99 D)2
答案:A
评析:格式控制符x表示数据按十六进制形式输出(不输出前导符0x)。本题在执行语句m十一n:后,m的值变为字母c,又因为在输出a-f时,如果格式控制符用x,则以大写字母输出;如果用x,则以小写字母输出,故本题答案为A。