第4章选择结构程序设计。
习题(p111)
4.2 c语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?
答:c语言中用1表示真,0表示假;系统按照“非0为真,0为假”判断一个逻辑量的真假。
4.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。
(1)a+b>c&&b==c2)a||b+c&&b-c3)!(a>b)&&c||1
(4)!(x=a)&&y=b)&&0 (5)!(a+b)+c-1&&b+c/2
解:该题在求解过程中注意:
一、优先级。逻辑运算符(&&和||)低于算术运算符和关系运算符而高于赋值运算符,在逻辑运算符中,逻辑非最高,逻辑与其次,逻辑或最低;
二、逻辑表达式的求值规则。(p94)
所以得以上表达式的值分别为:(1)0 (2)1 (3)1 (4)0 (5)1
4.4有3个整数a、b、c,由键盘输入,输出其中最大的数。
分析:这是一个规模较小的求最值的算法,习题1.6用函数的方法实现。
该题不用函数调用实现,但方法类似。法一:先求前两个数的最值,再用前两个数的最值和第三个数比较即得结果。
法二:先假设第一个数是最值,再依次和第。
二、第三个数比较得结果。其中都要用到单分支或双分支选择结构语句。
参考程序如下:
法一:main()
int a,b,c,max定义4个整型变量,其中a,b,c存原始数据,max存最值*/
printf("input the value of a,b,c:")提示输入*/
scanf("%d%d%d",&a,&b,&c); 格式符之间无分隔符,输入时可以以空格、回车、跳格分隔*/
if(a>b) max=a;
else max=b;
if(max printf("max=%d",max);
法二:main()
int a,b,c,max;
printf("input the value of a,b,c:")
scanf("%d%d%d",&a,&b,&c);
max=a;
if(max if(max printf("max=%d",max);
4.6有一个函数:写一段程序,输入x,输出y的值。
分析:这是一个典型的分断函数的求解应用。运行时从键盘输入x的值,再判断其范围根据表达式计算y值并输出即可。
该题的关键是如何判断x值的范围,需要用到嵌套的分支选择语句。具体方法比较多,可以先确定任意一个范围,在确定其余范围时可以用到前一条件不满足的隐含条件。注意嵌套语句中else和if 的配对关系。
另外仍然要注意c语言表达式和数学表达式的区别,乘号(*)在c语言表达式中一定不能省略。
参考程序如下:
#include<>
main()
float x,y;
printf("input x:")
scanf("%f",&x);
if(x<1)
y=x;else if(x<10) /使用了隐含条件x >=1 */
y=2*x-1;
else /*前两个条件都不满足,则隐含条件为 x>=10 */
y=3*x-11;
printf("y=%f",y);
对上述参***中加粗部分语句的改写方法:
思考:还有其他的改写方法吗?请动手写一写。
4.8给出一百分制成绩,要求输出成绩等级'a'、'b'、'c'、'd'、'e'。90以上为'a',80~89分为'b',70~79分为'c',60~69分为'd',60分以下为'e'。
分析:该题是一个多分支选择的应用。c语言中实现多分支选择的方法可以用if~else嵌套语句或用switch语句,该题这两种方法都可以实现。
在用if~else实现的时候注意else和if的配对,方法同上题;用switch语句实现的时候注意成绩处理为可以列举的值,方法是将成绩取整后整除10,这样百分制的成绩只有11种可能了。
参考程序如下:
法一(if~else语句实现):
main()
float score; /存放输入的百分制成绩*/
char grade; /存放等级*/
printf("please input the score: "提示输入*/
scanf("%f",&score完成输入*/
while(score>100 ||score < 0) /对输入的成绩进行合法性检查*/
printf("");
*以下对成绩进行判断,计算出对应的等级*/
if(score>=90) grade='a';
else if(score>=80) grade='b';
else if(score>=70) grade='c';
else if(score>=60) grade='d';
else grade='e';
printf("score=%g grade is %c",score,grade); 输出结果*/
法二(switch语句实现):
main()
float score;
char grade;
printf("please input the score: "
scanf("%f",&score);
while(score>100 ||score < 0)
printf("");
switch( (int)score/10 ) 先将成绩取整,再整除10,得商的整数部分 */
/* 以下case后为switch后表达式计算出来可能的值 */
printf("score=%g grade is %c",score,grade);
4.9 给一个不多于5位的正整数,要求:求出它是几位数;分别输出每一位数字;按逆序输出各位数字。
分析:该题的关键是将一个整数分解为各位数字,可以用整除和取余相结合的方法实现,并分别用不同的变量保存起来。由于整数的位数在1~5位之间不确定,所以适合用switch开关语句实现。
参考程序如下:
main()
long int numnum存放输入的原始数据,由于最大的5位数是99999,它超出了int型的范围(-32768 ~ 32767)所以定义为long型 */
int w,a,b,c,d,e变量w用于存放数的位数,其余存放5位数的各位数字 */
printf("please input a number(0~99999提示输入*/
scanf("%ld",&num输入长整型数据 */
while( num<0 ||num>99999 ) 检查输入数据的合法性 */
/* 一组if~else的嵌套确定输入的num是几位数 */
if(num<10) w=1;
else if(num<100) w=2;
else if(num<1000) w=3;
else if(num<10000) w=4;
else w=5;
/* 根据位数分解num的各位数字*/
switch( w )
/* 顺序、逆序输出分解后的各位数字 */
switch(w)
{ case 5: printf("shunxu:%d%d%d%d%d", e,d,c,b,a);
printf("nixu:%d%d%d%d%d", a,b,c,d,e);
break;
case 4: printf("shunxu:%d%d%d%d",a,b,c,d);
C程序设计第6章 循环结构程序设计
第6章循环结构程序设计。许多问题的求解归结为重复执行的操作,例如输入多个同学的成绩 对象遍历 迭代求根等问题。这种重复执行的操作在程序设计语言中用循环控制来实现。几乎所有实用程序都包含循环。特别是在现代多 处理程序 图像 声音 通讯 中,循环更是必不可少。根据开始循环的初始条件和结束循环的条件不同,...
第5章循环结构程序设计
通过本章实验作业应达目标 1 熟悉while for do while break continue语句的作用与使用规范,能使用while语句 for语句 do while语句实现循环结构 2 掌握循环结构和选择结构之间嵌套 多重循环间嵌套的设计方法。3 进行算法设计训练,能综合所学控制结构语句解决...
第二章选择结构程序设计
2.1 if语句基础。问题描述 如果明天天气不好,就留在家里看电视,否则出去购物。分析 我们可以通过下面图例分析。从上面实例我们可以看出通过一个判断,演变出两个分支的情况,在编程中我们可以称为选择结构。在c 中用if语句来实现选择结构。2.2 if语句。一 格式 if 布尔表达式 语句 if 布尔表...
经典C语言程序设计100例
经典c语言程序设计100例31 40 程序31 题目 请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续。判断第二个字母。1.程序分析 用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。2.程序源 include void main char let...
第二章C语言程序设计的初步知识
一 选择题。1 在c 语言中,下列类型属于构造类型的是 0级 a 整型b 字符型c 实型d 数组类型。6 下列字符串属于标识符的是 0级 a intb 5 student c 2ong d df 11 c语言中不能用来表示整常数的进制是 0级 a 十进制 b 十六进制 c 八进制d 二进制。16 在...