C语言习题-答案_第1页
C语言习题-答案_第2页
C语言习题-答案_第3页
C语言习题-答案_第4页
C语言习题-答案_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言章节习题目录C语言章节习题 1第一章C语言概述 2第三章数据类型、运算符和表达式 3第四章顺序结构程序设计 4第五章选择结构程序设计 11第六章循环结构程序设计 21第7章数组习题 33第8章函数习题 41第九章预处理 48第十章指针 49第一章C语言概述一、选择题:1、一个C程序的执行是从(A)。A本程序的main函数开始,到main函数结束B本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C本程序的main函数开始,到本程序文件的最后一个函数结束D本程序文件的第一个函数开始,到本程序main函数结束2、在C语言中,每个语句必须以(D)结束。A.

回车符

B.

冒号

C.

逗号

D.

分号3、C语言规定:在一个源程序中,main函数的位置(C)。A.必须在最开始

B.必须在系统调用的库函数的后面C.可以任意

D.

必须在最后4、一个C语言程序是由(B)。A.一个主程序和若干子程序组成

B.函数组成C.若干过程组成

D.若干子程序组成5、下列说法中错误的是(D)。A.

主函数可以分为两个部分:主函数说明部分和主函数体B.

主函数可以调用任何非主函数的其他函数C.

任何非主函数可以调用其他任何非主函数D.

程序可以从任何非主函数开始执行6、用C语言编写的源文件经过编译,若没有产生编译错误,则系统将(B)。A.

生成可执行目标文件

B.

生成目标文件C.

输出运行结果

D.

自动保存源文件二、填空题:1、C语言只有(37)个关键字和

(9)种控制语句。2、每个源程序有且只有一个(main)函数,系统总是从该函数开始执行C语言程序。3、C语言程序的注释可以出现在程序中的任何地方,它总是以

(\*)

符号作为开始标记,以(*\)

符号作为结束标记。4、C语言中,输入操作是由库函数(scanf)完成的,输出操作是由库函数(printf)

完成的。5、系统默认的C语言源程序文件的扩展名是(.c),经过编译后生成的目标文件的扩展名是(.obj),经过连接后生成的可执行文件的扩展名是(.exe)。6、C语言的标识符只能由字母、数字和(下划线)三种字符组成。第三章数据类型、运算符和表达式一、选择题:1、以下选项中,不正确的C语言浮点型常量是(C)。A.160.

B.0.12

C.2e4.2

D.

0.02、以下选项中,(D)是不正确的C语言字符型常量。A.'a'

B.'\x41'

C.'\101'

D."a"3、在C语言中,字符型数据在计算机内存中,以字符的(C)形式存储。A.

原码

B.

反码

C.ASCII码

D.BCD码4、若x、i、j和k都是int型变量,则计算下面表达式后,x的值是(C)。x=(i=4,j=16,k=32)A.4

B.16

C.32

D.525、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B)。A.

算术运算、赋值运算、关系运算

B.

算术运算、关系运算、赋值运算C.

关系运算、赋值运算、算术运算

D.

关系运算、算术运算、赋值运算6、表达式!x||a==b等效于(D)。A.!((x||a)==b)

B.!(x||y)==b

C.!(x||(a==b))

D.(!x)||(a==b)7、设整型变量m,n,a,b,c,d均为1,执行(m=a>b)&&(n=c>d)后,m,n的值是(B)。A.0,0

B.0,1

C.1,0

D.1,18、设有语句inta=3;,则执行了语句a+=a-=a*=a;后,变量a的值是(B)。A.3

B.0

C.9

D.-129、在以下一组运算符中,优先级最低的运算符是(D)。A.*

B.!=

C.+

D.=

10、设整型变量i值为2,表达式(++i)+(++i)+(++i)的结果是(B)。A.6

B.12

C.15

D.

表达式出错11、若已定义x和y为double类型,则表达式x=1,y=x+3/2的值是(C)。A.1

B.2

C.2.0

D.2.512、设a=1,b=2,c=3,d=4,则表达式:a<b?a:c<d?a:d的结果为(D)。A.4

B.3

C.2

D.113、设a为整型变量,不能正确表达数学关系:10<a<15的C语言表达式是(A)。A.10<a<15

B.a==11||a==12||a==13||a==14C.a>10&&a<15

D.!(a<=10)&&!(a>=15)14、设f是实型变量,下列表达式中不是逗号表达式的是(D)。A.f=3.2,1.0

B.f>0,f<10

C.f=2.0,f>0

D.f=(3.2,1.0)

15、表达式18/4*sqrt(4.0)/8值的数据类型是(C)。A.int

B.float

C.double

D.不确定16、已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句C2=’A’+’6’-‘3’;后c2中的值是(A)。A.D

B.68

C.不确定的值

D.C17、以下用户标识符中,合法的是(B)。A.int

B.nit

C.123

D.a+b18、C语言中,要求运算对象只能为整数的运算符是(A)。A.%

B./

C.>

D.*19、若有说明语句:charc='\72';则变量c在内存占用的字节数是(A)。A.1

B.2

C.3

D.420、字符串"ABC"在内存占用的字节数是(B)。A.3

B.4

C.6

D.821、要为字符型变量a赋初值,下列语句中哪一个是正确的(B)。A.chara="3";

