《C语言学习知识期末考试复习资料题及其规范标准答案3.doc》由会员分享,可在线阅读,更多相关《C语言学习知识期末考试复习资料题及其规范标准答案3.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-!C语言期末考试复习题及答案一、 选择题:下列各题A)、B)、C)、D)四个选项中只有一个是正确的,请将正确的选项涂写在答案纸上。答在试卷上不得分。(1)C语言规定:在一个源程序中,main函数的位置 D 。A)必须在最后 B)必须在系统调用的库函数的后面。C)必须在最开始。D)可以任意(2) C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 A 。A)必须为字母或下划线。B)必须为下划线。C)必须为字母 D)可以是字母、数字和下划线中的任一种字符。(3)下面四个选项中,均是正确的八进制数或十六进制数的选项是 B 。A)-10 0x8f -011 B) 010 -0x11
2、0xf1C) 0abc -017 0xc D) 0a12 -0x123 -0xa(4) C语言中int型数据在内存中占两个字节,则unsegned int取值范围是 A 。A)0 65535 B)0 32767C)-32767 32768 D)-32768 327687(5) 若有定义:int a = 7; floa x = 2.5 , y = 4.7 ; 则表达式 x + a % 3 * (int) (x + y) % 2/4 的值是 D 。A)2.750000B)0.00000C) 3.500000D) 2.500000 (6)已知ch是字符型变量,下面不正确的赋值语句是 B 。A)ch
3、= 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 。A)!(x y )&!z | 1)B) x & y C) x | y+z & y - zD)x = y (8)设有程序段int k = 10 ;while ( k = 0 ) k = k - 1 ; 以下描述正确的是 A 。A) 循环体语句一次也不执行。B) 循环是无限循环。C) while 循环语句执行十次。D) 循环体语句执行一次。 (9) 以下C程序正确的运行结果是 A 。 ma
4、in ( )long y = 23456; printf ( y = % 3x n , y); printf ( y = % 8x n , y); printf ( y = % # 8x n , y);A) y = 5ba0B)y = 5ba0C ) y = 5ba0D)y = 5ba0y = 5ba0 y = 5ba0 y = bba0 y = 5ba0y = 0x5ba0 y = 0x5ba0 y = 0x5ba0y = #5ba0 (10) 当a = 1 , b = 3 , c =5 d=4时,则执行完下面一段程序后,x的值是 C 。 if ( a b ) if ( c d ) x =
5、1; else if ( a c ) if ( b d ) x = 2 ; else x = 3 ; else x = 6 ; else x = 7 ;A)1B) 3C) 2D) 6(11) 下面程序的运行结果是 D 。# 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 = 11B)a = 4 , b = 9C)a = 1 , b = -1D)a = 2 , b = 8(
6、12)以下for 循环的执行次数是 B 。 for ( x = 0, y = 0; (y = 123 ) & ( x4 ); x + + );A) 无限次。 B)4次。 C)0次 。 D)3次。(13) 以下是死循环的程序段的是 C 。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 0)B)
7、 if (x0) printf ( %f ,-x ) x=x+y; printf (%f , x); else printf (%f,-x); else printf (%f , -x);C) if (x0) D) if(x0) 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 。A)1 B)3 C)4 D)2(19) 以下程序段 B 。x = -
8、1;do x = x*x ; while (! x);A) 是死循环B)循环执行一次C)循环执行二次D)有语法错误(20) 逻辑运算符两侧运算对象的数据类型 B 。A)只能是0或1 B) 可以是任何类型的数据C) 只能是整型或字符型数据D)只能是0或非0正数(21)下面程序中有错误的行是 C 。(前面数字表示行号)1、 main ( )5、scanf ( % d ,& a ) ;2、 6、for ( i =1 ; i 3; i + + ) a0 = a0 + ai,3、 int a3 = 1;7、printf ( a0 = % d n , a0 );4、 int i ; 8、 A) 3B) 6
9、C) 5D) 7(22)下面的程序段 D 。 for ( t = 1 ; t = 100, t + + ) scanf (%d, &x); if ( x 0 ) continue; printf (%3d, t ); A) 当x = 0时什么也不输出 C) printf 函数永远也不执行D)最多允许输出100个非负整数(23)以下对一维整型数组a的正确说明是 D 。 A)int a (10)B) int n = 10; an ; C) int n;D) # define SIZE 10 scanf (%d, &n); int a SIZE; int a n; (24) 下面程序的运行结果是 A
10、 。a=1; b=2; c=2;while (abc) 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 a34; 则对数组元素的非法引用是 B 。A)a02*1 B) a04 C) a4-20 D) a13(26) 对以下说明的正确理解是 B 。 int a10 = 6, 7, 8, 9, 10 A) 将5个初值依此赋给a 1 至a5 B)将5个初值依此赋给a 0 至a 4 C)将5个初值依此赋给a 6 至a
11、10 D) 因长度与初值个数不同,故语句错误(27) 若二维数组a有m列,则在a i j 前的元素个数为 A A) i * m + jB)j * m + i C) i*m + j -1D)i * m + j + 1(28) 以下程序段运行的结果是 D 。 char c5 = a , b , 0 , c , 0 ; printf ( % s , c ); A) a b B) ab cC) abcD) ab(29) 以下正确的函数定义形式是 A 。 A) double fun ( int x , int y ) B) double fun ( int x ; int y ) C) double f
12、un ( int x , int y ) ; D) double fun ( int x , int y );(30) 以下不正确的说法是 D 。 A) 实参可以是常量、变量或表达式。B)形参应与其对应的实参类型一致。 C)实参可以为任意类型。D)形参可以是常量、变量或表达式。(31) 有两个字符数组 a, b,则以下正确的输入格式是 C 。 A) scanf (% s % s, &a, &b )B) gets (a, b)C) scanf (% s % s, a, b ) D) gets (a); gets (b)(32) 以下程序正确的运行结果是 C 。 main ( ) int a =
13、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 7B) 7 10 13C) 7 8 9D) 7 9 11(33) # define 能做简单的替代,用宏替代计算多项式4*x*x + 3*x + 2 之值的函数f, 正确的宏定义是 C 。 A) # define f(x) 4*x*x + 3*x + 2B) # define f 4*x*x + 3*
14、x + 2C) # define f(a) (4*a*a + 3*a + 2)D) # define (4*a*a + 3*a + 2) f(a)(34) 当运行以下程序时,从键盘输入:ab c def (表示回车)则下面程序的运行结果是 D 。 # include stdio.h # define N 6 main ( ) char c (N); int i= 0; for ( ;i N; ci = getchar ( ),i+); for (i = 0; i N; i+) putchar(ci); A) abcdefB) aC) bD) ab bcccdddef (35) 请读程序: #
15、define AD(x) x + x main ( ) int m = 1, n = 2 , k = 3 ; int sum = AD( m + n )*k ; printf ( sum = % d , sum ); 上面程序的运行结果是 B 。 A) sum = 9B) sum = 10C)sum = 12D) sum = 18 (36) 对下面程序段正确的判断是:_C_ # define A 3 # define B(a) ( A + 1 )*a ) M x = 3*( A + B( 7 ) ) ;A) 程序错误,不许嵌套宏定义。B) x = 21C) x = 93D) 程序错误,宏定义不
16、许有参数。(37) 执行以下程序后,a , b的值为 main ( ) int a , b , k = 4, m = 6, *p1 = &k , *p2 = &m; a = p1 = = &m; b = ( -*p1) / (*p2) + 7; printf ( a = % dn , a ); printf ( b = % dn , b );A) -1 B) 0 C) 1 D) 45 7 6 10 (38) 以下程序中调用 scanf 函数给变量 a输入数值的方法是错误的,因为 。 main ( ) int *p , *q , a , b ; p = &a ; printf ( input a
17、 : ); scanf ( %d , *p) ; A)*p 表示的是变量 a 的值,而不是变量a 的地址。B)*p 表示的是指针变量 p 的地址。C)*p 表示的是指针变量 p 的值。D)*p 只能用来说明p是一个指针变量。 (39) 以下程序的运行结果是 。 # define MIN (x, y) (x) sex); D) scanf ( % d , &(p - age); (47) 若有定义: int a34; 则对a数组的第i行第j列(假设i, j已正确说明并赋 值)元素值的正确引用为 。 A) * ( * ( a + i) + j) B) ( a + j) j C) * ( a + i
18、 + j) D) *(a +i ) +j(48) 若已定义char S10 ;则在下面表达式中不表示S1 的地址的是 。 A) S + 1 B) & S 1 C) & S 0 + 1 D) S + +(49) 若有定义: int a23 则对 a 数值的第i 行,第 j 列元素地址的正确引用为 。A) *( a i + j ) B) a i + j C) *( a + j ) D) (a + i ) (50) 若有以下定义,且 0 = i 6,则正确的赋值语句是 。 int s46 , t 64 , (*p)6 ; A) p = t ; B) p = s i ; C) p = s ; D) p
19、 = t i ; (51) 以下程序的运行结果是 。# include stdio.h main ( ) union long a ; int b ; char c ; m ; printf ( %d n , sizeof (m) ; A) 4 B) 2 C) 6 D) 8 (52) 当顺利执行了文件,关闭操作时, fclose函数的返回值是 。 A) 0 B) TURN C) -1 D) 1(53) 已知学生记录描述为struct student int no; char name 20; char sex; struct int year; int month; int day; birt
20、h; 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 ;(54) 表达式 a b | c& d 的运算顺序是 .;A) , & , , | B) , , & ,
21、| C) , & , | , D) , | , & , (55) 设有以下语句:char x = 3 , y = 6 , z ;z = x y 2 ;则z 的二进制值是 . A) 00010100 B) 00011000 C) 00011100 D) 00011011 (56) 已知函数的调用形式: fread ( buffer , size , count , fp ), 其中 buffer代表的是 。A) 一个整型变量, 代表要读入的数据项总数.B) 一个文件指针, 指向要读的文件.C) 一个存储器, 存放要读的数据项.D) 一个指针, 指向要读入数据的存放地址(57) 若有函数 max
22、(a, b), 并且已使函数指针变量p指向函数max, 当调用该函数时,正确的调用方法是 。 A) (*p) max (a, b); B) *p max (a, b);C) *p (a, b) D) (*p) (a, b) (58) 在16位IBM-PC 机上使用C语言,若有如下定义:union dataint i;char ch ;double f ; b ; 则其共用体变量b占用内存字节数是 。A) 1 B) 2 C) 8 D) 4 (59) 若有以下程序段int x = 1, y = 2;x = x y ;y = y x ;x = x y;则执行以上语句后x和y的值分别是 。A) x =
23、 1 B) x = 2 C) x = 2 D) x = 1 y = 2 y = 2 y = 1 y = 1 (60) 若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是 。 A) w+ B) ab + C) wb+ D) ab 二.填空(每空2分,共40分):请在 处添上正确答案。(1) 条件 2 x 3或 x -10 的C语言表达式是 1 .(2) 以下程序的功能是判断输入的年份是不是闰年, 请在 内添入正确的内容. main ( ) int y , f ;scanf ( % d , &y ) ;if ( y % 400 = = 0 ) f = 1;els
24、e if (2) f = 1 ; else 3 ;if (f ) printf ( % d is , y ); else printf ( % d is not , y) ;Printf ( a leap year n ) ; 原文链接:http:/ 以下程序是用梯形法求 sin( x ) * cos( x ) 的定积分,求定积分的公式为: 其中 xi = a + ih , h = (b - a )/n设 a = 0, b = 1.2 为积分上下限,积分区间分割数 n = 100 , # include # include main ( ) int i , n; double h, s, a,
25、 b ; printf ( input a, b :); scanf ( % lf % lf , 4); n = 100; h = 5 S = 0.5 * ( sin( a ) * cos( a ) + sin( b ) * cos( b ) ); for ( i = 1; i = n - 1; i + +) S+ = 6;S* = h;Printf ( S = % 10.4 lfn ,S); (4) 下面程序的运行结果是7)# include stdio.h main ( ) int i =1; while ( i =15) if ( + + i % 3! = 2 ) continue ; else printf ( % d , i ) ; printf ( n ) ; (5) 下面程序段运行的结果是 8。i = 1; s = 3;do s+ = i + + ; if (s % 7 = = 0) continue; else + + i; while (s 15); printf ( % d , i );以下程序是矩阵a, b的乘积: main ( ) int a32 = 2 , -1 , -4 , 0 , 3 , 1 ; int b22 = 7 , -9 , -8 , 10 int i ,