c教材习题

c教材习题
c教材习题

第2章C语言基础

二、选择题

1.下列合法的字符常量是________。

A) "c" B) c C) 'char' D) '\n'

2. 下列合法的字符串常量是________。

A) 56 B) '56' C) "56" D) '\t'

3.合法的C语言标识符是__。

A)2a B) sum C) default D) a*b

4.不合法的C语言标识符是__。

A) _8_ B) j2_KEY C) 4d D) Double

5. 以下语句的输出结果是__。

printf("%d", strlen("\t\''\065\xff\n\\"));

A) 6 B) 14 C) 8 D) 输出项不合法,无正常输出

6.在C语言中,要求运算数必须是整型的运算符是__。

A) % B) / C) < D) !

7.已知字母A的ASCII码为十进制的65,下面程序的输出是__。

A) 67,D B) B,C C) C,D D) 不确定的值

void main()

{

char ch1,ch2;

ch1='A'+'5'-'3';

ch2='A'+'6'-'3';

printf("%d,%c",ch1,ch2);

}

8.下面程序的输出是__。

A) 0 B) 1 C) 3 D) 不确定的值

void main()

{

int x=10,y=3;

printf("%d",y=x/y);

}

9. 有关运算符的正确描述是________。

A) 运算符优先级最高的是圆括号运算符

B)“.”仅是小数点,不能作为运算符

C)圆括号只能用于算术表达式

D)赋值号的运算优先级是最低的

10.语句float x=3.0 ,y=4.0;下列表达式中y的值为9.0的是________。

A) y/=x*27/4 B) y+=x+2.0

C) y-=x+0.8 D) y*=x-3.0

11. 若有下列类型说明语句:

char w; int x ; float y ; double z ;

则表达式w*x+z-y值的正确数据类型为________。

A) float B) char C) int D) double

12. 下列浮点数的表示中不正确的是__。

A) 22.3 B) .719e22 C) e23 D) 12. e2

三、编程题

1.编写程序,输出| -6 |+16.3*5.4的值。

2.编写程序,输入a、b两个整数值,输出两个数中较大值的平方根。

3.编写程序,从键盘输入的一个实数,输出他的平方和立方。

4.编写程序,从键盘输入的4个实数,输出他们的平均值。

5.编写程序,从键盘输入一个5位正整数,然后分别求出它的个位数、十位数、百位数、千位数和万位数,并打印出这五位数字的和。如输入12345,打印出15(1+2+3+4+5=15)。

第3章顺序结构程序设计

二、选择题

1.运行下面程序,输出结果是______。

void main()

{int a= 5;

printf("a=%d\n",++a+2);

A) a=6 B) 8 C) a= 5 D) a=8

2.putchar函数可以向屏幕输出一个_________。

A) 整型变量值B) 实型变量值

C) 字符串D) 字符或字符变量值

3.运行以下程序,从键盘输入25,13, 10<回车>,则输出结果是______。

void main()

{

int a1,a2,a3;

scanf("%d, %d, %d",&al,&a2,&a3);

printf(" al+a2+a3=%d\n",al+a2+a3);

A) al+a2+a3=48 B) al+a2+a3=25

C) al+a2+a3=10 D) 不定

4.设有以下程序段,则输出结果是__________。

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

printf("%d,%c\n",c2-c1,c2-'a'+'A');

A) 2, M B) 3,E

C) 2, E D)输出结果不确定

5.下面程序的执行结果是_______。

void main()

{ int a ,b ;

a=20;b =10;

a+=a +b ;

a-=a-b;

printf("%d\n", a);

}

A) 10 B) -10 C) 30 D) 0

6.下面哪个语句正确地描述了计算公式b

x ax y -=3

A) y = ax*x*x / x – b B) y = ax*x*x / (x – b)

C) y = (a*x*x*x) / (x – b) D) y = a*x*x*x / x – b

7.有以下程序 ,叙述中正确的是_______。

void main()

{ char a1='M',a2='m';

printf("%c\n",(a1,a2));

}

A) 程序输出大写字母M B) 程序输出小写字母m

C) 程序运行时产生出错信息 D) 格式说明符不足,编译出错

三、编程题

