C++初学教程四

2023-12-13 05:10:08

一、程序设计

程序设计的三种基本结构:顺序、选择、循环

选择结构(也叫分支结构) :判断所指定的条件是否满足,决定从给定的两组或多组操作选择其中的一种。

计算机的判断是通过对表达式的计算来实现,也就是关系运算、逻辑运算。
用语句来体现就是if语句和switch语句。

一、单分支if语句:

if (判断条件){

代码块

}

单分支if语句是指如果满足某种条件,就进行相应的处理。

语法格式:

if (表达式)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?{语句组; }

重要提示:
●“语句组”是一条独立的语句, “}”可以省略;
●“ 语句组”为多条语句的复合语句,“}” 不能省略。

步骤:

(1) 首先计算if后面一对圆括号中的表达式的值,即判断表达式是否成立;
(2)如果表达式的值为“非零”(真) ,则执行语句组,然后再去执行if语句后的下一- 条语句;
(3) 如果表达式的值为“零”(假),则跳过语句组,直接执行if语句后的下一条语句

例题:

题目一:成绩输出

从键盘输入学生成绩并输出,如果成绩大于等于60,则输出"恭喜你及格了!”,请编程实现。
?

#include<stdio.h>
int main()
{
	float cj;
	printf("请输入您的成绩:");
	scanf("%f",&cj);
	printf("%5.2f",cj);
	if(cj>=60)
	{
		printf("恭喜你及格了!");
	} 
}
题目二:三个数字比较大小

输入3个实数,按从大到小的顺序输出。
?

#include<stdio.h>
int main()
{
	float a,b,c,t;
	printf("请输入数字a、b、c:");
	scanf("%f%f%f",&a,&b,&c);
	if(a<b){t=a;a=b;b=t;}
	if(a<c){t=a;a=c;c=t;}
	if(b<c){t=b;b=c;c=t;}
	printf("%5.3f,%5.3f,%5.3f",a,b,c);
	
}

1、if后 面圆括号中的表达式,可以是任意合法的C语言表达式,也可以是任意类型的数据。
例: if(3) printf("OK"); 是合法的
2、If语句的表达式后不能加分号
例: if(a>b);? ?//相当于if(a>b)空语句;
3、表达式之后只能是一条语句,如果包含多个(两个以上)语句,则必须使用复合语句,即用花括号把一组语句括起来,因为复合语句在语法上视为“一条语句"。
4、一个复合语句在语法 上视为一条语句,在一对花括号内的语句数量不限 。复合语句的花括号后面不需要再加分号。
?

if...else语句:

if(判断条件){

(代码块)

}else{

代码块

}

(1)语法格式

if (表达式)
{语句组1; }
else
{语句组2; }
1)计算表达式的值;
2)如果表达式的值为非0,则执行语句组1,跳过语句组2;
3)如果表达式的值为0,则跳过语句组1,执行语句组2;
4)继续执行if语句之后的下一条语句。

(2)语法说明

