桂 林 电 子 科 技 大 学 试 卷
2010-2011 学年第 1 学期 课号101794,101798,101800,101801,101802,101803,101804
课程名称 C语言程序设计(A 卷,闭卷) 适用班级(或年级、专业) 2010级
考试时间 120 分钟 班级 学号 姓名 题 号 满 分 得 分 评卷人 一 30 二 20 三 30 四 20 五 六 七 八 九 十 成绩 100
一. 选择题(每题2分,共30分)
1.设x=3,y=2,则表达式x*=y+8的值为__ C ___。(原式:x=x*(y+8)) A. 3 B. 2 C. 30 D. 10 2.C语言中逻辑值“真”用 D 表示。 A. true B.大于0的数 C.非0整数 D.非0的数
3. 有输入语句:scanf(“a=%d, b=%d, c=%d”, &a, &b, &c); 为使变量a的值为1,b为3,c为
2,从键盘输入数据的正确形式应当是 D 。 A. 132<回车> B. 1, 3, 2<回车>
C. a=1 b=3 c=2<回车> D. a=1, b=3, c=2<回车>
4. 若二维数组a有m列,则在a[ i ][ j ]之前的元素个数为 B 。 A. j*m+i B. i*m+j C. i*m+j-1 D. i*m+j+1
5. 判断char型变量ch是否为大写字母的正确表达式是 C 。 A. 'A'<=ch<='Z' B. (ch>='A')&(ch<='Z') C. (ch>='A')&&(ch<='Z') D. ('A'<=ch)AND('Z'>=ch)
6. 为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与___ B 配对。
A. 缩排位置相同的if B. 其之前最近的if
C. 其之后最近的if D. 同一行上的if (参见课本62页) 7. 结构化程序设计使用的基本程序控制结构为____ C ____。
A. 模块结构、选择结构和递归结构 B. 条件结构、顺序结构和过程结构 C. 顺序结构、选择结构和循环结构 D. 转移结构、嵌套结构和递归结构 8. 下面关于for循环的而正确描述是 D 。 A. for循环只能用于循环次数已经确定的情况
(其实可以把次数设为很大,在过程中设置条件,再用break退出循环) B. for循环式先执行循环体语句,后判定表达式(先判断,后执行) C. 在for循环中,不能用break跳出循环体(可以用)
D. 在for循环体语句中,可以包含多条语句,但要用花括号括起来 9. 以下描述正确的是 D 。
A. goto语句只能用于用于退出多层循环(可以跳转到很多地方)
B. switch语句中不能出现continue语句(当switch嵌套在for循环中时) C. 只能用continue语句来终止本次循环(可以用goto语句)
D. 在循环中break语句不能独立出现(要与条件连用吧!不然循环得了吗?) 10. 对字符数组str赋初值,str不能作为字符串使用的一个是 D 。 A. char str[]=”shanghai”; B. char str[]={“shanghai”}; C. char str[9]={?s?,?h?,?a?,?n?,?g?,?h?,?a?,?i?}; D. char str[8]={?s?,?h?,?a?,?n?,?g?,?h?,?a?,?i?}; (字符串要有空字符‘\\0’,但是数组没有给空字符储存空间)
11. 若使用一维数组名作函数实参,则以下说法正确的是 C 。 A. 必须在主调函数中说明此数组的大小
(C语言不检查形参数组大小,只是传递数组名的地址) B. 实参数组类型与形参数组类型可以不匹配(类型要一致) C. 在被调函数中,不需要考虑形参数组的大小 D. 实参数组名与形参数组名必须一致 12. 以下不正确的说法为 D 。 A. 在不同的函数中可以使用相同名字的变量 B. 形式参数是局部变量
C. 在函数内定义的变量只在本函数范围内有效
D. 在函数的复合语句中定义的变量在本函数范围内有效 (在复合语句中,定义在{}中的变量不能再该函数{}外使用) 13. 变量的指针,其含义是指该变量的 B 。 A. 值 B. 地址 C. 名 D. 一个标志
14. 若有说明:int *p, m=5, n; 以下正确的程序段是 D 。 A. p=&n; scanf(“%d”,&p);(可改为p=&n; scanf(“%d”,p);) B. p=&n; scanf(“%d”,*p);(可改为p=&n; scanf(“%d”,p);) C. scanf(“%d”,&p); *p=n; D. p=&n;*p=m
15. 以下程序的输出结果是 A 。
A) 3 B) 4 C) 0 D) 1 void main ( )
{ int x = 1 , y = - 1 , z = 3 ; if ( x < y )
if ( y < 0 ) z = 0 ; else z = z + 1 ;
printf ( \}
(如第6题一样,if的嵌套)
二. 填空题(每空2分,共20分)
1. C程序由 一个或多个源程序文件 构成。一个C源程序必须包含一个 main函数。 2. C语言规定变量名的第一个字符必须是 字母 或 下划线 。 3. 字符串由 ?\\0? 表示结束。
4. 已知说明:int a[5]={1,2,3,4,5}; 则a[3]的值为 4 。 5. 设x为int,写出“x是奇数”的表达式 X%2!=0 。 6. 变量的存储类别有4种,分别是auto(自动的), register(寄存器的) ,static(静态的)和 extern(外部的) ;
7. 共用体变量所占的内存长度等于 最长的成员的长度 的长度。
三. 程序阅读题(共30分,1、2小题各5分,3、4小题各10分) 1. 写出以下程序的输出结果。 #include “ stdio.h ” int sub( int * s ) {
static int t=0 ; t = *s + t ; return t; }
void main( ) {
int i , k; for ( i=0 ; i<4 ; i++ ) { k=sub( &i ) ; printf( “=”, k ); } printf( “\\n” ); }
输出结果:~~0~~1~~3~~6 (~表示空格)
2. 写出以下程序的输出结果。
struct s { int a; float b; char * c; }; void main( ) {
struct s x={ 19 , 83.5 , “zhang” } ; struct s * px=&x;
printf( “%d %.1f %s \\n”, x.a , x.b , x.c );
printf( “%d %.1f %s \\n”, px->a , (*px).b , px->c ); printf( “%d %s \\n”, *px->c-1 , &px->c[1] ); }
输出结果: 19~83.5~zhang 19~83.5~zhang 121~hang
3. 以下程序的功能是将一个二维数组a的行和列转置,存到另外一个二维数组b中。 #include
int a[2][3]={{1,2,3}, {4,5,6}}; int b[3][2], i, j; printf(“array a:\\n”);
for(i=0; i< 2 ; i++)
{
for(j=0; j<3; j++)
{ printf(“]”, a[i][j]);
b[ j ][ i ]=a[i][j]; }
printf(“\\n”); }
printf(“array b:\\n”); for(i=0; i<3; i++) {
for(j=0; j<2; j++)
printf(“%5 d ”, b[i][j]); printf(“\\n”); } }
4. 以下程序的功能是将磁盘文件file1.dat的信息复制到新文件file2.dat中 #include
FILE *in, *out;
char ch, infile[20]={”file1.dat”}, outfile[20]={”file2.dat”}; if( (in= fopen (infile, “r”))==NULL ) {
printf(“无法打开此文件\\n”); exit(0); }
if( (out=fopen(outfile, “w” ))==NULL ) {
printf(“无法打开此文件\\n”);