1.若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b'。想得到以下的输出结果,请写出程序(包括定义变量和输出设计)。

要求输出的结果如下:

a= 3 b= 4 c= 5

x=1.200000,y=2.400000,z=-3.600000

x+y= 3.60 y+z=-1.20 z+x=-2.40

u= 51274 n= 128765

c1='a' or 97(ascii)

c2='b' or 98(ascii)

2.编写程序,输入圆的半径,计算并输出其周长和面积。常量pi 的值取3.14159,周长和面积取小数点后2位数字。

3.编写程序,把整数华氏温度f ,转换为浮点型的摄氏温度c 。转换公式为c=5/9(f-32),输出要有文字说明,取2位小数。

4.编写程序,输入三角形的三边的边长,求三角形面积。三角形面积的计算公式为:p=(a+b+c)/2 ,S=sqrt(p(p-a)(p-b)(p-c))。

5.编写程序,使用类似printf("AA\aBB");语句,分别测试以下10个转义字符的显示效果:\a, \b, \n, \r, \t, \v, \’ ,\” ,\\, \? 。

6.编写程序,输入一个小写字母,输出其对应的大写字母。

7.编写程序,从键盘输入两个字符分别存放在变量c1和c2中,要求交换c1和c2的值并输出。

8.编写程序,设银行定期存款的年利率rate 为3.25%,存款期为n 年,存款本金为capital 元,计算并输出n 年后的本利之和deposit 。

interest(利息) = principal (本金)* rate (年利率)* n (年)

9.编写程序,输入销售员的销售额,计算并输出其月工资。公司规定销售人员的工作

由底薪加提成构成。底薪为1000元,提成为当月总销售额的9%。

第4章选择结构

一、选择题

1.若变量c为char类型,能正确判断出c为小写字母的表达式是___________。

A) 'a'<=c<='z' B) (c>='a')||(c<='z')

C) ('a'<=c)and('z'>=c) D) (c>='a')&&(c<='z')

2.有如下程序,运行后的输出结果是_。

void main()

{ int a=10,b=4,C=3;

if(a

if(a

printf("%d,%d,%d\n",a,b,c);

A)3,4,10 B)4,4,3 C)3,4,3 D)10,4,3

3.有如下程序段,执行该程序段后,x的值为__________。

int a=14,b=15,x;

char c='A';

x=(a&&b)&&(c<'B');

A) ture B) false C) 0 D) l

4.运行以下程序,如果从键盘上输入5,则输出结果是________。

void main()

{int x;

scanf("%d",&x);

if ( x--< 5) printf("%d",x);

else printf("%d",x++);

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

5.下列关于if语句的描述中,错误的是()。

A) if语句中可以没有else if子句,也可以没有else子句

B) if语句中只能有1个else子句

C) if语句中只能有不超过5个的else if子句

D) if语句中的条件可以是任意表达式

6.以下程序的输出结果是___________。

main()

{ int a= -1,b=1;

if ((++a<0)&& !(b--<=0))

printf("%d %d\n",a,b);

else

printf("%d %d\n",b,a);

A) –1 1 B) 0 1 C) 1 0 D) 0 0

7.有如下程序, 该程序的输出结果是_________。

void main()

{float x=2.0,y;

if (x<0.0) y=0.0;

else if(x<10.0)y=1.0/x;

else y= l.0;

printf("%f\n", y);

A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000 8.以下语法不正确的语句是___________。

A) if(x>y);

B) if(x<y){x++;y++;}

C) if(x=y)&&(x!=0)x+=y;

D) if(x!=y) scanf ("%d", &x);else scanf("%d",&y);

9.以下程序输出结果为_________。

main()

{int x=2,y=-1,z=2;

if(x<y)

if(y<0)z=0;

else z+=1;

printf("%d\n",z);

}

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

10.若输入字符B,以下程序的运行结果为___________。

main()

{char grade;

scanf("% c",&grade);

switch(grade)

{case 'A':printf(">=85");

case 'B':

case 'C':printf(">=60");

case 'D':printf("<60");

default:printf("error");

A) >=85 B) >=60 C) >=60<60error D) error 11.有如下程序段:

int score=5;

switch(score)

