《C语言程序设计 第4版》笔记和代码 第五章 选择控制结构

第五章 选择控制结构

5.1 生活中与计算机中的问题求解方法

1 分治策略是指将原始问题逐步分解为一些易于解决的子问题,然后再将子问题逐个击破。

2 预定义的指令集就是所谓的计算机程序。

3 机器语言是计算机能理解的语言,由一系列二进制0和1组成,程序设计语言是由计算机指令表示的特殊语言,属于高级语言。

4 由高级语言形式转换成机器语言形式需要由编译器完成。

5.2 算法的概念及其描述方法

1 算法是为解决以一个具体问题二采取的确定、有限、可执行的操作步骤。

2 对于面向过程的语言,有以下公式成立:

数据结构+算法=程序

3 数据结构是计算机存储、组织数据的方式。算法是对操作步骤的描述。

4 算法可以分为数值算法非数值算法。

5 算法的五大基本特性:有穷性、确定性、有效性(可行性)、一个或多个输出、没有或多个输入。

6 算法的描述方法有:自然语言描述、流程图描述、NS结构化流程图描述、伪码描述。

5.3 关系运算符与关系表达式

1C语言的三大程序结构为:选择、控制、循环(6章详解)。

2 顺序结构只能自顶向下,按代码书写先后顺序执行。如,赋值和数据的输入输出,都主要由表达式语句组成。

3 选择结构(分支控制结构)适合需要分情况处理的问题,需要涉及到条件判断

4 简单的判断条件可以用关系表达式来表示,复杂的判断条件可以用逻辑表达式来表示。

5常用的关系运算符:

6 语法错误会导致编译错误,判断条件不正确会导致运行时错误

7 条件判断的结果只有“真”和“假”两种可能,C语言中,用非0值(包括负数)表示0值表示

8 所有关系运算符优先级低于所有算术运算符。

5.4 用于单分支控制的条件语句

1 选择结构可分为单分支、双分支多分支选择结构。

2 if语句可实现单分支选择结构:

If(表达式) 语句

表示如果表达式为,则执行该语句。

代码5.1见文末

5.5 用于双分支控制的条件语句

1 if-else语句可以用于解决双分支选择问题,一般形式为:

If(表达式) 语句1

else 语句2

表示如果表达式为,则执行语句1;表达式为,则执行语句2。

代码5.2见文末

5.6 条件运算符和条件表达式

1 条件运算符是C语言中唯一一个三元运算符,需要三个操作数,一般形式为:

表达式1?表达式2:表达式3

表示如果表达式1为,则该条件表达式的值是表达式2的值,否则是表达式3的值。

代码5.3见文末

5.7 用于多分支控制的条件语句

1 else-if语句可以解决多分支选择问题,一般形式为:

                                          if(表达式1)         语句1

                                          else if(表达式2)     语句2

                                          ……

                                          else if(表达式m)    语句m

                                          else               语句m+1

表示表达式几为,就执行表达式几,如果前面几条语句都不为真,则执行else下的语句。

2 条件语句在语法上只允许执行一条语句,因此如果处理的问题需要多个语句才能解决,可以用花括号将所有语句括起来,形成复合语句,一个复合语句是一个逻辑整体。

例5.4见文末

3 函数exit()的作用是终止整个程序的执行,强制放回操作系统。exit(0)表示程序正常结束,使用该函数需要包含头文件<stdlib.h>。

4 浮点数并且真正意义上的实数,而是在某些范围内的近似。因此只能用近似的方法将实数0比较。

5.8 用于多路选择的switch语句

1 开关语句可以代替条件语句来简化程序,适用于需要讨论的情况较多的问题,一般形式为:

                                          switch(表达式)

                                          {

                                                 case 常量1: 可执行语句序列1

                                                 case 常量2: 可执行语句序列2

                                                 ……

                                                 case 常量n: 可执行语句序列n

                                                 default:          可执行语句序列n+1

                                          }

2 用break语句可以跳出switch结构,若case后的语句省略不写,则表示当前case与后续case执行相同语句

5.9 逻辑运算符和逻辑表达式

1 数学上正确的表达式在C语言的逻辑中不一定正确,表达一些复杂的逻辑关系常常会用到逻辑运算符

2 逻辑运算符优先级从高到低为:(逻辑非); &&(逻辑与); ||(逻辑或)。

3 逻辑运算符连接操作数形成逻辑表达式,逻辑表达式的运算结果只有两个值。

4 逻辑与运算的特点是两个操作数都为真,运算结果才为真,只要有一个为假,运算结果就为假。(有假则假)

5 逻辑或运算的特点是两个操作数只要有一个为真,运算结果就为真。(有真则真)