else不是一条独立的语句, 它只是if语句的一
部分,因此,else必须与if配对使用。
不允许单独出现这样的语句:
else printf('
11***"

例题:

题目一:成绩及格

从键盘输入学生成绩并输出,如果成绩大于等于60,则输出“恭喜你及格了!‘否则输出“请继续努力! "请编程实现。
?

#include<stdio.h>
int main()
{
	float a;
	printf("请输入成绩:");
	scanf("%f",&a);
	if(a>=60.00){
		printf("恭喜你及格了!");
	}
	else{
		printf("请继续努力!");
	}
	
}
题目二:判断等腰三角形?

一个三角形的三边分别用a,b, c表示,输入三个边长a、b、c,判断该三角形是否为等腰三角形。
?

#include<stdio.h>
int main()
{
	float a,b,c;
	printf("请输入三角形的三个边:");
	scanf("%f%f%f",&a,&b,&c);
	printf("%5.2f,%5.2f,%5.2f\n",a,b,c); //因为是if...else...的学习就默认它是三角形了哈 
	if(a==b||a==c||b==c){
		printf("这是等腰三角形");
	}else{
		printf("这不是等腰三角形");
	}
}

if...else if...else

if(判断条件1){

执行语句1

}else if(判断条件2){

执行语句2

}

...

else if{(判断条件n){

执行语句n

}else{

执行语句n+1

}

例题:

题目一:成绩划分

在大学的考查课的成绩评定中,经常把学生的成绩分成优秀、良好、中等、合格和不合格5个等级。其中:
小于60分的为不合格;
60-70之间的为合格;
70-80之间的为中等;
80-90分之间的良好;
90分以上的为优秀。
编写一个程序,要求输入一个学生的考试成绩,输出其分数对应的等级。

方法一:
#include<stdio.h>
int main()
{
	float a;
	printf("请输入成绩:");
	scanf("%f",&a);
	printf("%5.2f\n",a);
	if(a>100||a<0){
		printf("输入成绩有误!");
	}else if(a>=90){
		printf("优秀!");
	}else if(a>=80&&a<90){
		printf("良好");
	}else if(a>=70&&a<80){
		printf("中等");
	}else if(a>=60&&a<70){
		printf("及格");
	}else{
		printf("不及格");
	}
}
方法二:
#include<stdio.h>
int main()
{
	float a;
	printf("请输入成绩:");
	scanf("%f",&a);
	printf("%5.2f\n",a);
	if(a>100||a<0){
		printf("输入成绩有误!");
	}else if(a<60){
		printf("不及格");
	}else if(a<70){
		printf("及格");
	}else if(a<80){
		printf("中等");
	}else if(a<90){
		printf("良好");
	}else{
		printf("优秀");
	}
}
题目二:三角形判断

输入三个边长a、b、c,如果这三个边能构成三角形,判断该三角形是等边三角形、等腰三角形,还是其它三角形。

方法一:
#include<stdio.h>
int main()
{
	float a,b,c;
	printf("请输入三角形的三个边:");
	scanf("%f%f%f",&a,&b,&c);
	printf("%f,%f,%f\n",a,b,c);
	if(a+b<=c&&a+c<=b&&b+c<=a){
		printf("这不是一个三角形");
	}else if(a==b&&b==c){
		printf("这是一个等边三角形");
	}else if(a==b||a==c||b==c){
		printf("这是一个等腰三角形");
	}else {
		printf("这是一个其他三角形");
	}
	return 0;
	}
方法二:
#include<stdio.h>
int main()
{
	float a,b,c;
	printf("请输入三角形的三个边:");
	scanf("%f%f%f",&a,&b,&c);
	printf("%f,%f,%f\n",a,b,c);
	if(a+b>c&&a+c>b&&b+c>a){
		if(a==b&&b==c){
			printf("这是一个等边三角形");
		}else if(a==b||a==c||b==c){
		    printf("这是一个等腰三角形");
    	}else {
	    	printf("这是一个其他三角形");
	}
	}else printf("这不是一个三角形");
	return 0;
	}
题目三:判断字母

以下程序用于判断输入的字符是否为字母,补充完整,然后将程序改写成仅一对if-else的形式。

方法一:
#include<stdio.h>
int main()
{
	char ch;
	printf("请输入:");
	ch=getchar();
	if(ch>='A'&&ch<='Z'){
		printf("ch是字母%c\n",ch);
	}else if(ch>='a'&&ch<='z'){
		printf("ch是字母%c\n",ch);
	}else printf("ch不是字母\n");
	return 0;
	}
方法二:
#include<stdio.h>
int main()
{
	char ch;
	printf("请输入:");
	ch=getchar();
	if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'){
		printf("ch是字母%c\n",ch);
	}else printf("ch不是字母\n");
	return 0;
	}

条件运算符:

基础:

这是C语言提供的唯一的三目运算符。需要三个运算对象

语法格式:

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

?和:都为英文状态

一般为关系表达式或逻辑表达式,可以是其他任意表达式

执行流程:

先计算表达式1的值
若表达式1的值为真(非零),则计算表达式2的值,并将表达式2的值作为整个表达式的值;
若表达式1的值为假(零),则计算表达式3的值,并将表达式3的值作为整个表达式的值。

优先级:

!?>算术运算符>关系运算符>&&>I>条件运算符>赋值运算符>逗号运算符

结合方向:

自右向左

应用:

简单的if-else语句,可以用条件运算符来替代
if(a>b) max= a;
else max= b;

替换:

max=(a>b)?a:b;

举例:

题目一:

方法一:
#include<stdio.h>
int main()
{
	float x,y;
	printf("请输入x:");
	scanf("%f",&x);
	if(x>3){
		y=x*x+2;
		printf("%f\n",y);
	}else if(x<=3){    //可以把 if(x<=3)删掉,不影响程序运行 
		y=3*x+7*x*x;
		printf("%f\n",y);
	}
	return 0;
	}
?方法二:
#include<stdio.h>
int main()
{
	float x,y;
	printf("请输入x:");
	scanf("%f",&x);
	y=x>3?x*x+2:3*x+7*x*x;
	printf("%f\n",y);
	return 0;
	}

switch语句:

基础:

- switch
条件语句也是一种常用的选择语句,和if条件 语句不同,它只能针对某个表达式的值作出判断,根据这一个表达式的不同值决定程序执行哪一段代码。

Switch...case语句:

Switch(表达式){

case 目标值1:

执行语句1;

echo“ ”

break;

case 目标值2:

执行语句2;

break;

......

case 目标值n:

执行语句n;

break;

default:

执行语句n+1;

echo“输入的目标值不正确...”

break

}

举例:

题目一:对应星期几

输入1~7中的一个数字,输出对应的“星期几”

#include<stdio.h>
int main()
{
	int day;
	printf("请输入星期数字编号(1~7):\n");
	scanf("%d",&day);
	switch(day)
	{
		case 1:printf("星期一\n");break; 
		case 2:printf("星期二\n");break; 
		case 3:printf("星期三\n");break; 
		case 4:printf("星期四\n");break; 
		case 5:printf("星期五\n");break; 
		case 6:printf("星期六\n");break; 
		case 7:printf("星期七\n");break; 
		default:
		printf("输入有误"); 
	}
	return 0;
	}
题目二:成绩等级划分

使用switch语句实现学生成绩的等级划分功能。
90≤s≤100:等级为优秀;
80≤s<90:等级为良好;?
70≤s< 80:等级为中等;
60≤s< 70:等级为合格;
0≤s<60:等级为不合格。
[小提示在程序设计过程中,需要适时选择多分支if语句和switch语句。

(1) switch语句 只能判断“相等”的逻辑关系,即switch后表达式的值是否和case常量值相等;
(2) switch后的表达 式不能描述某范围的数据,表达式的值是一个确定的整型或字符型数据
?

#include<stdio.h>
int main()
{
	int score;
	printf("请输入成绩:");
	scanf("%d",&score);
	if(score>=0&&score<100){
		switch(score/10){
			case 6:printf("合格");break;
			case 7:printf("中等");break;
			case 8:printf("良好");break;
			case 9:printf("优秀");break; //printf("优秀");break;可以省略 
			case 10:printf("优秀");break;
			default:printf("不合格");
		}
	}else printf("成绩输入有误!");
}
改进版
#include<stdio.h>
int main()
{
	double score;                 //改进1
	printf("请输入成绩:");
	scanf("%lf",&score);          //改进二
	if(score>=0&&score<100){
		switch((int)score/10){    //改进三
			case 6:printf("合格");break;
			case 7:printf("中等");break;
			case 8:printf("良好");break;
			case 9:printf("优秀");break; //printf("优秀");break;可以省略 
			case 10:printf("优秀");break;
			default:printf("不合格");
		}
	}else printf("成绩输入有误!");
}

注意事项:

break语句不是必需的, 可以没有。
---不加break语句,匹配到目标值后,后面的执行语句都会输出,直到遇到break语句,或者一直 执行到最后。
case语句、default语句的位置问题:
---当break语句每一个case语句都存在的时候,case语句、 default语句的位置不影响结果。
---当break语句不是每一个case语句都有的时候,case语句、 default语句的位置影响结果。

if语句和switch语句之间优劣:

5. if语句和switch语句异同

if语句:
优点: if语句则可以对浮点数进行判断,还可以进行大小范围,上的判断
缺点:执行效率低,多层嵌套程序冗长,需要比较多次才能找到正确分支。
switch语句: .
缺点: switch只 能进行整数和字符型数据的判断;只能进行相等与否的判断;
优点: switch结构清晰, 可读性好,只需比较一次就能找到正确分支

因此if语句可以完全替代switch语句; switch语句不能完全 替代if语句。

感觉if语句就是将事情分成了几种状况,比如说感冒可以分为风热感冒风寒感冒,switch就是说确定风热感冒的莲花清瘟还是999感冒灵。if是对事情本身分析多种状况,switch是对事情的结果分析多种状况。

选择结构的综合应用

题目一:存款本息合计

根据定期存款的期限和相应的利率,计算本息合计。

#include<stdio.h>
int main()
{
//第一步:输入存款金额x和存款期限day;
//第二步:根据存款期限day确定存款利率;
//第三步:根据存款金额x和利率计算本息合计金额y。
//本息和=本拿+本金*年利率*年数

	int day;
	float x,y;  //x为存款的金额,y为存款日期到达后本息合计,day为存款的时间 
	printf("请输入存款的金额:");
	scanf("%f",&x);
	printf("请输入存款时间:");
	scanf("%d",&day);
	if(day==3||day==6||day==12||day==24||day==36||day==60){
		switch(day){
			case 3:{y=x+x*0.026*3/12;printf("%f",y);
				break;
			}case 6:{y=x+x*0.028*6/12;printf("%f",y);
				break;
			}case 12:{y=x+x*0.033*12/12;printf("%f",y);
				break;
			}case 24:{y=x+x*0.0375*24/12;printf("%f",y);
				break;
			}case 36:{y=x+x*0.0425*36/12;printf("%f",y);
				break;
			}case 60:{y=x+x*0.0475*60/12;printf("%f",y);
				break;
			}
		}
	}else printf("日期输入有误!");
	
}

题目二:ATM操作流程

某银行ATM机操作界面如图,当密码输入正确后进入服务项目选择界面,然后根据需要选择相应选项。请编程模拟该操作过程。
?

#include<stdio.h>
int main()
{
	int pwd,n;  //pwd代表密码。n代表项目,假设密码是123456 
	printf("请输入密码:<按回车键结束>:");
	scanf("%d",&pwd); 
	if(pwd==123456){
		printf("请选择服务项目\n***1***改密\n***2***转账\n***3***电子现金\n***4***取卡\n");
		printf("您要进行的选项是:"); 
		scanf("%d",&n);
		switch(n){
			case 1:printf("正在进入'改密'项目,请稍后......");break;
			case 2:printf("正在进入'转账'项目,请稍后......");break;
			case 3:printf("正在进入'电子现金'项目,请稍后......");break;
			case 4:printf("正在进入'取卡'项目,请稍后......");break;
		}
	}else printf("密码输入有误!"); 
}

文章来源:https://blog.csdn.net/weixin_64033212/article/details/134851921
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。