B.chara=’3’;

C.chara=%;

D.chara=*;22、下列不正确的转义字符是(C)。A.\\

B.\'

C.074

D.\0二、填空题:1、C语言中的逻辑值“真”是用

1表示的,逻辑值“假”是用

0

表示的。2、若x和n都是int型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值为0。3、设c='w',a=1,b=2,d=-5,

则表达式'x'+1>c,'y'!=c+2,-a-5*b<=d+1,b==a=2的值为

1

、0

、1

、1。4、设floatx=2.5,y=4.7;inta=7;,表达式x+a%3*(int)(x+y)%2/4的值为

2.5

。5、判断变量a、b的值均不为0的逻辑表达式为a!=0&&b!=0,值为1。6、求解赋值表达式a=(b=10)%(c=6),表达式值为4、a、b、c的值依次为1,0,6

。7、求解逗号表达式x=a=3,6*a后,表达式值为18、x、a的值依次为3,3

。三、编程题:1、设长方形的高为1.5,宽为2.3,编程求该长方形的周长和面积。2、编写一个程序,将大写字母A转换为小写字母a。1.main(){floatx=1.5,y=2.3;printf(“areais%6.2f\n”,x*y);}2.main(){charc=’A’;printf(“%d”,c+32);}第四章顺序结构程序设计基础练习(A)一、填空题1、C语句分为五种:控制语句、函数调用语句、表达式语句、空语句和复合语句。2、一个基本语句的最后一个字符是;。3、复合语句又称分程序,是用{}括起来的语句。4、使用C语言库函数时,要用于预编译命令#include将有关的“头文件”包括到用户源文件中。5、使用标准输入输出库函数时,程序的开头要有如下预处理命令:#include<stdio.h>。6、{a=3;c+=a-b;}在语法上被认为是1条语句。7、getchar函数的作用是从终端输入1个字符。8、如果从键盘输入字符’a’并按回车键,请写出以下程序运行效果a。#include<stdio.h>main(){putchar(getchar());}9、以下程序的输出结果为i:dec=-4,oct=177774,hex=fffc,unsigned=65532。 main() { shorti; i=-4; printf(“\ni:dec=%d,oct=%o,hex=%x,unsigned=%u\n”,i,i,i,i); }10、以下程序的输出结果为*3.140000,3.142*。 main() { printf(“*%f,%4.3f*\n”,3.14,3.1415); }11、以下程序的输出结果为c:dec=120,oct=170,hex=78,ASCII=x。 main() { charc=‘x’; printf(“c:dec=%d,oct=%o,hex=%x,ASCII=%c\n”,c,c,c,c); }12、已有定义intd=-2;执行以下语句后的输出结果是*d(1)=-2*d(2)=-2*d(3)=-2**d(4)=177776*d(5)=177776*d(6)=177776* printf(“*d(1)=%d*d(2)=%3d*d(3)=%-3d*\n”,d,d,d); printf(“*d(4)=%o*d(5)=%7o*d(6)=%-7o*\n”,d,d,d);13、以下程序的输出结果为x=1y=2*sum*=310Squaredis:100 main() { intx=1,y=2; printf(“x=%dy=%d*sum*=%d\n”,x,y,x+y); printf(“10Squaredis:%d\n”,10*10); }14、以下程序的输出结果为(1)123.456000(2)□□□□□□□123.457(3)123.4560(4)8765.456700(5)□□□□□□8765.457(6)8765.4567(7)8765.4567 #include<stdio.h> main() { floata=123.456;doubleb=8765.4567; printf(“(1)%f\n”,a); printf(“(2)%14.3f\n”,a); printf(“(3)%6.4f\n”,a); printf(“(4)%lf\n”,b); printf(“(5)%14.3lf\n”,b); printf(“(6)%8.4lf\n”,b); printf(“(7)%.4f\n”,b); }二、判断题1、所谓函数体实际上就是一个复合语句。(对)2、C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。(对)3、putchar函数可以向终端输出一个整数数据。(错)4、考虑到printf和scanf函数使用频繁,系统允许在使用这两个函数时可不加#include命令。(对)5、任何表达式都可以加上分号而成为有意义的语句。(对)三、选择题1、以下不属于流程控制语句的是(A)。A)表达式语句B)选择语句C)循环语句D)转移语句2、putchar函数可以向终端输出一个(D)。A)整型变量表达式值B)实型变量值C)字符串D)字符或字符型变量值3、getchar函数的参数个数是(B)。A)1B)0C)2D)任意4、以下程序的输出结果是(D)。 main() { printf(“\n*s1=%15s*”,“chinabeijing”); printf(“\n*s2=%-5s*”,“chi”); }A)*s1=chinabeijing* B)*s1=chinabeijing**s2=**chi* *s2=chi*C)*s1=*chinabeijing* D)*s1=chinabeijing**s2=chi* *s2=chi*5、printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式(B)。;如果字符串长度小于5,则输出按方式(C)。A)从左起输出该字串,右补空格B)按原字符长从左向右全部输出C)右对齐输出该字串,左补空格D)输出错误信息6、已有定义inta=-2;和输出语句:printf(“%8lx”,a);以下正确的叙述是(D)。A)整型变量的输出格式符只有%d一种B)%x是格式符的一种,它可以适用于任何一种类型的数据C)%x是格式符的一种,其变量的值按十六进制输出,但%8lx是错误的D)%8lx不是错误的格式符,其中数字8规定了输出字段的宽度

