C语言复习题

一、选择题

1.源程序TEST.C经编译产生的目标文件和连接后产生的可执行文件是(B)。
A.TEST.BAK和TEST.OBJ       B.TEST.OBJ和TEST.EXE
C.TEST.EXE 和TEST.C          D.TEST.BAK和TEST.EXE

2.以下选项中合法的实型常数是(C)。
A.5E2.0     B.E-3     C.2E0    D.1.3E

3.字符串“ABC”在内存中占用的字节数是(B)。
A.3     B.4     C.6     D.8

4.在C语言中,要求运算数必须是整型的运算符是(D)。
A./     B.++     C.!=     D.%

5.若有以下类型说明语句:char w ; int x ; float y ; double z ; ,则表达式w * x + z - y的结果为(D)类型。
A.float     B.char     C.int     D.Double

6.若x和y代表整型数,以下表达式中不能正确表示数学关系|x―y|<10的是(C)。
A.abs( x – y ) < 10                             B.x – y > -10 && x – y < 10
C.!( x – y ) < -10 || !( y – x ) > 10       D.( x – y ) * ( x – y ) < 100

7.已知char a = ‘\103’ ;则语句printf( “%3d” , a ) ; 执行后的输出结果为(C)。
A.67     B.‘C’     C. 67     D.103

8.以下针对scanf()函数的叙述中,正确的是(D)。
A.输入项可以为一实型常量,如scanf( “%f” , 3.5 ) ;
B.只有格式控制,没有输入项,也能进行正确输入,如scanf( “a=%d, b=%d” ) ;
C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如:scanf( “%4.2f” , &f ) ;
D.当输入数据时,必须指明变量的地址,如scanf( “%f” , &f ) ;

9.设变量a、b和c已正确定义并赋值,则以下符合C语言语法的表达式是(A)。
A.a+=7     B.b+c=a=7     C.a=12.3%4     D.a=a+7=c+b

10.为了避免嵌套的if-else的二义性,C语言规定,else与(B)配对。
A.与最外层的if         B.其之前最近的不带else的if
C.其之后最近的if     D.与最近的{ }之前的if

11.有以下程序段
int k = 10 ;
while( k = 0 ) k = k - 1 ;
则下面描述中正确的是(C)。
A.while循环执行10次               B.循环是无限循环
C.循环体语句一句也不执行     D.循环体语句执行一次

12.C语言中while和do-while循环的主要区别是(A)。
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句

13.若 i为整型变量,则以下循环执行次数是(B)。
for( i = 2 ; i == 0 ; ) printf( “%d” , i-- ) ;
A.无限次     B.0次     C.1次     D.2次

14.若希望当a的值为奇数时,表达式的值为真;a的值为偶数时,表达式的值为假则以下不能满足要求的表达式是(C)。
A.a%2== 1     B.!(a%2==0)     C.!(a%2)     D.a%2

15.关于break和continue,以下说法正确的是(B)。
A.break语句只应用在循环体中
B.continue语句只应用在循环体中
C.break是无条件跳转语句,continue不是
D.break和continue语句的跳转范围不够明确,容易产生错误

16.若变量已正确定义,则以下次能正确计算f=n!的程序段是(B)。
A.for(f=0,i=1;i<=n;i++)f*=i;        B.for(f=1,i=1;i<=n;i++)f*=i;
C.for(f=1,i=1;i>1;i–)f*=i;            D.for(f=1,i=1;i>=2;i–)f*=i;

17.在C语言中,引用数组元素时,其数组下标的数据类型不允许是(D)。
A.整型常量                       B.整型表达式
C.整型常量或整型表达式 D.任何类型的表达式

18.以下对二维数组a的正确说明是(C)。
A.int a[3][ ];              B.float a(3)(4);
C.double a[ ][4] ;     D.float a(3,4);

19.以下对数组s的初始化,错误的是(D)。
A.char s[5] = { “abc” } ;        B.char s[5] = { ‘a’ , ‘b’ , ‘c’ } ;
C.char s[5] = “” ;                  D.char s[5] = “abcde” ;

20.设有如下定义,则正确的叙述为(B)。
char x[ ]={“abcdefg”};
char y[ ]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’};
A.数组x和数组y等价           B.数组x的长度大于数组y的长度
C.数组x和数组长度相等     D.数组x的长度小于数组y的长度

21.若有定义 int a[ ][3]={{1,2},{3,4}};,则数组a 中的共有(C)个元素。
A.4     B.5     C.6     D.不定

22.下面程序段的运行结果是(C)。
#include<stdio.h>
int main( )
{
int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ;
for( i = 0 ; i < 3 ; i++ )
printf( “%2d” , x[i][2-i] ) ;
return 0 ;
}
A.1 5 9     B.1 4 7     C.3 5 7     D.3 6 9

