C语言题目

更新时间:2024-04-22 00:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

概述

1、C语言规定:在一个源程序中,main函数的位置( D )。 A.必须在最后 B.必须在系统调用的库函数的后面。 C.必须在最开始。 D.可以任意 2、下列说法中正确的是(C )。

A. C程序书写时,不区分大小写字母 B. C程序书写时,一行只能写一个语句 C. C程序书写时,一个语句可分成几行书写 D. C程序书写时每行必须有行号 3、以下说法中正确的是(C )

A、C语言程序总是从第一个定义的函数开始执行

B、在C语言程序中,要调用的函数必须在main()函数中定义 C、C语言程序总是从main()函数开始执行

D、C语言程序中的main()函数必须放在程序的开始部分 4、组成C语言程序的基本单位是( C )。

A) 过程 B) 子程序

C) 函数 D) 主程序和子程序 5、以下叙述正确的是(C)。

A. C语句前面必须有行号 B. C程序中每行只能写一条语句 C. C语言本身没有输入输出语句 D. 注释必须跟在一行语句的后面 9、以下关于C语言的描述错误的是(C)

A.C语言中不同类型的变量可以出现在同一个表达式在中

B.在赋值表达式中赋值运算符(=)左边的变量和右边的值可以是不同类型 C.C语言的函数可以嵌套定义和嵌套调用

D.C语言编写的函数都可以作为一个独立的源程序文件

标识符

1、C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符__A______。 A)必须为字母或下划线。 B)必须为下划线。

C)必须为字母 D)可以是字母、数字和下划线中的任一种字符。 2、以下标识符中,不能作为合法的C用户定义标识符的是:(B )

A .a3_b3 B. void C._123 D.abc 3、以下不能定义为用户标识符是 (D)

A Main B _0 C _int D sizeof 4、下列哪个标识符是C语言合法的标识符(C )。

A) a*b B) –xyz C) ba2 D) 5i 5、下列字符串是合法的标识符的是( A )。 A、_HJ B、9_student C、 long D、LINE 1 6、在C语言提供的合法的关键字是(A ) A、switch B、cher C、Case D、sturct 7、下面四个选项中,合法的用户自定义标识是( A )。

(A) int

(B) a_b3 (C) 3_bc (D) #mm

数据类型

1、C语言中基本的数据类型包括______B____。

A) 整型、实型、逻辑型 B) 整型、实型、字符型

C) 整型、字符型、逻辑型 D) 整型、实型、逻辑型、字符型 2、C语言中基本的数据类型不包括____B______。 A) 整型 B)字符串型 C)字符型 D)实型

整型

1、C语言中,int类型数据占2个字节,则long类型数据占(D )

A、1个字节 B、2 个字节 C、3个字节 D、4个字节 2、在C语言中,负整数以(A )形式存放。

A、补码 B、BCD码 C、反码 D、进制数 3、下列不合法的C语言整型常量是(A ) A、095 B、139 C、0xff D、010 4、以下程序

main() {

int i=010,j=10,k=0x10; printf(\}输出结果是( A )

A.8,10,16 B.8,10,10 C.10,10,10 D.10,10,16 5、下面程序的输出是__D____ main() {

int k=11;

printf(\ }

A) k=11,k=12,k=13 B) k=11,k=13,k=13 C) k=11,k=013,k=oXb D) k=11,k=13,k=b 6、下面程序的输出是(假设 int 数据是 2 个字节)C void main()

{ int a = 32768;

printf(“a=%d\\n”,a); }

A) a=32768 B) a=32767 C) a=-32768 D) a=-1

字符型

1、下列合法的字符常量是(B )。

A、'\\084' B、'\\x43' C、'ab'

D、\

2、以下合法的字符常量是( B )。 A) “a” (B) ?\\72? (C) ?\\0x12? (D) ?ab? 3、下列合法的字符常量是( D )。

A、“\\0” B、?ab? C、12 D、?\\117? 4、设有语句char a=?\\072?;,则变量a(A )。

A.说明不合法 B.包含2个字符 C.包含3个字符 D.包含1个字符 5、以下程序运行后的输出结果是(B) 。 main() { char m;

m='B'+32; printf(\}

A、B B、b C、98 D、a 6、若有以下定义和语句

char c1='b',c2='e';

printf(\,c2-c1,c2-'a'+\; 则输出结果是: ( B )

A、2,M B、3,E C、2,E D 、3, M

7、已知在ASCII字符集中,数字0的序号为48,下面程序的输出结果为(A) main() {

char x,y; x=?0?;y=?9?;

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

A.因输出格式不合法,输出错误信息 B.48,57

C.0,9 D.48,58

赋值运算符

1、已知ch是字符型变量,下面不正确的赋值语句是 (B )。

A.ch = 5 + 9 ; B.ch= ' a + b '; C. ch = ' \\ 0 '; D. ch= '7' + '6' ; 2、已知ch是字符型变量,下面正确的赋值语句是(C )。

A.ch = '123' ; B. ch=' \\08 '; C. ch =' \\xff '; D.ch =\ 3、若变量已定义并赋值,下列符合C语法的表达式是:( B )

A、a:=b+1 B、a=b=c+2 C、int 18.5%3 D、a=a+7=c+b 4、若变量均已正确定义并赋值,以下合法的C语言赋值语句是(A)。

A) x=y==5; B) x=n%2.0 C) x+n=i; D) x=5=4+1;

5、若以下选项中的变量已正确定义,则正确的赋值语句是(C)。 A) x1=26.8%3 B) x3=0x12 C) 1+2=x2 D) x4=1+2=3

6、设x和y均为int型变量,则语句:x+=y; y=x-y; x-=y; 的功能是(D)。

A.把x和y案从大到小排列 B.把x和y按从小到大排列 C.无确定结果 D.交换x和y中的值 7、若x=5,y=4 ,则y*=x +5; y的值为( D )。

A. 40 B. 20 C B. 15 D. 30

自动转化数据类型

1、在C程序中,设一表达式中包含有int,long, unsigned和char类型的变量和数据,则表达式最后的运算结果类型是 ( D )

A.int B.char C.unsigned D.long

强制转化数据类型

1、以下程序的运行结果是(1)。

#include void main() {

double f=3.64159; int n;

n=(int)(f+10)%3; printf(\

算术运算符

1、C语言中,运算对象必须是整型的运算符是___A_______。 A) % B) / C) %和/ D) *

2、若变量已正确定义并赋值,表达式___B_________不符合C语言语法。 A)a*b/c; B)3.14%2 C)2, b D)a/b/c

3、若定义int x=7,y=5,z;则表达式:z=x+5/2*y的值是_____D_____

A) 7 B) 7.5 C) 17 D) 19.5 4、若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是 C A、 2 B、 1 C、 2.0 D、2.5

5、若定义x和y为double类型,则表达式:x=2,y=x+5/2的值是___C_______ A) 4 B) 4.5 C) 4.0 D) 3.0 6、假设在程序中a,b,c均被定义为整型,并且已赋大于1的值,则下列能正确表示代数式1/abc

的表达式是( B )。

A、1/a*b*c B、1/(a*b*c) C、1/a/b/(float) c D、1.0/a/b/c 7、设a,b,c,d均为double类型,则代数式

5ad不正确的C语言表达式是(? )。 7bc(A)5*a*d/7/b/c (B)5*a/7/b*d/c (C)5/7*a/b*d/c (D)a/b*5/7*d/c 8、若有定义:int a=7; float x=2.5, y=4.7; 则表达式x+a%3*(int)(x+y)/4的值是( C )

A) 2.75 B) 3.5 C) 2.5 D) 0 9、若有定义:int a = 7; float x = 2.5 , y = 4.7 ; 则表达式 x + a % 3 * (int) (x + y) % 2/4 的值是(D )。 A. 2.750000 B. 0.00000 C. 3.500000 D. 2.500000

关系运算符

1、若要求表示 “a不等于0”的关系,则不能正确表示这一关系的表达式为(A )。

(A) a<>0 (B) a (C) a>0||a<0 (D) a!=0

2、表达式_____D_____是满足:当c的值为1、3、5三个数中任意一个时值为“真”,否则值为“假”的表达式

