一、选择题1. 以下叙述正确的是(A)。
A.C语言允许直接访问物理地址,可以直接对硬件进行操作
B.C语言程序不必编译,即可在计算机上运行
C.C语言不允许直接访问物理地址,不可直接对硬件进行操作
D.C语言程序只需编译,不需要连接即可在计算机上运行
2. 在一个C程序中(B)。
A.main函数出现在所有函数之前。C程序不必都有main函数
B.main函数可以在任何地方出现。一个C程序必须有且仅有一个main函数
C.main函数必须出现在所有函数之后。一个C程序只能有一个main函数
D.main函数出现在固定位置。一个C程序可以有多个main函数
3. 下列叙述正确的是(B)。
A.C语言中既有逻辑类型也有构造类型数据
B.C语言中没有逻辑类型,但有构造类型
C.C语言中有逻辑类型,但没有构造类型
E.C语言中既没有逻辑类型也没有构造类型
4. 下列关于C语言用户标识符的叙述中正确的是(B)。
A.用户标识符中可以出现下划线和中划线(减号)
B.用户标识符中不可以出现中划线,但可以出现下划线
C.用户标识符中可以出现下划线,但不可以放在标识符开头
D.用户标识符中可以出现下划线和数字,他们都可以放在标识符开头
5. 下列转义字符中,错误的是(A)。
A.‘\\0xa5’ B. ‘\031’ C. ‘\\b’ D. ‘ \” ’
6. 字符串 “\\\\\\\\1234\\\\\\\\\\n” 在内存中占用的字节数是(C)。
A.14 B. 9 C. 10 D. 11
7. 已知梯形的上底为a, 下底为b,高为h,用C语言写的正确的面积公式是(B)。
A. 1/2*(a+b)*h B. 2*(a+b)*h
C. (a+b)h D. 2*a+b*h
8. 与k=n++完全等价的表达式是(D)。
A. n=n+1, k=n B. k+=n+1 C. K=++n D. k=n, n=n+1
9. 已定义char s1, s2;, 下面正确的语句是(C)。
A. scanf(“%s%c”, s1,s2); B. scanf(“%s%c”, s1, &s2);
C. scanf(“%c%c”, &s1,&s2); D. scanf(“%c%c”, s1,s2);
10. 为下面的程序输入数据,使得i=10, k=’a’, j=15, 正确的键盘输入方法是(D)。
A. 10,a,15<回车> B. 10<回车>a<回车>15<回车>
C. 10’a’15<回车> D. 10a15<回车>
11. 已知float x=, y=;, 根据下面的输出结果,正确的程序段是(B)。
x=,y=
y+x=,y-x=
A.printf(“x=%8.2f,y=%8.2f”,x,y); printf("y+x=%4.2f,y-x=%4.2f\\n",y+x,y-x);
B.printf(“x=%8.6f,y=%8.6f\\n”,x,y); printf("y+x=%4.2f,y-x=%4.2f\\n",y+x,y-x);
C.printf(“x=%7.2f,y=%7.2f\\n”,x,y); printf("y+x=%3.2f,y-x=%3.2f\\n",y+x,y-x);
D.printf(“x=%f,y=%f”,x,y); printf("y+x=%f,y-x=%f\\n",y+x,y-x);
12. 下列表达式中,值为0的表达式是(D)。
A. 3!=0 B. 3!=3>4 C. 3>4==0 D. 6>5>4
13. 下列表达式中,结果为1的表达式是(A)。
A. !0==1 B. !6 C. !2>=3 D. !3!=0
14. 设int a=3; 则表达式a<1&&--a>1的运算结果和a的值分别是(B)。
A. 0和2 B. 0和3 C. 1和2 D. 1和3
15. 下面程序的运行结果是(B)。
main(){ int x=3;
do{printf("%3d",x-=2); } while(!(--x));
}
A. 死循环 B. 1 -2 C. 10 D. 1
16. 下面程序的运行结果是(D)。
main(){int i,j,k,sum;
for(i=2;i<7;i++)
{sum=1;
for(j=i;j<7;j++) sum=sum+j;
}
printf(“%d”,sum);
}
A. 48 B. 49 C. 1 D. 7
17. 不能把字符串“Hello!”赋给数组a的语句是(B)。
A.char a[10]={‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘!’};
B.char a[10]; a=“Hello!”;
C.char a[10]; strcpy(a, “Hello!”);
D.char a[10]= “Hello!”;
二、完善程序或写出程序运行结果
1. 根据以下给定公式计算e的值(取前n项)
455de94780ea3f052285a988765e7ea7.png
main(){ double sum=, x=, y=; int n;
scanf("%d &n );
while(n){
y=x*y;
sum=sum+ y ;
x++; --n;
}
printf("sum=%f", sum);
}
2. 用10元人民币兑换角币(1角、2角、5角),有多少种换法
main(){ int i, j, k, m=0;
for(i=0; i<= 20 ; i++)
for(j=0; j<=(100- 5*i )/2; j++)
for(k=0; k<=100-5*i-2*j; k++)
if(i*5+j*2+k==100) m++;
printf(”m=%d ”,m);
}
3. 1988年世界人口数为50亿,按年增长率11‰计算,哪一年开始世界人口数突破100亿
main(){ int year=1988;
float r=, no=5E9, n;
n=no;
do{n= n * (1+r);
year++;} while ( n <2*no);
printf(“year=%d\\npupulation=%f ”, year, n);
}
4. 下面程序的功能是求矩阵B(不包括外围元素)的元素之积。
main(){ int i, j, f=1;
int b[][4]={1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7};
for(i=0; i<4; i++){
for(j=0; j<4; j++) printf(“%4d”, b[i][j]);
printf(“\\n”);
}
for(i=1; i<3 ; i++)
for(j=1; j<3; j++) f=f* b[i][j] ;
printf(“f=%d\\n”, f);
}
5. 以下程序的输出结果是 #& 。
main(){ int a=2, b=7, c=5;
switch(a>0){
case 1: switch(b<0)
{ case 1: printf(“@”); break;
case 2: printf(“!”); break;
}
case 0: switch(c==5)
{ case 0: printf(“*”); break;
case 1: printf(“#”); break;
default: printf(“#”); break;
}
default: printf(“&”);
} printf(“\\n”);
}
6. 以下程序的输出结果是 12 。
main(){ int a[10],i,k=0;
for(i=0; i<10; i++) a[i]=i;
for(i=1; i<4; i++)
k+=a[i]+i;
printf(“%d\\n”, k);
}
三、计算表达式的值
若有变量定义char a=’a’; int i=3, j=5, b; float x=;
double y=, z; 计算下面表达式的值。
1. a+i-j+x/y: 2. (x+y)+i++:
3. y+=i-=j*=++x: 4. b=a+=j%i: 99
5. a=a+i, a+j: 105 6. a=(a+i, a+j) : 102
7. y=(x=2, x+1, x+2) : 8. i-=j*=x+y: -34
9. (i++)*(--j) : 12 10. z=(i++)*(j++):
11. (int)x/(int)y+y: 12. (float)i/(++j) :
13. –j%i+j: 3 14. (int)y%i%(int)(x+y) : 2
四、编程
下面是一个5阶螺旋方阵,试编程打印出此形式的n(n<10)阶的方阵(顺时针方向旋进)
| 1 | 2 | 3 | 4 | 5 |
| 16 | 17 | 18 | 19 | 6 |
| 15 | 24 | 25 | 20 | 7 |
| 14 | 23 | 22 | 21 | 8 |
| 13 | 12 | 11 | 10 | 9 |