c答案
更新时间:2023-03-15 14:02:01 阅读量: 教育文库 文档下载
第6章 课后练习及作业习题指导
作业01:C语言简介及算法
一、选择题
1.一个C程序要有一个main函数,还可以包含( )个其他函数函数。 A.一个
B. 多个
C.若干
D.任意
2.下面不可以使用( )来编译和连接一个C程序。 A.Turbo C
B.VC++
C.C语言编译器
D.BC
3.C语言的程序一行写不下时,可以( )。 A.用逗号换行 B.用分号换行 C.在任意一空格处换行 D.用回车符换行
4.C控制语句有( )种。 A.6
B.9 C.32
5.复合语句是用一对( )界定的语句块。 A.{ }
B.[] C.()
D.‖
6.一个C程序的执行总是从该程序的( )函数开始,在( )函数最后结束。A.第一个、最后一个
B.main、main
C.主函数、最后一个
D.第一个、第一个
7.C语言提供的合法的数据类型关键字( )。 A. Float
B.signed
C.integer
8.在以下各组标识符中,合法的标识符是( )。 (1)A.B01 B.table_1 C. 0_t D. k% (2)A.Fast_ B. void C.pbl D.
B.Int C._xy
D.w_y23
9.C语言的标识符里不能有( )。 A.大小写字母 B.数字 C. . D.下划线
二、填空题
1.C程序是由( 函数 )构成的,一个C程序中至少包含(一个函数main )。 因此,(函数)是C程序的基本单位。
2.C程序注释是由( /* )和( */ )所界定的文字信息组成的。 3.函数体一般包括( 声明部分 )和( 执行部分 )。 4.算法是解决问题的( 方法 )和( 步骤 )的描述。
5.C程序的注释部分可以出现在程序的( 任意 )位置,它对程序的编 译和运行( 不起 )作用,但是可以增加程序的( 可读性 )。
D.34
D.Char
作业02:C语言数据类型、基本运算及简单程序设计
一、选择题
1.不合法的字符常量是( )。
A. ?\\t‘
B. ―A‖
C. ?a‘
D.‘\\x32‘
2.逻辑运算符两侧运算对象的数据类型( )。
A.只能是0或1 B.只能是0或非0正数 C.只能是整型或字符型数据
D.可以是任何类型的数据
3.下列表达式中,不能满足―当x的值为偶数时值为真,为奇数时值为假‖的要求( )。
A.x%2==0
B.!x%2!=0 C.(x/2*2-x)==0
D.!(x%2)
4.下面选项中,不是合法整型常量的是( )。
A.160 B.-0xcdg C.-01
D.-0x48a
5.能正确表示―当x的取值在[1,10]和[200,210]范围内为真,否则为假‖的表达式是( )。
A.(x>=1) && (x<=10) && (x>=200) && (x<=210) B.(x>=1) | | (x<=10) | | (x>=200) | | (x<=210) C.(x>=1) && (x<=10) | | (x>=200) && (x<=210) D.(x>=1) | | (x<=10) && (x>=200) | | (x<=210)
6.putchar ( )函数可以向终端输出一个( )。
A.整型变量表达式值 C.字符串
B.实型变量值 D.字符或字符型变量值
7.在C语言中,要求参加运算的数必须时整数的运算符是( )。
A./
B.*
C.%
D. =
8.在C语言中,字符型数据在内存中以【 】形式存放。
A.原码
B.BCD码
C.反码
D.ASCII码
9.下列语句中,符合语法的赋值语句是( )。
A.a=7+b+c=a+7; C.a=(7+b,b++,a+7);
B.a=7+b++=a+7; D.a=7+b,c=a+7;
10. ( )是非法的C语言转义字符。
A.?\\b‘
B. ?\\0xf‘ C.?\\037‘
D.?\\‘‘
11.对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中,( )是正确的。
A.语法错误
B.f为5.0 C.f为0.0
D.f为2.0
12.与代数式(x*y)/(u*v) 不等价的C语言表达式是( )。
A.x*y/u*v B.x*y/u/v C.x*y/(u*v) D.x/(u*v)*y 13.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为
10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是( )。
int a1,a2; char c1,c2;
scanf(―%d%d%c%c‖,&a1,&a2,&c1,&c2);
A.10A 20B↙ B.10 A 20 B↙ C.10A20B↙ D.10 20AB↙ 14.C语言中整数-8在内存中的存储形式为( )。
A.1111111111111000 C.000000000001000
B.100000000001000 D.1111111111110111
15.对于char cx=‘ \\039‘;语句,正确的是( )。
A.不合法 C.cx的值为四个字符
B.cx的ASCII值是33 D.cx的值为三个字符
16.若int k=7,x=12;则能使值为3的表达式是( )。
A.x%=(k%=5) B.x%=(k-k%5) C.x%=k-k%5 D.(x%=k)-(k%=5)
17.为了计算s=10!(即10的阶乘.,则s变量应定义为( )。
A.int B.unsigned C.long D.以上三种类型均可
18.若w=1,x=2,y=3,z=4,则条件表达式w A.4 B.3 C.2 D.1 19.若运行时输入:12345678↙,则下列程序运行结果为( )。 main ( ) { int a,b; scanf(―--=‖,&a,&b); printf(―%d\\n‖,a+b);} A.46 B.579 C.5690 D.出错 20.设变量n为float型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( )。 A.n=(n*100+0.5)/100.0 B.m=n*100+0.5, n=m/100.0 C.n=n*100+0.5/100.0 D.n=(n/100+0.5)*100.0 二、填空题 1.在C语言中,一个char数据在内存中所占字节数为( 1 ),其数值范围为(0-255 );一个int数据在内存中所占字节数为( 2 ),一个long数据在内存中所占字节数为( 4 个float数据在内存中所占字节数为( 4 )。 2.字符常量使用一对( 单引号 )界定单个字符,而字符串常量使用一对( 双引号 )来界定若干个字符的序列。 3.C语言中基本数据类型可以分为( 整型 ),( 实型 ),( 字符型 ),(空类型 );构造数据类型可以分为(枚举类型 ),(数组类型 ),(结构体类型 ),(共用体类型 )。 4.设x=2.5,a=7,y=4.7, 则x+a%3*(int)(x+y)%2/4为( 2.75 )。 5.自增运算符(++)或自减运算符(--)只能用于( 变量 ),不能用于( 常量或表达式 )。 6.表达式5%(-3)的值是( 2 ),表达式-5%(-3)的值是( -2 )。 7.已知A=7.5,B=2,C=3.6,表达式A>B && C>A || AB的值是( 0 )。 8.已知int a=12,n=5;则:表达式运算后a的值各为( )。 a+=a 24 a-=2 10 a*=2+3 60 a/=a+a 0 n%=(n%=2) 0 a+=a-=a*=a 0 9.设int a; float f; double i ;则表达式10+‘a‘+i*f值的数据类型是(double )。 10.假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为( 9 )。 三、读程序写运行结果 1.main ( ) //按两字节整型考虑 {int a= -1; printf(―%d,%u,%o,%x‖,a,a,a,a);} //-1,65535,177777,ffff 2.main ( ) { int x=-1,y=4,k; k=x++<=0 && !(y--<=0); printf(―%d,%d,%d‖,k,x,y);} // 1,0,3 3.main ( ) { int a,b,c; int x=5,y=10; a=(--y==x++) ? –y : ++x ; b=y++ ; c=x ; printf(―%d,%d,%d‖,a,b,c);} // 7,9,7 4.若运行时输入100↙,写出以下程序的运行结果。 main ( ) { int a ; scanf(―%d‖,&a); printf(―%s‖,(a%2!=0)?‖No‖:‖Yes‖);} // Yes 四、编程题 1.由键盘任意输入2个数,分别计算输出它们的和、差、积、商。 #include );一 main( ) { float a,b; printf(\ a,b=\ scanf(\%f,%f\printf(\%f+%f=%f\\n\,a+b); printf(\%f-%f=%f\\n\,a,b,a-b); printf(\%f*%f=%f\\n\,a,b,a*b); printf(\%f/%f=%f\\n\,a/b); } 2.假设m是一个三位数,则输出将m的个位,十位,百位反序而成的 三位数(例如:123反序为321。 main ( ) { int m; scanf(\%d\,&m); printf(\%d\); printf(\%d\10); printf(\%d\\n\100); } #include 3.已知int x=10,y=12;写出将x和y的值互相交换的表达式。 {t=x;x=y;y=t;} 或 {x=x+y; y=x-y; x=x-y;} 4.任意输入一个字符,输出此字符对应的ASCII码。 main ( ) { char ch; scanf(\%c\,&ch); printf(\%d\ } 5.已知一个学生的4门功课的成绩,计算平均成绩。 main() {int a,b,c,d; scanf(\ printf(\} 作业03:分支结构程序设计 一、选择题 1.下面的程序( )。 #include { int x =3,y =0,z =0; if(x =y +z)printf(\else printf(\ A.有语法错误不能通过编译 B.输出 * * * * C.可以通过编译,但是不能通过连接,因而不能运行 D.输出# # # # 2.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是( #include scanf(\ %d \if(x++>5)printf(\d\ else printf(\d\\n\ A.7和5 B.6和3 C.7和4 D.6和4 3.以下程序的输出结果是( )。 #include { int a =-1,b =4,k; k =(++a<0)&&! (b- -<= 0); printf(\d%d%d \\n\,a,b);} A.104 B.103 C.003 D.004 4.能正确表示a≥10或a≤ 0的关系表达式是( )。 A.a >=10or a < =0 B. a >=10| a < =0 C.a >=10& &a < =0 D. a >=10||a < =0 5.假定所有变量以正确说明,下列程序段运行后x的值是( )。 a=b=c=0;x =35; if(!a)x--; else if(b); if(c) x=3; else x=4; A.34 B.4 C.35 D.3 6.表示关系X≤Y≤Z的c语言表达式为( )。 A.(X < =Y)&&(Y< =Z). B.(X < =Y)AND(Y< =Z) C.(X < =Y< =Z) D.(X < =Y)&(Y <=Z) 7.如下程序的输出结果是( )。 #include b=(-1)& &(-1); b为真 so, b=1 printf(\d,%d\\n\,a,b);} )。 A.2,1 B.3,2 C.4,3 D.2, -1 8.当a=1、b=2、c=5、d=5时,执行下面的程序后,x的值是( )。 if(a if(c B.2 C.3 D.6 9.能正确表示a和b同时为正或同时为负的逻辑表达式是( )。 A.(a>=0||bx>=0)&& (a<0||b<=0) B.(a>=0&&b>=0)&& (a<0&&b<=0) C. (a+b>0)&& (a+b<=0) D.a * b >0 10. 若a、b、c1、c2、x、y、均是整型变量,正确的switch语句是( )。 A.switch(a +b); B. switch(a +b) { case 1:y =a +b;break; { case 3: case 0:y =a -b;break; case 1:y =a +b;break; } case 3:y =b –a,break;} C.switch a D. switch(a –b) { case c1:y =a -b;break; { default:y =a *b;break; case c2:x =a *b;break; case 3:case 4:x=a +b;break; default:x =a +b; } case 10:case 11:y =a -b;break;} 11.下列关于switch语句和break语句的结论中,正确的是( )。 A.break语句是switch语句中的一部分 B.在switch语句中可以根据需要使用或不使用break语句 C.在switch语句中必须使用break语句 D.break语句只能用于switch语句中 12.设有说明语句“int a =1,b=0;”则执行以下语句后,输出为( )。 switch(a) { case 1: switch(b) { case 0:printf(\ );break; case 1:printf(\ak; } case 2:printf(\ );break; } A.* * 0 * * B.* * 0 * * * * 2 * * C.* * 0 * * * * 1 * * * * 2 * * D.有语法错误 13.以下关于运算符优先顺序的描述中正确的是( )。 A.关系运算符<算术运算符<赋值运算符<逻辑与运算符 B.逻辑与运算符<关系运算符<算术运算符<赋值运算符 C.赋值运算符<逻辑与运算符<关系运算符<算术运算符 D.算术运算符<关系运算符<赋值运算符<逻辑与运算符 14.为了避免在嵌套的条件语句if···else中产生二义性,C语 言规定:else字句总是与( )配对。 A.缩排位置相同的if B. 其之前最近的if C.其之后最近的if D. 同一行上的if 15.有定义语句:int a =1 ,b =2,c =3,x;,则以下选项中各程序段执行后, x的值不等于3的是( )。 A.if(c else if(b else x =3; else x =1; C.if(a <3) x =3; D. if(a if(b if(a <1) x =1; if(c { int a =5,b =4,c= 3, d= 2; if (a> b> c) printf(\d\\n\ else if ((c-1> = d) = = 1); printf(\d\\n\,d+ 1); else printf(\d\\n\ 2);} 执行后输出结果是( )。 A.2 B.3 1 x >0 17.有一函数:y = 0 x =0 ,以下程序段中不能根据x值正确计算出y值的是( )。 -1 x <0 A.if(x >0) y =1; B. y =0; else if(x = =0) y =0; if(x >0) y =1; C.4 D.编译时有错,无结果 else y = -1; else if (x <0) y = -1; C.y=0; D. if(x > =0) if(x > =0) if(x >0) y =1; if(x >0) y =1; else y =0; else y =-1; else y = -1; 18.与y=(x >0?1:x <0? -1:0);的功能相同的if语句是( )。 A.if(x >0) y =1; B. if(x) else if(x<0) y = -1; if(x >0) y=1; else y =0; else if(x <0) y = -1; else y =0; C.y = -1; D. y =0; if(x) if(x > =0) if (x >0)y =1; if(x >0) y =1; else if(x = =0) y =0; else y = -1; else y = -1; 19.当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为( )。 A.1 B.2 C.3 D.6 if (a if(b < d) x = 2; else x = 3; else x = 6; else x = 7; 20.为了使输出结果为:t=4,则给a和b输入的值应满足的条件是( )。 main( ) { int s,t,a,b; A.a>b B.a C.0 D.0 >a>b scanf (\ %d,%d \ s =1;t =1; if (a >0) s =s +1; if (a >b) t =s +1; else if (a = =b) t =5; else t =2*s; printf(\d \\n\,t);} 二、填空题 1.表示“整数x的绝对值大于5”时值为“真”的c语言 表达式是( x>5 || x<-5 )。 2.若从键盘输入58,则以下程序的结果是( 58 58 58 )。 #include scanf(\ %d \ if(a>50) printf(\d \ if(a>40) printf(\%d \ if(a>30) printf(\d \,a);} 3.以下程序的输出结果是( 0 )。 #include { int a =5,b =4,c=3,d; d= (a>b>c); printf(\d \\n\ 4.20 6.以下程序的输出结果是( 2 )。 #include { int x=2,y= -1,z =2; if(x if(y <0)z =0; else z + =1; printf(\d\\n\,z);} 7.若运行时输入12,则以下程序的结果( 0 )。 #include scanf(\d \ y =x >12? x +10:x -12; )。 printf(\d \\n\ 8.设x、y、z均为int型变量,请写出描述“x或y中至少有一个小于z”的 表达式(x 9.已知A =7.5,B =2,C =3.6,表达式A > B&&C >A||A B的值是( 0 )。 10.若已知x,y,z均为int型变量,请写出下列printf函数的输出结果 (1)x=y=z=0; ++x||++y&&++z; printf(\%d\\ty=%d\\tz=%d\\n\x=1 y=0 z=0______ (2) x=y=z=-1; ++x&&++y&&++z; printf(\%d\\ty=%d\\tz=%d\\n\x=0 y=-1 z=-1_____ (3) x=y=z=-1; x ++&&- -y&&z- -||- -x; printf(\%d\\ty=%d\\tz=%d\\n\x=0 y=-2 z=-2_____ 三、读程序写运行结果 1.以下程序的输出结果是( yes )。 main( ) { int a =1,b =3,c =5; if(c =a +b) printf(\,); else printf(\o\\n\2.若有以下程序 main( ) { int a =4,b =3,c =5,t =0; if (a printf(\d %d %d \\n\,c);} 执行后输出结果是( 5 0 3 )。 3.以下程序运行后的输出结果是( 20 ,0 )。 main( ) { int x =10,y =20,t =0; if(x = =y) t =x;x =y;y =t; printf(\d ,%d\\n\ } 4.以下主程序运行后的输出结果是( 1 3 2 )。 main( ) { int i,m =0,n =0,k =0; for(i =9;i <=11;i++) switch(i) { case 0:m ++;n++;break; case 10:n++;break; default: k++;n++; } printf(\d %d %d \\n\); } 四、阅读下列程序,在【】处填入适当内容,使程序完整。 1.输入x、y两个整数,按先大后小的顺序输出x、y。 #include ―stdio.h‖ main( ) { int x,y, 【1】t; scanf(“%d %d”,&x,&y); if(x { 【2】t=x; 【3】x=y; 【4】y=t; } printf(“x=%d,y=%d\\n”,x,y); } 2.输入一个三位数,按逆序输出各个位数 #include ―stdio.h‖ main( ) { int x,a,b,c,y; scanf(―%d‖,&x); a=【5】; // x b=【6】; // x/10 c=【7】; // x/100 y=a*100+b*10+c; printf(―y=%d\\n‖,y);} 3.输入百分制成绩,要求输出成绩的等级‘A‘,‘B‘,‘C‘,‘D‘,‘E‘。90分以上为‘A‘,80~89分为‘B‘,70~79分为‘C‘,60~69分为‘D‘,60分以下为‘E‘。 #include ―stdio.h‖ main( ) {float score; 【11】; // char grade printf(―请输入学生成绩:‖); scanf(―%f‖,&score); switch(【12】) // (int)(score/10) { case 10: case 9 : grade=‘A‘;break; case 8 : grade=‘B‘;break; case 7 : grade=‘C‘;break; case 6 : grade=‘D‘;break; case 5 : case 4 : case 3 : case 2 : case 1 : case 0 : grade=‘E‘;} printf(―成绩是%5.1f,相应的等级是%c。\\n‖,score,grade);} 五、编程题 1.从键盘输入一个字符,如果该字符为小写字母,则转换为大写字母输出;如果该字符为大写字母,则转换为小写字母输出;如果为其它字符,则原样输出。 #include if(c>='A' && c<='Z') printf(\%c\,c+32); else if (c>='a' && c<='z')printf(\%c\,c-32); else printf(\%c\ } 2 .有一函数 ?x...........(x?1)?y??2x?1....(1?x?10)?3x?11...(x?10)? 写一程序,输入x,输出y值。 #include else if(x<10) y=2*x-1; else y=3*x-11; printf(\%d\,y); } 3.用整数1—12依次表示1—12月,由键盘输入一个月份数,输出对应的季节(中文)英文名称(12—2月为冬季;3—5月为春季;6—8月为夏季;9—11月为秋季。) #include \o.h\main( ) {int x; printf(\请输入月份:\ scanf(\%d\,&x); switch(x) { case 12: case 1: case 2: printf(\冬季 \\n\ak; case 3: case 4: case 5: printf(\春季 \\n\ak; case 6: case 7: case 8: printf(\夏季 \\n\ak; case 9: case 10: case 11: printf(\秋季 \\n\ak; default : printf(\输入错误!\\n\ } } 4.征税的办法如下:收入在800元以下(含800元)的不征税;收入在800元以上,1200元以下者,超过800元的部分按5%的税率征税;收入在1200元以上,2000元以下者,超过1200元的部分按8%的税率征税;收入在2000元以上,2000元以上部分按20%的税率征税,试编写按收入计算税费的程序。 #include printf(\请输入工资额=\ scanf(\%f\ if(x<=800) y=0; else if(x<=1200) y=(x-800)*0.05; else if(x<=2000) y=(1200-800)*0.05+(x-1200)*0.08; else y=(1200-800)*0.05+(2000-1200)*0.08+(x-2000)*0.2; printf(\%f\} 作业04:循环结构程序设计 一、选择题 1.有下列程序: main( ) {int k=5; while(--k)printf(―%d‖,k-=3); printf(―\\n‖);} 执行后的输出结果是( )。 A.1 B.2 C.4 D.死循环 2.有下列程序段: int n,t=1,s=0; scanf(―%d‖,&n) ; do{s=s+t ;t=t-2 ;}while(t !=n) ; 为使此程序段不陷入死循环,从键盘输入的数据应该是( )。 A.任意正奇数 B.任意负偶数 C.任意正偶数 D. 任意负奇数 3.若变量已经正确定义,有下列程序段: i=0; do printf(―%d,‖,i); while(i++); printf(―%d\\n‖,i); 其输出结果是( )。 A.0,0 B.0,1 C.1,1 D.程序进入无限循环 4.若如下不构成无限循环的语句或语句组是( )。 A.n=0; B.n=0; do{++n;}while(n<=o); while(1) {n++;} C.n=10; D.for(n=0,i=1; while(n);{n--;} 5.设变量已经正确定义,则以下能正确计算f=n!的程序段是( )。 A.f=0; B.f=1; for(i=1;i<=n;i++)f*=i ; for(i=1;i D.f=1; for(i=n;i>1;i++)f*=i; for(i=n;i>=2;i--)f*=i; 6.有下列程序: #include for(j=3;j<=i;j++) m=m%j; printf(―%d\\n‖,m);} 程序的运行结果是( )。 A.0 B.1 C.2 D.3 7.有下列程序 #include ;i++)n+=i; {int x=8; for(;x>0;x--) {if(x%3) {printf(―%d,‖,x--);continue;} printf(―%d,‖,--x); } } 程序的运行结果是( )。 A.7,4,2 C.9,7,6,4 8.有下列程序: main() {int i,j,x=0; for(i=0;i<2;i++) {x++; for(j=0;j<=3;j++) {if(j%2) continue; x++;} x++;} printf(―x=%d\\n‖,x);} 程序执行后的输出结果是( )。 A.x=4 C.x=6 9.下列程序的输出结果是( )。 main() {int a=1,b; for(b=1;b<=10;b++) {if(a>=8) break; if(a%2= =1) {a+=5;continue;} a=3;} printf(―%d\\n‖.b);} ?? A.3 C.5 10.若有如下语句,则程序段( )。 int x=6; do{printf(―%d\\n‖,x-=2);} while(--x); A.输出的是1 C.输出的是3和0 11.下面程序段的输出结果是( )。 a=1;b=2;c=2; while(a {t=a;a=b;b=t;c--;} printf(―%d,%d,%d‖,a,b,c); A.1,2,0 C.1,2,1 12.下面程序的输出结果是( )。 #include {int x=10,y=10,i; B.8,7,5,2 D.8,5,4,2, B.x=8 D.x=12 B.4 D.6 B.输出的是4和1 D.是死循环 B.2,1,0 D.2,1,1 作业08:结构体和共用体 一、选择题 1.设struct {int a; char b; } Q, *p=&Q;错误的表达式是( )。 A.Q.a B.(*p),b C.p->a D.(*p).b 2.有以下定义和语句: struct student { int age; int num;}; struct student stu[3]={{1001,20},{1002,19},{1003,21}}; main() { struct student *p; p=stu; ...} 则不正确的引用是( )。 A. (p++)->num B. p++ 3.有以下语句: struct st { int n; struct st *next;}; static struct st a[3]={5,&a[1],7,&a[2],9,'\\0'},*p; p=&a[0]; 则以下表达式的值为 6的是( )。 A. p++->n B. p->n++ C. (*p).n++ D. ++p->n C. (*p).num D. p=&stu.age 4.有以下说明和定义语句,则表达式的值为 3的选项是( )。 struct s { int m; struct s *n;}; static struct s a[3]={1,&a[1],2,&a[2],3,&a[0]},*ptr; ptr=&a[1]; A. ptr->m++ B. ptr++->m 5.程序的运行结果是( )。 main() { enum team {my,your=4,his,her=his+10}; printf(\%d,%d,%d,%d\\n\,my,your,his,her); } A. 0,1,2,3 B. 0,4,0,10 C. 0,4,5,15 D. 3,4,5,15?? 6.根据下面的定义,能打印出字母M的语句是( )。 struct person{char name[9]; int age;} struct person class[10]={\John\,17,\aul\ary\am\A.printf(\%c\\n\lass[3].name); B.printf(\%c\\n\,class[3].name[1]); C.printf(\%c\\n\lass[2].name[1]); D.printf(\%c\\n\ass[2].name[0]); 7.以下对枚举类型的定义中正确的是( )。 A.enum a={one,two,three}; B.enum a {one=9,two=-1,three}; C.enum a={\one\o\,\\ D.enum a{\one\o\ree\8.已知学生记录描述为 struct student {int no; char name[20]; char sex; struct C. *ptr->m D. ++ptr->m?? {int year; int month; int day; } birth; }; struct student s; 9.设变量s中的“生日”应是“1984年11月11日”,下列对“生日”的正确赋值方式是( )。 A. year=1984;month=11;day=11; B. birth.year=1984;birth.month=11;birth.day=11; C. s.year=1984;s.month=11;s.day=11; D. s.birth.year=1984;s.birth.month=11;s.birth.day=11; 10.设有以下说明语句 struct stu {int a; float b; }stutype; 则下面的叙述不正确的是( )。 A. struct是结构体类型的关键字 B. struct stu是用户定义的结构体类型 C. stutype是用户定义的结构体类型名 D. a和b都是结构体成员名 11.设有以下说明语句 struct stu {int a; float b; }stutype; 则下面的叙述不正确的是( )。 A. struct是结构体类型的关键字 B. struct stu是用户定义的结构体类型 C. stutype是用户定义的结构体类型名 D. a和b都是结构体成员名 二、填空题 1.程序的运行结果是( )。 #include char c; }m; printf(\%d\\n\of(m));} 2.设有如下的枚举类型定义: enum language{Basic = 3, Assembly, Ada = 100, COBOL, Fortran};枚举量Fortran的值为( )。 3.若有以下说明和定义语句,则变量w在内存中所占的字节数是( )。 union aa { float x, y; char c[6];} struct st {union aa v; float w[5]; double ave;} w; 4.下面程序的输出是( )。 main() { enum team {my,your=4,his ,her=his+10}; printf(\%d%d%d%d\\n\,my,your,his,her); } 5.有以下说明定义和语句,可用a.day 引用结构体成员day ,请写出引用结构体成员a.day 的其它两种形式( struct{int day; char mouth; int year;}a,*b;b=&a; 三、读程序写运行结果 1.程序的运行结果是( )。 #include { int year,month,dat; } today; printf(\%d\\n\of(struct date));} 2.程序的运行结果是( )。 main() ), ( )。 { struct cmplx{ int x; int y; } cnum[2]={1,3,2,7}; printf(\%d\\n\num[0].y/cnum[0].x*cnum[1].x); } 3.程序的运行结果是( )。 struct st {int x,*y; }*p; int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]}; main() { p=aa; printf(\%d\\n\x); printf(\%d\\n\+p)->x); printf(\%d\\n\ } 4.程序的运行结果是( )。 main() { struct MING{ struct{ int x; int y; }in; int a; int b; }e; e.a=1;e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf(\%d,%d\n.x,e.in.y); } 5.有以下程序: #include char ch[2]; } a; main() {a.ch[0]=13; a.ch[1]=0; printf(\%d\\n\ 程序的输出结果是( )。(注意: ch[0]在低字节,ch[1]在高字节.) 四、阅读下列程序,在【】处填入适当内容,使程序完整 1.以下程序建立了一个有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data 域不放数据,表空的条件是ph->next==NULL)。 #include struct list{ int data; struct list *next; }; 【1】 creatlist() { struct list *p,*q,*ph; int a; ph=(struct list * )malloc(sizeof(struct list)); p=q=ph; printf(%ut an integer number,enter -1 to end :\\n\scanf(\%d\,&a); while(a!=-1) { p=(struct list*)malloc(sizeof(struct list)); p->data=a; q->next=p; 【2】 =p scanf(\%d\,&a);} p->next=NULL; return(ph);} main() { struct list *head; head=creatlist();} 2.下面min3函数的功能是:计算单向循环链表first中每3 个相邻结点数据域中的值之和,返回其中最小的值。请填空。 struct node { int data; struct node *link;}; int min3(sturct node *first) {struct node *p=first; int m,m3=p->data+p->link->data+p->link->link->data; for (p=p->link;p!=first;p=【3】 ) /*填空*/ { m=p->data+p->link->data+p->link->link->data; if 【4】 m3=m; } /*填空*/ } return (m3); 3.以下函数creat 用来建立一个有头结点的单向链表,新产生的结点是插在链表的末尾,单向链表的头指针作为函数值返回。请填空。 #include char data; struct list *next;}; struct list *creat() { struct list *h,*p,*q; char ch; h=【5】 malloc(sizeof(struct list)); /*填空*/ p=q=h; ch=getchar(); while (ch!='?') { p=【6】 malloc(sizeof(struct list)); /*填空*/ p->data=ch; q->next=p; q=p; ch=getchar(); } p->next='\\0'; 【7】 } /*填空*/ 作业09:文件和位运算 一、选择题 1.如果想打开一个已经存在的非空文件“FILE”,并进行修改,正确的语句是( )。 A.fp=fopen(―FILE‖,‖r‖); C.fp=fopen(―FILE‖,‖w+‖); B.fp=fopen(―FILE‖,‖a+‖); D.fp=fopen(―FILE‖,‖r+‖); 2.若以‖r+‖方式打开一个已经存在的文件,则以下叙述正确的是( )。 A.文件打开时,原有文件不被删除,位置指针移动到文件末尾,可作添加或读操作. B.文件打开时,原有文件不被删除,只能进行读操作. C.文件打开时,原有文件被删除,只能进行写操作. D.以上均不正确. 3.若fp是指向某文件的指针,且尚未读到文件末尾,则函数feof(fp)的返回值是( )。 A.EOF B.-1 C. 非0值 D.0 4.函数fseek(fp,-10L,SEEK_END)的含义是( )。 A.将文件位置指针从当前位置向文件尾移动10个字节. B.将文件位置指针移动到距离文件头10个字节处. C. 将文件位置指针从文件末尾向文件头退10个字节. D.将文件位置指针移动到离当前位置10个字节处. 5.函数rewind(fp)的作用是( )。 A.使fp指定的文件的位置指针重新定位到文件的开始位置. B.将fp指定的文件的位置指针指向文件中所要求的特定位置. C. 使fp指定的文件的位置指针指向文件的末尾. D.使fp指定的文件的位置指针自动移到下一个字符的位置. 6.已知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是( )。 A.一个整形变量,代表要读入的数据项总数 B.一个文件指针,指向要读的文件. C.一个指针,是指向的输入数据放在内存中的起始位置. D.一个存储区,存放要读的数据项. 7.函数ftell(fp)的作用是( )。 A.得到fp所指向的当前读写位置. B.初始化文件的位置指针. C.移动文件的位置指针. D.以上均不对. 8.表达式 0x13 | 0x17的值是( )。 A. 0x13 B. 0x17 C. 0xe8 D. 0xc8 9.若a=1,b=2 则 a | b 的值是( )。 A.0 B.1 C.2 D.3 10.若有以下程序段: int x=1,y=2; x=x ^ y ; y=y ^ x ; x=x ^ y ; 则执行以上语句后x和 y的值是( )。 A. x=1,b=2 B.x=2,y=2 二、填空题 1.在c程序中,数据可以用【1】和【2】两种代码形式存放。 2.在c程序中,文件的存取是以【3】为单位的,这种文件被称作【4】文件。 3.与表达式 x ^= y-2 等价的另一书写形式是【5】。 4.设二进制数x的值是11001101 ,若想通过想x & y 运算使x 中的低4位不变,高 4位清零,则y的二进制数是【6】。 C.x=2,y=1 D.x=1,y=1 } 4.输入一串字符,直到输入一个星号为止,统计(输出)其中的字母(含大小写)个数和数字字符个数。 #include {c=getchar(); if(c>='A' && c<='Z' || 【 】) n1++; else if(c>='0' && c<='9') n2++; }while(c!='*'); printf(\%d,n2=%d\1,n2); } 5.输入一串整数,直到输入的整数为0,统计(输出)其中的正数个数和负数个数,以及所有正数的平均值和所有负数的平均值。 #include {int n,n1=0,n2=0; float av1=0,av2=0; do {scanf(\%d\ if(n>0){n1++;av1+=n;} else if(n<0){ 【 】} }while(n); printf(\1=%d,n2=%d,av1=%f,av2=%f\1,n2,av1/n ,av2/n ); } 6.计算斐波那契分数序列前n项之和(n是某个常数)。 ? 213581321,,,,,,235813前一项的分子作为后一项的分母。前一项的分子分母之和作为后一项的分子。 #include float s=0,s1=2,s2=1,t1,t2; scanf(\%d\ for(i=0;i printf(\%f‖,s ); } 7.输入一个正整数n,各输出一个形如下的n行的正(倒)三角形宝塔图案。 * *** ***** ******* ********* #include printf(\请输入n=\ scanf(\%d\,&n); for(i=0;i for(i=n-1;i>=0;i--) {for(j=0;j } } 8.打印出所有的“水仙花数”,所谓的“水仙花数”是 ********* ******* ***** *** * 指一个3位数,其各位数字立方和等于该数本身。 例如153是一个“水仙花数”,因为153=13+53+33。 main( ) {int i,【 a 】 ,【 b 】 ,【 c 】 ; for(i=100;【i<=999 】;i++) {a= 【i 】; //个位数字 b= 【i/10 】; //十位数字 c= 【i/100 】; //百位数字 if(a*a*a+【b*b*b+c*c*c 】== i) printf(\%-5d\, i); } } 9.根据下面的公式计算出?的值。从键盘输入要求满足的精度值eps。 ?2?1?13?13?25?13?25?37?13?25?37?49?..... #include \o.h\main( ) {double s=1.0,s1=1,s2=1; double eps=1e-15; int n; for(n=1; ;n++) { s1*=n; s2*=2*n+1; s+=1.0*s1/s2; if(1.0*s1/s2 printf(\π值为:%.14f\,2*s); } 作业05:函数与宏定义 一、选择题 1.已知函数abc的定义为:void abc( ){ ……}则函数定义中void的 含义是( )。 A.执行函数abc后,函数没有返回值 B.执行函数abc后,函数不再返回 C.执行函数abc后,可以返回任意类型 D.以上三个答案都是错误的 2.已知int p();p是( )。 A.int型变量 B.函数p的调用 C.一个函数声明,该函数的返回值是int型的值 D.强制类型转换表达式中的变量 3.C语言中的函数( )。 A.可以嵌套定义 B.不可以嵌套调用 C.可以嵌套调用,但不能调用自己 D.嵌套调用和调用自己均可 4.C语言中函数返回值的类型是由( )决定的。 A.return语句中的表达式类型 B.调用该函数的主调函数类型 C.调用函数时临时 D.定义函数时所指定的函数类型 5.C语言规定,调用一个函数时,实参表达式的值变量和形参变量之间的数据传递方式是( )。 A.地址传递 B.值传递 C.由实参传给形参,并由形参传回来给实参 D.由用户指定传递方式 6.以下正确的函数形式是( )。 A.double fun(int x,int y) {z=x+y;return z;} B.fun(int x,y) {int z;return z;} C.fun(x,y) {int x,y;double z;z=x+y;return z;} D.double fun(int x,int y) {double z;z=x+y;return z;} 7.以下正确的说法是( )。 A.定义函数时,形参的类型说明可以放在函数体内 B.return后边的值不能为表达式 C.如果函数值的类型与返回值表达式类型不一致,以函数值类型为准 D.如果形参与实参的类型不一致,以实参类型为准 8.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( )。 A.地址传递 B.单向值传递 C.由实参传给形参,再由形参传给实参 D.由用户指定传递方式 9.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( )。 A.float型 B.int型 C.long型 D.double型 10.关于return语句,下列正确的说法是( )。 A.可以在同一函数中出现多次 B.在主函数中不能出现 C.必须在每个函数中出现 D.只能在除主函数之外的函数中出现一次 11.在一个C源程序文件中,若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要的存储类别是( A.extern B.register C.auto D.static 12.将一个函数说明为static后,该函数将( )。 A.既能被同一源文件中的函数调用,也能被其他源文件中的函数调用 B.只能被同一源文件中的函数调用,不能被其他源文件中的函数调用 C.只能被其他源文件中的函数调用,不能被其他源文件中的函数调用 D.既不能被同一源文件中的函数调用,也不能被其他源文件中的函数调用 )。 13.在函数中的复合语句中定义了一个变量,则对于该变量以下正确的说法是( )。 A.只在该复合语句中有效 B.在该函数中有效 C.在本程序范围内均有效 D.为非法变量 14.以下不正确的说法是( )。 A.在不同函数中可以使用相同名字的变量 B.形式参数是局部变量 C.在函数内定义的变量只在本函数范围内有效 D.在函数内的复合语句中定义的变量在本函数范围内有效 15.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为( )。 A.自动(auto) B.静态(static) C.外部(extern) D.寄存器(register) 16.若有以下函数调用语句: fun(a+b,(x,y),ab(n+k,d,(a,b)));在此fun函数调用语句中实参的个数是( )。 A.5 B.6 C.3 D.4 17.以下叙述中不正确的是( )。 A.函数中的自动变量可以赋初值,每调用一次,赋一次初值 B.在调用函数时,实参和对应形参的类型要一致 C.全局变量的隐含类别是自动存储类别 D.函数形参可以说明为register变量 18.数组名作为实参数传递给函数时,数组名被处理为( )。 A.该数组的长度 B.该数组的元素个数 C.该数组的首地址 D.该数组中各元素的值 19.以下说法中正确的是( )。 A.宏替换是在程序编译时进行的 B.函数调用是在程序编译时进行的 C.宏替换时,如果实参是表达式,应先求表达式的值,再替换 D.函数调用时,如果实参是表达式,应将表达式的值传递给形参 20.以下说法中正确的是( )。 A.define和printf都是C语句 B.define是C语句,printf不是C语句 C.define不是C语句,printf是C语句 D.define和printf都不是C语句 二、填空题 1.函数f(double x){return x*x;}返回值的类型是(int )。无返回值的函数应定义为 ( void )类型。 2.以下程序的输出结果是( 12 )。 #define M(x,y,z) x*y+z main() {int a=1,b=2,c=3;Printf(\%d\\n\,M(a+b,b+c,c+a));} 3.函数可以嵌套调用,不可以嵌套( 定义 )。 4.设有如下宏定义:#define SWAP(z,x,y) {z=x,x=y,y=z}以下程序段通过宏调用实现变量a.b内容的交换。请填空将语句补充完整。int a=5,b=16,c;SWAP( c 5.函数的实参传递到形参有两种方式:( 传值 )和( 传地址 )。 6.在一个函数内部调用另一个函数的调用方式称为(嵌套调用 )。在一个函数内部直接或间接调用该函数成为函数(递归 )的调用方式。 7.C语言变量按其作用域分为(局部变量 )和(全局变量 )。按其生存期分为( 动态变量)和(静态变量)。 8.下列程序的输出结果是(48 )。 #define N 3 #define Y(n) ((N+1)*n) main(){printf(―%d\\n‖,2*(N+Y(5+1)));} 9.C语言变量的存储类别有(auto ),(static ),(exten )和(register )。 10.下列程序的输出结果是( 20 )。 #define MIN(x,y) (x)<(y)?(x):(y) main(){int i,j,k;i=10;j=20;k=10*MIN(i,j);printf(―%d\\n‖,k);} 三、读程序写运行结果 ,a,b); 1.下面程序的运行结果为( 8,17 ) func (int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return (m);} main ( ) { int k=4,m=1,p1,p2; p1=func(k,m) ; p2=func(k,m) ; printf(―%d,%d\\n‖,p1,p2) ;} 2.下面程序的运行结果为(0 2 4 6 8 10 12 14 16 18 ) # define MAX 10 int a[MAX], i ; sub1 ( ) { for (i=0; i { int a[MAX], i ,max ; max=5; for (i=0; i for (i=0; i { pritnf(―\\n‖);sub1( ); sub2( ); sub3(a );} 3.若输入的值是-125,下面程序的运行结果为(-125=-5*5*5#include for (k=2; k<=sqrt(n); k++) { r = n % k ; while (!r) { printf(―%d‖,k); n=n/k; if (n>1) printf(―*‖); r = n % k ; } } if (n!=1) printf(―%d\\n‖,n); } main ( ) { int n ; scanf(―%d‖,&n); printf(―%d=‖,n); if (n<0) printf(―-‖); n = fabs(n); fun(n);} 4.下面程序的运行结果为( 8 ) #include { int a= 24,b=16,c; c=abc(a,b); printf(―%d\\n‖,c);} ) int abc(int u,int v) {int w; while(v) {w=u%v; u=v; v=w;} return u;} 5.下面程序的运行结果为( 85 ) #include 6.下面程序的运行结果为( 9 ) int f( ) { static int i=0; int s=1; s+=i;i+=2; return s;} main ( ) { int i,a=0; for (i=0;i<3;i++) a+=f( ); printf(―%d\\n‖,a);} 7.下面程序的运行结果为( 2 ) fun1(int a,int b) { int c1,c2; c1=fun2(a,b); c2=fun2(b,a); return c1+c2;} fun2(int a,int b) {renturn a/b;} main ( ) { int x=12,y=5; printf(―%d\\n‖,fun1(x,y));} 8.下面程序的运行结果为( 4 ) #include for(i=0;i<2;i++) k=f (a++); printf(―%d\\n‖,k);} 四、阅读下列程序,在【】处填入适当内容,使程序完整 1.下面函数用―折半查找法‖从有10个有序数的a数组中对关键字m查找,若找到,返回其下标值,否则返回-1,请填空使程序完整。 算法提示:折半查找法的思路是先确定待查元素的范围,将其分成两半,然后比较位于中间点元素的值。如果该待查元素的值大于中间点元素的值,则将范围重新定义为大于中间点元素的范围,反之亦反。 int search(int a[10],int m) { int x1=0,x2=0,mid ; // x2=9 while (x1<=x2) { mid = (x1+x2)/2; if (ma[mid]) 【2】 ; //x1=mid+1 else return (mid) ; } return (-1) ;} 2.del函数的作用是删除有序数组a中的指定元素x,n为数组a的元素个数,函数返回删除后的数组a元素个数,请填空使程序完整。 int del (int a[10],int n,int x) { int p=0,i ; while (x!=a[p]&&p 3.验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。要求将6~100之间的偶数都表示成两个素数之和。素数指只能被1和自身整除的正整数,1不是素数,2是素数。 #include int prime(int n) /* 判断n是否为素数 */ { main() { int i, k; for (i=6 ; i<=100; i+=2) for (k=2; k<=i/2; k++) if ( 【6】 ) {printf(\%d = %d +%d\\n\, i, k, i-k);break;} int k; for (k=2; k<=n/2; k++) if (n%k==0) return 0; return 【5】 ;} // 1 } // prime(k) && prime(i-k) 4.下列程序调用swap函数交换a和b的值,并输出交换后的a和b的值。程序的输出结果是:After swap 5, 3。 void main() { int a, b; a = 3, b = 5; swap( 【7】 ) ; &a,&b printf(\ap %d, %d\swap( 【8】 ) int *x,int *y { int t; 【9】 ; t=*x 【10】 ; *x=*y 【11】 ; *y=t } 5.以下程序中,func函数的功能是在N行M列的二维数组中,找出最大值作为函数的返回值,并通过全局变量传回最大值所在的行下标和列下标,请填空使程序完整。 #define N 3 #define M 4 【12】 ; int row,colum func(int a[N][M]) {int i,j; for(i=0;i if(a[i][j]> [alow][colum]) //row {row=i;colum=j;} return 【13】 ;} a[row][colum] main() {int a[N][M],max,i,j; for(i=0;i scanf(―%d‖,&a[i][j]); max=func( 【14】 ); a pritnf(―max=%d,row=%d,colum=%d\\n‖,max,row,colum);} 五、编程题 1.编写一个带参数的宏定义,求x2-5*x+4的值,x作为形参,在主函数中输入a的值,通过宏替换求y1,y2,y3的值: y1=a2-5*a+4 y2=(a+15)2-5*(a+15)+4 y3=sin2a-5*sina+4 2.编写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。 写出一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。本程序应准备以下测试数据:17,34,2,1,0,分别输入数据,运行程序并检查结果是否正确。 提示: 求素数函数如下: int p(int n) {if( n<2 ) return 0 for(i=2;i<=n/2;i++) else return 1; if ( n%i==0) return 0; } main() {int n,I; Scanf(“%d”,&n); If(p(n)==1)printf(“yes”); Else printf(“no”);} 函数中输入一个整数赋给变量n,通过prime(n)判断其是否素数,若函数值为1则是素数否则不是素数。 3.编写一个函数,其功能是将字符串中的大写字母改为小写字母,其他字符不变。 思路:判断大写字母的表达式是:str[i]>=‘A‘&& str[i]<=‘Z‘,若该表达式为真,str[i]为大写,则将str[i]的值加32,因为小写字母比大写字母的ASCII值多32。 4.编写一个函数,其功能是删除字符串中的字符‘d’。 思路:函数的形参是一个字符型数组s,存放待处理的字符串 ,定义另一个字符型数组c,存放删除了‘d‘字符的字符串。用一个for循环控制s数组元素的下标发生变化,每一个元素与‘d’比较,若不同,将该元素赋给c数组,然后c数组下标加1,若与‘d‘相同,则接着判断s数组中下一字符,直到遇‘\\0‘为止。
正在阅读:
c答案03-15
最新国际贸易理论与实务04-16
MSDC1.1版.初中数学.中考复习.第08讲.学生版03-08
农家小院体验生活作文300字06-26
11、工程节能保温监理细则07-19
2019小学生一年级关于元旦的文章06-14
高锰酸钾法测定中钙的含量03-08
高中数学数列求和专题复习_知识点_习题08-13
毕业论文致谢词、谢辞举例07-29
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 答案