A) (c=1)||(c=3)||(c=5) B) (c!=1)&&(c!=3)&&(c!=5) C) (c==1)&&(c==3)&&(c=5) D) (c==1)||(c==3)||(c==5) 3、为表示数学关系x≥y≥z,正确的C语言表达式是__A________。 A) (x>=y)&&(y>=z) B) (x>=y)AND(y>=z) C) (x>=y>=z) D) (x>=y)&(y>=z) 4、设int m=1,n=2;则++m= =n的结果是( B)

A、0 B、1 C、2 D、3

逻辑运算符

1、在C语言中,逻辑值“真”用____D______表示。

A) true B) 大于0的数 C) 非0的整数 D) 非0的数 2、C语言中,逻辑“真“等价于(C )。

A、大于零的数 B、大于零的整数 C、非零的数 D、非零的整数 3、在 C 程序中,用______B_____表示逻辑值“真”。

A)1 B)非 0 的数 C)非 1 的数 D) 大于 0 的数

4、设int a=2,b;则执行b=a&&1;语句后,b的结果是( B )

A.0 B.1 C.2 D.3

5、若已经定义了一个字符型变量为a,下面哪个表达式的含义跟其余表达式不同:D

A) a!=0 B) a!=’\\0’ C) a D) !a 6、执行下面语句段的输出结果是(D )。//逻辑或优化

int i=1,j=1,k=2;

if( (j++||k++)&&i++)

printf(\18 (A) 1 , 1 , 2 (B) 2 , 2 , 1 (C) 2 , 2 , 2 (D) 2 , 2 , 3

7、以下程序的输出结果是( )。//逻辑与优化

#include \void main() {

int a=-1,b=4,k; k=(++a)&&!(b--<=0); printf(\

}

(A)1 0 4 (B)1 0 3 (C) 0 0 3 (D)0 0 4

8、若定义:int a=1,b=2,c=3,d=4,m=2,n=2;则执行(m=a>b)&&(n=c>d)后n的值为(B )。 (A)1 (B)2 (C)3 (D)4

9、若变量c为char类型,能正确判断出c为小写字母的表达式是(D )。

(A)?a?<=c<=?z? (B)(c>=?a?)||(c<=?z?) (C)(?a?<=c)and(?z?>=c) (D)(c>=?a?)&&(c<=?z?) 10、.表达式((3560)&&(-1&&1))*10的值为(B)。

A) 0 B) 1 C) 10 D) 560

11、设int x=1,y=1;表达式(!x||--y)的值是(B )。 (A)0 (B)1 (C)2 (D)-1

逗号运算符

1、若变量x和y都为int类型,x=100,y=200,下面程序段的输出结果是( A )。 printf(\

(A) 200 (B) 100 (C) 100 200 (D) 输出不确定的值 2、逗号表达式(a=3*5,a*4),a+15的值是( C )

A.15 B.60 C.30 D.75 3、设int c=5和int a; a=2+(c+=c,c+8,++c), 则a=_B__C______

A) 15 B) 14 C) 13 D) 16 4、若x,i,j和k都是int型变量,则执行下面表达式后x的值为(C)

x=(i=4,j=16,k=32)

A、4 B、16 C、32 D、520

5、设a、b都是int型变量,且a、b初始值分别为5和10,则表达式a=a+b++,b+a,b+1的值为(A)。

A) 11 B) 12 C) 15 D) 16

自增自减运算符

1、以下程序的输出结果是__D________ main()

{ int x=10,y=10;

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

A) 10 10 B) 9 9 C) 9 10 D) 10 9

位运算符

1、下面程序段的运行结果为 ( A ) 。

int a=9,b=020;

printf(\A) 40 (B) 41

2. 以下程序的结果是( A )。

#include \ void main() {

(C) 42 (D) 43

unsigned int a=3,b=10; printf(\}

(A) 1 (B) 13 (C) 12 (D) 5 3、以下程序的运行结果是(B )。

#include int main(void) {

unsigned int a=2;b=11; printf(\ return 0; }

(A)13 (B)12 (C)5 (D)1 4、执行下面程序段,B的值应为(C)。

int x=35; char z='A'; int B;

B=((x&15)&&(z<'a'));

A) 0 B) 1 C) 2 D) 3 5、表达式15|127的值是(?)。

A) 15 B) 127 C) 0 D) 1 6、以下程序的输出结果应为(?)。

#include int main(void) {

printf(“%d\\n”,23|023); return 0; }

A.0 B. 1 C.23 D.46

1、以下不正确的函数首部是(C )。 (A)f(int a) (B)fun(float a[5][]) (C)function(double *a) (D)fun(int *a[10])

2、设函数fun的定义形式为 void fun( char ch, float x ) {........}则以下对函数fun的调用语句中,正确的是(C)。

A. fun(65,32) B. fun(?65?,2.8) C. fun(“abc”,3.0) D. t=fun(?D?,16.5) 3、下列程序的输出结果是(D )。(考点:函数(地址参数和普通参数)、指针运算)

void fun(char *c,int d) {

*c=*c+1; d=d+1; }

void main()