7、以下C程序正确的运行结果是(C)。 main() { longy=-43456; printf(“y=%-8ld\n”,y); printf(“y=%-08ld\n”,y); printf(“y=%08ld\n”,y); printf(“y=%+8ld\n”,y); }A)y=-43456 B)y=-43456y=-43456 y=-43456y=-0043456 y=-0043456y=-43456 y=+-43456C)y=-43456 D)y=-43456y=-43456 y=-0043456y=-0043456 y=00043456y=-43456 y=+434568、以下C程序正确的运行结果是(D)。 main() { inty=2456; printf(“y=%3o\n”,y); printf(“y=%8o\n”,y); printf(“y=%#8o\n”,y); }A)y=2456 B)y=4630y=2456 y=4630y=########2456 y=########4630C)y=2456 D)y=4630y=2456 y=4630y=02456 y=04630

基础练习(B)一、填空题1、printf函数的作用是向终端输出若干个任意类型的数据。2、printf函数中的“格式控制”,包括格式说明和普通字符两种信息。3、scanf函数中的“格式控制”后面应当是变量地址,而不是变量名。4、在用scanf函数中输入数据时,如果在“格式控制”字符传中除了格式说明以外还有其他字符,则应在对应位置输入与这些字符相同的字符。5、在用”%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入。6、在输入数据时,遇以下情况时该数据认为结束:遇空格、或按“回车”或“跳格”键;按指定的宽度结束;遇非法输入。7、输入数据时不能规定精度。8、如果在%后有一个“*”附加说明符,表示跳过它指定的列数。二、选择题1、若inta,b;scanf(“%d%d”,&a,&b);不可以用(A)作为输入的分隔符。A),B)空格C)回车D)TAB键2、若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是(B)。A)scanf(“%d%lx,%le”,&x,&y,&z);B)scanf(“%2d*%d%lf”,&x,&y,&z);C)scanf(“%x%*d%o”,&x,&y);D)scanf(“%x%o%6.2f”,&x,&y,&z);3、已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是(D)。 inta1,a2;charc1,c2; scanf(“%d%d”,&a1,&a2); scanf(“%c%c”,&c1,&c2);A)1020AB<CR> B)1020<CR> AB<CR>C)1020AB<CR> D)1020AB<CR>4、阅读以下程序,当输入数据的形式为25,13,10<CR>正确的输出结果为(D)。 main() {intx,y,z; scanf(“%d%d%d”,&x,&y,&z); printf(“x+y+z=%d\n”,x+y+z); }A)x+y+z=48B)x+y+z=35C)x+z=35D)不确定值5、已有程序段和输入数据的形式如下,程序中输入语句的正确形式应当为(D)。 main() { inta;floatf; printf(“\nInputnumber:”); 输入语句 printf(“\nf=%f,a=%d\n”,f,a); } Inputnumber:4.52<CR>A)scanf(“%d,%f”,&a,&f);B)scanf(“%f,%d”,&f,&a);C)scanf(“%d%f”,&a,&f);D)scanf(“%f%d”,&f,&a);6、根据定义和数据的输入方式,输入语句的正确形式为(B)。 已有定义:floatf1,f2; 数据的输入方式:4.52 3.5A)scanf(“%f,%f”,&f1,&f2);B)scanf(“%f%f”,&f1,&f2);C)scanf(“%3.2f%2.1f”,&f1,&f2);D)scanf(“%3.2f%2.1f”,&f1,&f2);7、阅读以下程序,若运行结果为如下形式,输入输出语句的正确内容是(B)。 main() { intx;floaty; printf(“enterx,y:”); 输入语句 输出语句 } 输入形式 enterx,y:23.4 输出形式 x+y=5.40A)scanf(“%d,%f”,&x,&y);printf(“\nx+y=%4.2f”,x+y);B)scanf(“%d%f”,&x,&y);printf(“\nx+y=%4.2f”,x+y);C)scanf(“%d%f”,&x,&y);printf(“\nx+y=%6.1f”,x+y);D)scanf(“%d%3.1f”,&x,&y);printf(“\nx+y=%4.2f”,x+y);8、以下说法正确的是(D)。A)输入项可以为一实型常量,如scanf(“%f”,3.5);B)只有格式控制,没有输入项,也能进行正确输入,如scanf(“a=%d,b=%d”);C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(“%4.2f”,&f);D)当输入数据时,必须指明变量的地址,如scanf(“%f”,&f);9、有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应当是(D)。A)132<回车>B)1,3,2<回车>C)a=1b=3c=2<回车>D)a=1,b=3,c=2<回车> }10、已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是(A)。 inta1,a2;charc1,c2; scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);A)10A20B<CR> B)10A20B<CR>C)10A20B<CR> D)10A20B<CR>11、已有定义intx;floaty;且执行scanf(“%3d%f”,&x,&y);语句,若从第一列开始输入数据12345678<回车>,则x的值为(B),y的值为( B)。(1)A)12345 B)123 C)45 D)345(2)A)无定值 B)45.000000 C)678.000000 D)123.000000三、编程:1、编写程序,从键盘上输入三个数分别给变量a、b、c,求它们的平均值。并按如下形式输出:averageof**、**and**is**.**。其中,三个**依次表示a、b、c的值,**.**表示a,b,c的平均值。2、输入9时23分并把它化成分钟后输出。(从零点整开始计算)。1、参考答案main(){floata,b,c,t;printf(“pleaseinputa,b,c:\n”);scanf("%f,%f,%f",&a,&b,&c);t=(a+b+c)/3;printf("averageof%6.2f、%6.2fand%6.2fis%6.2f\n”,a,b,c,t);}2、参考答案main(){inth,m,s;printf(“pleaseinputh,m:\n”);scanf("%d,%d",&h,&m);s=h*60+m;printf("total%dminute\n”,s);}第五章选择结构程序设计基础练习(A)一、填空题1、关系表达式的运算结果是逻辑值。C语言没有逻辑型数据,以1代表“真”,以0代表“假”。2、逻辑运算符!是单目运算符,其结合性是由右结合性。3、C语言提供的三种逻辑运算符是&&、||、!。其中优先级最高的为!,优先级最低的为||。4、逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是任何类型的数据。系统最终以0和非0来判定它们属于“真”或“假”。5、设y为int型变量,请写出描述“y是偶数”的表达式(y%2==0)。6、设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式x<z||y<z。7、条件“2<x<3或x<-10”的C语言表达式是x<-10||x>2&&x<3。8、判断char型变量ch是否为大写字母的正确表达式是(ch>=‘A’)&&(ch<=‘Z’)。9、当a=3,b=2,c=1时,表达式f=a>b>c的值是0。10、当a=5,b=4,c=2时,表达式a>b!=c的值是1。11、已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||A<B&&!C>B的值是0。12、若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是1。13、有intx,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为1。14、有intx,y,z;且x=3,y=-4,z=5,则以下表达式的值为1。 !(x>y)+(y!=z)||(x+y)&&(y-z)15、有inta=3,b=4,c=5,x,y;,则以下表达式的值为0。 !(x=a)&&(y=b)&&016、if(!k)a=3;语句中的!k可以改写为k==0,使其功能不变。二、选择题1、逻辑运算符两侧运算对象的数据类型(D)。A)只能是0或1B)只能是0或非0正数C)只能是整型或字符型数据D)可以是任何类型的数据2、以下关于运算符优先顺序的描述中正确的是(C)。A)关系运算符<算术运算符<赋值运算符<逻辑与运算符B)逻辑与运算符<关系运算符<算术运算符<赋值运算符C)赋值运算符<逻辑与运算符<关系运算符<算术运算符D)算术运算符<关系运算符<赋值运算符<逻辑与运算符3、下列运算符中优先级最高的是(B)。A)< B)+ C)&& D)!=4、为判断字符变量c的值不是数字也不是字母时,应采用下述表达式(D)。A)c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122B)!(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122)C)c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122D)!(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122)5、能正确表示“当x的取值在[1,100]和[200,300]范围内为真,否则为假”的表达式是(C)。A)(x>=1)&&(x<=100)&&(x>=200)&&(x<=300)B)(x>=1)||(x<=100)||(x>=200)||(x<=300)C)(x>=1)&&(x<=100)||(x>=200)&&(x<=300)D)(x>=1)||(x<=100)&&(x>=200)||(x<=300)6、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是(D)。A)‘x’&&‘y’B)x<=yC)x||y+z&&y-zD)!((x<y)&&!z||1)7、已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<‘B’&&!y)的值是(C)。A)0 B)语法错 C)1 D)“假”8、设有:inta=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)49、以下不正确的if语句形式是(C)。A)if(x>y&&x!=y);B)if(x==y)x+=y;C)if(x!=y)scanf(“%d”,&x)elsescanf(“%d”,&y);D)if(x<y){x++;y++;}10、已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是(B)。 if(x>y) z=x;x=y;y=z;A)x=10,y=20,z=30 B)x=20,y=30,z=30C)x=20,y=30,z=10 D)x=20,y=30,z=2011、以下if语句语法正确的是(B)。A)if(x>0)printf(“%f”,x)elseprintf(“%f”,-x);B)