{ case 5: printf("very good!");

case 4: printf("Good!");

default : printf("data error ! ");

}

程序输出结果为_。

A)Very good!B)Good!

C)data error!D)Very good!Good!data error!12.下列关于switch语句和break语句的说法中,只有___________是正确的。

A) break是switch语句中的一部分。

B) 在switch语句中可以根据需要使用或不使用break语句。

C) 在switch语句中必须使用break语句。

D) 以上三种说法有两个是正确的。

二、填空题

1.设a=1, b=2, c=3,写出下列关系表达式的值

(1)(a

(2)(c(a

(3)a+b==c 。

(4)a+b>=c 。

2.设a=1, b=2, c=3, d=4写出下列逻辑表达式的值

(1)a && b && c 。

(2)a || !b || !c 。

(3)a !=11 && b<4 。

3.当a=1, b=2, c=3时执行下面语句后,a,b,c的值分别为_______、_______、________。

if(a>c)

b=c;a=c; c=b;

4.以下程序实现将两个数从大到小输出。

main()

{ float a,b,_____;

scanf(______,&a,&b);

if (a

{ t=a ;

__________;

b=t;

}

printf("%5.2f,%5.2f\n",a, b);

}

三、编程题

1.输入一个整数,判别它是奇数还是偶数。

2.输入一个字符,如果输入的是大写字母,则将它转换成小写字母后输出,否则按原样输出。

3.输入一个考试分数,如果分数是60分以下输出“不及格”,90分以上输出“优秀”,否则输出“合格”。

4.输入员工的工作时间,计算并输出该员工的工资。公司规定每个雇员40小时以内的报

酬为10.00美元/小时,超出40小时以外的按1.5工资付酬。

5.输入一个考试分数,要求输出成绩等级。如果不在0~100之间,显示出错信息:“数据错误”,60分以下输出“不及格”,60~69之间输出“及格”,70~79之间输出“中”,80~89之间输出“良”,90分以上输出“优”。

6.根据分段函数y=f(x),输入x,输出y的值。

???????>+≤<≤<--≤-=1231001112)(23x x x x

x x x x x f

7.输入年、月、日三个整数值,计算并输出这一天是该年的第几天。

8.输入一个字符,判断输入字符的种类并输出,字符分为空格、数字字符、英文字母和其他字符。

9.根据某人的体重指数判断他的体重是属于何种类型,其中体重指数的计算公式为:体重指数t=体重w/(身高h)2 (其中体重w 以千克为单位,身高h 以米为单位)。而体重指数对肥胖程度的划分是:当t 小于18时为体重偏轻;当18≤t <25时为体重正常;当25≤t <27时为体重超重;当t≥27时为肥胖。

第5章 循环结构程序设计

一、选择题

1. 设有如下程序段,则输出结果为k=( )。

int k=0,a;

for (a=1;a<=1000;a++) k=k+1;

printf("k=%d",k);

A) 1 B) 1001 C) 1000 D) 溢出

2. 设有如下程序段,则最后输出的a=( )。

int a;

for (a=1;a<=1000;a++) printf("a=%d",a);

A) 1 B) 1001 C) 1000 D) 溢出

3. 设有如下程序段,则输出结果为a=( )。

int a;

for (a=1;a<=1000;a++) ;

printf("a=%d",a);

A) 1 B) 1001 C) 1000 D) 溢出

4. 设有如下程序段,则输出结果为k=( )。

int k=0,a;

for (a=1;a<=1000;a++) {a=a+1;k=k+1;}

printf("k=%d",k);

A) 1000 B) 499 C) 500 D) 501

5. 循环语句for(int i=1,j=10; i==j; i++,j--); 的循环次数是( )

A) 0 B) 5 C) 10 D) 无限

6. 语句for(x=0,y=0;y!=1&&x<4;x++); 是( )。

A)无限循环 B) 循环次数不定 C) 循环4次 D)循环3次

7. 设有程序段:int k=10;while (k=0)k=k - 1;则下面叙述正确的是( )。

A )while 循环执行10次

B ) 循环是无限循环

C )循环体语句执行一次

D )循环体语句一次也不执行

8. 与语句while(!x);等价的语句是( )。

A) while(x= =0); B )while (x!=1);

