搜索
您的当前位置:首页正文

C语言期末复习资料

来源:欧得旅游网
选择题

1、以下不是C语言基本数据类型的是 D 。

A. 字符型 B. C. 整型 D. 构造类型 2、以下 B 是八进制数。 A. 1X12

B. 123

C. 1001 D. 0123

3、Turbo C中,char类型变量所占字节数是 B 。

A. 2 C. 3

B. 1 D. 4 B. short D. character

4、C语言提供的合法的数据类型关键字是 C 。

A. longer C. integer

5、C语言中运算对象必须是整型的运算符是 A 。 A. %= B. == C. += D. *=

6、下面关于字符串和字符常量的叙述中错误的是 C 。

A. 字符常量由单引号括起来,字符串常量由双引号括起来

B. 字符常量只能是单个字符,字符串常量可以含一个或多个字符

C. 字符常量占一个字节的内在空间,字符串常量占的内在字节数为字符串中字符数 D. 可以将一个字符常量赋予一个字符变量,但不能将一个字符串常量赋予一个字符串变量

7、以下程序的输出结果是 D 。

main(0 {

int m = 10, n = 3;

printf( \" %d\\n \ n = m / n ) ;

B. 11 D. 3

}

A. 10 C. 13

8、若以下变量均已正确说明为char类型,要给x、y和z输入数据,正确的是 B 。 A. scanf ( x, y, z );

B. scanf ( \"%c%c%c\ &x, &y, &z ) ; C. scanf ( \"%C%C%C\ x, y, z ) ; D. scanf ( \"%c%c%c\ x, y, z ) ;

9、以下程序的输出结果是 C 。

char c1, c2;

c1=65; c2 = 65 + 32 + 1 ;

printf ( \"%c, %c \ c1, c2 ) ; A. a, B C. A, b #include \"stdio.h\" #include \"math.h\"

B. A, B D. a, b

10、以下程序的输出结果是 C 。

main()

{ int a=3, b=9 ; float y, x=1.2 ; y= ( a+b ) / sqrt ( b ) * x ; printf ( \"%\\n\ y ) ; } A. 1.000000 C. 4.800000

B. 1.400000 D. 1.900000

11、以下程序段的输出结果是 B 。【提示:printf ()为右结合的运算】 int y=7 ;

printf ( \"%d %d %d \ ++y, --y, y++ ) ;

A. 8 7 8 B. 8 7 7 C. 7 8 7

D. 7 8 8

12、表达式“ sizeof (unsigned short )”的值是 A 。 A. 2 B. 4 C. 3 D. 8

13、下列程序执行后,屏幕上显示的结果是 C 。

#include \" stdio.h \" main ()

{ int a ;

float b ; a = 4; b = 9.5 ;

printf ( \"a=%d b=%4.2f\\n \ a, b ) ; } A. a=%d b=%f\\n B. a=%d b=%f C. a=4 b=9.50 D. a=4 b=9.5

14、以下程序段,当输入“3”并回车后,屏幕上显示的内容是 C 。

int ch ;

ch = getchar () ; putchar () ; A. 2 C. 3

B. 1 D. 0

15、下列程序执行后,屏幕上显示 B 。

int j = 2, i = 1 ; j /= i*j ;

printf ( \"%d\\n\A. 2 C. 3

B. 1 D. 0

16、设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是 D 。

A. k++

B. k+=1

C. ++k D. k+1 17、以下程序的输出结果是 _____A_____。

# include main( )

{ printf ( \"%d\\n\

}

A. 9 B. 7 C. 11 D. 10

18、下列叙述中,不是C语言特点的是 B 。

A. 简洁、紧凑,使用方便、灵活,易于学习和掌握

B. C语言是面向对象的程序设计语言

C. C语言允许直接对位、字节和地址进行操作 D. C语言数据类型丰富,生成的目标代码质量高 19、C语言程序的大小写字母是 D 。

A. 都不加区分 C.字符串不加区分 A. 子程序 C. 函数

B. 变量不加区分 D. 字符串中区分

B. 主程序和子程序 D. 过程

20、C语言程序是由 C 组成。

21、下面属于C语言标识符的是 D 。

A. 1ab B. @f

C. ?b D. _a12

22、以下选项中,为C语言合法关键字的是 D 。

A. ant B. cher C. with D. default

23、以下选项中不合法的用户标识符的是 A 。

A.def.c C. Main B. file

D. PRINTF

24、C语言中,主函数的个数是 B 个。

A. 2个 B.1个

C. 任意个 D. 10个

25、下列关于C语言注释的叙述中错误的是 D 。

A. 以“/*”开头并以“*/”结尾的字符串为C语言的注释符 B. 注释可以出现在任何位置,用以提示和注释程序的意义 C. 程序编译时,不对注释作任何处理

D. 程序编译时,需要对注释进行处理

26、以下选项中不合法的用户标识符的是 A 。

A.def.c C. Main B. file

D. PRINTF

27、C语言中,主函数的个数是 B 个。

A. 2个 B.1个

C. 任意个

D. 10个

28、下列关于C语言注释的叙述中错误的是 D 。

A. 以“/*”开头并以“*/”结尾的字符串为C语言的注释符

B. 注释可以出现在任何位置,用以提示和注释程序的意义 C. 程序编译时,不对注释作任何处理 D. 程序编译时,需要对注释进行处理

29、下列不是C语言分隔符的是 D 。

A. 回车 B. 空格

C. 制表符 D. 双引号

30、下列关于C语言的关键字的叙述中错误的是 D 。

A. 关键字是由C语言规定的具有特定意义的字符串,也称保留字 B. 用户定义的标识符不应与关键字相同

C. ANSI C标准规定的保留字有32个 D. ANSI C标准规定的保留字有64个

31、若有以下定义:float a; int x, y ; 则正确的switch语句是 D 。

A. switch ( a )

B. switch ( int (a ))

{ case 1.0: printf (\"*\\n\"); case 2.0: printf(\"**\\n\"); } C.switch ( x+y )

{ case 1: printf (\"*\\n\");

{ case 1: printf (\"*\\n\"); case 2: printf (\"**\\n\"); } D.switch ( x+y ) ; { case 1: printf (\"*\\n\");

case 2: printf (\"**\\n\"); }

case 1+2: printf (\"**\\n\"); }

32、以下由while构成循环的次数是 D 。

int i = 1 ;

while ( i == 1 ) i++; A. 执行无限次

B. 语法错 D. 执行1次

C. 一次也不执行 33、以下程序的输出结果是 D 。

main ( )

{ int i , mul ;

mul没有初始化

for ( i = 1; i < 3; i++ ) mul *=1; printf( \"%d\\n\ } A. 3 C. 1

B. 6

D. 不确定

34、若m的值为100,则以下for循环执行次数是 D 。

for ( j = 0; j <= m; printf ( \"*\" ) ); j++; A. 执行100次 B. 语法错

C. 一次也不执行 D. 无限次

35、若要求在if后一对圆括号中的表达式,表示a等于0时的值为真,则能正确表示这一关系的表达式是 B 。

A. a != 0

B. !a

C. a D. a = 0 36、下列程序段运行后x的值是 A 。

main () {

int a, b, c, x ; a=b=c=0 ; x= 35 ; if ( !a ) x-- ;

else if ( b ) ;

if ( c ) x =3 ; printf ( \"%d\ x ); } A. 34

B. 0

C. 35

D. 3

37、以下程序段的执行结果是 B 。

main ()

{ int x = 23 ; do

{ printf (\"%d\\n\ x-- ); }while ( !x ) ;

}

B. 23 22

D. 陷入死循环

printf (\"%d\\n\ x ); A. 3221 C. 不输出任何内容 main () {

int x, y, m ;

scanf (\"%d %d\ &x, &y ); m=x ;

if ( x < y ) m = y ;

38、若从键盘输入5□6以下程序的执行结果是 C 。

m *= m ; printf (\"%d\\n\ m ); } A. 14

B. 18

C. 36 D. 20 39、以下程序的输出结果是 C 。

main ()

{ int i, j, m = 0 ; for ( i = 1; i <= 10; i += 3 ) for ( j = 2; j <= 12; j +=2 ) m ++; printf (\"%d\\n\ m ) ; } A. 10

B. 12

C. 24 D. 15

40、下列关于do...while语句和while语句的叙述中,错误的是 C 。 A. do...while语句先执行循环体中的语句,然后再判断表达式 B. while语句是先进行条件判断,满足条件才去执行循环体 C. while语句至少要执行一次循环语句

D. do...while循环至少要执行一次循环语句

41、下列关于break语句和continue语句的叙述中错误的是 D 。 A. break可以用来退出循环体

B. continue语句用来退出本次循环,提前进入下次循环的判定

C. break语句和continue语句都可以用在while、do...while和for循环体中 D. 在循环语句中,break语句不能和if语句连在一起使用

42、下列程序执行后,b的值为 。b应为2,C、D选项没有

main () {

int a = 1, b = 10 ;

do

{ b -= a; a++ ; }while ( b -- < 0 ) ; printf ( \"%d\\n\ a ); }

b先引用后自加

A. 8

B. -2

43、以下程序段的输出结果是 C 。

main ()

{ int x = 4 ; do

{ printf ( \"%4d\ x -= 3 ); } while ( !( -- x )) ; } A. 1 -2 B. 3 -2

C. 1 -3 D. 不输出 44、以下程序的输出结果是 B 。

main () {

int y = 10 ;

for ( ; y > 0; y -- )

if ( y%3 == 0 ) { printf (\"%d\ -- y ); continue ; } }

A. 743 B. 852 C. 793 D. 876 main ()

{ int n = 10 ;

while ( n -- ) ;

45、下列程序的输出结果是 D 。

printf ( \"n=%d\\n\ n ); } A. 构成死循环 B. n = 0 C. n = 1 D. n = -1

46、从以下给出的表达式中选出与while ( E )语句中的( E )等价的表达式是 C 。

A. ( !E != 0 ) B. ( E > 0 ) && ( E < 0 ) C. ( E != 0 ) D. ( E == 0) 47、下列程序的输出结果是 D 。

main ()

{ int n = 10 ; while ( n -- ) ;

printf ( \"n=%d\\n\ n ); } A. 构成死循环

B. n = 0

C. n = 1 D. n = -1

48、从以下给出的表达式中选出与while ( E )语句中的( E )等价的表达式是 C 。

A. ( !E != 0 ) C. ( E != 0 )

B. ( E > 0 ) && ( E < 0 ) D. ( E == 0)

49、以下程序的执行结果是 D 。

main ()

{ int x = 10, y = 20, t = 0;

if ( x == y ) t = x ; x = y ; y = t ; if只有一个内嵌语句

printf( “%d %d\\n”, x, y ); }

A. 10 20 C. 20 10

B. 10 0 D. 20 0

50、如果从键盘输入9,则以下程序的执行结果是 B 。 main ()

{ int n ;

scanf ( “%d”, &n ) ;

if ( n++<10 ) printf( \"%d\\n\ n ) ;

}

A. 9 C. 8

else printf ( “%d\\n”, n-- ) ;

B. 10

D. 程序有错

51、设有以下程序段,则运行后的输出结果是 A 。

int x = 5 , y = 8, max ; max = ( x > y ) ? x : y ; printf (\"%d\ max ) ; A. 8

B. 5

C. 3 D. 13 52、选择结构程序设计的特点是 D 。

A. 自上向下逐个执行 B. 根据判断条件,选择其中一个分支执行 C. 反复执行某些程序代码 D. 以上都是

53、int a = 2; while ( a=0 ) a --; 该循环共执行了 C 次。

A. 2 C. 0

B. 1

D. 无限次

54、以下程序的执行结果是 C 。

#include \"stdio.h\" main()

{ int x=1, y=0, a=0, b=0;

for ( x=1; x<=4; x++ ) { switch(x)

{ case 1: switch (y) { case 0: a++; break;

case 1: b++; break;

}

case 2: a++; b++; break;

case 3: a++; b++; }

}

printf(\"a=%d, b=%d\\n\}

A. a = 2, b = 1 C. a = 4, b = 3

B. a=3, b = 2 D. a = 5, b = 4

55、 以下选项中,当x为大于1的奇数时,值为0的表达式 D 。

A. x%2 == 1 B. x/2

C. x%2 != 0 D. x%2 == 0

56、当执行以下程序时,输入1234567890<回车>,则其中while循环体将执行__C__次。

# include

main( ) {

char ch ;

while ( ( ch = getchar ( ) ) == '0' ) printf ( \"#\" ) ;

B. 执行9次

}

A. 执行10次

C. 执行0次 D. 无限次

57、若x为int型变量,则则以下语句的结果是 C 。

for ( x=1; x<100; x++ ) if ( ++ x%2 == 0 ) if ( ++ x%3== 0 )

if ( ++ x%5== 0 ) printf (\"%d\ x );

A. 30 60 90 C. 不打印任何内容

B. 29 59 89 D. 31 61 91

58、在C语言中,数组元素下标的下限是 C 。

A. 1 B.视说明语句而定

C. 0 D. 无固定下限

59、定义一维数组时,[ ]内的下标表达式应该是 A 。

A. 整型常量表达式 B. 常量表达式

C. 表达式 D. 整型表达式 60、若有说明语句:int a[ 2 ][ 3 ] ={ 0 };,则下面正确的叙述是 C 。

A. 此语句说明不正确

B. 只有a[0 ][ 0]可以得到初值0

C.数组中的每个元素可以得到初值0

D.数组中的每个元素可以得到初值,但不一定为0 61、下列数组定义正确的是 B 。

A. long a[ 4 ]={ 1, 2, 3, 4 5 };

B. float x[ ][ 3 ]={ 0};

C. int s[ 3 ][ ]={ {1},{2},{3} }; D. char z[ ][ 2 ]={ }; 62、有语句char str[ 10 ], str2[ 10 ]={ \"China\" };,则将字符串\"China\" 赋给数组str的正确语句是 B 。

A. str1={ \"China\" }; C. str1 = str2

B. strcpy ( str1, str2 ); D. strcpy ( str2, str1 );

63、以下对一维数组a的正确定义是 C 。

A. int a (10 ); B. int n, a[ n ];

C. #define N 10

D. int n; scanf (\"%d\

int a [ N ]; int a [ n ];

64、定义以下变量和数组,则下面语句的输出结果是 A 。

int x [ ][ 3 ]= { 9, 8, 7, 6, 5, 4, 3, 2, 1 };

for ( i=0; i< 3; i++ ) printf (\"%d\A. 7 5 3 B. 7 4 1 C. 9 5 1 D. 9 6 3 main()

{ char a[]={'\\1','\\2','\\3','\\4','\\0'};

65、以下程序的输出结果是 B 。

printf(\"%d %d\\n\

}

A. 5 5 B. 5 4 C. 4 5 D. 4 4

66、若有以下语句,则下面 B 是正确的描述。

static char x [ ] = \"12345\";

static char y [ ] = { '1', '2', '3', '4', '5' };

B.x数组的长度大于y数组的长度 D.x数组的长度小于y数组的长度

printf(\"%d %d\\n\

A.x数组和y数组的长度相同

C. x数组等价于y数组 A. 1

67、若有语句long b [3 ][ 3]={ {1, 2 }, {9, 8}, {{ 7 } };则b[ 1 ][ 1 ]的值为 C 。

B. 7

C. 8 D. 9

68、在数组中,数组名表示 A 。

A. 数组第一个元素的首地址 C.数组所有元素的首地址

B.数组第一个元素的首地址 D.数组最后一个元素的首地址

69、以下程序运行后的输出结果是 D 。

main( )

{ int m[ ][3] = { 1,2,3,4,5,6,7,8,9 };

int i, k = 2;

for ( i=0; i<3; i++ ) printf (\"%d\

}

A. 456 B. 258 C. 369 D. 789

70、以下程序的运行结果是 C 。

main ( )

{ int i, j, m, n;

char a[ ]={ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '\\0' }; char b[10 ]={ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '\\0' }; i= sizeof( a ); j=strlen( a ); m= sizeof( b ); n=strlen ( b ); printf ( \"%d, %d, %d, %d\\n\ i, j, m, n ); }

A. 9, 9, 10, 10 C. 9, 8, 10, 8

B. 8, 9. 8, 10 D. 9, 8, 9, 8

71、判断字符串是否相等,应当使用 D 。

A. if (s1 = s2 ) B. if ( s1 == s2 )

C. if (strcpy (s1, s2 )

D. if ( strcmp (s1, s2 ))

72、在C语言中,二维数组元素在内存中的存放顺序是 A 。 A. 按行存放 B. 按列存放 C. 由用户决定 D. 由编译器确定 73、以下程序的运行结果是 D 。

main( )

{ char s[ 10 ], c = 'a'; for ( int i = 0; i<5; i++ ) s[ i ] = ++c;

printf (\"%s\没有字符串结束符

}

A. a B. abcde C. bcdef D. 不确定 74、有以下程序,程序的运行结果是 C 。

main () {

int a[ 5 ]= { 1, 2, 3, 4, 5 }, i;

for ( i = 4; i>=1; i -- ) a[ i ] = a [ i – 1 ];

for (i=0; i<5; i++ ) printf (\"%d \ a[ i ] );

B. 2 3 4 5 1 D. 5 1 2 3 4

}

A. 1 2 3 4 5 C. 1 1 2 3 4

75、有以下程序 main ()

{

int num[ 4][ 4] = { {1,2,3,4}, {5,6,7,8},{9,10,11,12}, {13,14,15,16} }, i, j; for ( i = 0; i < 4; i ++) { }

for ( j = 0; j < i; j ++ ) printf (\"%4c\ ' ' );

for ( j = ; j < 4; j ++ ) printf ( \"%4d\ num[ i ][ j ] ); printf (\"\\n\");

}

若要按以下形式输出结果,则在程序的下划线处应填入 B 。 1

2 6

3 4 7 8 11 12

16

B. i

A. 0

C. 4 – i D. i + 1 76、有以下程序,程序的运行结果是 C 。

main () {

int a [ 6 ] = { 1, 2, 3, 4, 5, 6 }, i, j, t; for (i = 0; i < 3; i++ ) {

j = 3 + i;

t = a[ i ]; a[ i ] = a[ j ]; a[ j ] = t;

}

for ( i = 0; i < 6; i ++ ) printf (\"%d \ a[ i ] );

B. 6 5 4 3 2 1 D. 3 4 5 6 1 2

}

A. 1 2 3 4 5 6 C. 4 5 6 1 2 3 main () {

77、以下程序的运行结果是 A 。

int a[ 4 ][ 4 ]={{1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}}; int i, j, s = 0;

for ( j = 0; j < 4; j ++ )

{ i = j; s += a[ i ][ j ]; }

printf (\"%d\\n\ s ); }

A. 10 C. 4

B. 40 D. 12

78、函数在定义时,省略函数类型说明符,则该函数值的类型为 A 。

A. int B. float C. long D. double

79、以下 个函数,真正地没有返回值 B 。

A. int a( ) { int a = 2; return ( a ); } B.void b( ) { printf( \"c\" ); C.int a( ) { int a = 2; return a; }

D. 以上都是

80、在C语言中,有关函数的说法,以下正确的是 C 。

A. 函数可嵌套定义,也可嵌套调用 B. 函数可嵌套定义,但不可嵌套调用 C. 函数不可以嵌套定义,但可以嵌套调用 D. 函数不可嵌套定义,也不可以嵌套调用 81、函数调用可以在 D 。

A. 函数表达式中 B. 函数语句中

C. 函数参数中

D. 以上都可以

82、被调用函数调用结束后,返回到 A 。

A. 主调用函数中该被调用函数调用语句处 B. 主函数中该被调用函数调用语句处

C. 主调用函数中该被调用函数调用语句的前一条语句

D. 主调用函数中该被调用函数调用语句的后一条语句 83、以下关于递归的说法错误的是 C 。

A. 递归是特殊的嵌套

B. 递归要注意两点,递归终止条件和递归公式 C. 递归可以轻松地转为选择语句

D. 递归可分为两个阶段,即回推和递推

84、有关数组名作为函数参数说法错误的是 C 。

A. 用数组名作为函数参数时,要求形参和实参类型相同

B. 用数组名作为函数参数时,实参传给形参的是数组的首地址 C. 用数组名作为函数参数时,实参将数组各元素的值传给形参 D. 用数组名作为函数参数时,实参和形参共享同一数组 85、在函数内部定义的变量称为 B 。

A. 全局变量 B. 局部变量

C. 外部变量

D. 静态变量

86、静态变量的说明符为 B 。 A. auto B. static C. extern D. register 87、C语言中,默认的存储类别为 A 。 A. auto B. static C. extern D. register 88、运行下列程序,w 的值为 A 。

}

main ()

{ int w = 2, k; for ( k = 0; k< 3; k++ ) { w = f ( w ); printf (\"%d\\n\ w ); } f ( x )

{ int y = 0;

static z = 3; y++; z ++;

return ( x + y + z ); }

A. 20 C. 28

B. 7 D. 13

89、以下程序的运行结果为 A 。

int num ( )

{ int x, y, a = 15, b = 10; }

x = a – b; y = a + b; return;

main ( )

{ int a = 7, b = 5; x = a + b; y = a – b;

num ( );

printf (\"%d %d\\n\

}

A. 12, 2 B. 5, 20 C. 2, 12 D. 不确定 90、以下程序的运行结果为 C 。

int num ( )

{ extern int x, y; }

int a = 15, b = 10;

x = a – b; y = a + b; return;

main ( )

{ int a = 7, b = 5;

x = a + b; y = a – b; num ( );

printf (\"%d %d\\n\}

A. 12, 2

B.不确定

C. 5, 25 D.2, 12 91、以下程序的运行结果是 B 。

main() { fun( );

fun( ); }

void fun( )

{ static int a=2;

char k='A'; a*=2; k+=1; printf( \"%d, %c\\n\ k ) ;

}

A. 4, B B. 4, B

C. 4, B

4, C

D. 4, B

8, C

4, B 8, B 92、以下程序的运行结果为 D 。 unsigned f6 ( unsigned x )

{

unsigned b = 2;

do

{ b *= x%10; x = x/10; } while ( x );

return ( b ); }

main ( )

{ unsigned n = 46; printf (\"%d\\n\}

A. 程序死循环

B.24

C. 12 D.48 93、以下程序的运行结果是 。

int k=0;

void fun( int m )

{ m += k; k += m; printf(“m=%d\\n k=%d ”, m, k++);}

main() {

int i = 4;

fun( i++ ); printf ( \"i=%d k=%d\\n\ i, k );

B. m = 4 k = 8 i = 5 k = 9 D.m = 4 k = 9

}

A. m =5 k = 10 i = 5 k = 11 C. m =5 k = 11

i = 5 k = 11 i = 5 k = 9 94、以下程序的运行结果为 B 。 int fun ( int x )

{ }

int p;

if ( x == 0 || x == 1 ) return ( 3 ); p = x – fun ( x – 2 ); return p;

main ( )

{ printf ( \"%d\\n\ fun ( 9 ) ); } A. 8 B.7 C. 6 D.5 95、若有定义:int a;,则定义一个指针p,使其可以指向变量a的赋值语句是 C 。

A. int p = a; B.int *p = a;

C. int *p = &a; D.int p = *a;

96、若有定义:int a; int *p=&a,则通过指针p给变量a读入的数据的scanf函数的调用语句是 D 。

A. scanf (\"%d\ B.scanf ( \"%d\ **p ); C. scanf (\"%d\ &p ); 97、以下正确的叙述是 A 。

D.scanf ( \"%d\ p );

A. 数组名实际上是此数组的首地址,所以数组名相当于一个指针变量 B. 若定义数组a[2][3],则a+1和 *(a+1)完全相等 C. 若定义数组a[2][3],则++a和 a[1]完全等价

D:或指针

D. 某函数的形参为一个数组,则调用此函数时只能将数组名作为对应的实参 98、若有说明:float x, y = 1.0, *p = &x; ,则与x = y; 等价的语句是 B 。

A. x = *p; C. x = &y;

B.*p = *&y; D.x = **p;

99、若有以下定义:int n, *p; ,则正确的赋值表达式是 A 。

A. p = &n; B.p = n; C. *p = &n; D.*p = *n; 100、以下定义语句中,错误的是 D 。

A. int a[ ] = {1, 2 }; B.char *a[ 3 ];

C. char s [ 10 ] = \"test\"; D.int n = 5, a[ n ];

101、若有说明:char s1[ 4 ]=\"12\"; char *ptr;则以下语句后的输出为 A 。

ptr = s1;

printf ( \"%c\\n\ *(ptr+1) ); A. 字符 '2' C. 字符 '2' 的地址 main ()

{ char a[ 10 ] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 }, *p = a + 5; printf ( \"%d\* --p ); } A. 非法 B.a[ 4 ] 的地址

B.字符 '1' D.不确定

102、下列程序的输出结果是 C 。

C. 5 D.3

103、若有说明语句:int x[ 3 ][ 4 ]; 则以下关于x、*x、 x[ 0 ]、 &x[ 0 ][ 0 ]的正确描述是 D 。

A. x、 * [ x ]、 x[ 0 ] 和 &x[ 0 ][ 0 ]均表示元素x[ 0 ][ 0 ]的地址 B. 只有x、 x[ 0 ] 和 &x[ 0 ][ 0 ]表示的是元素x[ 0 ][ 0 ]的地址 C. 只有x[ 0 ] 和 &x[ 0 ][ 0 ]表示的是元素x[ 0 ][ 0 ]的地址 D. 只有 &x[ 0 ][ 0 ]表示的是元素x[ 0 ][ 0 ]的地址 104、以下程序执行后,x 值为 B 。 main ()

{

int *p, x;

x = 20; p = &x; x = *p + 5;

printf (\"%d\ x ); }

A. 20

B.25

C. 15

D.5

105、以下程序的输出结果是 C 。

main ()

{ int i = 1, a = 2, b = 3; int *pi = &i, *pa = &a, *pb = &b;

*pb = *pi * ( *pa ); printf ( \"%d\\n\ b );

B.3 D.1

}

A. 6 C. 2

106、以下程序的输出结果是 C 。

void add ( int a, int b, int *c ) { *c = b + a; } main() {

int x, y, z; add ( 1, 2, &x );

add ( x, 3, &y ); add ( x, y, &z );

printf ( \"%d, %d, %d\\n\ x, y, z );

B.4, 5, 6 D.3, 4, 2

}

A. 1, 2, 3

C. 3, 6, 9 107、以下程序的运行结果是 B 。

void fun ( int *x )

{ printf ( \"%d\\n\ -- *x ); } main ()

{ int a =2; fun ( &a ); }

A. 2

B.1 D.-1

C. 0 108、下列程序的运行结果是 A 。

void fun ( int *a, int *b ) { int *k;

k = a; a = b; b = k; } main () {

int a = 3, b = 6, *x = &a, *y = &b;

fun ( x, y ); printf ( \"%d %d\ a, b ); } A. 3 6 C. 编译出错 static char a[ ] = \"Program\"; char * ptr;

B.6 3 D.0 0

109、以下程序段的执行结果是 B 。

ptr = a;

for ( ptr = a; ptr < a + 7; ptr += 2 ) putchar ( *ptr ); A. Program B.Porm C. 有语法错误 D.Por 110、执行以下程序段后,y的值为 A 。

static int a[ ] = { 1, 3, 5, 7, 9 }; int y, x, *ptr; y = 1;

ptr = &a[ 1 ];

for ( x = 0; x < 3; x ++ ) y *= *( ptr + x ); A. 105 B.15 C. 945

D.无定值

111、设有以下说明语句: srruct ex {

int x ; int y ;

int z ; }example ;

由以下叙述中不正确的是 B 。

A. struct是结构体类型的关键字

B. example是结构体类型名

C. x, y, z都是结构体成员名 D. struct ex 是结构体类型 112、若有以下结构体定义,则 是正确的引用或定义 D 。

struct example { int x ; int y ; } v2 ; A. example.x=10 ;

B.example v2.x =10;

D.struct example v2 = { 10 };

C. struct v2; v2.x = 10; 113、已知:struct {

int i ; char c ; float a ; } ex;

则sizeof( ex )的值是 D 。

A. 4

B.5 D.7

C. 6 114、以下程序的运行结果是 B 。

main ()

{ struct sample {

int x ;

int y ; }a[ 2 ] = { 1, 2, 3, 4 }; printf ( \"%d\\n\ a[0].x +a[0].y * a[1].y );

B.9

}

A. 7

C. 13 D.16

115、若有如下定义,则对data中a成员的正确引用是 B 。

struct

sk {

int a ;

B.(*p).a D.p.data.a B.文本文件一种 D.二进制文件一种

float b ; } data, *p = &data ; A. (*p).data.a C. p->data.a 116、C语言的文件类型只有 C

A. 索引文件和文本文件两种 C. ASCII文件和二进制文件两种

117、C语言中文件的存取方式 C 。

A. 只能顺序存取 B.只能随机存取(直接存取)

C. 可以顺序存取,也可随机存取

fseek ( fp, 0, SEEK_END );

i = ftell ( fp );

printf ( \"i = %d\\n\ i );

A. fp所指文件的记录长度 B. fp所指文件的长度,以字节为单位

D.只能从文件头进行存取

118、若fp为文件指针,且文件已正确打开,以下语句的输出结果为 B

C. fp所指文件的长度,以比特为单位

D. fp所指文件的当前位置,以字节为单位

119、以下各项中,函数fopen中第一个参数的正确格式是 D 。

A. c: user \\ text . txt C. \"c: \\ user \\ text . txt\"

B.c: \\\ text . txt D.\"c: \\\\ user \\\\ text .txt\"

120、若将文件指针的读写位置指针移动到距离文件头200个字节的位置,对应正确的操作是 A

A. fseek ( fp, 200, SEEK_SET ); B.fseek ( fp, 200, SEEK_CUR ); C. fseek ( fp, 200, SEEK_END ); D.ftell ( 200 ); 121、以下程序由终端键盘输入一个文件名,然后把终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志,请填空。

#include main()

{ FILE *fp;

char ch, fname[20];

printf ( \"\\nInput filename:\\n\" );

gets (fname);

if((fp= ( 1 B ) )==NULL) { printf (\"Cannot open\\n\"); exit( 0 ); } printf ( \"\\nEnter data:\" ); while ( (ch=getchar() ) != '#' )

fputc ( 2 A ) ; fclose ( fp );

}

A. fopen (\"fname\ \"wt\" ) C. fopen (fname, \"at\" ) A. ch, fp C. ch

B. fopen (fname , \"rt\" )

D. fopen ( fname , \"tb\" ) B. ch, fname D. fp, ch

122、下面程序的功能是 C #include main()

{ FILE *point1, *point2; point1 = fopen ( \"file1.ASC\

point2 = fopen ( \"file2.ASC\while (! feof ( point1 ) )

fputc ( fgetc( point1 ), point2); fclose ( point1 );

fclose ( point2 );

}

A. 将file2.ASC中的字符追加到file1.ASC中 B. 将file1.ASC中的字符复制到file2.ASC中 C. 将file1.ASC中的字符显示在屏幕上 D. 将两个文件的内容在file1.ASC中合并

典型题目

题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 main()

{ int i,j,k,n;

printf(\"'water flower'number is:\"); for(n=100;n<1000;n++) {

i=n/100; j=n/10%10;

k=n%10;

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) printf(\"%-5d\ } printf(\"\\n\"); }

 最大数问题:从键盘上任意输入10个整数,求出其中的最大数。  算法分析:

 (1)设第一个数就是最大数max;

 (2)若最大数max<下一个数next,则该数应为所输入的所有数中的最大数(max

← next),否则最大数保持不变;

 (3)n个数要进行n-1次比较 #include “stdio.h” main()

{int max, next, n; scanf(“%d”,&next); max=next; for (n=2;n<=10; n++) {scanf(“%d”,&next);

if (next>max) max=next; } printf(“max=%d\\n”, max);

}

问题:求出以“9999”作为结束标志的一组整数的最大数。例如输入:123 45 5678 34 9999 67 23456,输出结果为5678,即对9999及其以后的数不作处理。 #include “stdio.h” main()

{int max, next, n; scanf(“%d”,&next);

max=next;

for ( ; next!=9999; scanf(“%d”,&next) )

{ if (next>max) max=next; } if (max!=9999) printf(“max=%d\\n”, max); }

 问题描述:5位跳水高手参加10米高台跳水决赛,有好事者让5人据实力预测比

赛结果.

   

A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三;

 E选手说:我第四,A第一.

 决赛成绩公布之后,每位选手的预测都只说对了一半,即一对一错.请编程解出比

赛的实际名次.

#include void main()

{ int cc1,cc2,cc3,cc4,cc5; int A,B,C,D,E; int g; for(A=1; A<=5; A++)

for(B=1; B<=5; B++)

for(C=1; C<=5; C++) for(D=1; D<=5; D++)

for(E=1; E<=5; E++)

{ cc1=((B==2)&&(!(A==3)))||((!(B==2))&&(A==3)); cc2=((B==2)&&(!(E==4)))||((!(B==2))&&(E==4)); cc3=((C==1)&&(!(D==2)))||((!(C==1))&&(D==2));

cc4=((C==5)&&(!(D==3)))||((!(C==5))&&(D==3));

cc5=((E==4)&&(!(A==1)))||((!(E==4))&&(A==1)); if(((cc1+cc2+cc3+cc4+cc5)==5)&&(A!=B)&&(A!=C)&&(A!=D)&&(A!=E)&&(B!=C)&&(B!

=D)&&(B!=E)&&(C!=D)&&(C!=E)&&(D!=E))

{ g=1;

printf(\"A %d\\n\A); printf(\"B %d\\n\B); printf(\"C %d\\n\

printf(\"D %d\\n\ printf(\"E %d\\n\ }}; if(g!=1) printf(\"Can't found!\\n\"); }

题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 main() {

char i,j,k;

for(i='x';i<='z';i++) for(j='x';j<='z';j++) {

if(i!=j)

for(k='x';k<='z';k++) { if(i!=k&&j!=k)

{ if(i!='x'&&k!='x'&&k!='z')

printf(\"order is a--%c\b--%c\c--%c\\n\ }

} } }

 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。  程序分析:利用辗除法

 GCD(A, B)=GCD(B, A%B)  当A%B==0时,B即为最大公约数  GCD(12,18)=GCD(18,12)  =GCD(12,6)  =GCD(6,0)  所以12和18的最大公约数为6 main() {

int a,b,temp;

printf(\"please input two numbers:\\n\"); scanf(\"%d,%d\

while(b!=0) /*利用辗除法,直到b为0为止*/ {

temp=a%b; a=b;

b=temp; }

printf(\"gongyueshu:%d\\n\

}

 素数问题:从键盘上任意输入一个十进制整数,判断该数是否是一个素数。若是,则输出“该数是素数”;否则输出“该项数不是素数”。  算法分析:

 (1)增加标志flag。flag=1表示是素数,flag=0表示不是素数。、

 (2)一个数只能被1和其本身整除,就是素数,因此需从2到n-1逐一判断(实际

只需要到n/2)

#include “stdio.h” main()

{ int n, i,flag=1;

printf(“请输入一个十进制整数”); scanf(“%d”,&n);

for (i=2;iif (n%i==0) { flag=0; break; } if (flag==1) printf(“该数是素数”); else printf(“该数不是素数”); }

 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一

个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一

天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

 程序分析:采取逆向思维的方法,从后往前推断。  T N=T N-1-(T N-1 / 2+1)  T N-1=2*T N + 2

 T10=1(倒推出T N,N=9,8,……1) main() {

int day,x1,x2; day=9; x2=1;

while(day>0)

{x1=(x2+1)*2; x2=x1; day--;

}

printf(\"the total is %d\\n\ } main() {

int day,x=1;

for(day=9;day<=1;day- -) x=(x+1)*2;

printf(\"the total is %d\\n\

}

 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各

位数字。  分析:当num1!=0时,

 分离个位数n,位数k++,同时num2=num2*10+n  丢去num1的个位数,并重复以上操作 main()

{long num1, num2=0; int k=0, n; scanf(“%ld”, &num1); while (num1!=0)

{k++; n=num1%10; num2=num2*10+n; num1=num1/10;}

printf(“num1是一个%ld位数\\n”, k); printf(“num2=%d\\n”, num2);

}

 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方

数,请问该数是多少?

 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后

再开方,如果开方后的结果满足如下条件,即是结果。 #include \"math.h\" main() {

long int i,x,y,z;

for (i=1;i<100000;i++) { x=sqrt(i+100);

y=sqrt(i+268);

if(x*x==i+100&&y*y==i+268) printf(\"\\n%ld\\n\

} }

 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密

的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 main() {int a,i,aa[4],t;

scanf(\"%d\

aa[0]=a%10; aa[1]=a%100/10; aa[2]=a%1000/100; aa[3]=a/1000; for(i=0;i<=3;i++)

{aa[i]+=5; aa[i]%=10; } for(i=0;i<=3/2;i++)

{t=aa[i]; aa[i]=aa[3-i]; aa[3-i]=t; }

for(i=3;i>=0;i--)

printf(\"%d\ }

 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第

三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....  即从第三项开始,其每一项是前两项之和 main()

{ long f1,f2; int i;

f1=f2=1;

for(i=1;i<=20;i++)

{ printf(\"%12ld %12ld\ if(i%2==0) printf(\"\\n\"); f1=f1+f2; f2=f1+f2;

} }

 题目:打印出杨辉三角形(要求打印出10行如下图)

1.程序分析:  1

1 1 1 1

1

2 1

3 3 1

4 6 4 1

1 5 10 10 5 1

main()

{int i, j, a[10][10]; printf(\"\\n\"); for(i=0;i<10;i++)

{a[i][0]=1; a[i][i]=1;} for(i=2;i<10;i++)

for(j=1;ja[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf(\"%5d\ printf(\"\\n\"); }

}

冒泡排序法:从键盘上输入一组数,将其按从大到小的顺序输出。 算法描述:

(1)每每相邻的两个数比较,使得大数下沉,小数上浮(内循环共进行n-1次); (2) 反复进行以上操作,直到所有的数排序结束(外循环共n-1轮)

(3)若要提高效率,可以改变内循环次或加上标志位的方法 #include “stdio.h” main()

{ int a[10], i, j, temp;

for (i=0; iif (a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1];a[j+1]=temp;} for (i=0; i设有N个人围坐在圆桌周围,从每个位置开始用自然数进行编码为1、2、3、……N。然后成编号为K的人从1开始报数,数到M的人便出列;下一个人(第M+1个)人由从一开始报数,数到M的人便使第二个出列的人。如此下去,直到最后一个人出列为止。要求输出这个序列的顺序。

a[ i ]=1 在位置上

a[ i ]=0 不在位置上,已出列

sum=0

若sum==0 一人出列,打印其位置,sum清0 sum=0

若sum==0 一人出列,打印其位置,sum清0

因篇幅问题不能全部显示,请点此查看更多更全内容

Top