if(x>0){ x=x+y;printf(“%f”,x); }elseprintf(“%f”,-x);C)

if(x>0){ x=x+y;printf(“%f”,x); };elseprintf(“%f”,-x);D)

if(x>0){ x=x+y;printf(“%f”,x) }elseprintf(“%f”,-x);12、请阅读以下程序: main() { inta=5,b=5,c=0; if(a==b+c) printf(“***\n”); else printf(“$$$\n”); } 以下程序(C)。A)有语法错不能通过编译 B)可以通过编译但不能通过连接C)输出*** D)输出$$$三、写出下列程序的运行结果1、若运行时输入:2<回车>,则以下程序的运行结果是2ndclasspostageis14p。 #include<stdio.h> voidmain(void) { charClass; printf(“Enter1for1stclasspostor2for2ndpost”); scanf(“%c”,&Class); if(Class==‘1’) printf(“1stclasspostageis19p”); else printf(“2ndclasspostageis14p”); }2、若运行时输入:4.4<回车>,则以下程序的运行结果是SellingPrice(0.30)$5.72。 #include<stdio.h> voidmain(void) { floatCostPrice,SellingPrice; printf(“EnterCostPrice$:”); scanf(“%f”,&CostPrice); if(CostPrice>=5) { SellingPrice=CostPrice+CostPrice*0.25; printf(“SellingPrice(0.25)$%6.2f”,SellingPrice); } else { SellingPrice=CostPrice+CostPrice*0.30; printf(“SellingPrice(0.30)$%6.2f”,SellingPrice); } }3、以下程序的运行结果是F。 main() { if(2*2==5<2*2==4) print(“T”); else printf(“F”); }能力提高(B)一、选择题1、若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是(D)。A)A%2==1 B)!(A%2==0) C)!(A%2) D)A%22、下列运算符中优先级最低的(A),优先级最高的是(C)。A)?: B)&& C)+ D)!=3、请阅读以下程序: main() { inta=5,b=0,c=0; if(a=b+c) printf(“***\n”); else printf(“$$$\n”); } 以下程序(D)。A)有语法错不能通过编译 B)可以通过编译但不能通过连接C)输出*** D)输出$$$4、以下程序的运行结果是(C)。 main() { intm=5; if(m++>5) printf(“%d\n”,m); else printf(“%d\n”,m--); }A)4 B)5 C)6 D)7二、根据程序的功能,将以下程序补充完整1、以下程序对输入的四个整数,按从小到大的顺序输出。请在内填入正确内容。 main() { intt,a,b,c,d;printf(“inputa,b,c,d:”) scanf(“%d,%d,%d,%d”,&a,&b,&c,&d); if(a>b){ t=a;a=b;b=t; } if(a>c){t=a;a=c;c=t;}if(a>d){t=a;a=d;d=t;}if(b>c){t=b;b=c;c=t;}if(b>d){t=b;b=d;d=t;}if(c>d){t=c;c=d;d=t;}printf(“%d,%d,%d,%d”,a,b,c,d); }三、编程:1、试编程判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes;否则输出no。

