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 { 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 { 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 { 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 { 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;i 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一 个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一 天剩下的一半零一个。到第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; i a[ i ]=1 在位置上 a[ i ]=0 不在位置上,已出列 sum=0 若sum==0 一人出列,打印其位置,sum清0 sum=0 若sum==0 一人出列,打印其位置,sum清0 因篇幅问题不能全部显示,请点此查看更多更全内容