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),使用子函数和字符指针。