C语言复习题
一、 选择题:下列各题A)、B)、C)、D)四个选项中只有一个是正确的,请将正确的选项涂写在答案纸上。答在试卷上不得分。
(1)C语言规定:在一个源程序中,main函数的位置 。
A)必须在最后 B)必须在系统调用的库函数的后面。
C)必须在最开始。。 D)可以任意
(2) C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 。
A)必须为字母或下划线。 。 B)必须为下划线。
C)必须为字母 D)可以是字母、数字和下划线中的任一种字符。
(3)下面四个选项中,均是正确的八进制数或十六进制数的选项是 。
A)-10 0x8f -011 B) 010 -0x11 0xf1
C) 0abc -017 0xc D) 0a12 -0x123 -0xa
(4) C语言中int型数据在内存中占两个字节,则unsegned int取值范围是 。
A)0 ~ 65535 B)0 ~ 32767
C)-32767 ~ 32768 D)-32768 ~ 327687
(5) 若有定义:int a = 7; floa x = 2.5 , y = 4.7 ;
则表达式 x + a % 3 * (int) (x + y) % 2/4 的值是 。
A) 2.750000 B) 0.00000 C) 3.500000 D) 2.500000
(6)已知ch是字符型变量,下面不正确的赋值语句是 。
A)ch = 5 + 9 ; B) ch= ' a + b '; C) ch = ' \ 0 '; D) ch= '7' + '6' ;
(7) 设x , y和z是int型变量,且x = 3, y = 4 , z = 5 则下面表达式中值为0的
是 。
A)!((x < y )&&!z || 1) B) ' x ' && ' y ' C) x || y+z && y - z D)x <= y
(8)设有程序段
int k = 10 ;
while ( k = 0 ) k = k - 1 ;
以下描述正确的是 。
A) 循环体语句一次也不执行。 B) 循环是无限循环。
C) while 循环语句执行十次。 D) 循环体语句执行一次。
(9) 以下C程序正确的运行结果是 。
main ( )
{long y = 23456;
printf ( " y = % 3x \ n ", y);
printf ( " y = % 8x \ n ", y);
printf ( " y = % # 8x \ n ", y);
}
A) y = 5ba0 B)y = 5ba0 C ) y = 5ba0 D)y = 5ba0
y = 5ba0 y = 5ba0 y = bba0 y = 5ba0
y = 0x5ba0 y = 0x5ba0 y = 0x5ba0 y = ####5ba0
(10) 当a = 1 , b = 3 , c =5 d=4时,则执行完下面一段程序后,x的值是 。
if ( a < b )
if ( c < d ) x = 1;
else
if ( a < c )
if ( b < d ) x = 2 ;
else x = 3 ;
else x = 6 ;
else x = 7 ;
A)1 B) 3 C) 2 D) 6
(11) 下面程序的运行结果是 。
# include " stdio.h "
main ( )
{ int a = 1 , b = 10
do
{ b - = a ; a + + ; }
while ( b - - < 0 ) ;
printf ( " a = % d , b = % d \ n ), a , b );
A)a = 3 , b = 11 B)a = 4 , b = 9
C)a = 1 , b = -1 D)a = 2 , b = 8
(12)以下for 循环的执行次数是 。
for ( x = 0, y = 0; (y = 123 ) && ( x<4 ); x + + );
A) 无限次。 B)4次。 C)0次 。 D)3次。
(13) 以下是死循环的程序段的是 。
A) for ( i = 1 ; ; ) B) i = 32767
{ if ( + + i % 2 = = 0 ) continue ; do { if ( i < 0 ) break ; } while ( + + i )
if ( + + i % 3 = = 0 ) break ; }
C) for ( i = 1 ; ; ) D) i = 1
if ( + + i < 10) continue ; while ( i - - ) ;
(14) 若有说明:int a[10] ; 则对a 数组元素的正确引用是 。
A) a [10 ] B)a[10 - 10] C)a ( 5 ) D)a[3.5]
(15) 根据定义和数据的输入方式,输入语句的正确形式为 。
已有定义:float f1,f2; 数据输入方式:4.25
3.5
A)scanf ("%f%f ",&f1,&f2); B) scanf ("%f ,%f ",&f1,&f2);
C) scanf ("%3.2f %2.1f ",&f1,&f2); D) scanf ("%2.1f %3.2f ",&f1,&f2);
(16) 已知ch是字符型变量,下面正确的赋值语句是 。
A)ch = '123' ; B) ch=' \08 '; C) ch =' \xff '; D) ch =" \ ";
(17)以下if语句语法正确的是 。
A) if (x>0) B) if (x>0) printf ( "%f ",-x )
{ x=x+y; printf ("%f ", x);} else printf ("%f",-x);
else printf ("%f ", -x);
C) if (x>0) D) if(x>0)
{x=x+y ; printf ("%f ", x);}; {x=x+y ; peintf ("%f", x)}
else printf ("%f", -x) ; else printf ("%f", -x);
(18) 若 W=1, X=2, Y=3, Z=4 则条件式:
W < X? W : Y < Z ? Y : Z 的值是 。
A)1 B)3 C)4 D)2
(19) 以下程序段 。
x = -1;
do {x = x*x ; }
while (! x);
A) 是死循环 B)循环执行一次
C)循环执行二次 D)有语法错误
(20) 逻辑运算符两侧运算对象的数据类型 。
A)只能是0或1 B) 可以是任何类型的数据
C) 只能是整型或字符型数据 D)只能是0或非0正数
(21)下面程序中有错误的行是 。(前面数字表示行号)
1、 main ( ) 5、scanf ( "% d ",& a ) ;
2、 { 6、for ( i =1 ; i < 3; i + + ) a[0] = a[0] + a[i],
3、 int a[3 ] = {1}; 7、printf ( " a[0] = % d \ n ", a[0] );
4、 int i ; 8、}
A) 3 B) 6 C) 5 D) 7
(22)下面的程序段 。
for ( t = 1 ; t < = 100, t + + )
{scanf ("%d", &x);
if ( x <0 ) continue;
printf ("%3d", t );
}
A) 当x < 0 时整个循环结束 B)当 x >= 0时什么也不输出
C) printf 函数永远也不执行 D)最多允许输出100个非负整数
(23)以下对一维整型数组a的正确说明是 。
A)int a (10) B) int n = 10; a[n ];
C) int n; D) # define SIZE 10
scanf ("%d", &n); int a [SIZE];
int a [n];
(24) 下面程序的运行结果是 。
a=1; b=2; c=2;
while (a<b<c) {t = a ; a = b ; b = t ; c - - ;}
printf ("%d , %d, %d", a, b, c);
A) 1, 2, 0 B) 2, 1, 0 C) 1, 2, 1 D) 2, 1, 1
(25) 若有说明:int a[3][4]; 则对数组元素的非法引用是 。
A)a[0][2*1] B) a[0][4] C) a[4-2][0] D) a[1][3]
(26) 对以下说明的正确理解是 。
int a[10] = {6, 7, 8, 9, 10}
A) 将5个初值依此赋给a [1] 至a[5] B)将5个初值依此赋给a [0] 至a [4]
C)将5个初值依此赋给a [6] 至a[10] D) 因长度与初值个数不同,故语句错误
(27) 若二维数组a有m列,则在a[ i ][ j ] 前的元素个数为
A) i * m + j B)j * m + i C) i*m + j -1 D)i * m + j + 1
(28) 以下程序段运行的结果是 。
char c[5] ={ ' a ', ' b ', ' \ 0 ', ' c ', ' \ 0 ' };
printf ( " % s ", c );
A)' a ' ' b ' B) ab c C) abc D) ab
(29) 以下正确的函数定义形式是 。
A) double fun ( int x , int y ) B) double fun ( int x ; int y )
C) double fun ( int x , int y ) ; D) double fun ( int x , int y );
(30) 以下不正确的说法是 。
A) 实参可以是常量、变量或表达式。 B)形参应与其对应的实参类型一致。
C)实参可以为任意类型。 D)形参可以是常量、变量或表达式。
(31) 有两个字符数组 a, b,则以下正确的输入格式是 。
A) scanf ("% s % s", &a, &b ) B) gets (a, b)
C) scanf ("% s % s", a, b ) D) gets ("a"); gets ("b")
(32) 以下程序正确的运行结果是 。
main ( )
{int a = 2 , i ;
for ( i = 0 ; i < 3 ; i + + ) printf ( " % 4 d " , f(a) ) ;
}
f( int a)
{ int b = 0 ; static int c = 3 ;
b + + ; c + + ;
return ( a + b + c ) ; }
A) 7 7 7 B) 7 10 13 C) 7 8 9 D) 7 9 11
(33) # define 能做简单的替代,用宏替代计算多项式4*x*x + 3*x + 2 之值的函数f, 正确的宏定义是 。
A) # define f(x) 4*x*x + 3*x + 2 B) # define f 4*x*x + 3*x + 2
C) # define f(a) (4*a*a + 3*a + 2) D) # define (4*a*a + 3*a + 2) f(a)
(34) 当运行以下程序时,从键盘输入:ab <CR>
c <CR>
def <CR>
(<CR>表示回车)则下面程序的运行结果是 。
# include "stdio.h"
# define N 6
main ( )
{char c (N);
int i= 0;
for ( ;i < N; c[i] = getchar ( ),i++);
for (i = 0; i < N; i++) putchar(c[i]);
}
A) abcdef B) a C) b D) ab
b c c
c d d
d
e
f
(35) 请读程序:
# define AD(x) x + x
main ( )
{int m = 1, n = 2 , k = 3 ;
int sum = AD( m + n )*k ;
printf ( " sum = % d ", sum ); }
上面程序的运行结果是 。
A) sum = 9 B) sum = 10 C) sum = 12 D) sum = 18
(36) 对下面程序段正确的判断是:___________
# define A 3
# define B(a) (( A + 1 )*a )
M
x = 3*( A + B( 7 ) ) ;
A) 程序错误,不许嵌套宏定义 。 B) x = 21
C) x = 93 D) 程序错误,宏定义不许有参数。
(37) 执行以下程序后,a , b的值为
main ( )
{int a , b , k = 4, m = 6, *p1 = &k , *p2 = &m;
a = p1 = = &m;
b = ( -*p1) / (*p2) + 7;
printf (" a = % d\n ", a );
printf (" b = % d\n ", b );}
A) -1 B) 0 C) 1 D) 4
5 7 6 10
(38) 以下程序中调用 scanf 函数给变量 a输入数值的方法是错误的,因为 。
main ( )
{int *p , *q , a , b ;
p = &a ;
printf ( " input a : " );
scanf ( " %d ", *p) ;
… }
A)*p 表示的是变量 a 的值,而不是变量a 的地址。
B)*p 表示的是指针变量 p 的地址。
C)*p 表示的是指针变量 p 的值。
D)*p 只能用来说明p是一个指针变量。
(39) 以下程序的运行结果是 。
# define MIN (x, y) (x) < (y) ? (x) : (y)
main ( )
{int i = 10, j = 15, k;
k = 10 * MIN (i, j);
printf ( " % d \ n ", k );
}
A) 15 B) 10 C) 100 D) 150
(40) 以下正确的函数形式是
B) double fun (int x, int y) B) fun ( int x, y)
{ z = x +y; return z ;} { int z; return z; }
C) fun (x, y) D) double fun (int x, int y)
{int x, y; double z;} { double z ; z = x + y; return z;}
(41) 以下不正确的说法是 。
A) 在不同函数中可以使用相同名字的变量。
B) 形式参数是局部变量。
C) 在函数内的复合语句中定义的变量在本函数范围内有效。
D) 在函数内定义的变量只在本函数范围内有效。
(42 ) C语言提供的预处理功能包括条件编译,其基本形式为:
# X X X 标识符
程序段 1
# else
程序段 2
# endif
这里X X X 可以是 。
A) define 或 include. B) ifdef 或ifndef 或 if
C) ifdef 或 ifndef 或 define D) ifdef 或include
(43)以下程序的正确运行结果是 。
# include "stdio.h"
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 = 0 , i = 2;
i+ = m+1;
m = i + a +b; return (m) ; }
A) 8, 16 B) 8, 17 C) 8, 20 D) 8, 8
(44) 已有定义 int k = 2; int *p1, *p2, 且p1和p2均已指向变量k,下面不能正确执行的赋值语句是 。
A) k = *p1 + *p2 ; B) p1 = p2;
C) p2 = k ; D) k = *p1*(*p2) ;
(45) 若有说明int *p, m = 5, n; 以下正确的程序段是 。
A) p = &n; B) p = &n;
Scanf (" % d ", &p); Scanf (" % d ", *p);
C) Scanf (" % d ", &n) D) p = &n;
*p = n; *p = m;
(46) 以下scanf函数调用语句中, 对结构体成员的不正确引用为 。
struct pupil
{char name[20] ;
int age ;
int sex ;
} pup[5] , *p ;
p = pup ;
A) scanf ( " % s " , pup[0] . name); B) scanf ( " % d " , &pup[0] . age);
C) scanf ( " % d " , p ->sex); D) scanf ( " % d &quo