C语言程序设计(第3版)何钦铭 颜 晖 第3章 分支结构
- 格式:doc
- 大小:67.00 KB
- 文档页数:11
第4章循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对item赋初值0,则程序运行结果是pi=0,因为item为0时不满足while 循环的执行条件,即不执行循环,故 pi 值为 0。
如果将精度改为 10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得while循环次数减少,必然影响到n的值。
【练习 4-2】运行例 4-2程序时,如果将最后一个输入数据改为-2,运行结果有变化吗?如果第一个输入数据是 -1,运行结果是什么?为什么?解答:如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。
如果第一个输入数据是-1,运行结果是:Grade averageis 0,因为第一个输入就是-1,则while循环条件不成立,不执行循环体。
【练习4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+…):输入一个正实数eps, 计算序列1-1/4+1/7-1/10+1/13-1/16+…的值,精确到最后一项的绝对值小于eps (保留6位小数)。
试编写相应程序。
解答:#include <stdio.h>#include <math.h>int main(void){int denominator, flag;double item, s,eps;printf(“Input eps:”);scanf(“%lf”,&eps);flag = 1;denominator = 1 ;item = 1.0;s = 0;while(fabs (item) >= eps) {item = flag * 1.0 / denominator;s = s + item;flag = -flag;denominator = denominator +3;}printf ( “s = %f\n”, s);return 0;}【练习4-4】如果将例4-3程序中的do-while语句改为下列while语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number != 0){number = number / 10; count ++;}解答:会有影响,因为当输入数据 number 为 0时,上述 while 循环将不执行,count 值仍为 0,故输出为 0,不符合题目要求。
《C语言程序设计》课程教学大纲说明:各学校可根据自身实际需要,对课程学时、学分、授课内容进行删减。
课程编号:XXXXXX 适用专业:电子信息、计算机、自动化类专业课程类型:专业基础课课程性质:必修课课程学时:96 课程学分:6一、课程定位本课程是电子信息大类各专业软件方向的重要专业基础课。
C语言既是通用计算机软件设计的基础语言,也是当前嵌入式软件设计的主流语言。
本课程的主要任务是:使学生掌握C语言的基础知识以及模块化、结构化的编程思想,具备一定的上机编程及调试的能力,不仅学会使用C语言编写应用程序解决一般性的应用问题,还能以本课程为桥梁,为数据结构、面向对象程序设计、单片机与嵌入式系统、物联网技术等后续课程对软件能力的多元化需求奠定坚实的程序设计基础。
二、课程目标1知识目标(1)了解通用计算机与嵌入式计算机的区别;(2)掌握VC++2010开发环境的使用方法和步骤;(3)熟悉C语言程序的特点;(4)掌握C语言的数据类型、常量和变量;(5)掌握C语言的各种运算符及其表达式的应用方法;(6)熟悉算法及其表示方法;(7)掌握常用的数据输入输出函数、数学函数、字符串处理函数的使用方法;(8)掌握顺序、选择和循环3种结构程序设计方法;(9)掌握预处理命令的应用方法;(10)掌握数组处理同类型的批量数据的使用方法;(11)掌握函数的定义、调用方法;(12)理解并区别变量的类型;(13)掌握内部函数和外部函数的区别及应用方法;(14)理解中断和嵌入式中断服务函数的概念;(15)理解指针的概念;(16)掌握指向数组的指针及应用方法;(17)握指向字符串的指针及应用方法;(18)熟悉指向函数的指针及应用;(19)熟悉返回指针值的函数及应用;(20)了解指针数组和指向指针的指针及应用;(21)掌握内存动态分配函数的使用方法;(22)掌握结构体类型的声明方法;(23)掌握结构体变量、结构体数组的概念及应用方法;(24)熟悉结构体指针的概念及应用;(25)熟悉共用体、枚举类型及应用;(26)熟悉typedef声明新类型名的方法;(27)熟悉掌握链表的概念及其操作方法;(28)理解文件的概念;(29)熟悉文件的各种操作函数使用方法;(30)熟悉C语言在嵌入式系统中的应用;(31)理解嵌入式构件化设计方法及基于构件化和分层的嵌入式软件设计方法。
C语言程序设计(第3版)-参考答案C语言程序设计(第3版) - 参考答案C语言是一种广泛应用于软件开发领域的编程语言,它具有高效、简洁、灵活等特点。
《C语言程序设计(第3版)》是一本经典的教材,本文将提供一些参考答案,帮助读者更好地理解和掌握C语言程序设计。
一、基础知识1. 什么是C语言?C语言是一种通用的编程语言,由贝尔实验室的Dennis Ritchie开发,在20世纪70年代广泛流行起来。
它被设计为一种低级语言,可以直接操作计算机硬件,并提供了足够的抽象层次来方便高级程序设计。
2. 如何输出“Hello, World!”?在C语言中,使用printf函数可以输出文本信息。
要输出“Hello, World!”,可以使用以下代码:```#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```3. 如何定义和使用变量?在C语言中,可以使用关键字`int`、`float`、`char`等定义变量。
例如:```int age = 20;float weight = 60.5;char grade = 'A';```定义后的变量可以用于存储不同类型的值,并在程序中进行操作和输出。
二、控制流程1. 什么是条件语句?条件语句允许程序通过判断条件来选择性地执行不同的代码块。
在C语言中,常用的条件语句是`if`语句。
例如:```if (score >= 60) {printf("Pass\n");} else {printf("Fail\n");}```根据变量`score`的值,判断学生是否及格并输出相应结果。
2. 什么是循环语句?循环语句可以重复执行一段代码块,以达到多次执行的目的。
在C 语言中,常用的循环语句有`for`、`while`和`do while`。
C语言程序设计课后习题参考答案习题一一、单项选择题1、C2、B3、B4、C5、D6、A7、C8、A二、填空题1、判断条件2、面向过程编程3、结构化4、程序5、面向对象方法6、基本功能操作、控制结构7、有穷性8、直到型循环结构9、算法10、可读性11、模块化12、对问题的分解和模块的划分习题二一、单项选择题1、B2、D3、C4、B5、A6、A7、B8、C二、填空题1、主2、C编译系统3、结构化4、程序5、面向对象方法6、.OBJ7、库函数8、直到型循环结构习题三一、单项选择题1、D2、B3、A4、C5、A6、D7、B8、D9、B 10、C 11、A 12、D 13、C 14、B 15、C 16、A17、B 18、C 19、C 20、D 21、A 22、D 23、D 24、D、A25、D 26、A二、填空题1、补码2、10^-138~10^138、15~163、实4、单目运算符、自右向左5、函数调用6、65,89习题四一、单项选择题1、D2、C3、D4、A5、D6、B7、A8、C9、B 10、B二、填空题1、两, ;2、5.1690003、-200 2500、i=-200,j=2500回车、i=-200回车j=2500回车4、a=98,b=765.000000,c=4321.0000005、100 25.81 1.89234、100,25.81,1.89234、100回车25.81回车1.89234回车6、0,0,37、38、scanf(“%lf %lf %lf”,&a,&b,&c);9、13 13.000000 13.00000010、c=b-a;a=b+c;习题五一、单项选择题1、B2、D3、C4、B5、B6、D7、A8、B9、D二、填空题1、1 、02、k!=03、if(x>4||x<-4)printf(“%d”,x);else printf(“error!”);4、if(((x>=1&&x<=10)||(x>=200&&x<=210))&&(x%2!=0))Printf(“%d”,x);5、16、17、10!Right!8、a=09、2,110、0<a<b习题六一、单项选择题1、B2、C3、C4、B5、C6、B7、C8、A二、填空题1、无穷次2、83、204、115、3.66、*#*#*#$7、8 5 28、d=1.0 、k++、k<=n9、!(x<0)、x<amin习题七一、单项选择题1、B2、D3、C4、C5、A6、A7、D8、A二、填空题1、1 2 4 8 16 32 64 128 256 5122、a[age]++、i=18;i<263、break、i==84、a[i]>b[i]、i<3、j<55、b[j]=0、b[j]=a[j][k]习题八一、单项选择题1、B2、C3、C4、A5、A6、A7、C8、D9、D 10、B 11、A 12、C 13、A 14、C 15、B二、填空题1、return 1、return n+sum(n-1)2、return 1、n*facto(n-1)习题九一、单项选择题1、D2、C3、D4、A5、C6、C7、C8、C9、B 10、C 11、A 12、C 13、B 14、A 15、D 16、B17、C 18、A 19、B 20、C二、填空题1、int 、return z2、*p++3、’\0’、++4、p、max<*q、min>*q习题十一、单项选择题1、D2、D3、A4、5、B6、A7、C8、B9、D 10、11、C 12、D 13、D 14、C二、填空题1、34 122、ARRAY a[10],b[10],c[10];3、2 34、ab、cd5、(*b).day、b->day6、adabc defghi mnohi no7、(struct node *)、!=’\n’、p=top;8、p1=p1->next9、(struct list *)、(struct list *)、return (n)习题十一一、单项选择题1、A2、A3、B4、A5、B6、D7、B8、A9、A 10、B 11、B 12、B 13、C 14、C 15、D 16、A17、D二、填空题1、ASCII(文本)、二进制2、pf=fopen(“A:\\zk04\\data\\txfile.dat”,”w”);3、fputc()、fputs()、fscanf()、fread()4、(后两个空)文件结束符、非0值。
第3章分支结构【练习 3-1】例 3-4 中使用 else-if 语句求解多分段函数,为了检查 else-if 语句的三个分支是否正确,已经设计了三组测试用例,请问还需要增加测试用例吗?为什么?如果要增加,请给出具体的测试用例并运行程序。
解答:最好再增加两组测试用例,因为尚未对分段函数参数的边界值进行测试。
可再给出 x=0和 x=15 时的两种情况。
【练习 3-2】计算符号函数的值:输入一个整数 x,计算并输出下列分段函数sign(x)的值。
-1 x<0y=sign(x)= 0 x=01 x>0解答:#include <stdio.h>int main(void){int x, y;printf("Enter x: " );scanf("%d",&x);if(x>0) y=1;else if (x==0) y=0;else y=-1;printf("sign( %d ) = %d\n",x,y);return 0;}【练习 3-3】统计学生平均成绩与及格人数:输入一个正整数 n,再输入 n 个学生的成绩,计算平均成绩,并统计所有及格学生的人数。
试编写相应程序。
解答:# include <stdio.h>int main(void){int count, i, n;double grade, total;printf("Enter n: ");scanf("%d", &n);total = 0;count = 0;for(i = 1; i <= n; i++){printf("Enter grade #%d: ", i);scanf ("%lf", &grade);total = total + grade;if(grade >= 60) count++;}printf("Grade average = %.2f\n", total / n);printf("Number of pass = %d\n", count);return 0;}【练习 3-4】统计字符:输入 10 个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
试编写相应程序。
解答:#include <stdio.h>int main(void){int i;int blank, digit, letter, other;char c;blank = digit = letter = other = 0;for(i=1;i<=15;i++){c = getchar();if(c>='a' && c <= 'z' || c>='A' && c <= 'Z')letter++;else if(c>='0' && c <= '9')digit++;else if(c==' '||c=='\n')blank++;elseother++;}printf("letter=%d,blank=%d,digit=%d,other=%d\n", letter, blan k, digit, other);return 0;}【练习3-5】输出闰年:输出21世纪中截至某个年份之前的所有闰年年份。
判断闰年的条件是:能被4整除但不能被100整除,或者能被400整除。
试编写相应程序。
解答:# include <stdio.h>int main(void){int year;printf("Enter year: ");scanf("%d", &year);for(;year>=2000;year--){if( (year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0) printf("It is a leap year\n");elseprintf("It is not a leap year\n ");}return 0;}【练习 3-6】在例 3-8 程序中,如果把switch语句中所有的break都去掉,运行结果会改变吗?如果有变化,输出什么?为什么?解答:如果去掉所有的 break 语句,运行结果会改变,输出 price = 0.0,因为不管choice 值与其中某个常量表达式相等,当去掉 break 语句时,其后的所有语句段都将运行,故每次都将执行到 price=0.0 语句为止。
【练习 3-7】成绩转换:输入一个百分制成绩,将其转换为五分制成绩。
百分制成绩到五分制成绩的转换规则:大于或等于90分为A,小于90分且大于或等于80分为B,小于80分且大于或等于70分为C,小于70分且大于或等于60分为D,小于60分为E。
试编写相应程序。
解答:#include <stdio.h>int main(void){double grade;printf("Input grade: ");scanf(“%lf”,&grade);If(grade>=90) printf("A");else if(grade>=80) printf("B");else if(grade>=70) printf("C");else if(grade>=60) printf("D");else printf("E");return 0;}或#include <stdio.h>int main(void){double score;char grade;printf("Input your score: ");scanf("%lf",&score);switch(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;default:grade='E'; break;}printf("Your grade is: %c",grade);return 0;}【练习 3-8】查询水果的单价:有 4 种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄(grapes),单价分别是 3.00 元/公斤,2.50 元/公斤,4.10 元/公斤和 10.20 元/公斤。
在屏幕上显示以下菜单(编号和选项),用户可以连续查询水果的单价,当查询次数超过 5 次时,自动退出查询;不到 5 次时,用户可以选择退出。
当用户输入编号 1~4,显示相应水果的单价(保留两位小数);输入 0,退出查询;输入其他编号,显示价格为 0。
试编写相应程序。
[1] apples[2] pears[3] oranges[4] grapes[0] Exit解答:#include <stdio.h>int main(void){int ri;int choice;float price;for(ri=1; ri<=5; ri++){printf("[1] apples\n");printf("[2] pears\n");printf("[3] oranges\n");printf("[4] grapes\n");printf("[0] Exit\n");scanf("%d", &choice);if(choice==0)break;else {switch(choice){case 1: price=3.00; break;case 2: price=2.50; break;case 3: price=4.10; break;case 4: price=10.20; break;default: price=0;break;}printf("price=%0.2f\n", price);}return 0;}【练习3-9】请读者重新编写例 3-4 的程序,要求使用嵌套的 if - else 语句,并上机运行。
解答:#include <stdio.h>int main(void){double x, y;printf("Enter x:");scanf("%lf", &x);if (x >15){y = 2.5 * x - 10.5;}else {if(x<0)y=0;elsey=4*x/3;}printf("f(%.2f)=%.2f\n", x, y);return 0;}【练习 3-10】在例 3-12 中,改写 if 语句前,y= x + 1;和 y= x + 2; 两条语句的执行条件是什么?改写后呢?解答:改写前:y=x+1 的执行条件是 x<1; y=x+2 的执行条件是 1<=x<2。
改写后:y=x+1 的执行条件是 x<1; y=x+2 的执行条件是 2<=x。
习题3一.选择题1.能正确表示逻辑关系:“a≥10 或a≤0”的 C 语言表达式是 D 。
A.a >= 10 or a <= 0 B.a >= 0 | a <= 10C.a >= 10 && a <= 0 D. a >= 10 || a <= 02.在嵌套使用if语句时,C语言规定else 总是 C 。
A.和之前与其具有相同缩进位置的if 配对B.和之前与其最近的if 配对C.和之前与其最近的且不带else的if配对D.和之前的第一个if 配对3.下列叙述中正确的是 D 。