第1章 习题及参考答案 1.1程序设计概述习题及参考答案 1.1.1习题 一、 单项选择题 1. 结构化程序设计的基本原则不包括。 A. 继承 B. 自顶向下C. 模块化 D. 逐步求精 2. 以下不属于算法基本特征的是。 A. 有穷性B. 有效性 C. 可靠性 D. 有一个或多个输出 3. NS图与传统流程图比较,其主要优点是。 A. 杜绝了程序的无条件转移B. 具有顺序、选择和循环三种基本结构 C. 简单、直观D. 有利于编写程序 4. 以下说法中错误的是。 A. 一个C程序可以由一个或多个函数构成 B. 一个C程序必须有而且只能有一个main函数 C. 在计算机上编辑C程序时,每行只能写一条语句 D. 主函数是程序启动时唯一的入口 5. 结构化程序设计的三种基本结构是。 A. 数组、结构、指针 B. 结构、指针、函数 C. 顺序、选择、循环 D. 函数调用、条件控制 6. 下列叙述中错误的是。 A. C语言语句最后都必须有一个分号 B. C程序书写格式自由,语句可以从任一列开始书写,一行内可以写多个语句 C. C语言书写时不区分大小写字母 D. C语言本身没有输入/输出语句 7. 要把高级语言编写的源程序转换为目标程序,需要使用。 A. 编辑程序 B. 驱动程序 C. 诊断程序D. 编译程序 8. C语言程序从开始执行。 A. 程序中第一条可执行语句B. 程序中第一个函数 C. 程序中的main函数 D. 包含文件中的第一个函数 9. 计算机能直接执行的程序是。 A. 源程序 B. 目标程序 C. 汇编程序 D. 可执行程序 10. 以下叙述正确的是。 A. C程序中一条语句必须在一行内写完 B. C程序中的每一行只能写一条语句 C. C程序中的注释必须与语句写在同一行 D. 简单C语句必须以分号结束 11. 下列叙述中正确的是。 A. 用C程序实现的算法必须要有输入与输出的操作 B. 用C程序实现的算法可以没有输入,但必须要有输出 C. 用C程序实现的算法可以没有输出,但必须要有输入 D. 用C程序实现的算法可以既没有输入,也没有输出 第 1 章习题及参考答案 C语言程序设计学习指导(第2版) 12. 以下说法错误的是。 A. 由三种基本结构组成的结构化程序不能解决过于复杂的问题 B. 由三种基本结构组成的结构化程序能解决一些简单的问题 C. 由三种基本结构组成的结构化程序能解决递归问题 D. 由三种基本结构组成的结构化程序能解决数学上有解析解的问题 二、 填空题 1. 在流程图符号中,判断框中应该填写的是①。 2. 可以被连续执行的指令集合称为计算机的①。 3. 算法的①特征是指: 一个算法必须在执行有限个操作步骤后终止。 4. 算法是①。 5. C源程序的基本单位是①。 6. 一个C源程序中至少应包括一个①。 7. 在C语言中,格式输入操作是由库函数①完成的,格式输出操作是由库函数②完成的。 8. C语言程序中每个语句和数据声明最后都以①结束。 9. C语言源程序的扩展名是①,经编译生成的文件的扩展名是②,连接后生成的文件的扩展名是③。 10. 在C语言中,使用输入/输出函数要包含的头文件是①。 11. 算法的5个特性为有穷性、①、②、③和有效性。 12. 在一个C源程序中,注释的分界符分别为①。 13. 上机运行一个C程序,要经过①4个步骤。 三、 用流程图表示以下求解算法 1. 输入三个数,输出最小数。 2. 计算以下公式的累加和: 1+12+13+14+…+199+1100 3. 输入一个整数,判断这个整数是几位数。 1.1.2参考答案 一、 单项选择题 1. A2. C3. A4. C5. C6. C7. D8. C9. D 10. D11. B12. A 二、 填空题 1. ① 条件 2. ① 程序 3. ① 有穷性 4. ① 解决问题的方法和步骤 5. ① 函数 6. ① main函数 7. ① scanf()② printf() 8. ① 分号 9. ① cpp② obj③ exe 10. ① stdio.h 11. ① 确定性② 输入③ 输出 12. ① /*和*/ 13. ① 编辑、编译、连接和运行 三、 用流程图表示以下求解算法 1. 算法流程图见图11。 2. 算法流程图见图12。 3. 算法流程图见图13。 图11 图12 图13 1.2数据类型与表达式习题及参考答案 1.2.1习题 一、 单项选择题 1. 以下能正确地定义整型变量a、b和c并为它们赋初值5的语句是。 A. int a=b=c=5; B. int a,b,c=5; C. a=5,b=5,c=5; D. int a=5,b=5,c=5; 2. 若变量已正确定义并赋值,下面符合C语言语法的表达式是。 A. a:=b+1B. a=b=c+2C. int 18.5%3D. a=a+7=c+b 3. C语言中运算对象必须是整型的运算符是。 A. %=B. /C. =D. <= 4. 若有以下程序段: int c1=1,c2=2,c3; c3=1.0/c2*c1; 则执行后,c3中的值是。 A. 0B. 0.5C. 1D. 2 5. 下列常数中不能作为C的常量的是。 A. 0xA5B. 2.5e2C. 3e2D. 0582 6. 下列可用作C语言用户标识符的一组是。 A. void, define, WORD B. a3_3,_123,Car C. For, abc, IF Case D. 2a, DO, sizeof 7. 在C语言中,数字029是一个。 A. 八进制数B. 十六进制数C. 十进制数D. 非法数 8. 下列可以正确表示字符型常数的是。 A. "a"B. 't'C. "\n"D. 297 9. 以下错误的转义字符是。 A. '\\'B. '\''C. '\81'D. '\0' 10. 若有代数式3adbc, 不正确的C语言表达式是。 A. 3*a*d/b*c B. 3*a*d/b/c C. (3*a*d)/(b*c) D. 3*a*d/(b*c) 11. 下列数中,是浮点数的正确表示形式。 A. 223 B. 719E22C. e32D. 15e3.0 12. 设有以下变量定义语句: char w; int x; float y; double z; 则表达式“w*x+z-y”的结果类型为类型。 A. float B. charC. int D. double 13. 数据在内存中是以形式存放的。 A. 二进制B. 八进制C. 十进制D. 十六进制 14. 设x,y,i,j均为整型变量,且“x=10,y=3”,则执行“i=x--; j=--y;”语句后i和j的值是。 A. 10,3B. 9,3C. 9,2D. 10,2 15. 已知字母A的ACSII码为十进制数65,且c2为字符型,则执行语句“c2='A'+'6'-'3';”后,c2的值是。 A. CB. DC. ED. F 16. 以下各项中值最大的是。 A. sizeof(int) B. sizeof(char) C. sizeof(double)D. sizeof(long) 17. 若a为int类型,且其值为5,则执行完表达式“a+=a-=a*a”后,a的值是。 A. -5B. 100C. -40D. 10 18. 设有整型变量x=1,y=3,经下列计算后,x的值不等于6的是。 A. x=(x+=1)*y B. x=y%5/2*6 C. x=9-(--y)-(++x) D. x=y*4.2/2 19. 设a和b均为double型变量,且“a=5.5; b=2.5;”,则表达式“(int)a+b/b”的值是。 A. 6.500000 B. 6 C. 5.500000 D. 6.000000 20. 若有定义“int y=7,x=12;”,则以下表达式的值为3的是。 A. x%=(y%=5) B. x%=(y-y%5) C. x%=y-y%5 D. (x%=y)-(y%=5) 21. 若有代数式|yx+log10y|,则正确的C语言表达式是。 A. sqrt(fabs(pow(y,x)+log(y))) B. sqrt(fabs(pow(x,y)+log(y))) C. sqrt(abs(pow(y,x)+log(y))) D. sqrt(abs(pow(x,y)+log(y))) 22. sizeof(float)是。 A. 一个双精度表达式 B. 一个整型表达式 C. 一个函数调用 D. 一个不合法的表达式 23. 字符串“\t\"Name\\Address\n”的长度为。 A. 19 B. 15 C. 18 D. 不合法 二、 填空题 1. 字符型数据在计算机中是以①形式表示的。 2. 'x'在内存中占①字节,"x" 在内存中占②字节,"\101"在内存中占③字节。 3. C语言中的标识符只能由字母、①和②3种字符组成,且第一个字符必须为③。 4. 已知有a,b两个数,执行“x=b;b=a;a=x;”语句后,执行的效果是①。 5. ++和--运算符只能用于①,不能用于常量或表达式。++和--的结合方向是②。 6. 与数学表达式3xn5x对应的C语言表达式是①。 7. C语言的字符常量是用①括起来的②字符,字符串常量是用③括起来的字符序列。 8. 在C语言中,八进制整常量以①开头,十六进制整常量以②开头。 9. 计算下列表达式的值: 5/3=①5%3=②1/4=③1.0/4=④ 10. C语言中有两种类型转换,一种是在运算时不必用户指定、系统自动进行的类型转换; 另一种是①。 1.2.2参考答案 一、 单项选择题 1. D2. B3. A4. A5. D6. B7. D8. B9. C 10. A11. B12. D13. A14. D15. B16. C17. C18. C 19. D 20. D21. A22. B23. B 二、 填空题 1. ① ASCII码 2. ① 1② 2③ 2 3. ① 数字② 下画线③ 字母或下画线 4. ① 交换a和b的值 5. ① 变量② 右结合或右结合性 6. ① 3*pow(x,n)/(5*sqrt(x)) 7. ① 单引号② 单个③ 双引号 8. ① 0② 0x或0X 9. ① 1② 2③ 0④ 0.25 10. ① 强制类型转换 1.3顺序结构程序设计习题及参考答案 1.3.1习题 一、 单项选择题 1. 以下程序段的输出结果是(说明: 本书中 代表一个空格)。 int a=12,b=12345; printf("%3d,%3d",a,b); A. 12,123B. 12,12345C. 12 123D. 12,12345 2. 若有定义“int x,y;”,正确的输入函数调用为。 A. scanf("%d,%d", x,y);B. scanf(%d,%d, &x,&y); C. scanf("%d,%d, &x,&y");D. scanf("%d,%d", &x,&y); 3. 若有定义“double x,y;”,正确的输入函数调用为。 A. scanf("%d,%d", x, y); B. scanf("%f%f", &x, &y); C. scanf("%lf%lf", &x, &y); D. scanf("%lf,%lf," &x, &y); 4. 以下程序段的输出结果是。 int i=010,j=10,k=0x10; printf("%d,%d,%d \n",i,j,k); A. 8,10,16B. 8,10,10C. 10,10,10D. 10,10,16 5. 以下正确的输出函数调用是。 A. printf("%c\n",'c');B. printf("%c\n",'Monday'); C. printf("%c\n","Monday"); D. printf("%s\n",'c'); 6. 若输出9.375%,正确的函数调用是。 A. printf("%.3f\n",9.375);B. printf("%.3f%%\n",9.375); C. printf("%%.3f\n",9.375); D. printf("%.3%f\n",9.375); 7. 以下程序段的输出结果是。 char ch; int k; ch='a'; k=12; printf("%c,%d,k=%d\n",ch,ch,k); A. 变量类型与格式说明符的类型不匹配,输出无定值 B. 输出项与格式说明符个数不符,输出为零值或不定值 C. a,97,12 D. a,97,k=12 8. 若有语句 int x,y; scanf("%d,%d",&x,&y); 正确的数据输入方法是(说明: 本书中代表回车,即在键盘按Enter键)。 A. 3,4B. 3 4C. x=3,y=4D. 34 9. 若有语句 double f1,f2,f3; scanf("%3lf%3lf%3lf",&f1,&f2,&f3); 不正确的数据输入方法是。 A. 123456789B. 123 456 789 C. 123,456,789D. 123456789 10. 有如下程序段,若要求x1、x2、c1、c2的值分别为10、20、A、B,正确的数据输入是。 int x1,x2; char c1,c2; scanf("%d%d",&x1,&x2); scanf("%c%c",&c1,&c2); A. 1020abABB. 10 20 ABC C. 10 20ABD. 10 20AB 11. 若有定义 int a; float b; double c; 程序运行时输入 3 4 5 则正确的函数调用是。 A. scanf("%d%f%lf",&a,&b,&c);B. scanf("%d%lf%lf",&a,&b,&c); C. scanf("%d%f%f",&a,&b,&c);D. scanf("%lf%lf%lf",&a,&b,&c); 12. 若有语句 int i; float f; scanf("i=%d,f=%f",&i,&f); 为了把100和765.12分别赋给i和f,正确的输入是。 A. 100 765.12 B. i=100,f=765.12 C. 100765.12 D. i=100f=765.12 13. 有程序段 int x; float y; char c; scanf("%2d%f%c",&x,&y,&c); 当执行上述程序段,从键盘输入55566 7777abc后,y的值是。 A. 55566.000000 B. 566.000000 C. 7777.000000 D. 5667777.000000 14. 以下能正确地定义整型变量a、b和c并为它们赋初值5的语句是。 A. int a=b=c=5; B. int a,b,c=5; C. a=5,b=5,c=5; D. int a=5,b=5,c=5; 15. 有以下程序段,若从键盘输入AB,程序的输出结果是。 char c; scanf("%c",&c); putchar(getchar()); putchar(c); A. A BB. AB C. BA D. B A 16. 以下程序段的输出结果是。 char c1='b', c2='e'; printf("%d,%c\n",c2-c1,c2-'a'+'A'); A. 2,M B. 3,E C. 2,E D. 输出项与相应的格式控制不一致,输出结果不确定 17. 以下程序段的输出结果是。 float a=57.666; printf("*%4.2f*\n", a); A. *57* B. *58* C. *57.66* D. *57.67* 18. 有以下程序段: char a,b,c,d; scanf("%c%c",&a,&b); c=getchar(); d=getchar(); printf("%c%c%c%c\n",a,b,c,d); 当执行程序时,按下列方式输入数据: 12 34 则输出结果是。 A. 1234 B. 12 34C. 12 3 D. 12 19. 以下程序段的输出结果是。 int a=1,b=0; printf("%d,",b=a+b); printf("%d\n",a=2*b); A. 0,0 B. 1,0 C. 3,2 D. 1,2 二、 读程序,写结果 1. 以下程序的输出结果是。 #includestdio.h int main(void) { int a=5,b=7; float x=67.8564,y=-789.125; char c='A'; printf("%d,%d\n%3d,%3d\n",a,b,a,b); printf("%3f,%.3f\n%10.2f,%-10.2f\n%e,%10.2e\n",x,y,x,y,x,y); printf("%c,%d\n",c,c); return 0; } 2. 以下程序的输出结果是。 #includestdio.h int main(void) { int i,j,m,n; i=8;j=10; m=++i; n=j++; printf("%d,%d,%d,%d",i,j,m,n); return 0; } 3. 以下程序的输出结果是。 #includestdio.h int main(void) { int x; float y=3.5; x=(int)y/6; printf("x=%d,y=%f\n",x,y); return 0; } 4. 有以下程序: #includestdio.h int main(void) { int x;char y;float z; scanf("%d%c%f",&x,&y,&z); printf("x=%d,y=%c,z=%f\n",x,y,z); return 0; } 程序运行后,若从键盘输入 123c321o.56 则输出结果是。 三、 编程题 1. 从键盘输入三个整数,分别赋给变量a,b,c,求它们的平均值。 2. 加密数据。加密规则为: 将5个字母组成的单词中的每个字母变成字母表中其后(不改变大小写)的第4个,再交换第1个字母与第5个字母。 3. 编写一个程序,以年月日(yyyymmdd)的格式接受用户输入的日期信息,并以月/日/年(mm/dd/yyyy)的格式将其显示出来。 4. 输入存款金额money、存期year和年利率rate,采用定期一年、到期本息自动转存方式,根据公式计算存款到期时的本息合计sum(税前),输出时保留2位小数(提示: 计算公式如下: sum=money(1+rate)year 使用标准C库函数pow(x,y)计算xy)。 1.3.2参考答案 一、 单项选择题 1. B2. D3. C4. A5. A6. B7. D8. A9. C 10. D11. A12. B13. B14. D15. C16. B17. D18. C 19. D 二、 读程序,写结果 1. 5,7 5, 7 67.856400,-789.125 67.86,-789.13 6.785640e+001,-7.89e+002 A,65 2. 9,11,9,10 3. x=0,y=3.500000 4. x=123,y=c,z=321.000000 三、 编程题 1. 参考程序 #includestdio.h int main(void) { int a,b,c,sum=0; float ave=0.0; scanf("%d%d%d",&a,&b,&c); sum=a+b+c; ave=sum/3.0; printf("average of %d, %d and %d is %.2f\n",a,b,c,ave); return 0; } 2. 参考程序 #includestdio.h int main(void) { char c1,c2,c3,c4,c5,t; c1=getchar()+4; c2=getchar()+4; c3=getchar()+4; c4=getchar()+4; c5=getchar()+4; t=c1; c1=c5; c5=t; printf("%c%c%c%c%c\n",c1,c2,c3,c4,c5); return 0; } 3. 参考程序 #includestdio.h int main(void) { int yy,mm,dd; printf("Enter a date(yyyymmdd):\n"); scanf("%4d%2d%2d",&yy,&mm,&dd); printf("You entered the date (mm/dd/yyyy):\n%02d/%02d/%d\n",mm,dd,yy); return 0; } 4. 参考程序 #includestdio.h #includemath.h int main(void) { int year; float money,rate,sum=0; printf("\nplease input money:"); scanf("%f",&money); printf("\nplease input year:"); scanf("%d",&year); printf("\nplease input rate:"); scanf("%f",&rate); sum=money*pow(1+rate,year); printf("sum=%.2f\n",sum); return 0; } 1.4选择结构程序设计习题及参考答案 1.4.1习题 一、 单项选择题 1. 能正确表示逻辑关系“a≥10或a≤0”的C语言表达式是。 A. a>=10 or a<=0B. a>=0|a<=10 C. a>=10 &&a<=0D. a>=10‖a<=0 2. 设a、b、c、d、m、n均为int型变量,且有“a=5,b=6,c=7,d=8,m=2,n=2;”,则逻辑表达式“(m=a>b)&&(n=c>d)”运算后,n的值为。 A. 0 B. 1C. 2D. 3 3. 判断字符型变量x是否为小写字母的正确表达式是。 A. 'a'<=x<='z'B. (x>=a)&&(x<=z) C. ('a'>=x)||('z'<=x)D. (x>='a')&&(x<='z') 4. 若已定义x和y为double类型,则表达式“x=2,y=x+3/2”的值是。 A. 3.5 B. 3.0 C. 2.0 D. 1 5. 若变量已正确定义,语句“if(x>y)z=0; else z=1”和等价。 A. z=(x>y)?1:0B. z=x>y; C. z=x<=y;D. x<=y?0:1 6. 若变量已正确定义,有以下程序段: int a=3,b=5,c=7,d; d=abc; if(ab) a=b; c=a; if(c!=a) c=b; printf("%d,%d,%d,%d\n",a,b,c,d); 其输出结果是。 A. 程序段有语法错误 B. 3,5,3,0 C. 3,5,5,1 D. 3,5,7,0 7. 为了避免嵌套的ifelse语句的二义性,C语言规定else总是。 A. 和之前与其具有相同缩进位置的if配对 B. 和之前与其最近的if配对 C. 和之前与其最近的且未配对的if 配对 D. 和之前的第一个if配对 8. 若有定义“float x;int a,b;”,则正确的switch语句是。 A. switch(x) {case 1.0: printf("* \n"); case 2.0: printf("* * \n");} B. switch(x) {case 1, 2: printf("* \n"); case 3: printf("* * \n");} C. switch(a+b) {case 1: printf("* \n"); case 1+2: printf("* * \n");} D. switch(a+b); {case 1: printf("* \n"); case 2: printf("* * \n");} 9. 若变量已正确定义,下列程序段运行后x的值是。 a=b=c=0;x=35; if(!a) x--; else if(b); if(c) x=3; else x=4; A. 3B. 4C. 35D. 34 10. if语句的基本形式是“if(表达式) 语句”,以下关于“表达式”的值的叙述中正确的是。 A. 必须是逻辑值 B. 必须是整数值 C. 必须是正数 D. 可以是任意合法的数值 11. 对以下程序,正确的选项是。 #includestdio.h int main(void) { int a=5,b=0,c=0; if(a=b+c) printf("***\n"); else printf("$$$\n"); return 0; } A. 有语法错,不能通过编译 B. 可以通过编译,但不能通过连接 C. 输出*** D. 输出$$$ 12. 以下程序的运行结果是。 #includestdio.h int main(void) { int x=-9,y=5,z=8; if(xy) if(y0) z=0; else z+=1; printf("%d\n",z); return 0; } A. 6B. 7 C. 8D. 9 13. 设ch是char型变量,其值为z,下面表达式的值是。 ch=(ch'A'&&ch='Z')?(ch+32):ch A. z B. aC. ZD. A 14. 以下程序段的输出结果是。 int a=2,b=3,c=1; if(ab) if(ac) printf("%d\n",a); else printf("%d\n",b); printf("Over!\n"); A. 2 B. 3 C. Over! D. 4 15. 以下程序的输出结果是。 #includestdio.h int main(void) { int x=10,y=20,t=0; if(x==y) t=x;x=y;y=t; printf("%d,%d\n",x,y); return 0; } A. 20,0B. 10,20C. 20,10 D. 0,20 16. 下列条件语句中输出结果与其他语句不同的是。 A. if(a) printf("%d\n",x); else printf("%d\n",y); B. if(a==0) printf("%d\n",y); else printf("%d\n",x); C. if(a!=0) printf("%d\n",x); else printf("%d\n",y); D. if(a==0) printf("%d\n",x); else printf("%d\n",y); 17. 以下选项中与“if(a==1) a=b; else a++;”语句功能不同的switch语句是。 A. switch(a) {case 1:a=b; break; default:a++;} B. switch(a==1) {case 0:a=b; break; case 1:a++;} C. switch(a) {default:a++; break; case 1:a=b;} D. switch(a==1) {case 1:a=b; break; case 0:a++;} 18. 有以下程序: #includestdio.h int main(void) { int x; scanf("%d",&x); if(x=3) ; else if(x!=10) printf("%d\n",x); return 0; } 程序运行时,输入的值为才会有输出结果。 A. 不等于10的整数 B. 大于3且不等于10的整数 C. 大于3或等于10的整数 D. 小于3的整数 19. 若运行以下程序时,从键盘输入“6 8”,则程序的输出结果是。 #includestdio.h int main(void) { int a,b,s; scanf("%d%d",&a,&b); s=a; if(ab) s=b; s*=s; printf("%d",s); return 0; } A. 36 B. 64C. 48D. 以上都不对 20. 有以下程序段: int i,n; for(i=0;i8;i++) { n=rand()%5; printf("n=%d",n); switch(n) {case 1: case 3:printf("%d\n",n); break; case 2: case 4:printf("%d\n",n); continue; case 0:exit(0); } printf("%d\n",n); } 以下关于程序段执行情况的叙述,正确的是。 A. for循环语句固定执行8次 B. 当产生的随机数n为4时结束循环操作 C. 当产生的随机数n为1和2时不做任何操作 D. 当产生的随机数n为0时结束程序运行 二、 读程序,写结果 1. 若运行以下程序时输入2,则程序的输出结果是。 #includestdio.h int main(void) { int a; float b; scanf("%d",&a); if(a1) b=0.0; else if((a5)&&(a!=2)) b=1.0/(a+2.0); else if(a10) b=1.0/a; else b=10.0; printf("%.2f\n",b); return 0; } 2. 以下程序的输出结果是。 #includestdio.h int main(void) { 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; case 3: a++; b++; } printf("a=%d,b=%d\n",a,b); return 0; } 3. 以下程序的输出结果是。 #includestdio.h int main(void) { int x=1,y=0; if(!x) y++; else if(x==0) if(x) y+=2; else y+=3; printf("%d\n",y); return 0; } 4. 若运行以下程序时输入 12,则程序的输出结果是。 #includestdio.h int main(void) { int x; scanf("%d",&x); if(x15) printf("%d",x-5); if(x10) printf("%d",x); if(x5) printf("%d\n",x+5); return 0; } 5. 有程序段如下: switch(clas) {case 'A':printf("GREAT!\n"); case 'B':printf("GOOD!\n"); case 'C':printf("OK! \n"); case 'D':printf("NO!\n"); default:printf("ERROR!\n"); } 若clas的值为'C',则输出结果是。 6. 以下程序的输出结果是。 #includestdio.h int main(void) { int p,a=5; if(p=a!=0) printf("%d\n",p); else printf("%d\n",p+2); return 0; } 7. 以下程序的输出结果是。 #includestdio.h int main(void) { char c='A'; if('0'=c='9') printf("YES"); else printf("NO"); return 0; } 三、 填空题 1. 编程实现投票表决器: 输入Y或y,输出agree; 输入N或n,输出disagree; 输入其他字符,输出lose。 #includestdio.h int main(void) { char c; scanf("%c",&c); ① { case 'Y': case 'y': printf("agree");②; case 'N': case 'n': printf("disagree");③; ④:printf("lose"); } return 0; } 2. 求一元二次方程ax2+bx+c=0的解(a≠0)。 #includestdio.h #includemath.h int main(void) { float a,b,c,disc,x1,x2,p,q,dia; scanf("%f,%f,%f", &a, &b, &c); disc=b*b-4*a*c; dia=2*a; if (①) printf("x1=x2=%7.2f\n", -b/dia);//输出两个相等的实根 else if (disc1e-6) {x1=②; //求出两个不相等的实根 x2=③; printf("x1=%7.2f,x2=%7.2f\n", x1, x2); } else {p=-b/(2*a); //求出两个共轭复根 q=sqrt(fabs(disc))/fabs(dia); printf("x1=%7.2f + %7.2f i\n", p, q);  //输出两个共轭复根 printf("x2=%7.2f - %7.2f i\n", p, q); } return 0; } 3. 根据以下if语句写出与其功能相同的switch语句。 if语句: int x,m; if((x60)||(x109)) m=0; else if(x70) m=1; else if(x80) m=2; else if(x90) m=3; else if(x100) m=4; else m=5; switch语句: int x,m; switch(①) { ②:m=1;break; case 7:m=2;break; case 8:m=3;break; case 9:m=4;break; case 10: m=5;break; ③:m=0; } 四、 编程题 1. 输入三角形三条边的边长,判断输入的三边能否构成一个三角形。若能构成一个三角形,则输出面积,结果保留两位小数; 若输入的三边不能构成三角形,则输出“These sides do not correspond to a valid triangle”。 2. 编程在屏幕上显示一个如下所示的时间表。 *******Time******* 1 morning 2 afternoon 3 night 输入数字,就输出对应时间的问候语。即输入1时显示“Good morning”,输入2时显示“Good afternoon”,输入3时显示“Good night”,对于其他输入显示“Selection error!”。 3. 输入六个整数ah、am、as、bh、bm、bs,分别表示时间A和B 所对应的时、分、秒,保证输入数据合法。输出A+B的结果,输出的结果也是时、分、秒的形式,同时满足时间规则。 1.4.2参考答案 一、 单项选择题 1. D2. C3. D4. B5. C6. B7. C8. C9. B 10. D11. D12. D13. A14. C15. A16. D17. B18. B 19. B20. D 二、 读程序,写结果 1. 0.50 2. a=2,b=1 3. 0 4. 1217 5. OK! NO! ERROR! 6. 1 7. YES 三、 填空题 1. ① switch(c)② break③ break④ default 2. ① fabs(disc)<=1e-6② (-b+sqrt(disc))/dia③ (-b-sqrt(disc))/dia 3. ① x/10② case 6③ default 四、 编程题 1. 参考程序 #includestdio.h #includemath.h int main(void) { double a,b,c,p,area; printf("Please input the three sides a,b,c:\n "); scanf("%lf,%lf,%lf",&a,&b,&c); if(a+bc&&b+ca&&a+cb) { p=(a+b+c)/2; area=sqrt(p*(p-a)*(p-b)*(p-c)); printf("\narea=%-6.2lf\n",area); } else printf("These sides do not correspond to a valid triangle."); return 0; } 2. 参考程序 #includestdio.h int main(void) { char c; printf("\n\n*******Time*******\n"); printf("1 morning \n");