C)while(x!=0);D)while (x= =1);

9.设有如下程序段,程序运行结果应为()。

#include

void main()

{ int i,j,k;

for(i=1;i<=2;i++)

for(j=1;j<=2;j++)

printf("i=%d\tj=%d\t\n",i,j);

}

(A) (B)

i=1 j=1 i=1 j=1

i=1 j=2 i=2 j=1

i=2 j=1 i=1 j=2

i=2 j=2 i=2 j=2

(C) (D)

i=1 j=1 i=1 j=2

i=2 j=2 i=2 j=2

10.下述有关break语句的描述中,错误的是()。

A) break语句用于循环体内,它将结束该循环

B) break语句用于switch语句,它结束该switch语句

C) break语句用于if语句的内嵌语句内,它结束该if语句

D) break语句在一个循环体内可使用多次

11.下面关于循环体的描述中,错误的是( )。

A) 循环体内可以包含有循环语句

B) 循环体内必须出现break语句和continue语句

C) 循环体内可以出现选择语句

D) 循环体可以是空语句

二、编程题

1. 用for循环语句编程输出1—20之间的所有整数,两数之间以空格分隔。

2. 用for循环语句编程输出20—1之间的所有整数,两数之间以空格分隔。

3. 用for循环语句编程输出A—Z,之间的所有字符,两字母之间以空格分隔,要求一行输出8个字符。

4.输出100~200之间所有能被3和7整除的数(每行输出4个数)。

5.输出1至1000之间所有满足用3除余2、用5除余3、用7除余2的数(要求每行只输出5个数)。

6. 先读入一个正整数n,然后计算并显示前n个偶数的和。例如n为5,则求2+4+6+8+10的值,即sum=30。

7.计算S=1+1/2+1/3+1/4+...+1/200的值并输出。

8.计算1-3+5-7+…-99+101的值。

9.输入6个整数并显示其平均值。

10. 输出Fibonacci数列的前几项,直到该项的值大于10000为止(每行输出5项)。fobinacci数列为1,1,2,3,5,8,13,21,34,…。即第一项和第二项为1,其他为前两项之和。

11.输出10000至99999中所有的回文数(回文数是指从左到右读与从右到左读都一样的正整数,如11、22、3443、94249等)。

12.找出所有“水仙花数”。所谓的“水仙花数”是指一个三位整数,其各位数字立方和等于该数本身。例如,153是水仙花数,因为153=13+53+33。

13.输出1至100之间所有各位数之积大于各位数之和的数,例如23,因为2*3>2+3。

14.输入一个整数,计算该整数的位数及各位之和。

15.一个正整数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、3,且6=1+2+3,因此6是“完数”。输入一个数,判断该数是否为完数。

16.输出“九九乘法表”。

17.输出如下图形:

A

BBB

CCCCC

DDDDDDD

18.输出如下图案:

*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

19.找出10000之内的所有完数。

20.找出500内的所有素数。

21.有一分数序列 2/1,3/2,5/3,8/5,13/8,21/13,……求出这个数列的前20项之和。

22.计算100至999之间有多少个数其各位数字之和是5。

23.编写程序,输出1500至3000年间的所有闰年,要求每行输出8个数据。

24.求一个二位整数AB(其中AB分别为两位整数的十位和个位), 使AB-BA=45成

立。

25.36块砖,36人搬。男搬4,女搬3,两个小孩抬一砖。一次刚好搬完,问男、女、

小孩各多少人?

26.编程求解马克思手稿中的数学题:有30个人,在一家饭馆里吃饭共花了50先令,

每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?

第6章函数

二、选择题

1.C语言程序由函数组成。正确的说法是__________。

A)主函数写在必须写在其他函数之前,函数内可以嵌套定义函数

B)主函数可以写在其他函数之后,函数内不可以嵌套定义函数

C)主函数必须写在其他函数之前,函数内不可以嵌套定义函数

D)主函数必须在写其他函数之后,函数内可以嵌套定义函数

2.一个C语言程序的基本组成单位是__________。

A)主程序B)子程序C)函数D)过程

3.以下说法正确的是__________。

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

B)C语言程序中,被调用的函数必须在main()函数中定义