2、编制程序要求输入整数x、y和z,若x2+y2+z2大于1000,则输出x2+y2+z2千位以上的数字,否则输出三数之和。3、编写程序,输入三角型的三条边长,求其面积。注意:对于不合理的边长输入要输出数据错误的提示信息。1、参考答案main(){intx;if(x%5==0&&x%7==0)printf(“yes”);elseprintf(“no”);}2、参考答案main(){intx,y,z,a,b;scanf(“%d%d%d”,&x,&y,&z);a=x*x+y*y*z*z;if(a>1000){b=a/1000;printf(“%d”,b);}elseprintf(“%d”,x+y+z);}3、参考答案#include<math.h>main(){floata,b,c,s,area;scanf(“%f,%f,%f”,&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b){s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%7.2f\n”,area);}elseprintf(“bunengzhuchengsanjiaoxing\n”);}第2讲基础练习(A)一、填空题1、在if语句中又包含一个或多个if语句称为if语句的嵌套。2、为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与其之前最近的未配对的if配对。如果if与else数目不一样,为实现设计者的企图,可以加花括号关系。3、条件运算符是C语言中唯一的一个三目运算符,其结合性为从右至左。4、假设条件表达式的格式为:表达式1?表达式2:表达式若表达式2和表达式3的类型不同,此时条件表达式的值的类型为二者中较高的类型5、在switch语句中,switch后面括弧内的“表达式”,可以为任何类型。6、若a=1,b=2,则表达式a>b?a:b+1的值是3。7、若w=1、x=2、y=3、z=4,则条件表达式w<x?w:y<z?y:z的值是1。8、若有以下if语句:if(a<b)min=a;elsemin=b;可用条件运算符来处理的等价式子为min=(a<b)?a:b;。9、若x=1,y=2,z=3,则表达式(x<y?x:y)==z++的值是0。10、设有变量定义:inta=5,c=4;则(--a==++c)?--a:c++的值是5,此时c的存储单元的值为6。二、判断题1、在switch语句中,每一个的case常量表达式的值可以相同。(错)2、在switch语句中,各个case和default的出现次序影响执行结果。(对)3、在switch语句中,多个case可以共用一组执行语句。(对)4、条件表达式能取代一般if的语句。(错)5、case后的常量表达式类型一定与表达式类型匹配。(对)三、写出以下程序的运行结果1、main() -1{ inta=2,b=3,c; c=a; if(a>b)c=1; elseif(a==b)c=0; elsec=-1; printf(“%d\n”,c); }2、main()200 { inta,b,c; ints,w,t; s=w=t=0; a=-1;b=3;c=3; if(c>0)s=a+b; if(a<=0) { if(b>0) if(c<=0)w=a-b; } elseif(c>0)w=a-b; elset=c; printf(“%d%d%d”,s,w,t); }3、switch(grade) { case‘A’:printf(“85-100\n”); case‘B’:printf(“70-84\n”); case‘C’:printf(“60-69\n”); case‘D’:printf(“<60\n”); default:printf(“error!\n”); } 若grade的值为’C’,则输出结果是60-69〈60error!能力提高(B)一、写出下列程序的运行结果1、#include<stdio.h>551 voidmain(void) { intx,y=1,z; if(y!=0)x=5; printf(“\t%d\n”,x); if(y==0)x=4; elsex=5; printf(“\t%d\n”,x); x=1; if(y<0) if(y>0)x=4; elsex=5; printf(“\t%d\n”,x); }2、#include<stdio.h>4-2404-2 voidmain(void) { intx,y=-2,z; if((z=y)<0)x=4; elseif(y==0)x=5; elsex=6; printf(”\t%d\t%d\n”,x,z);if(z=(y==0)) x=5; x=4; printf(“\t%d\t%d\n”,x,z); if(x=z=y)x=4; printf(“\t%d\t%d\n”,x,z); }3、#include<stdio.h>a=2,b=1 main() { intx=1,y=0,a=0,b=0; switch(x) { case1: switch(y) { case0:a++;break; case1:b++;break; } case2: a++;b++;break; } printf(“a=%d,b=%d”,a,b); }二、根据程序的功能,将以下程序补充完整以下程序计算某年某月有几天。其中判别闰年的条件是:能被4整除但不能被100整除的年是闰年,能被400整除的年也是闰年。请在内填入正确内容。 main() { intyy,mm,len; printf(“year,month=”); scanf(“%d%d”,&yy,&mm); switch(mm) { case1: case3: case5: case7: case8: case10: case12:len=31;break; case4: case6: case9: case11:len=30;break; case2: if(yy%4==0&&yy%100!=0||yy%400==0)len=29; elselen=28; break; default:printf(“inputerror”);break; } printf(“thelengthof%d%dis%d\n”,yy,mm,len);

