C语言期末复习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选择题
1、以下不是C语言基本数据类型的是D。
A.字符型B.
C.整型D.构造类型
2、以下B是八进制数。
A.1X12 B.123
C.1001 D.0123
3、Turbo C中,char类型变量所占字节数是B。
A. 2 B. 1
C. 3 D. 4
4、C语言提供的合法的数据类型关键字是B。
A.longer B.short
C.integer D.character
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 ) ;
}
A.10 B.11
C.13 D. 3
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 B.A, B
C.A, b D.a, b
10、以下程序的输出结果是C。
#include "stdio.h"
#include "math.h"
main()
{ int a=3, b=9 ;
float y, x=1.2 ;
y= ( a+b ) / sqrt ( b ) * x ;
printf ( "%\n", y ) ; }
A. 1.000000 B. 1.400000
C. 4.800000 D. 1.900000
11、以下程序段的输出结果是7 6 7。
【提示: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 B. 1
C. 3 D.0
15、下列程序执行后,屏幕上显示B。
int j = 2, i = 1 ;
j /= i*j ;
printf ( "%d\n", j ) ;
A. 2 B. 1
C. 3 D.0
16、设有定义:int k=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是D。
A.k++ B.k+=1
C.++k D.k+1
17、以下程序的输出结果是 _____A_____。
# include <string.h>
main( )
{ printf ( "%d\n", strlen ("IBM\n012\1\\" ) ) ;
}
A.9 B.7
C.11 D.10
18、下列叙述中,不是C语言特点的是B。
A.简洁、紧凑,使用方便、灵活,易于学习和掌握
B.C语言是面向对象的程序设计语言
C.C语言允许直接对位、字节和地址进行操作
D.C语言数据类型丰富,生成的目标代码质量高
19、C语言程序的大小写字母是D。
A.都不加区分B.变量不加区分
C.字符串不加区分D.字符串中区分
20、C语言程序是由C组成。
A.子程序B.主程序和子程序
C.函数D.过程
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 B.file
C.Main 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 B.file
C.Main 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 1: printf ("*\n");
case 2.0: printf("**\n"); } case 2: printf ("**\n"); } C.switch ( x+y ) D.switch ( x+y ) ;
{ case 1: printf ("*\n"); { case 1: printf ("*\n");
case 1+2: printf ("**\n"); } case 2: printf ("**\n"); } 32、以下由while构成循环的次数是D。
int i = 1 ;
while ( i == 1 ) i++;
A.执行无限次B.语法错
C.一次也不执行D.执行1次
33、以下程序的输出结果是D。
main ( )
{ int i , mul ; mul没有初始化
for ( i = 1; i < 3; i++ ) mul *=1;
printf( "%d\n", mul ); }
A. 3 B. 6
C. 1 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
37、以下程序段的执行结果是B。
main ()
{ int x = 23 ;
do
{ printf ("%d\n", x-- ); }while ( !x ) ;
printf ("%d\n", x ); }
A.3221 B.23
22
C.不输出任何内容D.陷入死循环
38、若从键盘输入5□6以下程序的执行结果是C。
main ()
{ int x, y, m ;
scanf ("%d %d", &x, &y );
m=x ;
if ( x < y ) m = y ;
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的值为。
main ()
{ int a = 1, b = 10 ;
do
{ b -= a; a++ ; }while ( b -- < 0 ) ; b先引用后自加
printf ( "%d\n", a ); }
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
45、下列程序的输出结果是D。
main ()
{ int n = 10 ;
while ( n -- ) ;
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 )B.( E > 0 ) && ( E < 0 )
C.( 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 B.10 0
C.20 10 D.20 0
50、如果从键盘输入9,则以下程序的执行结果是B。
main ()
{ int n ;
scanf ( “%d”, &n ) ;
if ( n++<10 ) printf( "%d\n", n ) ;
else printf ( “%d\n”, n-- ) ;
}
A.9 B.10
C.8 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 B. 1
C.0 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, b);
}
A. a = 2, b = 1 B.a=3, b = 2
C. a = 4, b = 3 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 <stdio.h>
main( )
{ char ch ;
while ( ( ch = getchar ( ) ) == '0' ) printf ( "#" ) ;
}
A.执行10次B.执行9次
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 B.29 59 89
C.不打印任何内容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" }; B.strcpy ( str1, str2 );
C.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", &n );
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", x[ i ][ 2-i ] );
A. 7 5 3 B.7 4 1
C.9 5 1 D.9 6 3
65、以下程序的输出结果是B。
main()
{ char a[]={'\1','\2','\3','\4','\0'};
printf("%d %d\n",sizeof(a) ,strlen(a) );
}
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' };
printf("%d %d\n",strlen(x),strlen(y));
A.x数组和y数组的长度相同B.x数组的长度大于y数组的长度
C.x数组等价于y数组D.x数组的长度小于y数组的长度
67、若有语句long b [3 ][ 3]={ {1, 2 }, {9, 8}, {{ 7 } };则b[ 1 ][ 1 ]的值为C。
A. 1 B.7
C.8 D.9
68、在数组中,数组名表示A。
A.数组第一个元素的首地址B.数组第一个元素的首地址
C.数组所有元素的首地址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", m[ k ][ i ] );
}
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 B.8, 9. 8, 10
C.9, 8, 10, 8 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", 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 ] );
}
A. 1 2 3 4 5 B. 2 3 4 5 1
C. 1 1 2 3 4 D. 5 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 3 4
6 7 8
11 12
16
A.0 B.i
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 ] );
}
A. 1 2 3 4 5 6 B. 6 5 4 3 2 1
C. 4 5 6 1 2 3 D. 3 4 5 6 1 2
77、以下程序的运行结果是A。
main ()
{ 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 B.40
C. 4 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 B.7
C.28 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", x, y );
}
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", x, y );
}
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", a, k ) ;
}
A. 4, B B. 4, B C. 4, B D. 4, B
4, B 8, B 4, C 8, C
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", f6 ( 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 );
}
A.m =5 k = 10 B. m = 4 k = 8
i = 5 k = 11 i = 5 k = 9
C.m =5 k = 11 D.m = 4 k = 9
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", *p ); B.scanf ( "%d", **p );
C.scanf ("%d", &p ); D.scanf ( "%d", p );
97、以下正确的叙述是A。
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; B.*p = *&y;
C.x = &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' B.字符'1'
C.字符'2' 的地址D.不确定
102、下列程序的输出结果是C。
main ()
{ char a[ 10 ] = { 9, 8, 7, 6, 5, 4, 3, 2, 1 }, *p = a + 5;
printf ( "%d", * --p ); }
A.非法B.a[ 4 ] 的地址
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 );
}
A. 6 B.3
C. 2 D.1 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 );
}
A.1, 2, 3 B.4, 5, 6 C.3, 6, 9 D.3, 4, 2 107、以下程序的运行结果是B。
void fun ( int *x )
{ printf ( "%d\n", -- *x ); }
main ()
{ int a =2;
fun ( &a );
}
A. 2 B.1
C.0 D.-1 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 B.6 3
C.编译出错D.0 0 109、以下程序段的执行结果是B。
static char a[ ] = "Program";
char * ptr;
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;
C.struct v2; v2.x = 10; D.struct example v2 = { 10 }; 113、已知:struct {
int i ;
char c ;
float a ; } ex;
则sizeof( ex )的值是D。
A. 4 B.5
C. 6 D.7
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 );
}
A.7 B.9
C.13 D.16
115、若有如下定义,则对data中a成员的正确引用是B。
struct sk {
int a ;
float b ; } data, *p = &data ;
A.(*p).data.a B.(*p).a
C.p->data.a D.p.data.a
116、C语言的文件类型只有C
A.索引文件和文本文件两种B.文本文件一种
C.ASCII文件和二进制文件两种D.二进制文件一种
117、C语言中文件的存取方式C。
A.只能顺序存取B.只能随机存取(直接存取)
C.可以顺序存取,也可随机存取D.只能从文件头进行存取
118、若fp为文件指针,且文件已正确打开,以下语句的输出结果为B fseek ( fp, 0, SEEK_END );
i = ftell ( fp );
printf ( "i = %d\n", i );
A.fp所指文件的记录长度
B.fp所指文件的长度,以字节为单位
C.fp所指文件的长度,以比特为单位
D.fp所指文件的当前位置,以字节为单位
119、以下各项中,函数fopen中第一个参数的正确格式是D。
A.c: user \ text . txt B.c: \user \ text . txt
C."c: \ user \ 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 <stdio.h>
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" ) B.fopen (fname , "rt" )
C.fopen (fname, "at" ) D.fopen ( fname , "tb" )
A.ch, fp B.ch, fname
C.ch D.fp, ch
122、下面程序的功能是C
#include<stdio.h>
main()
{ FILE *point1, *point2;
point1 = fopen ( "file1.ASC", "r" );
point2 = fopen ( "file2.ASC", "w" );
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",n);
}
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 <iostream.h>
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", C);
printf("D %d\n", D); printf("E %d\n", E); }};
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\tb--%c\tc--%c\n",i,j,k);
}
}
}
}
题目:输入两个正整数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",&a,&b);
while(b!=0) /*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:%d\n",a);
素数问题:从键盘上任意输入一个十进制整数,判断该数是否是一个素数。
若是,则输出“该数是素数”;否则输出“该项数不是素数”。
算法分析:
(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<n/2; i++)
if (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",x1);
}
main()
{
int day,x=1;
for(day=9;day<=1;day- -)
x=(x+1)*2;
printf("the total is %d\n",x);
题目:给一个不多于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",i);
}
}
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
main()
{int a,i,aa[4],t;
scanf("%d",&a);
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",aa[i]);
}
古典问题:有一对兔子,从出生后第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",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2;
f2=f1+f2;
}
}
题目:打印出杨辉三角形(要求打印出10行如下图)
1.程序分析:
1
1 1
1 2 1
1 3 3 1
14 6 4 1
151010 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;j<i;j++)
a[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",a[i][j]);
printf("\n");
}
}
冒泡排序法:从键盘上输入一组数,将其按从大到小的顺序输出。
算法描述:
(1)每每相邻的两个数比较,使得大数下沉,小数上浮(内循环共进行n-1次);
(2)反复进行以上操作,直到所有的数排序结束(外循环共n-1轮)
(3)若要提高效率,可以改变内循环次或加上标志位的方法
#include “stdio.h”
main()
{ int a[10], i, j, temp;
for (i=0; i<n-1;i++) scanf(“%5d”, a[i]);
for (i=0; i<n-1; i++)
for (j=0; j<n-1; j++)
if (a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1];a[j+1]=temp;}
for (i=0; i<n-1;i++) printf(“%5d”, a[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。