C)C语言程序总是从主函数main()开始执行。

D)C程序中的main()函数必须放在程序的开始处

4.已知函数fun类型为void,则void的含义是__________。

A)执行函数fun后,函数没有返回值B)执行函数fun后,可以返回任意类型的值

C)执行函数fun后,函数不再返回D)以上三个答案都是错误的

5.下列对C语言函数的描述中,正确的是__________。

A)在C语言中,调用函数时只能将实参的值传递给形参,形参的值不能传递给实参B)函数必须有返回值

C)C语言函数既可以嵌套定义又可以递归调用

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

6.以下叙述中错误的是__________。

A)函数形参是存储类型为自动类型的局部变量

B)外部变量的缺省存储类别是自动的。

C)在调用函数时,实参和对应形参在类型上只需赋值兼容

D)函数中的自动变量可以赋初值,每调用一次赋一次初值

7.C语言中的函数__________。

A)不可以嵌套调用B)可以嵌套调用,但不能递归调用

C)可以嵌套定义D)嵌套调用和递归调用均可

8.C语言中函数返回值类型由_________决定。

A)调用该函数的主调函数类型B)函数参数类型

C)return语句中的表达式类型D)定义函数时指定的函数类型

9.C语言规定,调用一个函数,实参与形参之间的数据传递方式是________。

A)由实参传给形参,并由形参传回来给实参B)按地址传递

C)由用户指定方式传递D)按值传递

10.下列叙述错误的是__________。

A)形参是局部变量

B)复合语句中定义的变量只在该复合语句中有效

C)主函数中定义的变量在整个程序中都有效

D)其他函数中定义的变量在主函数中不能使用

11.若函数类型和return语句中的表达式类型不一致,则__________。

A)运行时出现不确定结果B)返回值的类型以函数类型为准

C)编译时出错D)返回值的类型以return语句中表达式的类型为准12.下面函数定义正确的是__________。

A)double fun(double u,v) B)double fun(double u;double v)

{return u+v;} {return u+v;}

C)double fun(float u,float v) D)double fun( u,v)

{return u+v;} { float u,v ;return u+v;}

13.以下函数fun的返回值类型为__________。

fun(double x){ ……}

A)double B)void C)int D)无法确定类型

三、编程题

1.编写函数求两个整数的最小值。在主函数中通过键盘输入x和y的值,调用该

函数,输出其中的最小值。

2.编写函数对x进行判断,如果x的值大于0,返回1;否则返回0,在主函数中

通过键盘输入x的值,调用该函数,输出返回值。

3.写一个判别素数的函数,在主函数中调用该函数,求出100~300之间所有的素

数。

4.写一个判别水仙花数的函数,在主函数中调用该函数,求出所有水仙花数。

5.写一个判别完数的函数,在主函数中调用该函数,求出1000以内所有的完数。

6.写一个函数,求正整数n从右边开始数的第k个数字。并设计一个主程序测试

这个函数。

7.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数分别调用

这两个函数,并输出结果,两个整数由键盘输入。

8.金字塔图形问题:编写一个函数,其函数原型声明为“void draw(int n);”。函

数功能是根据n的个数(0

主程序,测试该函数。例如n=6时,输出为:

A

ABC

ABCDE

ABCDEFG

ABCDEFGHI

ABCDEFGHIJK

第7章编译预处理

选择题

1.下列叙述中错误的是。

A) 预处理命令必须以#号开头

B) 预处理命令可以写成多行

C) 预处理命令必须置于源文件的开始处

D) 预处理命令以回车结束

2.C语言编译系统对宏替换的处理是在进行的。

A) 源程序编译前B) 源程序编译时

C) 程序连接时D) 程序运行时

3.在宏定义“#define PI 3.14159”中,3.14159是。

A) 单精度数B) 双精度数

C) 字符串D) 由PI位置确定其类型

4.设有宏定义“#define A B abcd”,则宏替换时,。

A) 宏名A用B abcd 替换

B) 宏名A B用abcd 替换

C) 宏名A 和宏名B都用abcd 替换

D) 语法错误,无法替换

5.下列有关宏的叙述中错误的是。

A) 宏名必须使用大写英文字母

