C语言复习题整理 下载本文

C.不允许直接递归调用,但允许间接递归调用 D.既允许直接递归调用,也允许间接递归调用 5.一个函数返回值的类型取决于( C )。

A.return语句中表达式的类型 B.调用函数时临时指定 C.定义函数时指定或缺省的函数类型 D.调用该函数的主调函数的类型 6.下面叙述中,错误的是( C )。

A.函数的定义不能嵌套,但函数调用可以嵌套 B.为了提高可读性,编写程序时应该适当使用注释

C.变量定义时若省去了存储类型,系统将默认其为静态型变量 D.函数中定义的局部变量的作用域在函数内部

7.在一个源程序文件中定义的全局变量的有效范围为( C )。

A.一个C程序的所有源程序文件 B.该源程序文件的全部范围 C.从定义处开始到该源程序文件结束 D.函数内全部范围

8.某函数在定义时未指明函数返回值类型,且函数中没有return语句,现若调用该函数,则正确的说法是( D )。

A.没有返回值 B.返回一个用户所希望的值 C.返回一个系统默认值 D.返回一个不确定的值

9.函数swap(int x, int y)可实现对x和y值的交换。在执行如下定义及调用语句后,a和b的值分别为( B )。

int a=10, b=20; swap (a,b );

A.10和10 B.10和20 C.20和10 D.20和20 10.下面错误的叙述是( D )。

A.在某源程序不同函数中可以使用相同名字的变量 B.函数中的形式参数是局部变量

C.在函数内定义的变量只在本函数范围内有效

D.在函数内的复合语句中定义的变量在本函数范围内有效

二、程序填空

1.求s=1!+2!+3!+…+10!之和。 程序如下:

#include long int factorial(int n) {

int k=1; long int p=1; for(k=1; k<=n; k++)

【1】p=p*k; ; return p; } main( ) {

int n; float sum=0;

for(n=1;n<=10;n++)

【2】sum=sum+factorial(n); ; printf(\}

2.以下函数用以求x的y次方。

double fun (double x, int y) {

int i; double m=1;

for ( i=1; i 【3】<=y或

三、阅读程序并写出运行结果

1.下面程序运行的结果是_____2,4,,6,8________: #include #define MAX_COUNT 4 void fun( ); main( ) {

int n;

for(n=1; n<=MAX_COUNT; n++) fun( ); }

void fun( ) {

static int k; k=k+2;

printf (\}

4.下面程序运行的结果是___8,17______:

#include int fun(int x, int y) {

static int m=0, n=2; n+=m+1; m=n+x+y; return m; }

main( ) {

int j=4, m=1, k; k=fun(j, m); printf (\ k=fun(j,m); printf(\}

题解5 数 组

5.1 习题 一、选择题

1.在下列数组定义、初始化或赋值语句中,正确的是( C )。

A.int a[8]; a[8]=100; B.int x[5]={1,2,3,4,5,6}; C.int x[ ]={1,2,3,4,5,6}; D.int n=8; int score[n]; 2.若已有定义:int i, a[100]; 则下列语句中不正确的是( C )。

A.for ( i=0; i<100; i++ ) a[i]=i;

B.for ( i=0; i<100; i++ ) scanf ( \C.scanf (\

D.for ( i=0; i<100; i++ ) scanf ( \3.与定义char c[ ]={\不等价的是( C )。

A.char c[ ]={ 'G', 'O', 'O', 'D', '\\0'}; B.char c[ ]=\

C.char c[4]={\ D.char c[5]={ 'G', 'O', 'O', 'D', '\\0'}; 4.若已有定义:char c[8]={\则下列语句中不正确的是( D )。

A.puts (c); B.for ( i =0; c[i]!= '\\0'; i ++ ) printf (\c[i]); C.printf (\ D.for ( i =0; c[i]!= '\\0'; i ++ ) putchar ( c ); 5.若定义a[ ][3]={0,1,2,3,4,5,6,7}; ,则a数组中行的大小是( B )。

A.2 B.3 C.4 D.无确定值 6.以下程序的运行结果是( B )。

#include void f ( int b[ ] ) {

int i=0;

while(b[i]<=10) { b[i]+=2; i++; } } main( ) {

int i, a[ ]={ 1, 5,10, 9,13, 7}; f (a+1);

for(i=0; i<6; i++) printf(\}

A.2 7 12 11 13 9 B.1 7 12 11 13 7 C.1 7 12 11 13 9 D.1 7 12 9 13 7 7.若执行以下程序段,其运行结果是( D )。

char c[ ]={'a', 'b', '\\0', 'c', '\\0'}; printf ( \

A.ab c B.'a''b' C.abc D.ab 8.数组名作为参数传递给函数,作为实际参数的数组名被处理为( D )。

A.该数组长度 B.该数组元素个数

C.该函数中各元素的值 D.该数组的首地址 9.执行下面的程序段后,变量k中的值为( D )。

int k=3, s[2]={1}; s[0]=k; k=s[1]*10;

A.不定值 B.33 C.30 10.在定义 int a[5][4];

之后;对a的引用正确的是( C )。

A.a[2][4] B.a[5][0] C.a[0][0] D.a[0,0]

11.当接受用户输入的含空格的字符串时,应使用函数( B )。

A.scanf( ) B.gets( ) C.getchar( ) D.getc( )

二、程序填空

1.以下程序用来检查二维数组是否对称(即对所有i,j都有a[i][j]=a[j][i])。

#include main ( ) {

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

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

if ( 【1】【1】a[i][j]!=a[j][i] ) {

found= 【2】1 ; break; }

if (found) break; }

if (found) printf (\不对称\\n\ else printf(\对称\\n\

D.0