{

char a='A',b='a'; fun(&b,a); printf(\}

(A) B,A (B) a,B (C) A,B

(D) A,b

4、有下列程序(考点:函数(地址参数)、指针运算)

# include \

void prt(int *x,int *y,int *z) {

printf(\

} void main() {

int a=10,b=40,c=20; prt(&a,&b,&c); prt(&a,&b,&c); }

(1) 第一次调用函数prt的运行结果是( B )。 32 (A) 11,42,31 (B) 11,41,20 (C) 11,21,40 (2) 第二次调用函数prt的运行结果是( A )。 33 (A) 12,42,20 (B) 12,22,41 (C) 11,21,41

5、有下列程序(考点:函数(地址参数)、指针运算)

# include void fun1(int *x,int *y) { int *z;

z=x; x=y; y=z; }

void fun2(int *x,int *y) { int z;

z=*x; *x=*y; *y=z; (*x)++; (*y)++; }

void main() { int a=5,b=9; fun1(&a,&b);

printf(\ fun2(&a,&b);

printf(\}

main函数中第一个printf输出结果为( B )。

(A) a=9,b=5 (B) a=5,b=9 (C) a=10,b=6 main函数中第二个printf输出结果为( C )。

(A) a=9,b=5 (B) a=5,b=9 (C) a=10,b=6

(D) 11,41,21 (D) 12,42,22

(D) a=6,b=10 (D) a=6,b=10

1、读下面程序,回答问题。

#include \void sort(int a[],int n) {

int i,j,t;

for(i=0;ia[i]) {t=a[j];a[j]=a[i];a[i]=t;} }

void main() {

int x[10]={1,0,-76,4,8,12,65,100,-45,123}; int i;

sort(x+5,5);

printf(\}

(1)程序中sort函数的功能是( )

(A)用起泡法对含有n个元素的数组a从小到大的排序

(B)用选择法对含有n个元素的数组a从大到小的排序

(C)用二分法对含有n个元素的数组a从小到大的排序 (D)用起泡法对含有n个元素的数组a从大到小的排序()

(2)该程序的运行输出结果为( )

(A) -76 (B) -45 (C) 8 (D) 123 2、读程序并回答问题

# include

void fun(int *a,int bott,int top) {

int i,j,t;

i=bott; j=top; while(i

{ t=a[i]; a[i]=a[j]; a[j]=t; i++;j--; } }

void main() {

int a[10]={1,2,3,4,5,6,7,8,9,0},i; fun(a,0,3); fun(a,4,9); fun(a,0,9);

for(i=0;i<10;i++) printf(\

}

函数fun的功能是(A )。

(A) 将下标为bott 到 top 之间的数组元素逆置

(B) 将下标为bott 到 top 之间数组元素进行升序排列 (C) 将下标为bott 到 top 之间数组元素进行降序排列 (D) 将下标为bott 和下标为 top 的两个元素互换 程序的运行结果为(C )。 (A)0987654321 (B) 4321098765 (C) 5678901234 (D) 0987651234

3、在下面程序中(考点:数组、函数(地址参数)、删除字符算法)

# include void fun(char *s) {

int i,j;

for(i=0,j=0;s[i]!='\\0';i++) if(s[i]>='0' && s[i]<='9') { s[j]=s[i]; j++; } s[j]='\\0'; }

void main() {

char s[20]=\ fun(s);

printf(\ printf(\}

(1) 第1个printf输出的结果为( C )。

(A) 8 8 (B) 20 8 (C) 20 20 (2) 第2个printf输出的结果为( A )。 (A) abcd (B) ab12cd (C) 1234

4、读程序并回答问题。

# include long fun(int n) {

long z;

if(n==0|| n==1) z=1; else z=n*fun(n-2); return z; }

void main() {

long z;

(D) 20 4 (D) ab12cd34

int n;

scanf(\ z=fun(n);

printf(\}

若输入n的值为6,则程序的输出结果为( C )。 (A) 21 (B) 15 (C) 48 (D) 720 以下哪个非递归程序与函数fun的功能相同( A )。

(B) long fun(int n) (A) long fun(int n)

{ {

int i; int i;

long z; long z;

for(i=n,z=0;i>0;i-=2) for(i=n,z=1;i>0;i-=2)

z=z+i; z=z*i;

return z; retrun z;

} }

(C) long fun(int n) {

int i; long z;

for(i=n,z=1;i>0;i--) z=z*i; retrun z;

(D) long fun(int n)

{

int i; long z;

for(i=n,z=0;i>0;i--) z=z+i; return z; }

命令行参数

1、下列程序编译连接后生成可执行文件CAD.EXE,输入以下命令行:

CAD FILE1 FILE2 ( 表示回车) 程序的运行结果是( D )。(考点:命令行参数) # include \

void main(int argc,char *argv[]) {

int i;

printf(\ for(i=0;i<=argc-1;i++) printf(\ printf(\ }

(A) 2 (B) 3

cadfile1file2 cadfile1file2

(C) 2 (D) 3

CAD.EXEFILE1FILE2 CAD.EXEFILE1FILE2

选择结构(if)

1、if语句的一般形式可写为

if(expr) 语句1; else 语句2; 其中,作为条件判断的表达式expr( B)。

(A)可以是任意表达式 (B)只能是关系表达式或逻辑表达式 (C)不能使算术表达式 (D)不能是赋值表达式

2、 设有定义:int a=1,b=2,c=3; ,以下语句中执行效果与其它三个不同的是( C )。

(A) if(a>b) c=a,a=b,b=c; (B) if(a>b) {c=a,a=b,b=c; } (C) if(a>b) c=a;a=b;b=c; (D) if(a>b) {c=a;a=b;b=c;}

3、有如下程序 #include \void main() { int a=2,b=-1,c=2; if(a

该程序的输出结果是(C )。 (A) 0 (B) 1 (C) 2 (D) 3

4、若有定义int a=1,b=3,c=5,d=4,x;则执行以下程序段后x的值为(D)。

if(a

if(c

A) 1 B) 3 C) 6 D) 2

5、有下面程序

int main(void) {

int a,b,c,x=1,y=2,z=3;

scanf(\ if(a>b>c) x=y;y=z;z=x;

printf(\}

(1)若运行改程序时从键盘输入3,2,1,则程序的输出结果为(C )。 (A)2,3,2 (B)1,3,1 (C)2,3,1 (D)1,2,3

(2)若运行改程序时从键盘输入-3,-2,-1,则程序的输出结果为( D)。

(A)2,3,2 (B)1,3,1 (C)2,3,1 (D)1,2,3 6、有下列程序:

# include void main() {

int x=100,a=10,b=20; int v1=5,v2=0; if(a

printf(\}

(1)程序的运行结果是( B ) (A) 100 (B) 1 (C) 10 (2)if(v2)与下列选项相同的是( A ) (A) if(v2==0) (B) if(v2!=0) (C) if(v2==1)

(D) -1

(D) if(v2!=1)

选择结构(switch)

1、以下选项中与if(a==1)a=b; else a++; 语句功能不同的switch语句是 ( A ) 。 (A) switch(a) (B) switch(a==1)

{ case 1: a=b;break; { case 0: a=b;break;

default:a++; case 1:a++;

} } (C) switch(a) (D) switch(a==1) { default:a++;break; { case 1:a=b;break; case 1: a=b; case 0:a++; } }

2、有下列程序:

# include void main() {

int x=10,y=5; switch(x) { case 1: x++;

default: x+=y; case 2: y--; case 3: x--; }

printf(\}

执行下列程序后,输出结果为( B )。

(A) x=15, y=4 (B) x=14, y=4 (C) x=10, y=5 (D) x=15, y=5

3、读下面程序并回答问题:

#include \void main() {

int x=1,y=0,a=0,b=0; switch(x) {

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

printf(\}

(1)程序的运行结果为( C)。

(A) 2,1 (B) 1,2 (C) 1,1 (D) 0,0

(2)将程序中的switch(x)更改为switch(x!=1),其程序运行结果是( (A) 2,1 (B) 1,2 (C) 1,1 (D) 0,0

4、阅读下面的程序:

#include void main() { int s;

scanf(\

if(s<0||s>100)printf(\else {

switch(s/20) {

case 0: case 1:

case 2:printf(\

case 3:printf(\case 4: case 5:

switch(s/45)

D )。 {

case 1:printf(\case 2:printf(\} } }

}

(1)若运行该程序时从键盘输入45,则运行输出为(C)。 A) DCBA B) DCB C) DC D) D

(2)若运行该程序时从键盘输入100,则运行输出为(D)。 A) DCBA B) DBA C) BA D)C

5、有如下程序

int main(void) {

int x=1,a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++,b++; }

printf(\}

(1)程序的运行结果为(c )。

(A)a=2,b=1 (B)a=1,b=1 (C)a=1,b=0 (D)a=2,b=2 (2)当在case 1:a++;后面添加语句break;程序的运行结果为(c )。

(A)a=2,b=1 (B)a=1,b=1 (C)a=1,b=0 (D)a=2,b=2

循环结构

1、下列程序段中,不是无限循环的是(C )。

(A) (B) k=0; j=100; do while(1) { ++k; } { j=j0+1;

whiel(k-->=0); if( j>100 ) break; }

(C) (D) s=3333; for( ; ; ); while(s%2+s++%2);

2、求取满足式12+22+32+??+n2≤1000的n,正确的语句是(A )。

(A) for(i=1,s=0;(s=s+i*i)<=1000;n=i++); (B) for(i=1,s=0;(s=s+i*i)<=1000;n=++i); (C) for(i=1,s=0;(s=s+i*++i)<=1000;n=i); (D) for(i=1,s=0;(s=s+i*i++)<=1000;n=i);

3、以下叙述中正确的是(B )。

(A) C语言中所有的循环语句都是先判断条件再执行循环体 (B) break语句只能中断循环

(C) continue 语句可以结束所有的循环

(D)C语言中,任意表达式都可作为循环条件,只要能做出0和非0的判断即可

一、 单项选择题

R1、以下标识符中,不能作为合法的C用户定义标识符的是:( ) A .a3_b3 B.void C._123 D.abc R2、C语言规定:在一个源程序中,main函数的位置( )。 A.必须在最后 B.必须在系统调用的库函数的后面。 C.必须在最开始。 D.可以任意 R3、下列说法中正确的是( )。 A. C程序书写时,不区分大小写字母 B. C程序书写时,一行只能写一个语句

C. C程序书写时,一个语句可分成几行书写 D. C程序书写时每行必须有行号

4、 已知ch是字符型变量,下面不正确的赋值语句是 ( )。 A.ch = 5 + 9 ; B.ch= ' a' + b '; C. ch = ' \\ 0 '; D. ch= '7' + '6' ; 5、 若有定义:int a = 7; float x = 2.5 , y = 4.7 ; 则表达式 x + a % 3 * (int) (x + y) % 2/4 的值是( )。 A. 2.750000 B. 0.00000 C. 3.500000 D. 2.500000 6.已知ch是字符型变量,下面正确的赋值语句是( )。

A.ch = '123' ; B. ch=' \\08 '; C. ch =' \\xff '; D.ch =\

1. 以下标识符中,不能作为合法的C用户定义标识符的是:____________。 A)a3_b3 B)void C)_123 D)abc 2.C语言中,运算对象必须是整型的运算符是__________。 A) % B) / C) %和/ D) *

7. 在 C 程序中,用___________表示逻辑值“真”。

A)1 B)非 0 的数 C)非 1 的数 D) 大于 0 的数 N8.设int c=5和int a; a=2+(c+=c,c+8,++c), 则a=__________ A) 15 B) 14 C) 13 D) 16