第六章循环结构程序设计基础练习(A)一、选择题1、C语言中while和do-while循环的主要区别是(A)。A)do-while的循环体至少无条件执行一次B)while的循环控制条件比do-while的循环控制条件严格C)

do-while允许从外部转到循环体内D)do-while的循环体不能是复合语句2、以下描述中正确的是(C)。A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句B)

do-while循环由do开始,用while结束,在while(表达式)后面不能写分号C)在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作D)

do-while循环中,根据情况可以省略while3、设有程序段 intk=10; while(k)k=k-1; 则下面描述中正确的是(A)。 A)while循环执行10次 B)循环是无限循环 C)循环体语句一次也不执行 D)循环体语句执行一次4、下列循环语句中有语法错误的是(D)。A)while(x=y)5;B)while(0);C)do2;while(x==b);D)dox++while(x==10);5、已知inti=1;执行语句while(i++<4);后,变量i的值为(C)。A)3B)4C)5D)66、语句while(!E);中的表达式!E等价于(A)。 A)E==0 B)E!=1 C)E!=0 D)E==17、下面程序段的运行结果是(A)。 a=1;b=2;c=2; while(a<b<c){ t=a;a=b;b=t;c--; } printf(“%d,%d,%d”,a,b,c); A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,18、下面程序的运行结果是(C)。 #include<stdio.h> main() { intnum=0; while(num<=2) { num++; printf(“%d\n”,num); } } A)1 B)1 C)1 D)1 2 2 2 3 39、以下能正确计算1×2×3×…×10的程序段是(C)。 A)do{i=1;s=1; B)do{i=1;s=0; s=s*i; s=s*i; i++; i++; }while(i<=10); }while(i<=10); C)i=1;s=1; D)i=1;s=0; do{s=s*i; do{s=s*i; i++; i++; }while(i<=10); }while(i<=10);10、下面程序的运行结果是(D)。 #include<stdio.h> main() { inty=10; do{y--;}while(--y); printf(“%d\n”,y--); } A)-1 B)1 C)8 D)011、已知inti=1,j=0;执行下面语句后j的值是(D)。while(i)switch(i){case1:i+=1;j++;break;case2:i+=2;j++;break;case3:i+=3;j++;break;default:i--;j++;break;}A)1B)2C)3D)死循环12、若运行以下程序时,从键盘输入2473<回车>,则下面程序的运行结果是(A)。 #include<stdio.h> main() { intc; while((c=getchar())!=‘\n’) switch(c-‘2’) { case0: case1:putchar(c+4); case2:putchar(c+4);break; case3:putchar(c+3); default:putchar(c+2);break; } printf(“\n”); } A)668977 B)668966 C)66778777 D)6688766二、填空题1、执行下面程序段后,k值是36。 k=1;n=263; do{k*=n%10;n/=10;}while(n);2、下面程序的运行结果是s=254。 #include<stdio.h> main() { inta,s,n,count; a=2;s=0;n=1;count=1; while(count<=7){n=n*a;s=s+n;++count;} printf(“s=%d”,s); }3、下面程序段的运行结果是**。 x=2; do{printf(“*”);x--;}while(!x==0);4、运行以下程序时,从键盘键入China#<CR>(<CR>代表回车),则下面程序的运行结果是5,5。 #include<stdio.h> main() { intv1=0,v2=0;charch; while((ch=getchar())!=‘#’) switch(ch) { case‘a’: case‘h’: default:v1++; case‘o’:v2++; } printf(“%d,%d\n”,v1,v2); }三、编程:1、编程求1*3*5*7*9的值

2、编写程序计算下列算式的值:直到某一项A<=0.000001时为止。输出最后C的值。

