}
void main()
{ f(\ }
4.阅读下面程序,写出运行结果。 #include
void main()
{ int m=18,s=0; do {
switch(m%7) {
case 2 : m/=2;s+=2; break; case 3 : m/=3;s+=3; break; case 5 : m/=5;s+=5; break; default : m--; s--; };
printf(\ } while(m); }
5.阅读下面程序,写出运行结果。 #include
{ void div(int*,int*);
int a[5]={-5,0,60,45,34},i=0,j=2; while(a[i]<=0) i++;
while(a[i]!=1) div(a+i,&j); }
void div(int *n,int *k) { if(*n%*k==0) {
printf(\ *n/=*k; }
else (*k)++; }
6.阅读下面程序,写出运行结果。 #include
{ int s[8],i; char ch='B'-1; /* 字符A的ASCII码为65 */ printf(\ for(i=7;i>=0;i--) { s[i]=ch&1; ch=ch>>1; }
for(i=0;i<8;i++) printf(\ printf(\ }
25
四、程序设计题 (每题10分,共20分)
1.编制程序,输入n个整数(n从键盘输入,n>0),输出它们的偶数和。
2.编制函数,将m行n列数组a每行所有元素都除以该行上绝对值最大的那个元素的绝对值,要求所编写的函数原型为“void f(float **a,int m,int n)”或“void f(float *a[],int m,int n)”。
26
综合自测题2
一、单项选择题(每题2分,共20分) 1.下列运算符中自右向左结合的是:
A) * B) = = C) -> D) ++ 2.下列赋值语句中正确的是:
int a[3] = { 1, 2, 3 }, *p;
A) p=&a; B) *p=a; C) *(a+1)=a; D) p=a+1; 3.如下程序段:
int c[]={1, 2, 3}; int *k; k=c;
printf(\ 其输出应为:
A) 1 B) 2 C) 3 D) 以上均不对
4.执行 i=0; if(i>2) if ( i<3 ) i=1; else i=2; i=3; 后i的值应为: A) 1 B) 2 C) 3 D) 语句错误 5.对于以下结构定义: struct { nt len; char *str; } *p;
++p->str中的++加在
A) 指针str上 B) 指针p上 C) str所指的内容上 D) 以上均不是6.下列程序段的输出结果是:
char *c[3]={“FIRST”, “SECOND”, “THIRD”}; printf(“%s”, c+1);
A) SECOND B) E C) ECOND D) 语法有错 7.对于以下递归函数f, 调用f(4),其返回值为: int f(int n)
{ if (n <= 0) return 1; return f(n-1)+(n++); }
A) 10 B) 11 C) 15 D) 以上均不是 8.循环 for(i=1,j=6; ++i!=--j; ) s=i+j; 将执行 A) 2次 B) 3次 C) 4次 D) 以上均不是 9.下列语句执行后n的值为:
n=(4 > 4 - !2) && (2 > 1) || (2 & 6); A) 0 B) 1 C) 6 D) 以上均不对 10.执行完下列语句段后, i值为: int i;
int f(int n)
{ static int m = 1; n+=m++; return n; }
n=f(1); n=f(2);
27
3 B) 4 C) 5 D) 以上均不是 二、填充题(每空2分,共30分)
1.运行下列程序段后,n的值是:_________ int n; n = 7 & 3; switch (n) {
case 1: n=1; break; case 2: n=2; break; case 3: n=3; break; default: n=4; break;
}
2.下列程序段的输出结果是:_______________ int i=010, j=10;
printf(\3.如下函数
void f(char *s, char *t) { int i; i=0;
while (s[i]=t[i]) i++; }
等价于:
void f(char *s, char *t) { while (_______ = *t++); }
4.下列程序段的输出结果是:_______________ int a=0,b=0;
if(++a>0 && ++b>0) ++a;
printf(\
5.下列程序段执行后,i 和j的值分别是 ________________ int i=6, j=0;
while(i--, i!=1){j += --i;};
6.下列程序段执行后,x 和y的值分别是 ________________ int x=5,y=1;
do {(x>y) ? (x-=1,y+=3) : (x+=4,y-=2); }while (x+y<15);
7.用下列for循环将小写字母逆序输出(即从z到a), 其语句应为: for (i=0; i<26; i++) ________ 8.设有变量定义
int i, j, k=2, *ip;
则执行下列语句后,i和k的值分别为 ________________ ip= &k; i=(*ip)++; j=++(*ip);
9.下列程序段执行后,i = __________ int i;
i=3 ^ 5 + 011 & 0x1a;
28
10.下列程序段执行后,i = __________ #define M(x,y) x+y #define N(x,y) x-y int i;
i=M(1,2+3)*3/N(4+2,2); 11.下列函数strcmp(s1, s2)是字符串比较, 根据s1,s2大小分别返回负数(s1
{ for(; *s1!=_______; ++s1, ++s2) if (*s1!= *s2) break; return (_______); }
12.下列程序段的输出结果是:_______________ union ll { struct { int x;
int y; } in; int a;
int b; } e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b;
printf(\
现有链表,如下图所示,把p0结点插入指针p所指结点的后面,请写出必要的两个语句(次序不能颠倒): (1)________________________; (2)________________________; struct list { int i;
struct list *next; };
struct list *head,*p0, *p;
三、程序分析题 (共30分) 1. (8分)
#include
main() { int x,y,z, result; char op1, op2;
scanf(“%d%c%d%c%d”, &x, &op1, &y, &op2, &z); if (op1= =?+? && op2 = =?*?)
result = cal(x, cal(y,z,op2), op1);
29