9.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符________。

A)必须为字母或下划线。 B)必须为下划线。

C)必须为字母 D)可以是字母、数字和下划线中的任一种字符。 10. 若变量已正确定义并赋值,表达式____________不符合C语言语法。 A)a*b/c; B)3.14%2 C)2, b D)a/b/c 11. 下列说法中正确的是___________。

A) C程序书写时,不区分大表达式小写字母了 B) C程序书写时,一行只能写一个语句

C) C程序书写时,一个语句可分成几行书写 D) C程序书写时每行必须有行号

12.为表示数学关系x≥y≥z,正确的C语言表达式是__________。 A) (x>=y)&&(y>=z) B) (x>=y)AND(y>=z) C) (x>=y>=z) D) (x>=y)&(y>=z) 13.不合法的八进制数是________

A) 0 B) 028 C) 077 D)01 14、以下不能定义为用户标识符是 A Main

B _0

C _int

D sizeof

15.若x=5,y=4 则y*=x+5;等价于y=y*(x+5) y的值为( )。

A. 40 B. 20 C B. 15 D. 30 16、组成C语言程序的基本单位是( )。

A) 过程 B) 子程序

C) 函数 D) 主程序和子程序 17.下列哪个标识符是C语言合法的标识符( )。

A) a*b B) -xyz C) ba2 D) 5i

N18.若有定义:int a=7; float x=2.5, y=4.7; 则表达式x+a%3*(int)(x+y)/4的值是( )。

A) 2.75 B) 3.5 C) 2.5 D) 0 19.设int m=1,n=2;则++m= =n的结果是( )

A、0 B、1 C、2 D、3

N20. 若变量已定义并赋值,下列符合C语法的表达式是:( A、a:=b+1 B、a=b=c+2 C、int 18.5%3 D、a=a+7=c+b

R(3)在C程序中,设一表达式中包含有int,long, unsigned和char类型的变量和数据,则表达

式最后的运算结果类型是( )

A.int B.char C.unsigned D.long

R21.C语言中基本的数据类型包括__________。

A) 整型、实型、逻辑型 B) 整型、实型、字符型

C) 整型、字符型、逻辑型 D) 整型、实型、逻辑型、字符型

N22. 若定义x和y为double类型,则表达式:x=2,y=x+5/2的值是__________ A) 4 B) 4.5 C) 4.0 D) 3.0 23. 在以下运算符中,优先级最高的运算符是__________

A) ? : B) ++ C) && D) += 24.C语言中基本的数据类型不包括__________。

A) 整型 B)字符串型 C)字符型 D)实型

25. 若定义int x=7,y=5,z;则表达式:z=x+5/2*y的值是__________ A) 7 B) 7.5 C) 17 D) 19.5

6.以下说法中正确的是( )

A、C语言程序总是从第一个定义的函数开始执行

B、在C语言程序中,要调用的函数必须在main()函数中定义 C、C语言程序总是从main()函数开始执行

D、C语言程序中的main()函数必须放在程序的开始部分

(1)设int a=2,b;则执行b=a&&1;语句后,b的结果是( )

A.0 B.1 C.2 D.3

N(2)逗号表达式(a=3*5,a*4),a+15的值是( )

A.15 B.60 C.30 D.75

7. 若已经定义了一个字符型变量为a,下面哪个表达式的含义跟其余表达式不同:

A) a!=0 B) a!=’\\0’ C) a D) !a 8. 在以下运算符中,优先级最高的运算符是__________

A) , B) [] C) && D) += 9. 在C语言中,逻辑值“真”用__________表示。

A) true B) 大于0的数 C) 非0的整数 D) 非0的数 10. 表达式__________是满足:当c的值为1、3、5三个数中任意一个时值为“真”,否则值为“假”的表达式

A) (c=1)||(c=3)||(c=5) B) (c!=1)&&(c!=3)&&(c!=5) C) (c==1)&&(c==3)&&(c=5) D) (c==1)||(c==3)||(c==5) 1.C语言中,int类型数据占2个字节,则long类型数据占( )

A、1个字节 B、2 个字节 C、3个字节 D、4个字节

1.下列字符串是合法的标识符的是( )。 A、_HJ B、9_student C、 long 2.下列说法中正确的是( )。

A、 C程序书写时,不区分大小写字母

D、LINE 1

B、 C程序书写时,一行只能写一个语句

C、 C 程序书写时,一个语句可分成几行书写 D、 C程序书写时每行必须有行号

3.在C语言中,要求参加运算的数必须是整数的运算符是( )。

A、/ B、! C、% D、= = 4.C语言中,逻辑“真“等价于( )。

A、大于零的数 B、大于零的整数 C、非零的数 D、非零的整数

6.假设在程序中a,b,c均被定义为整型,并且已赋大于1的值,则下列能正确表示

代数式1/abc的表达式是( )。

A、1/a*b*c B、1/(a*b*c) C、1/a/b/(float) c D、1.0/a/b/c 1.下列合法的字符常量是( )。

A、'\\084'

B、'\\x43'

C、'ab'

D、sturct D、\

2.在C语言提供的合法的关键字是(

A、switch

B、cher

C、Case

3.若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是 A、 2

B、 1

C、 2.0

D、2.5

第二章 C语言程序结构

在C语言中,逻辑值“真”用 表示。

11) 1 12) 大于0的数 13) 非0的整数 14) 非0的数

在循环语句的循环体中,continue语句的作用是( )。

15) 立即终止整个循环 16) 继续执行continue语句之后的循环体 17) 结束本次循环 18) 结束本次循环并跳出循环

语句while(!e);中,条件!e等价于( )

19.e==0 20 .e!=0 21.e!=1 22.e==1

设int c=5和int a; a=2+(c+=c++,c+8,++c), 则a=__________

23) 15 24) 14 25) 13 26) 16 c=c+c++

若要表示if( a不等于0 )这一关系式,则能正确表示这一关系的表达式为if ( ) 27) a<>0 28) !a 29) a=0 30) a

一、 单项选择题

N1、以下不是死循环的语句是_______。 for( ; ; x+i ); while (1) {x++;}

for( i=10; ; i- -) sum+= i ;

for( ; (c=getchar()) != ?\\n? ; ) printf(“%c” , c) ; 2.设有程序段 int k = 10 ;

while ( k = 0 ) k = k - 1 ; 以下描述正确的是 ( )。 A. 循环体语句一次也不执行。 B. 循环是无限循环。 C. while 循环语句执行十次。 D. 循环体语句执行一次。 N3.对下述程序,正确的判断是( )。 main( ) { int a,b;

scanf (\if(a>b)a=b; b=a; else a++; b++;

printf(\ }

A. 有语法错误不能通过编译 B. 若输入4,5则输出5,6 C. 若输入5,4则输出4,5 D. 若输入5,4则输出5,5 R4. 以下程序 main() {

int i=010,j=10,k=0x10; printf(\}有语法错误不能通过编译 输出结果是( )

A.8,10,16 B.8,10,10 C.10,10,10 D.10,10,16

R5. 若变量已正确说明为int类型,要给a,b,c输入数据,以下语句正确的是__________

A) read(a,b,c); B) scanf(“%d%d%d”,a,b,c);

C) scanf(“%D%D%D”,&a,%b,%c); D) scanf(“%d%d%d”,&a,&b,&c);

R6.已知在ASCII字符集中,字符0的ASCII值为48,下面程序的输出结果为__________。 main() {

char x,y;

x=’0’;y=’9’;

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

A)因输出格式不合法,输出错误信息 B)48,57 C)0,9 D)48,58 7. 语句 for(k=0;k<5;++k) {

if(k= = 3) continue; printf(“%d”,k); }的输出结果为_________。