23.判断字符串s1是否大于字符串s2,应当使用(D)。
A.if( s1>s2 )                    B.if( strcmp( s1 , s2 ) )
C.if( strcpy( s1 , s2 ) )     D.if( strcmp( s1 , s2 )>0 )

若一个函数没有返回值,那么该函数的类型是(D)。
A.int     B.char     C.float     D.void

25.以下说法不正确的是(B)。
A.实参可以是常量、变量或表达式
B.形参可以是常量、变量或表达式
C.形参可以为任意类型
D.形参应与其对应的实参类型一致

26.C语言规定,函数返回值的类型是由(D)。
A.return语句中的表达式类型所决定
B.调用该函数时的主调函数类型所决定
C.调用该函数时系统临时决定
D.在定义该函数所指定的函数类型所决定

27.凡在函数中未指定存储类型的局部变量,其隐含的存储类型为(A)。
A.自动( auto )            B.静态( static )
C.外部( extern )        D.寄存器(register)

28.若有说明:int *p , n ; 以不正确的程序段是(C)。
A.scanf( “%d” , &n ) ;        B. scanf( “%d” , &n ) ;
                        *p = n ;                                 p = &n ;
C.         p = &n ;                D.    p = &n ;
      scanf( “%d”, &p ) ;                 scanf( “%d” , p ) ;

29.若有定义:int a[5] ; 则a数组中首元素的地址可以表示为(C)。
A.&a     B.a + 1     C.a     D.&a[1]

30.设有以下定义和语句
int a[3][2] = {1 , 2 , 3 , 4 , 5} , p[3] ;
p[0] = a[1] ;
( p[0] + 1 )所代表的数组元素是(C)。
A.a[0][1] B.a[1][0] C.a[1][1] D.a[1][2]

二、填空题

1.结构化程序由_顺序_、分支、_循环_3种基本结构组成。

2.设所有变量均为整型,则表达式( a = 2 , b = 5 , a++ , b++ , a + b )的值为_9_。

3.a是int型变量,且a的初值为6,则计算表达式a += a -= a * a后a的值为_-60_。

4.设y是int型变量,请写出判断y为奇数的关系表达式_y%2==1_。

5.下面程序的运行结果是_10, 2_。
#include<stdio.h>
int main( )
{
int x = 10 , y = 3 ;
printf( “%d,%d\n” , x++ , --y ) ;
}

6.下面程序的运行结果是_3,20,30,1_。
#include<stdio.h>
int main( )
{
int a = 2 , b=20 , c=30 , d ;
d = ++a <= 10 || b-- >= 20 || c++ ;
printf( “%d,%d,%d,%d\n” , a , b , c , d ) ;
}

7.下面程序的运行结果是_20_。
#include<stdio.h>
int main( )
{
int n = 0 ;
n += ( n = 10 ) ;
printf( “%d\n”, n ) ;
}

8.下面程序的运行结果是_6_。
#include<stdio.h>
int main( )
{
int m = 5 ;
if(m++ > 5) printf( “%d\n” , m ) ;
else printf( “%d\n” , m-- ) ;
}

9.下面程序的运行结果是_c=-1_。
#include<stdio.h>
int main( )
{
int a = 1 , b = 2 , c = 3 ;
if( a > b ) c = 1 ;
else
if( a == b ) c = 0 ;
else c = -1 ;
printf( “c=%d” , c ) ;
}

10.下面程序的运行结果是_20,0_。
#include<stdio.h>
int main( )
{
int x = 10 , y = 20 , t = 0 ;
if( x == y ) t = x ; x = y ; y = t ;
printf( “%d,%d\n” , x , y ) ;
}

11.下面程序的运行结果是_2,1_。
#include<stdio.h>
int main( )
{
int x = 1 , a = 0 , b = 0 ;
switch( x )
{
case 0 : b++ ;
case 1 : a++ ;
case 2 : a++ ; b++ ;
}
printf( “%d,%d” , a , b ) ;
}

12.下面程序的运行结果是_A2C4E6_。
#include<stdio.h>
int main( )
{
char c1 , c2 ;
int a ;
c1 = ‘1’ ;
c2 = ‘A’ ;
for( a = 0 ; a < 6 ; a++ )
{
if( a % 2 )
putchar( c1 + a ) ;
else
putchar( c2 + a ) ;
}
}

13.下面程序的运行结果是_4_。
#include<stdio.h>
int main( )
{
int i ,x[10] = {2 , 3 , 0 , 3 , 0 , 2 , 3 , 2 , 1 , 3} ,y[4] = {0} ;
for( i = 0 ; i < 10 ; i++ )
y[x[i]]++ ;
printf( “%d\n” , y[3] ) ;
}

14.下面程序的运行结果是_mo_。
#include<stdio.h>
int main( )
{
char a[ ]= “morning” , t ;
int i , j = 0 ;
for( i = 1 ; i < 7 ; i++ )
if( a[j] < a[i] )
j = i ;
t = a[j] ; r
a[j] = a[7] ;g
a[7] = a[j] ;r
puts( a ) ;
}