B) 宏替换不占用程序的运行时间

C) 宏参数没有数据类型

D) 宏名没有数据类型

6.下列宏定义,最不会引起二义性的是。

A) #define ADD(a,b) a+b

B) #define ADD(a,b) (a)+(b)

C) #define ADD(a,b) (a+b)

D) #define ADD(a,b) ((a)+(b))

7.设有宏定义“#define M 3+2”,则表达式2 * M * 3 的值为。

A) 30 B) 12

C) 10 D) 13

8.设有宏定义“#define Y(n) (4*n) ”,则表达式3+Y(5+1)的值为。

A) 21 B) 24

C) 27 D) 30

9.设有宏定义:

#define N 3

#define M N+2

则表达式2*M/N的值为。

A) 6 B) 3

C) 3.333 D) 错误

10.在#include命令中,#include后面的文件名用双引号定界,则系统寻找被包含文件的方式是。

A) 在C系统的include文件夹查找

B) 在源程序所在文件夹查找

C) 先在C系统的include文件夹查找,查找失败后再到源程序所在文件夹查找

D) 先在源程序所在文件夹查找,查找失败后再到C系统的include文件夹查找11.设有以下A、B两个程序段,则说法正确的是。

//A程序段//B程序段

#define N 3 #define N 3

void main() void main()

{ {

if(N>0) #if(N>0)

printf("N=%d\n",N); printf("N=%d\n",N);

else #else

printf("N<=0"); printf("N<=0");

#endif

} }

A) 两个程序目标代码相同,运行结果也相同

B) 两个程序目标代码不同,但运行结果相同

C) 两个程序目标代码相同,但运行结果不同

D) 两个程序目标代码不同,运行结果也不同

12.执行以下程序,结果为。

#define DEBUG

void main()

{

#ifdef DEBUG

printf("DEBUG ");

#endif

printf("OK");

}

A) DEBUG OK B) OK

C) 宏定义错误D) #ifdef命令错误

编程题

1.编写一个计算圆的面积程序,将π的值定义为符号常量。

2.将求圆柱体的体积写成带参数的宏定义,并使用该宏定义计算圆柱体的体积。

3.定义一个带有三个参数的宏MAX,求三个参数中的最大值。

第8章数组

一、选择题

1.以下数组定义中,错误的是。

A) int a[]={1,2,3}; B) int a[5]={1,2,3};

C) int a[3]={1,2,3,4}; D) int a[5],b;

2.设有定义int a[10]={0}; 则说法正确的是。

A) 数组a有10个元素,各元素的值为0

B) 数组a有10个元素,其中a[0]的值为0,其他元素的值不确定

C) 数组a有1个元素,其值为0

D) 数组初始化错误,初值个数少于数组元素个数

3.以下数组定义中,正确的是。

A) int n=4 , a[n]={1,2,3,4}; B) int a[][2]={1,2,3,4};

C) int a[2][]={1,2,3,4}; D) int a[][]={{1,2},{3,4}};

4.设有如下定义:int a[8][10];在VC中一个整数占用4字节,设a的起始地址为1000,则a[1][1]的地址是。

A) 1000 B) 1004

C) 1036 D) 1044

5.已知有数组定义:int a[ ][3]={1,2,3,4,5,6,7,8,9},则a[1][2]的值是。

A) 2 B) 5 C) 6 D) 8

6.在以下字符串定义、初始化和赋值运算中,错误的是。

A) char str[10]; str= "String";

B) char str[10]= "String ";

C) char str[10]= { 'S' ,'t', 'r' ,'i','n', 'g'};

D) char str[]= { 'S' ,'t', 'r' ,'i','n', 'g',0};

7.设有以下字符串定义,则s1和s2 。

char s1[]={ 'S' ,'t', 'r' ,'i','n', 'g'};

char s2[]= "String";

A) 长度相同,内容也相同B) 长度不同,但内容相同

C) 长度不同,但内容相同D) 长度不同,内容也不同

8.设已定义char str[6]= { 'a','b','\0','c','d','\0'}; 执行语句printf(("%s",str) 后,输出结果为。

A) a B) ab C) abcd D) ab\0cd\0

9.引用数组元素时,数组元素下标不可以是。