A)012 B) 0124 C) 01234 D) 没有输出结果 8.为表示关系x>=y>=z,应使用C语言表达式___________。 A)(y<=x)&&(y>=z) B)(x>=y)AND(y>=z) C)(x>=y>=z) D)(x>=y)&(y>=z) 6. 若变量已正确定义,语句“if(a>b) k=0; else k=1;”和___________等价。 A、k=(a>b)?1:0; B、k=a>b;

C、k=a<=b; D、a<=b ? 0 : 1; 9.以下程序的输出结果是__________

void main() {

int a = 2,b = 5;

printf(“a=%%%d,b=%%%d”,a,b); }

A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=%d N10.以下程序的输出结果是__________ void main() { int x=10,y=10;

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

A) 10 10 B) 9 9 C) 9 10 D) 10 9 11.若要表示if( a不等于0 )这一关系式,则能正确表示这一关系的表达式为 if (__________)

A) a<>0 B) !a C) a=0 D) a R12对于循环语句while(1);下面( )是正确的 A、死循环 B、循环一次 C、不进入循环体 D、编译有错 13.下面程序的输出是(假设 int 数据是 2 个字节) void main() { int a = 32768;

printf(“a=%d\\n”,a); }

A) a=32768 B) a=32767 C) a=-32768 D) a=-1 14.表达式__________是满足:当c的值为1、3、5三个数中任意一个时值为“真”,否则值为“假”的表达式

A) (c=1)||(c=3)||(c=5) B) (c!=1)&&(c!=3)&&(c!=5) C) (c==1)&&(c==3)&&(c=5) D) (c==1)||(c==3)||(c==5) N15. 以下程序段的输出结果是_____ int x=3; do

{ printf(\ while (!(--x));

A) 1 B) 3 0

C) 1 -2 D) 死循环 16、数字字符0的ASCII值为48,若有以下程序 main() {

char a='1',b='2'; printf(\

printf(\ }

程序运行后的输出结果是 A 3,2 B 50,2 C 2,2 D 2,50 17、有以下程序 main() {

int a,b,d=25; a = d/10 & (-1); b = a && (-1);

printf(\ }

程序运行后的输出结果是 A 6,1 B 2,1 C 6,0 D 2,0

18.若定义float a;现要从键盘输入a的数据,其整数位为3位,小数位为2位,则选用( )。

A)scanf(\ B) scanf(\C) scanf(\ D) scanf(\19.若定义int i; 则以下循环语句的循环执行次数是( )。 for(i=2; i==0;) printf(\

A) 无限次 B) 0次 C) 1次 D) 2次

20.下面程序段___ x=3; do {

y=x--;

if(!y){printf(\ printf(\}

while(1<=x<=2);

A) 将输出## C) 是死循环 21.以下程序中,while循环的循环次数是( )#include “stdio.h” main( ) {int i=0; while(i<10) {if(i<1)continue; if(i= =5)break; i++;

} }

A、1 B、10 C、6 DN 22.有以下程序:

#include “stdio.h” int a=3; main( ) { int s=0; { int a=5; s+=a++; }

s+=a++;printf(\

B) 将输出##*

D) 含有不合法的控制表达式 。

、死循环,不能确定次数

}

程序运行后的输出结果是( )。

A、8 B、10 C、7 D、11

23(4)下面程序段的运行结果是( )

main ( )

{int a=11,b=10,c=0; a/=b+(b&&c); printf(″%d\\n″a);}

A.0 B.1 C.1.1 D.11

24(5)两次运行下面程序,如果从键盘上分别输入6和4,则程序的输出结果是( main ( ) {int x;

scanf(″%d″,&x); if(x++>5) printf(″%d″,x); else printf(″%d\\n″,x-1);}

A.7和5 B.6和3 C.7和4 D.6和4

(6)语句while(!e);中,条件!e等价于( )

A.e=0 B.e!=0 C.e!=1 D.e==0

R25下面程序的输出是______ main() {

int k=11;

printf(\ }

A) k=11,k=12,k=13 B) k=11,k=13,k=13 C) k=11,k=013,k=oXb D) k=11,k=13,k=b

26(7)下面程序的运行结果是( )

main( ) {int i=1,sum=0; lop:sum=sum+i ;

)

i=i+2; if(i<6)goto lop;

printf (″sum=%d\\n″,sum);}

A.sum=4 B.sum=9 C.sum=16 D.sum=25

27. 以下程序的输出结果是__________

void main(){ int a = 2,b = 5;

printf(“a=%%%d,b=%%%d”,a,b); }

A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=%d 28执行下面的程序后,a的值为_____ main() { int a,b;

for (a=1,b=1;a<100;a++) {

if (b>=20) break; if (b%3==1)

{ b+=3; continue; } b-=5; } }

A) 7 B) 8 C) 9 D) 10 29

30.下面的程序会( )

main()

{ int x=3,y=0,z=0;

if(x=y+z) printf(“****”); else printf(“####”); }

A、有语法错误不能通过编译 B、输出**** C、可以通过编译,但不能通过连接,因而不能运行 D、输出####

4.以下程序的输出结果是( )

main()

{ int x=10,y=10,i;

for(i=0;x>8;y=++i)

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

A、10 1 9 2 B、9 8 7 6 C、10 9 9 0 D、10 10 9 1 1.下面程序的输出是______

main() {

int k=11;

printf(\ }

A) k=11,k=12,k=13 B) k=11,k=13,k=13 C) k=11,k=013,k=oXb D) k=11,k=13,k=b

2.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是____ main() { int x;

scanf(\

if (x++>5) printf(\ else printf(\ }

A) 7和5 B) 6和3 C) 7和4 D) 6和4 3.读程序

#include”stdio.h” main()

{ int a; float b,c;

scanf(\ printf(\ }

若运行时从键盘上输入9876543210(表示回车),则上面程序的输出结果是_____

A) a=98,b=765,c=4321 B) a=1,b=432,c=8765

C) a=98,b=765.000000,c=4321.000000 D) a=98,b=765.0,c=4321.0 5.下面程序的输出是____ main()

{int x=3,y=6,a=0; while (x++!=(y-=1)) {

a+=1;

if (y

}

printf(\ }

A) x=4,y=4,a=1 B) x=5,y=5,a=1 C) x=5,y=4,a=3 D) x=5,y=4,a=1

第三章 数组

已有定义:char a[]=\以下叙述中正确的是 20 数组a和b的长度相同 21 a数组长度小于b数组长度 22 a数组长度大于b数组长度 strlen(a)==strlen(b)=3

设有数组定义:char array[]=\;则数组array所占的存贮空间为 个字节.

23 4 24 5 25 6 26 7

若定义int x[10];则Turbo C编译系统为该数组分配 个字节存储单元。

27 .10 28 .11 29 .20 30 .21

一、 单项选择题

R1、对两个数组a和b进行如下初始化 char a[7]=\

char b[6]={’A’,’B’,’C’,’D’,’E’,’F’}; 则以下叙述正确的是 ( )

A) a与b数组完全相同 B) a与b长度相同 C) a和b中都存放字符串 D) a数组比b数组长度长 R2.若有说明:int a[3][4];则对a数组元素的正确引用是( )

A.a[2][4] B.a[1,3] C.a[1+1][0] D.a(2)(1) R3.合法的数组定义是 ( ) A、int a[]=\ B、int a[5]={0,1,2,3,4,5}; C、vhst s=\ D、char a[]={0,1,2,3,4,5}; 4.以下正确的声明是( )。 A. int a[1][4]={1,2,3,4,5}; B. float x[3][]={{1},{2},{3}}; C. long b[2][3]={{1},{1,2},{1,2,3}}; D. double y[][3]={0}; 5下列语句的执行结果是( )。 static char str[10]={“china”}; printf(“%d”,strlen(str));

A.10 B.6 C.5 D.0 R6、以下能正确定义一维数组的选项是 A int a[5]={0,1,2,3,4,5}; B char a[]={0,1,2,3,4,5}; C char a={'A','B','C'}; D int a[5]=\7.下面程序段的运行结果是( )。 char a[7]=”abcdef”; ABC\\0ef char b[4]=”ABC”; strcpy(a,b);

