一、选择题:下列各题A)、B)、C)、D)四个选项中只有一个是正确的,请将正确的选项涂写在答案纸上。答在试卷上不得分(每题2分,共50分)。 (1)C语言规定:在一个源程序中,main函数的位置 。 A)必须在最后
B)必须在系统调用的库函数的后面。 C)必须在最开始 D)可以任意
(2)下面四个选项中,均是正确的八进制数或十六进制数的选项是 。
A)-10 0x8f -011 B) 010 -0x11 0xf1 C) 0abc -017 0xc D) 0a12 -0x123 -0xa
(3) C语言中int型数据在内存中占两个字节,则unsigned int取值范围是 。
A)0 ~ 65535 B)0 ~ 32767
C)-32767 ~ 32768 D)-32768 ~ 327687
(4) 若有定义: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
(5) 设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
(6) 下面程序的运行结果是 。 # include \" stdio.h \" main ( )
{ int a = 1 , b = 10;
do
{ b - = a ; a + + ; } while ( b - - < 0 ) ;
printf ( \" a = % d , b = % d \\ n \
A)a = 3 , b = 11 B)a = 4 , b = 9 C)a = 1 , b = -1 D)a = 2 , b = 8
(7) 以下是死循环的程序段的是 。 A) for ( i = 1 ; ; ) { if ( + + i % 2 = = 0 ) continue ;
if ( + + i % 3 = = 0 ) break ; } B) i = 32767;
do { if ( i < 0 ) break ; } while ( + + i );
C) for ( i = 1 ; ; ) D) i = 1
if ( + + i < 10) continue ; while ( i - - ) ;
(8) 以下程序段 。
x = -1;
do {x = x*x ; } while (! x);
A) 是死循环 B)循环执行一次 C)循环执行二次 D)有语法错误
(9)以下对一维整型数组a的正确说明是 。 A)int a (10) B) int n = 10; a[n ]; C) int n; D) # define SIZE 10 scanf (\"%d\ int a [SIZE]; int a [n];
(10) 若有说明:int a[3][4]; 则对数组元素的非法引用是 。
A) a[0][2*1] B) a[0][4] C) a[4-2][0] D) a[1][3]
(11) 若二维数组a有m列,则在a[ i ][ j ] 前的元素个数为 A) i * m + j B) j * m + i
C) i*m + j -1 D) i * m + j + 1
(12) 以下正确的函数定义形式是 。 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 );
(13) 请读程序:
# define AD(x) x + x main ( )
{int m = 1, n = 2 , k = 3 ; int sum = AD( m + n )*k ; printf ( \" sum = % d \上面程序的运行结果是 。 A) sum = 9 B) sum = 10 C) sum = 12 D) sum = 18
(14) 对下面程序段正确的判断是:___________ # define A 3
# define B(a) (( A + 1 )*a )
x = 3*( A + B( 7 ) ) ;
A) 程序错误,不许嵌套宏定义 B) x = 21
C) x = 93
D) 程序错误,宏定义不许有参数。
(15) 执行以下程序后,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 \ printf (\" b = % d\\n \
A) -1 B) 0 C) 1 D) 4
5 7 6 10
(16) 以下程序的运行结果是 。 # define MIN (x, y) (x) < (y) ? (x) : (y) main ( )
{int i = 10, j = 15, k; k = 10 * MIN (i, j); printf ( \" % d \\ n \ }
A) 15 B) 10 C) 100 D) 150
(17) 以下不正确的说法是 。
A) 在不同函数中可以使用相同名字的变量。 B) 形式参数是局部变量。
C) 在函数内的复合语句中定义的变量在本函数范围内有效。
D) 在函数内定义的变量只在本函数范围内有效。
(18)以下程序的正确运行结果是 。 # include \"stdio.h\" main ( )
{int k = 4, m = 1, p ;
p = func ( k, m); printf (\"% d ,\ p = func ( k, m); printf (\"% d\\n\ } 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
(19) 若有定义: int a[3][4]; 则对a数组的第i行第j列(假设i, j已正确说明并赋值)元素值的正确引用为 。 A) * ( * ( a + i) + j) B) ( a + j) [ j ]
C) * ( a + i + j) D) *(a +i ) +j
(20) 若有定义: int a[2][3] 则对 a 数值的第i 行,第 j 列元素地址的正确引用为 。
A) *( a[ i ] + j ) B) a[ i ] + j
C) *( a + j ) D) (a + i )
(21) 以下程序的运行结果是 。
# include \" stdio.h \" main ( )
{union { long a ; int b ; char c ; } m ;
printf ( \" %d \\ n \
A) 4 B) 2 C) 6 D) 8
(22) 已知学生记录描述为
struct student { int no;
char name [20]; char sex; struct
{ int year; int month;
int day; } birth; } s;
设变量s中的“生日”应是“1984年6月6日”,下列对“生日”的正确赋值方式是 。
A) year = 1984; B) birth. year = 1984; month = 6; birth. month = 6; day = 6; birth. day = 6;
C) s. year = 1984; D) s. birth. year = 1984;
s. month = 6; s. birth. month = 6; s. day = 6 ; s. birth. day = 6 ;
(23) 设有以下语句:
char x = 3 , y = 6 , z ; z = x ^ y < < 2 ;
则z 的二进制值是 .
A) 00010100 B) 00011000
C) 00011100 D) 00011011
(24) 若有函数 max (a, b), 并且已使函数指针变量p指向函数max, 当调用该函数时,正确的调用方法是 。 A) (*p) max (a, b); B) *p max (a, b);
C) *p (a, b) D) (*p) (a, b)
(25) 若有以下程序段
int x = 1, y = 2; x = x ^ y ; y = y ^ x ; x = x ^ y;
则执行以上语句后x和y的值分别是 。 A) x = 1 B) x = 2 C) x = 2 D) x = 1 y = 2 y = 2 y = 1 y = 1
二、填空与程序完成题:请在[ ]处添上正确答案。(20分,每空2分)
(1).下面程序以每行4个数据的形式输出 a数组.
# define N 20 main ( ) { int a[N], i;
for ( i = 0; i < N; i + +) scanf (\" % d \ [1] ); for ( i = 0; i < N; i + +) { if ( [2] ) [ 3] printf ( \" % 3d \
}
printf ( \" \\ n \" ); }
(2). 若有定义:int a[2][3] = {2, 4, 6, 8, 10, 12}; 则 *{& a[0][0] + 2*2+ 1} 的值是 [4] , *( a[1] + 2)的值是 [5] 。
(3). 以下是输入三个整数,然后按由小到大的顺序输出的程序,将该程序填充完整.
main()
{ int n1,n2,n3;
int *p1,*p2,*p3, [6] ; printf(“input n1,n2,n3:”);
scanf(“%d,%d,%d”,&n1,&n2,&n3); p1=&n1;p2=&n2;p3=&n3; if(n1>n2) {p=p1;p1=p2;p2=p;} if(n1>n3) {p=p1;p1=p3;p3=p;} if(n2>n3){p=p2;p2=p3;p3=p;}
printf(“the order is:%d,%d,%d”, [7] ); }
(4).下面程序是将字符串b复制到字符串a # include \" stdio. h \" S ( char *s, char *t ) { int i = 0 ;
while ( [8] ) {[9] } } main ( )
{char a[20], b[10]; scanf ( \"% S\ S( [10] ); puts (a); }
三、编程题。(30分,每小题15分)
1.从键盘输入10个整数,按从小到大的顺序排列并输出。
2. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153135333。
因篇幅问题不能全部显示,请点此查看更多更全内容