3、从键盘输入的字符中统计数字字符的个数,用换行符结束循环。1、参考答案:main(){inti;longp=1;do{p=p*i;i=i+2;}while(i<=9);printf(“1*3*5*9=%ld\n”,t);}2、参考答案:#defineE0.000001main(){floatx,y=1,s=0;printf("Pleaseenterx=");scanf("%f",&x);while(1/y>E){s=s+1/y;y=y*x;}printf("S=%f\n",s);}3、参考答案:main(){intn=0;charc;c=getchar();while(c!=’\n’ ){if(c>=’0’&&c<=’9’)n++; c=getchar(); }printf(“%d\n”,n);}

能力提高(B)一、选择填空题1、下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者,请选择填空。 #include<stdio.h> main() { intm=0,n=0; charc; while((A)!=‘\n’) { if(c>=‘A’&&c<=‘Z’)m++; if(c>=‘a’&&c<=‘z’)n++; } printf(“%d\n”,m<n?A); } (1)A)c=getchar() B)getchar() C)scanf(“%c”,c) (2)A)n:m B)m:n C)m:m D)n:n2、下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环,请选择填空。 #include<stdio.h> main() { inta,max=0; scanf(“%d”,&a); while(B) { if(max<a)max=a; scanf(“%d”,&a); } printf(“%d”,max); }A)a==0 B)a C)!a==1 D)!a3、下面程序的功能是计算正整数2345的各位数字平方和,请选择填空。 #include<stdio.h> main() { intn,sum=0; n=2345; do{ sum=sum+B; n=C; }while(n); printf(“sum=%d”,sum); }(1)A)n%10 B)(n%10)*(n%10) C)n/10 D)(n/10)*(n/10)(2)A)n/1000 B)n/100 C)n/10 D)n%10二、读懂程序,并按照程序的功能将程序补充完整1、下面程序的功能是用“辗转想除法”求两个正整数的最大公约数。请填空。 #include<stdio.h> main() { intr,m,n; scanf(“%d%d”,&m,&n); if(m<n)r=m,m=n,n=r; r=m%n; while(r){m=n;n=r;r=m%n;} printf(“%d\n”,n); }2、下面程序的功能是用do-while语句求1至1000之间满足“用3除余2;用5除余3;用7除余2”的数,且一行只打印五个数。请填空。 #include<stdio.h> main() { inti=1,j=0; do{ if(i%3==2&&i%5==3&&i%7==2) { printf(“%4d”,i); j=j+1; if(j%5==0)printf(“\n”); } i=i+1; }while(i<1000); }3、等差数列的第一项a=2,公差d=3,下面程序的功能是在前n项和中,输出能被4整除的所有的和。请填空。 #include<stdio.h> main() { inta,d,sum; a=2;d=3;sum=0; do{ sum+=a; a+=d; if(sum%4==0)printf(“%d\n”,sum); }while(sum<200); }第2讲基础练习(A)一、

选择题1、下面有关for循环的正确描述是(D)。A)

for循环只能用于循环次数已经确定的情况B)

for循环是先执行循环体语句,后判断表达式C)

在for循环中,不能用break语句跳出循环体D)

for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来2、对for(表达式1;;表达式3)可理解为(B)。A)for(表达式1;0;表达式3) B)for(表达式1;1;表达式3) C)for(表达式1;表达式1;表达式3) D)for(表达式1;表达式3;表达式3)3、下列说法中正确的是(C)。A)break用在switch语句中,而continue用在循环语句中。B)break用在循环语句中,而continue用在switch语句中。C)break能结束循环,而continue只能结束本次循环。D)continue能结束循环,而break只能结束本次循环。4、以下正确的描述是(B)。A)

continue语句的作用是结束整个循环的执行B)

只能在循环体内和switch语句体内使用break语句C)

在循环体内使用break语句或continue语句的作用相同D)

从多层循环嵌套中退出时,只能使用goto语句5、若i为整型变量,则以下循环执行次数是(B)。for(i=2;i==0;)printf(“%d”,i--); A)无限次 B)0次 C)1次 D)2次6、以下for循环的执行次数是(C)。for(x=0,y=0;(y=123)&&(x<4);x++) A)是无限循环 B)循环次数不定 C)执行4次 D)执行3次7、以下不是无限循环的语句为(A)。A)

for(y=0,x=1;x>++y;x=i++)i=xB)

for(;;x++=i);C)

while(1){x++;}D)