printf(“%c”,a[5]);

A.空格 B.\\0 C.e

8定义如下变量和数组,则输出结果是( )。

int i;

int x[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf(\

A.1 5 9 B.1 4 7 C.3 5 7 D.3 6 9

9.下列对一维数组a的正确说明语句为( )。

A) int a(10); B) int n=10, a[n]; C) int n; scanf(\

D) #define SIZE 10 int a[SIZE];

10.下列二维数组的说明中,不正确的是( )

A、float a[3*8][7-3] B、float a[][3]={0,1,8}; C、#define L 3 float a[L][3]

D、int a[6],[7]

11. 执行以下程序段后,s的值是

int a[]={5,3,7,2,1,5,4,10}; int s=0,k;

for(k=0;k<8;k+=2) s+=*(a+k);s=s+a[k] A、17 B、27 C、13 D、无定值

D.f 12. 若有定义:char c[10];从键盘输入“LiFang”,则正确的函数引用是( )

A.scanf(“%c”,&c[10]); B.gets(c);

C.scanf(“%s”,&c); D.gets(c[10]);

N13. 以下程序的输出结果是_________。 main()

{ char s1[20]=“China”,s2[20]=“for”,s[10]; if(strcmp(s1,s2)!=0) printf(“%s\\n”, strcat(s2,s1)); else

printf(“%d\\n”,strlen(s1)); }

A) Chinafor B) 5 C) forChina D) 3 14选择下面程序运行的结果: #include “stdio.h”

int m[3][3]={{1},{2},{3}}; int n[3][3]={1,2,3}; main() {

printf(\ printf(\}

第1条printf语句行输出的结果为( ) A、0 B、1 C、3 D、2

R15(9)以下对一维数组a中的所有元素进行正确初始化的是( )

A.int a[10]==(0,0,0,0); B.int a[10]={ };

C.int a[]={0}; D.int a[10]={10*2};

16(10)

(8)若定义int x[10];则Turbo C编译系统为该数组分配( )个字节存储单元。

A.10 B.11 C.20 D.21

N18.有如下程序

main()

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

for(j=0;j<=i;j++) s+=a[i][j];

printf(“%d”,s); } 该程序的输出结果是

A、18 B、19 C、20 D、21

N19.执行下列程序时输入123<空格>456<空格>789<回车>,输出结果是( )。

#include “stdio.h” main( )

{char s[100]; int c, i;

scanf(\ scanf(\ scanf(\printf(\}

A、123,456,789 B、1,456,789 C、1,23,456,789 D、1,23,456

20.以下程序的输出结果是_____ main()

{char str[12]={'s','t','r','i','n','g'};

printf(\不算\\0,sizeof算\\0) }

A) 6 B) 7 C) 11 D) 12 21.合法的数组定义是 ( ) A、int a[]=\ C、vhst s=\

B、int a[5]={0,1,2,3,4,5}; D、char a[]={0,1,2,3,4,5};

22.以下正确的声明是______。

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

N23.阅读下面程序,回答问题。 #include “stdio.h\void main() {

int i,j row,column,m;

static int array[3][3] = {{100,200,300},{28,72,-30},{-850,2,6}}; m = array[0][0];

B. float x[3][]={{1},{2},{3}}; D. double y[][3]={0};

C. long b[2][3]={{1},{1,2},{1,2,3}};

for(i=0;i<3;i++) for(j=0;j<3;j++)

if(array[i][j]

m = array[i][j]; row = i; column = j; }

printf(“%d,%d,%d”,m.row.column); }

该程序的功能是()。

A、计算二维数组的元素和 B、求二维数组的最小值及其下标 C、对二维数组进行排序 D、求二维数组的最大值及其下标 24. 若有以下程序段: int a[]={4,0,2,3,1},k,j,t; for(j=1;j<5;j++) {

t=a[j]; k=j-1;

while(k>=0&&t>a[k]) {a[k+1]=a[k];k--;} a[k+1]=t; }

则该程序段的功能是___(8)____ A) 对数组a进行插入排序(升序)。 B) 对数组a进行插入排序(降序)。 C) 对数组a进行选择排序(升序)。 D) 对数组a进行选择排序(降序)。

N25. 执行如下程序段,当输入为I am时,输出的结果是_________。 char str[80]; scanf(“%s”,str); strcat(str,” sad!”); printf(“%s”,str);

A)I am sad! B)Isad! C)I sad! D)sad! 8. 9. 4. 4、 3. main()

{ int a[10]={1,2,3,-4,5,6,7,-8,9,10},s=0; for(int i=0;i<10;i++) { if (a[i]<0) break; s+=a[i]; }

printf(\ }

(3)下面程序的输出是

# include “stdio.h” # include “stdlib.h” main()

{ char str1[20],str2[20];

scanf(“%s”,str1); //从键盘输入Hello world printf(\输出结果1 fflush(stdin);

gets(str2); //从键盘输入Hello world printf(\输出结果2 }

输出结果1是:

(A)Hello (B)World (C)Hello World (D)World Hello 输出结果2是:

(A)Hello (B)World (C)Hello World (D)World Hello

7.

1. 选择下面程序运行的结果: #include “stdio.h” int m[3][3]={{1},{2},{3}}; int n[3][3]={1,2,3}; main() {

printf(\ printf(\}

第1条printf语句行输出的结果为( )

A、0

B、1

C、3

D、2

2. 还是刚才1题那个程序,第2条printf语句行输出的结果为(

A、2 B、4 C、6 D、0

5.函数调用:strcat( strcpy( str1,str2 ),str3 )的功能是( )

A、将串str1复制到串str2中后再连接到串str3之后; B、将串str1连接到串str2之后再复制到串str3之后;

C、将串str2复制到串str1中后再将串str3连接到串str1之后; C、将串str1复制到串str2中后再将串str3连接到串str2之后;

第四章 函数

一、 单项选择题

1、 C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( ) A.地址传递 B.单向值传递

C.由实参传给形参,再由形参传回给实参 D.由用户指定传递方式 R2、若调用一个函数,且此函数 中没有return语句,则正确的说法是() 该函数

A.没有返回值

B.返回若干个系统默认值

C.能返回一个用户所希望的函数值 D.返回一个不确定的值

R3、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( ) A.float型 B.int型 C.long型 D.double型 R4、在C语言程序中,以下描述正确的是( )

A.函数的定义可以嵌套,但函数的调用不可以嵌套 B .函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和函数的调用均不可以嵌套 D.函数的定义和函数的调用均可以嵌套 5. void main() { int f(int); int w = 2,k;

for(k=0;k<3;k++) {

w=f(w);

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

int f(int x) {

int y=0;

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

return (x+y+z) ; }

程序结束后,z的值为_______。

(1) A) 3 B) 4 C) 5 D) 6

R6.在一个被调用函数中,关于return语句使用的描述,错误的是( )

A、被调用函数中可以不用return语句 B、被调用函数中可以使用多个return语句

C、被调用函数中,如果有返回值,就一定要有return语句 D、被调用函数中,一个return语句可返回多个值给调用函数

7.以下程序输出的结果是( )。

#include int func(int a,int b) {return(a+b);} main( )

{int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(\}

A、12 B、13 C、14 D、15

8(2)若有如下函数定义:

add(float x, float y) {??}

则下列说法正确的是( )

A.函数返回值类型不确定 B.函数返回值是float型 C.函数返回值是int型 D.函数返回值是void型

9 int x1=30,x2=40;// x1 x2是全局变量 void main() {

int x3=10,x4=20 ; sub(x3,x4) ; sub(x2,x1);

L1:printf(“%d,%d,%d,%d\\n”,x3,x4,x1,x2); }

void sub(int x, int y) {

x1=x ;x=y ;y=x1 ;

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

L1行输出结果为_______________。

(3) A) 10,20,30,40 B) 10,20,40,10 C) 20,10,40,30 D) 10,20,40,40 R10.以下对C语言函数的描述中,正确的是( )。

A、C程序由一个或一个以上的函数组成 B、C函数既可以嵌套定义又可以递归调用 C、函数必须有返回值,否则不能使用函数