6 逻辑非运算的特点是总与操作数的值相反。

7 学习了这么多运算符,他们的优先级必需牢记,优先级从高到低为:一元运算符、算术运算符、关系运算符、逻辑运算符、赋值运算符。(一算关逻富:一个算命的关注了一个姓罗的富豪)

8 适当的时候可以用圆括号使表达式更加清晰。

9 运算符&&和||具有“短路特性”,即含有这两个运算符的表达式,如果通过左边已经能得出表达式结果,右边则不会被计算。

代码

5.1

//5.1 使用单分支的条件语句编程,计算并输出两个整数的最大值
#include<stdio.h>
int main(void)
{
	int a,b,max;
	printf("Input a,b:");//提醒用户输入 
	scanf("%d,%d",&a,&b);//用户输入,注意输入时中间用逗号隔开 
	if(a>b)//此处无符号 
		max=a;// if到这是一条语句 
	if(a<=b)//无符号 
		max=b;
	printf("%d",max); 
	return 0;
 } 

5.2

 //5.2使用双分支条件语句编程,计算并输出两个整数的最大值 
#include<stdio.h>
int main(void)
{
	int a,b,max;
	printf("Input a,b:");//提醒用户输入 
	scanf("%d,%d",&a,&b);//用户输入
	if(a>b)
		max=a;// 如果a>b,则把a的值赋值给maxb变量 
	else    //这里同样无符号 
		max=b;//否则,把b的值赋值给max变量 
	printf("%d",max); 
	return 0;
 }

5.3

//5.3使用条件运算符编程,计算并输出两个整数的最大值
#include<stdio.h>
int main(void)
{
	int a,b,max;
	printf("Input a,b:");
	scanf("%d,%d",&a,&b);
	max=a>b?a:b;//表达式1为a>b,当a>b为真时,条件表达式的值为a,否则为b,最后把条件表达式的结果赋值给max 
	printf("%d",max); 
	return 0;
 }

5.4

/*5.4 从键盘上任意输入a,b,c的值,编程计算并输出一元二次方程的根,当a等于0时,输出“该方程 
 不是一元二次方程”,当a不等于0时,根据判别式,分情况计算并且输出方程的根。 
 */
 #include<stdio.h>
 #include<stdlib.h>
 #include<math.h>
 #define EPS 1e-6
 int main(void)
 {
 	float a,b,c,disc,p,q;//disc是判别式 
 	printf("Please enter the coefficients a,b,c;");
	scanf("%f,%f,%f",&a,&b,&c);
	if(fabs(a)<=EPS)//通过近似原理,将浮点数与0比较,此时无根 
	{
		printf("It is not a quadratic equation!\n");
		exit(0);//程序正常结束 
	 } //这是情况一 
	 disc=b*b-4*a*c;
	 p=-b/(2*a);
	 q=sqrt(fabs(disc))/(2*a);
	 if(fabs(disc)<=EPS)//此时有两相等实根 
	 {
	 	printf("x1=x2=%.2f\n",p);
	 }//这是情况二 
	 else//根据就近未匹配原则,这个else对于的是情况二的if 
	 {
	 	//在该else下嵌套了一个if-else语句 
	 	if(disc>EPS)
	 	{
	 		printf("x1=%.2f,x2=%.2f\n",p+q,p-q);
		 }//这是情况三下的第一种情况,此时有两不等实根 
		 else{
		 	printf("x1=%.2f+%.2fi,",p,q);
		 	printf("x1=%.2f-%.2fi\n",p,q);
		 }//是情况三下的第二种情况,此时有两共轭复根 
	  }//这是总的情况三 
	  
 	return 0;
 }

5.5

//例5.5 用switch编程实现简单的计算器功能
#include<stdio.h>
int main(void)
{
	int data1,data2;
	char op;
	printf("Please enter an expression:");
	scanf("%d%c%d",&data1,&op,&data2);
	switch(op)//op为字符型 
	{
		case'+'://因此case后也跟字符型 
			printf("%d+%d=%d\n",data1,data2,data1+data2);
			break;//遇到break,跳出switch 
		case'-':
			printf("%d-%d=%d\n",data1,data2,data1-data2);
			break;
		case'*':
			printf("%d*%d=%d\n",data1,data2,data1*data2);
			break;
		case'/':
			if(0==data2)//把0放在前面是为了防止不小心写成=,变成赋值运算 
				printf("Division by zero!\n");//除数不能为0 
			else
				printf("%d/%d=%d\n",data1,data2,data1/data2);
			break;
			
		default://赋值输入其他非法字符 
			printf("Invalid operator!\n");
	 } 
	return 0;
 } 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值