A) 字符常量B) 整型变量

C) 字符串D) 算术表达式

10.已定义字符数组s1和s2,以下错误的输入语句是。

A) scanf("%s%s ", s1 , s2) ; B) scanf("%s%s " , &s1 , &s2);

C) gets(s1,s2) ; D) gets(s1) ; gets(s2) ;

11.下面程序段的运行结果是。

void main()

{

char a[]="abcd",b[]="123";

strcpy(a,b);

printf("%s\n",a);

}

A) 123 B) 123d

C) abcd D) abcd123

12.下面程序段的运行结果是。

void main()

{char a[]="123",b[]="abcd";

if(a>b) printf("%s\n",a);

else printf("%s\n",b);

}

A) 123 B) 编译时出错

C) abcd D) 运行时出错

二、程序设计题

1.一维整型数组a的值已知,求一维数组中最小元素的值及其在数组中的位置。

2.一维整型数组a有20个元素,各元素的值已知,求一维数组中所有元素之和及其平均值。

3.一维数组a的值已知,请把数组中的值按逆序存放,然后输出数组。例如数组中原来的值为:3,4,2,1,6。颠倒后变成6,1,2,4,3。

4.输入一个整数(位数不确定),从高位到底位依次输出各位数字,其间用逗号分隔。例如输入整数为2345,则输出应为:2,3,4,5。

5.输入一个由大写字母组成的字符串,求字符串中包含了几个不同的字母。

6.用选择排序法对整型数组排序。

7.请找出1~999中的所有平方为回文数的数,并输出这些数。例如11的平方为121,11为要找的数。

8.找出二维数组的所有鞍点。所谓鞍点就是在该位置上的元素在该行上最大,而在该列上最小。数组元素由随机函数自动产生。

9.输入一个5*5的整数矩阵,计算对角线以上所有元素之和。

10.文本加密。输入一字符串,将其中所有的大写英文字母+3,小写英文字母-3,然后再输出加密后的字符串。

11.输入一字符串,统计出某指定字符在字符串中出现的次数。

12.输入一个英文句子,如果两单词之间多于一个空格,则删除多余的空格。然后输出处理

前后该句子的长度。

13.不要调用strcpy函数,把字符数组str2中的字符串复制到字符数组str1中。

14.输入一组英文单词,按字典顺序排序后输出。

第9章结构体、共用体和枚举类型

一、选择题

1. 若已经定义struct stu { int a, b; } student ; ,则下列输入语句中正确的是。

A)scanf("%d",&a); B) scanf("%d",&student);

C) scanf("%d",&stu.a); D) scanf("%d",&student.a);

2. 若已有以下结构体定义和初始化,则值为2的表达式是。

struct cmplx{

int x ;

int y; } c[]={1,2,3,4};

A) c[0].y B) y C) c.y[0] D) c.y[1]

3. 设有如下程序段,则vu.a 的值为。

union u{

int a,b;

float c;

} vu;

vu.a=1; vu.b=2; vu.c=3;

A) 1 B) 2 C) 3 D) A、B、C都不是

4. 设已经定义union u{ char a; int b;} vu; 在VC中存储char 型数据需要1个字节,存储int型数据需要4个字节,则存储变量vu需要个字节。

A) 1 B) 4 C) 5 D) 8

5. 设有定义enum date {year,month,day} d ;则下列叙述中正确的是。

A) date是类型、d是变量、year是常量

B) date是类型、d和year是变量

C) date和d是类型、year是常量

D) date和d是变量、year是常量

6. 设有定义enum date {year,month,day} d ;则正确的表达式是。

A) year=1 B) d=year

C) d="year" D) date="year"

7. 若已经定义typedef struct stu { int a, b; } student ; ,则下列叙述中正确的是。

A) stu 是结构体变量B) student 是结构体变量

C) student 是结构体类型D) a和b是结构型体变量

8. 下面有关typedef语句的叙述中,正确的是。

A) typedef语句用于定义新类型

B) typedef语句用于定义新变量

C) typedef语句用于给已定义类型取别名

D) typedef语句用于给已定义变量取别名

二、程序设计题

1. 设计一个通信录的结构体类型,并画出该结构体变量在内存的存储形式。