D、C程序中调用关系的所有函数必须放在同一个程序文件中

11.以下函数值的类型是( )。

fun ( float x ) {float y; y= 3*x-4; return y; }

A、int B、不确定 C、void D、float

12.一个C程序由函数A(),B(),C()和函数P()构成,在函数A()中分别调用了函数B()和函数

C(),在函数B()中调用了函数A(),且在函数P()中也调用了函数A(),则可以说( )。 A、函数B()中调用的函数A()是函数A()的间接递归调用 B、函数A()被函数B()调用是直接递归调用 C、函数P()直接递归调用了函数A()

D、函数P()中调用的函数A()是函数P()的嵌套

13.下面函数调用语句含有实参的个数为( )。

func((a,b,c,d),(e,f,g));

A、1 B、2 C、4 D、以上都不对

14.已有函数max(a,b)为了让函数指针变量p指向函数max正是确的赋值方法是( )。

A、p=max; C、p=max(a,b);

B、*p=max; D、*p=max(a,b);

N15.下面程序运行的结果为: #include void swap(int a,int b) { int t; t=a;a=b;b=t;

} main() {

int m=3,n=4;

printf(“The old:m=%d,n=%d\\n”,m,n); swap(m,n);

Printf(“The new:m=%d,n=%d\\n”,m,n); } A、3,4 B、m=3,n=4 C、3,4

3,4

m=3,n=4

4,3

N16、选择程序的运行结果 。 main( ) { int x;

x=try(5); printf (\ }

try ( int n )

{ if ( n>0 ) return ( n * try (n-2) ); else return(1); }

A) 1 B) 15 C) 120 D) 答案均是错误的

17.有以下程序

viod fun (int a,int b,int c) { a=456; b=567; c=678;} main()

{ int x=10, y=20,z=30; fun (x,y,z);//值传递

D、m=3,n=4

m=4,n=3

printf(\}

输出结果是( )。

A.30,20,10 B.10,20,30 C.456,567,678 D.678,567,456 18.下列语句的执行结果是( )。 static char str[10]={“china”}; printf(“%d”,strlen(str));

A.10 B.6 C.5 D.0

N19.读程序,回答问题。 #include int a = 2; int f(int n) {

static int a = 3; int t = 0; if(n%2)

{ static int a = 4; t+=a++; } else

{ static int a= 5; t+=a++; }

return t+a++; }

void main() {

int s=a,i;

for(i=0;i<3;i++) s+=f(i); printf(\}

程序运行结果是()。 A、26 B、28 C、29 20.有如下程序 int func(int a,int b) {

return(a+b); }

main0 {

int x=2,y=5,z=8,r; r=func(func(x,y),z);

D、25 printf(“%d\\n”,r); }

该程序的输出的结果是 __________。

A)12 B) 13 C) 14 D) 15

21.有以下程序

viod fun (int a,int b,int c) { a=456; b=567; c=678;} main()

{ int x=10, y=20,z=30; fun (x,y,z);

printf(\}

输出结果是_________。 A)30,20,10 B)、10,20,30 C)456,567,678 D)678,567,456 22.以下程序执行之后sum的值是_________。 main()

{ int i , sum;

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

A)15 B)14 C) 不确定 D)0

N23.void main() { int f(int); int w = 2,k;

for(k=0;k<3;k++) {

w=f(w);

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

int f(int x) {

int y=0;

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

return (x+y+z) ; }

程序结束后,w的值为______。

(2) A) 20 B) 7 C) 28 D) 13

N24.int x1=30,x2=40;// x1 x2是全局变量 void main() {

int x3=10,x4=20 ; sub(x3,x4) ; sub(x2,x1);

L1:printf(“%d,%d,%d,%d\\n”,x3,x4,x1,x2); }

void sub(int x, int y) {

x1=x ;x=y ;y=x1 ;

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

L2行输出结果为____________。

(4) A) 10,20 B) 20,10 C) 10,20 40,10 10,40 10,40 25、有以下程序

void ss(char *s,char t) {while(*s)

{if(*s==t) *s=t-'a'+'A'; s++; } } main()

{char str1[100]=\ss(str1,c); printf(\}

程序运行后的输出结果是______。

A) ABCDDEFEDBD B) abcDDfefDbD C) abcAAfefAbA D) Abcddfefdbd

D) 20,10 40,10

第五章 指针

第六章 下列说法中不正确的是( )

R10.指针是一个变量 11.指针中存放的是地址值

12.指针可以进行加、减等算术运算 13.指针变量不占用存储空间

设变量定义为“int x, *p=&x;”,则&*p相当于___________。

N18)p 19)*p 20)x 21)*&x

设变量定义为“int a[4];”,则表达式 不符合C语言语法。

22)*a 23)a[0] 24)a 25)a++

已知:int *p, a;则语句“p=&a; ”中的运算符“&”的含义是( )

26、位与运算 27、逻辑与运算 28、取指针内容 29、取变量地址

int n=0,*p=&n,**q=&p;则正确的赋值语句是

30 p=1; 31) *q=2; 32) q=p; 33) *p=5;

一、 单项选择题

1有以下程序(设其文件名为2-5.c)

#include

void main(int argc,char *argv[]) { int i; char *p; printf(\ if(argc>2) p=argv[1]; puts(p+1); }

若运行该程序时,在命令行提示符后输入 2-5 file1 file2 file3

则执行printf(“%d”,argc);时,输出结果为( 4) A 1 B 2 C 3 D 4

2有以下程序(设其文件名为2-5.c)

#include

void main(int argc,char *argv[]) { int i; char *p; printf(\ if(argc>2) p=argv[1]; puts(p+1); }

若运行该程序时,在命令行提示符后输入 2-5 file1 file2 file3

则执行puts(p+1);时,输出结果为( ile1) A file1 B file2 C ile1 D ile2

R3. 变量I的值为3,I的地址为1000,若欲使p为指向I的指针变量,则下列赋值正确的是___________。

A)&I=3 B)*p=3 C)*p=1000 D)p=&I 4.

有如下程序

#include

void fun1(int *x,int *y) { int *z;

z=x;x=y;y=z; }

void fun2(int *x,int *y) { int z;

z=*x; *x=*y; *y=z; (*x)++; (*y)++; }

void main() { int a=5,b=9; fun1(&a,&b);

printf(“a=%d,b=%d\\n”,a,b); fun2(&a,&b);

printf(“a=%d,b=%d\\n”,a,b); }

main函数中第一个printf输出结果为()

(A)a=9,b=5 (B)a=5,b=9 (C)a=10,b=6 (D)a=6,b=10

注意:第二个printf输出结果为a=10,b=6 R5、

若有以下定义和语句:

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则不能表示a数组元素的表达式是( )。 A、*p B、a[10] C、*a D、a[p-a]

6、有以下程序 main() {

int a[3][3],*p,i; p=&a[0][0];

for(i=0;i<9;i++)p[i]=i;

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

程序运行后的输出结果是 A 0 1 2 B 1 2 3 C 2 3 4 D 3 4 5 7以下程序的输出结果为_________。

char *alpha[6]={“ABCD”,”EFGH”,”IJKL”,”MNOP”,”QRST”,”UVWX”}; char **p; main() {

int i;

p = alpha;

for(i=0;i<4;i++) printf(“%c”,*(p[i])); printf(“\\n”); }

A) AEIM B) BFJN C) ABCD D) DHLP

8.下面程序输出数组中的最大值,由s指针指向该元素。

main()

{ int a[10]={6,7,2,9,1,10,5,8,4,3},*p,*s; for(p=a,s=a;p-a<10;p++) if( ) s=p; printf(“The max:%d”,*s); }

则在if语句中的判断表达式应是( )

A、p>s B、*p>*s C、a[p]>a[s] D、p-a>p-s

R9(3)若有定义int *x[3],b[10];则正确的赋值语句是( )

A.x=b[0]; B.x=b; C.x[0]=b[0]; D.x[0]=&b[0];

R10若有以下定义,则______是对数组元素的正确引用。 int a[5],*p=a

A). *&a[4] B、*(p+5) C、*++a D、*(p-1)