for(i=10;;i--)sum+=i;8、执行语句for(i=1;i++<4;);后变量i的值是(C)。 A)3 B)4 C)5 D)不定9、下面程序段(D)。 for(t=1;t<=100;t++) { scanf(“%d”,&x); if(x<0)continue; printf(“%3d”,t); } A)当x<0时整个循环结束 B)x>=0时什么也不输出 C)printf函数永远也不执行 D)最多允许输出100个非负整数10、下面程序段(C)。 x=3; do{ y=x--; if(!y){printf(“x”);continue;} printf(“#”); }while(1<=x<=2); A)将输出## B)将输出##* C)是死循环 D)含有不合法的控制表达式二、写出下列程序的运行结果1、#include<stdio.h>*#*#*#$ main() { inti; for(i=1;i<=5;i++) { if(i%2)printf(“*”); elsecontinue; printf(“#”); } printf(“$\n”); }2、#include<stdio.h>#### ###* ##** #*** main() { inti,j; for(i=4;i>=1;i--) { for(j=1;j<=i;j++)putchar(‘#’); for(j=1;j<=4-i;j++)putchar(‘*’); putchar(‘\n’); } }3、#include<stdio.h>2,3 main() { inti,k=0; for(i=1;;i++) { k++; while(k<i*i) { k++; if(k%3==0)gotoloop; } }loop:printf(“%d,%d”,i,k); }三、编程:1、求1-3+5-7+……-99+101的值。解:main(){inti,t=1,s=0;for(i=1;i<=101;i+=2){t=t*i;s=s+t;t=t>0?-1:1;}printf("%d\n",s);}能力提高(B)一、写出下列程序的运行结果1、#include<stdio.h>x=8 main() { inti,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); }2、#include<stdio.h>i=6,k=4 main() { inti,j,k=19; while(i=k-1) { k-=3; if(k%5==0){i++;continue;} elseif(k<5)break; i++; } printf(“i=%d,k=%d\n”,i,k); }二、根据程序的功能将程序补充完整下面程序的功能是求1至1000之间满足“用3除余2;用5除余3;用7除余2”的数,且一行只打印5个数。#include<stdio.h> main() { inti,j=0; for(i=1;i<1000;i++) if(i%3==2&&i%5==3&&i%7==2) {printf(“%4d”,i); j=j+1; if(j%5==0)printf(“\n”); } }三、编程:1、有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20项之和

2、输入n值,输出如图所示高为n的等腰三角形。************************************1、参考答案:main(){intn,t,number=20;floata=2,b=1,s=0;for(n=1;n<number;n++){s=s+a/b;t=a;a=a+b;b=t;}printf(“s=%9.6f\n”,s);}2、参考答案:#include<stdio.h>main(){inti,a;for(i=1;i<=10;i++){ scanf(“%d”,&a); if(a%7==0){printf(“%d”,a);break;} } if(i==11)printf(“notexist\n”);}编辑版word编辑版word编辑版word第7章数组习题A卷1.单项选择题(1)inta[4]={5,3,8,9};其中a[3]的值为(D)。A.5B.3C.8D.9(2)以下4个字符串函数中,(A)所在的头文件与其他3个不同。A.getsB.strcpyC.strlenD.strcmp(3)以下4个数组定义中,(D)是错误的。A.inta[7];B.#defineN5longb[N];C.charc[5];D.intn,d[n];(4)对字符数组进行初始化,(B)形式是错误。A.charc1[]={'1','2','3'};B.charc2[]=123;C.charc3[]={'1','2','3','\0'};D.charc4[]="123";(5)在数组中,数组名表示(A)。A.数组第1个元素的首地址B.数组第2个元素的首地址C.数组所有元素的首地址D.数组最后1个元素的首地址(6)若有以下数组说明,则数值最小的和最大的元素下标分别是(B)。inta[12]={1,2,3,4,5,6,7,8,9,10,11,12};A.1,12B.0,11C.1,11D.0,12(7)若有以下说明,则数值为4的表达式是(D)。inta[12]={1,2,3,4,5,6,7,8,9,10,11,12};charc=’a’,d,g;A.a[g-c]B.a[4]C.a['d'-'c']D.a['d'-c](8)设有定义:chars[12]="string";则printf("%d\n",strlen(s));的输出是(A)。A.6B.7C.11D.12(9)设有定义:chars[12]="string";则printf("%d\n",sizeof(s));的输出是(D)。A.6B.7C.11D.12(10)合法的数组定义是(A)。A.chara[]="string";B.inta[5]={0,1,2,3,4,5};C.chara="string";D.chara[]={0,1,2,3,4,5}(11)合法的数组定义是(D)。A.inta[3][]={0,1,2,3,4,5};B.inta[][3]={0,1,2,3,4};C.inta[2][3]={0,1,2,3,4,5,6};D.inta[2][3]={0,1,2,3,4,5,};(12)下列语句中,正确的是(D)。A.chara[3][]={'abc','1'};B.chara[][3]={'abc','1'};C.chara[3][]={'a',"1"};D.chara[][3]={"a","1"};(13)下列定义的字符数组中,输出printf("%s\n",str[2]);的输出是(C)。staticstr[3][20]={"basic","foxpro","windows"};A.basicB.foxproC.windowsD.输出语句出错(14)下列各语句定义了数组,其中哪一个是不正确的(C)。A.chara[3][10]={"China","American","Asia"};B.intx[2][2]={1,2,3,4};C.floatx[2][]={1,2,4,6,8,10};D.intm[][3]={1,2,3,4,5,6};(15)数组定义为inta[3][2]={1,2,3,4,5,6},值为6的数组元素是(B)。A.a[3][2]B.a[2][1]C.a[1][2]D.a[2][3](16)下面的程序中哪一行有错误(D)。#include<stdio.h>main(){floatarray[5]={0.0};//第A行inti;for(i=0;i<5;i++)scanf("%f",&array[i]);for(i=1;i<5;i++)array[0]=array[0]+array[i];//第B行printf("%f\n",array[0]);//第C行}A.第A行B.第B行C.第C行D.没有(17)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论