2. 用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点之间的距离。

3. 用结构体变量表示复数(实部和虚部),输入两个复数,求两复数之积。

第10章指针

一、选择题

1. 设已定义int a, *p; 下列赋值表达式中正确的是。

A) *p=a B) p=*a C) p=&a D) *p=&a

2. 设已定义int x, *p=&x ; 则下列表达式中错误的是。

A) *&x B) &*x C) * & p D)& * p

3. 若已定义int a=1,*b=&a; , 则printf("%d\n",*b);的输出结果为。

A) a的值B) a的地址C) b的值D)b的地址

4. 设已定义int x, *p ,*p1=&x , *p2=&x ; 则下列表达式中错误的是。

A) x=*p1+*P2 B) p=p1 C) p=p1+p2 D) x=p1-p2

5. 设有函数定义void p(int *x){printf("%d\n",*x) ; } 和变量定义a=3; 则正确的函数调用是。

A) p(a) B) p(*a) C) p (&a) D) p(int *a)

6. 如下函数的功能是。

int fun( char *x)

{ char *y=x;

while(*y)y++;

return(y-x);

}

A) 求字符串的长度B) 比较两个字符串的大小

C) 将字符串x复制到字符串y D) 将字符串x连接到字符串y后面

7. 运行以下程序,输出结果为。

int fun(int a,int *b)

{ a++; (*b)++;

return a+*b;

}

void main()

{ int x=1,y=2;

printf("%d ",fun(x,&y));

printf("%d ",fun(x,&y));

}

A) 5 5 B) 5 6 C)6 5 D) 6 6

8. 运行以下程序,输出结果为。

#include

int* fun(int a,int *b)

{a++; (*b)++;

*b=a+*b;

return b;

}

void main()

{int x=1,y=2,*z;

z=fun(x,&y);

printf("%d ",*z);

z=fun(x,&y);

printf("%d ",*z);

}

A) 5 6 B) 5 7 C)5 8 D) 6 8

9. 若已定义int a[]={1,2,3,4},*p=a; 则下面表达式中值不等于2的是。

A) *(a+1) B) *(p+1) C) *(++a) D) *(++p)

10. 若已定义int a[]={1,2,3,4},*p=a+1; 则p[2]的值是。

A) 2 B) 3 C) 4 D) 无意义

11. 设已定义char s[ ]= "ABCD"; printf("%s",s+1)的值为。

A) ABCD1 B) B

C) BCD D) ABCD

12. 设已定义char str[]="abcd" , *ptr=str;,则*(ptr+5)的值为。

A) d B) 0 C) '0' D) 字符d的地址

13. 下面对字符串变量的初始化或赋值操作中,错误的是。

A) char a[]="OK"; B) char *a="OK";

C) char a[10]; a="OK"; D) char *a; a="OK";

14. 设已定义char *ps[2]={ "abc","1234"}; 则以下叙述中错误的是。

A) ps为指针变量,它指向一个长度为2的字符串数组

B) ps为指针数组,其两个元素分别存储字符串"abc"和"1234" 的地址

C) ps[1][2]的值为'3'

D) *(ps[0]+1) 的值为'b'

15.设已定义 struct { int a,b; } s,*ps=&s; 则错误的结构体成员引用是。

A) s.a B) ps->a C)*ps.a D) (*ps).a

二、程序设计题

1.输入3个字符串,输出其中最大的字符串(用字符指针)。

2.定义一个函数,函数的功能求已知半径的圆的周长和面积。要求把半径、周长和面积设置成函数参数。

3.定义函数max ,函数参数为3个字符串,函数返回值最大的字符串。

4.自己定义字符串复制函数strcpy,然后调用之。

5.定义一个函数,函数参数为一维数组(用指针表示),函数返回数组元素的平均值。

6.定义一个函数,删除字符串中第k个字符开始的m个字符,例如删除字符串abcde 第2个字符开始的3个字符,则删除后结果为ae;又如删除字符串abcde第4个字符开始的5个字符,则删除后结果为abc;

7.在字符串中删除所有指定字符(如把字符串teacher中的e字符删除,得到tachr),使用子函数和字符指针。

相关主题
相关文档
最新文档