11.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是 A) char s[10]=”abcdefg”; B) char t[]=”abcdefg”,*s=t; C) char s[10];s=”abcdefg”;

D) char s[10];strcpy(s,”abcdefg”);

N12.#include

int find(char *s1, char *s2) {

int t;

char *p1,*p2;

for(t=0 ;s1[t] ;t++) {

p1=&s1[t] ; p2=s2 ;

while(*p2&&*p2==*p1)//先算*p2==*p1 {

p1++; p2++; }

if(!*p2) return(t); }

return -1 ; } main() {

if(find(“c is fun”,”is”)!=-1) L1: printf(“is”);

if(find(“c is fun”,”Basic”)!=-1) L2:printf(“basic\\n”); }

(11)行L1输出的结果为_________。

A is B i C c is fun D没有输出 (12)行L2输出的结果为________。

A Basic B c is fun C basic D没有输出 13.阅读下面程序,回答问题。 #include #include

void main() {

int i = 0,n = 0; char s[80],*p; p = s;

strcpy(p,”This is test!”); for(;*p!=?\\0?;p++) if(*p= =? ?) i = 0; else if(i= =0) {

n++; i=1; }

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

该程序的功能是()。

A、统计字符串的单词个数 B、统计字符串的空格个数 C、统计字符串的字母个数 D、统计字符串全部字符个数 N14.读程序并回答问题。 #include #include

void fun(char *s,char *t) { char k; k = *s; *s = *t; *t = k; s++; t--;

if(*s) fun(s,t); }

void main()

{ char str[10] = \ p = str + strlen(str)/2+1; fun(p,p-2);

printf(\}

程序的运行结果为( )。 A、abcdefg B、defgabc C、acegbdf D、gfedcba 15.读程序,回答问题。 #include #include

void main(int argc,char *argv[] )

{

int i=1,n=0; while(i

n = n+strlen(argv[i]); i++; }

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

若该程序生成的可执行文件名为2-4.exe,运行时输入命令行: 2-4 123 45 67

则程序的运行结果是( )。 A、3 B、5 C、7 D、11 16.读程序,回答问题。

下面程序的输出是

# include void test(int *u,int v) { *u=*u+v; ; }

main()

{ int m=3,n=6; test(&m,n);

printf(\ %d\输出结果1 test(&n,m);

printf(\ %d\输出结果2(9,15) }

输出结果1是:

(A)9 6 (B)6 9 (C)3 6 (D)6 3

17.若有以下定义和语句,则值为12的表达式是_________。 struct wc{ int a;int *b;}*p;

int x0[]={11,12},x1[]={31,32};

static struct wc x[2]={100,x0,300,x1}; p=x;

A) *++p->b B) ++p->a C) p->b D) *(p++)->b 18. 以下程序的运行结果是______ void main() {

int flag=1; char ch; do{

ch=getchar();

flag=chang(&ch,flag);

putchar(ch); }while(ch!='\\n'); }

chang(char *c, int fg) {

if(*c==' ') return 1;

else if( fg && *c<='z'&&*c>='a') *c+='A'-'a'; return 0; }

程序运行时,从第一列开始输入以下字符,代表换行符。 This is a book! A) This is a book! B) this Is A Book! C) This Is A Book! D) This Is a Book! 19. 读下列程序: void main() {

static char str[50]=\ int sum1 = 0,sum2=0; while(*p!='\\0') {

if(*p>=48&&*p<=57) sum1++;

else if(*p>=101&&*p<=107) sum2++; else; p++; }

printf(\}

程序的运行结果是______ A) 3,2 B) 2,3 C) 3,12 D) 12,3 R20、下面程序输出数组中的最大值,由s指针指向该元素。

main()

{ int a[10]={6,7,2,9,1,10,5,8,4,3},*p,*s; for(p=a,s=a;p-a<10;p++) if( ) s=p; printf(“The max:%d”,*s); }

则在if语句中的判断表达式应是( )

A、p>s B、*p>*s C、a[p]>a[s] D、p-a>p-s N21、下列程序:

int *f(int *px, int *py) {

return *px>*py?px:py;

}

void main() { int a=2, b=3, c=9;

*f(&a,&b)=c;

printf(\ }

执行后的结果是:

A) 10 B)5 C) 9 D)程序有错,不能运行

22(1)下面程序的输出是

# include void test(int *u,int v) { *u=*u+v; ; }

main()

{ int m=3,n=6; test(&m,n);

printf(\ %d\输出结果1 test(&n,m);

printf(\ %d\输出结果2 }

输出结果1是:

(A)9 6 (B)6 9 (C)3 6 输出结果2是:

(A)15 9 (B)6 15 (C)9 15 23(2)下面程序的输出是

# include main()

{ char *str[2]={“Hello”, ”World”};

D)6 3 (D)15 6

printf(\输出结果1 (5) printf(\输出结果2(5) }

输出结果2是:5

(A)Hello (B)World (C)Hello World (D)World Hello

24.下面的程序: #include Main() {

char s[30],*p1,*p2; p1=s; gets(p1); p2=s; gets(p2)

puts(p1);puts(p2); }

如果程序运行时的输入为: abc
efgh

那么程序输出的结果为(注:
表示回车): A、abc

B、abc

C、efgh

abc
efgh
efgh
25.有以下程序

void fun(char *a, char *b) { a=b; (*a)++; } main()

{ char c1='A',c2='a',*p1,*p2; p1=&c1;

p2=&c2; fun(p1,p2);

printf(\}

程序运行后的输出结果是

A) Ab B) aa C) Aa D) Bb

D、efgh

abc

第六章 预编译、结构体与共用体

以下叙述正确的是_________.——预编译之宏替换

(12)可以把define和if 定义为用户标识符

13)可以把define定义为用户标识符,但不能把if定义为用户标识符 (14)可以把if定义为用户标识符,但不能把define定义为用户标识符 (15)define和if都不能定义为用户标识符 正确答案:B

.设有以下说明语句 typedef struct { int n; char ch[8]; }PER; 则下面叙述中正确的是__________.——数据类型重新命名

(16)PER是结构体变量名 (17)PER是结构体类型名 (18)typedef struct是结构体类型 (19)struct 是结构体类型名 正确答案:B

如果有struct wage {char name[30];float salary; }; 则struct wage worker1,worker2;定义了两个( )。 20.结构数据类型 21.结构类型变量 22.结构常量 23.一般变量

以下说法正确的是 。

(24)结构体成员变量可以用作函数的形式参数。

(25)结构体数组名可以用作函数参数,发生函数调用时传递的是地址数据。 (26)结构体数组的元素不能用作函数的实际参数。 (27)结构体成员变量的指针不能用作函数的实际参数。 以下关于typedef的叙述中,错误的是 。 (28)使用typedef为固定长度的数组定义一个新的类型名 (29)用typedef可以在C语言中创建新的数据类型

(30)用typedef只是将已存在的类型用一个新的标识符来代表 (31)使用typedef有利于程序的移植

32.文件包含是指一个源文件可以将另一个源文件的全部内容包含进来。 33.文件包含处理命令的格式为

#include “包含文件名” 或 #include <包含文件名> 34.一条包含命令可以指定多个被包含文件

35.文件包含可以嵌套,即被包含文件中又包含另一个文件。

36.可以把define和if定义为用户标识符

37.可以把define定义为用户标识符,但不能把if定义为用户标识符

38.可以把if定义为用户标识符,但不能把define定义不用户标识符 39.define和if都不能定义为用户标识符

一、 单项选择题

N1.以下程序的输出的结果是( )

main()

{ union { char i[2]; int k;

} r;

r.i[0]=2; r.i[1]=0; printf(“%d\\n”,r.k); }

A、 2

B、 1

R2.以下程序的输出结果是

main( )

{ struct { int i;

char c; float a; } test;

printf(”%d\\n”, sizeof(test));

}

A、4 B、5 C、6 D、7

3 7.1 若有以下声明和语句:

struct sk {int a; float b; }data;

struct sk *p=&data;

则对data中成员a的正确引用形式是 。C、 0

D、不确定

本文来源:https://www.bwwdw.com/article/boop.html

Top