15.下面程序的运行结果是_4_。
#include<stdio.h>
int main( )
{
int a = 1 , b ;
for( b = 1 ; b <= 10 ; b++ )
{
if( a >= 8 )
break ;
if( a % 2 == 1 )1 2 3
{
a += 5 ;
continue ;
}
a = a - 3 ;
}
printf( “%d\n” , b ) ;
return 0 ;
}

16.下面程序的运行结果是_a=1,b=2_。
#include<stdio.h>
int main( )
{
void f( int x , int y ) ;
int a = 1 , b = 2 ;
f( a , b ) ;
printf( “a=%d,b=%d\n” , a , b ) ;
}
void f( int x , int y )
{
x = 100 ;
y = 200 ;
}

17.下面程序的运行结果是_7 8 9_。
#include<stdio.h>
int main( )
{
int f( int a ) ;
int a = 2 , i ;
for( i = 0 ; i < 3 ; i++ )
printf( “%4d” , f( a ) ) ;
}
int f( int a )
{
int b = 0 ;
static int c = 3 ;
b++ ;
c++ ;
return ( a + b + c ) ;
}

18.下面程序的运行结果是_gae_。
#include<stdio.h>
int main( )
{
char a[ ] = “Language” , b[ ] = “Programe” ;
char *p1 , *p2 ;
int k ;
p1 = a ;
p2 = b ;
for( k = 0 ; k <= 7 ; k++ )
if( *( p1 + k ) == *( p2 + k ) )
printf("%c" , *( p1 + k ) ) ;
}

19.下面程序的运行结果是_7,8,8_。
#include<stdio.h>
int *f( int *x , int *y )
{
if( *x + 5 < *y ) return x ;
else return y ;
}
int main( )
{
int a = 7 , b = 8 , *p , *q , *r ;
p = &a ; q = &b ;
r = f( p , q ) ;
printf( “%d, %d, %d\n” , *p , *q , *r ) ;
}

20.下面程序的运行结果是_3 1 4 2_。
#include<stdio.h>
void fun( int *a , int *b )
{
printf( “%d %d\n” , *a , *b ) ;
*a = 2 ; *b = 4 ;
}
int main( )
{
int x = 1 , y = 3 ;
fun( &y , &x ) ;
printf( “%d %d\n” , x , y ) ;
}

三、编程题

1.编写一个程序,读入一个字母,输出与之对应的ASCII码值。
#include<stdio.h>
int main()
{
char ch;
printf(“输入一个字符:\n”);
scanf("%c", &ch);
printf(“对应的ASCII为%d”, ch);
return 0;
}

2.编写一个程序,读入一个大写字母,输出与之对应的小写字母及小写字母的ASCII码。
#include<stdio.h>
int main()
{
char ch;
printf(“输入一个大写字母:\n”);
scanf("%c", &ch);
printf(“对应的小写字母为%c,ASCII码为%d”, ch+32,ch+32);
return 0;
}

3.请编程输出如下图形:
*
***
*****
*******
#include<stdio.h>
int main()
{
for (int i = 1; i <= 4; i++)
{
for ( int j = 1; j <= 4 - i; j++)
{
printf(" “);
}
for ( int k = 1; k <= 2 * i - 1; k++)
{
printf(”*");
}
printf("\n");
}
return 0;
}

3.编写一个程序,计算6╳6的矩阵的主对角线之和。
int main()
{
int a[6][6] = { { 1,2,3,4,5,6 },
{ 7,8,9,10,11,12},
{ 13,14,15,16,17,18},
{19,20,21,22,23,24},
{25,26,27,28,29,30},
{31,32,33,34,35,36} };
int sum = 0;
for (int i = 0; i < 6; i++)
{
sum += a[i][i];
}
printf("%d",sum);
return 0;
}
4.编程打印杨辉三角形的前10行10列的值。
#include<stdio.h>
int main()
{
int a[10][10];
int i, j;
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("%d “, a[i][j]);
printf(”\n");
}
return 0;
}

5.编写函数sum求1到n的和,通过调用该函数,求出100以内能使函数值等于n2-1的所有正整数。
#include<stdio.h>
void sum();
int main()
{
sum();
return 0;
}
void sum()
{
int Sn = 0;
int i = 1;
while (Sn <= 100)
{
Sn += i;
printf("%d nn-1=%d\n", Sn, ii - 1);
if (i*i - 1 == Sn)
{
printf("%d\n", Sn);
}
i++;
}
}
每文一句:走得最慢的人,只要他不丧失目标,也比漫无目的地徘徊的人走得快。

发布了15 篇原创文章 · 获赞 41 · 访问量 6142

猜你喜欢

转载自blog.csdn.net/Fdog_/article/details/103845789