C++初学教程四

一、程序设计

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

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

计算机的判断是通过对表达式的计算来实现,也就是关系运算、逻辑运算。
用语句来体现就是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("密码输入有误!"); 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/236579.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

53 代码审计-TP5框架及无框架变量覆盖反序列化

目录 演示案例:Metinfo-无框架-变量覆盖-自动审计或搜索phpmyadmin-无框架-反序列化-自动审计或搜索Thinkphp5-有框架-搭建使用入口访问调试SQL等 演示案例: Metinfo-无框架-变量覆盖-自动审计或搜索 变量覆盖会直接覆盖原始变量&#xff0c;来形成新的变量值 搜索关键字或者…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring IOC底层实现

第一章 SpringIOC底层实现 IOC&#xff1a;将对象的控制器反转给Spring 1.1 BeanFactory与ApplicationContexet BeanFactory&#xff1a;IOC容器的基本实现&#xff0c;是Spring内部的使用接口&#xff0c;是面向Spring本身的&#xff0c;不是提供给开发人员使用的。****Appli…

APP自动化测试工具大全

一、UI自动化测试工具 1. uiautomator2 openatx开源的ui自动化工具&#xff0c;支持Android和iOS。主要面向的编程语言是Python&#xff0c;API设计简洁易用&#xff0c;在开源社区也是很受欢迎。 安装&#xff1a; pip install --upgrade --pre uiautomator2# Or you can …

IO / day07 作业

1. 使用消息队列完成两个进程之间相互通信 代码 #include <myhead.h>//define a msg struct type struct msgbuf {long mtype; //消息类型char mtext[1024]; //消息正文大小};//macro msg size #define SIZE (sizeof(struct msgbuf)-sizeof(long))int recv(int mtype_r…

Vue学习计划-Vue2--VueCLi(三)ref属性、mixins混入、插件、scoped样式

1. ref属性 被用来给元素或子组件注册引用信息&#xff08;id的替代者&#xff09;应用在html标签上获取的是真实DOM元素&#xff0c;应用在组件标签上是组件实例对象&#xff08;VC&#xff08;VueComponent&#xff09;&#xff09;使用方式&#xff1a; 打标识<h1 ref&q…

火山引擎边缘计算用硬核助力赛事直播

经过一个多月激烈争夺&#xff0c;2023英雄联盟全球总决赛终于在11月19日落下帷幕。精彩的对决和高热话题使得直播平台观赛人数暴增&#xff0c;给直播平台稳定性和资源储备提出了巨大的考验。

macosx dbeaver执行脚本报错提示:还没有设置连接地址

1.原因 因为你本地没有安装MySql Client所以按照网上其他操作办法你找不到MySql的客户端&#xff0c;因此配置客户端的时候自然就找不到对应的文件. 2.解决办法 参考DBeaver提供的解决办法&#xff1a; https://dbeaver.com/docs/dbeaver/Local-Client-Configuration/#local…

【复杂网络建模】——基于Graph Convolutional Networks (GCN)进行链接预测

目录 一、复杂网络建模 二、图嵌入方法&#xff08;Graph Convolutional Networks (GCN) &#xff09; 1. 图表示&#xff1a; 2. 邻接矩阵&#xff08;Adjacency Matrix&#xff09;&#xff1a; 3. 图卷积层&#xff08;Graph Convolutional Layer&#xff09;&#xff…

docker的资源控制:

docker的资源控制&#xff1a; 对容器的使用宿主机的资源进行限制 cpu 内存 磁盘i/0 docker使用linux自带的功能cgroup control grouos是linux内核系统提供的一种可以限制&#xff0c;记录&#xff0c;隔离进程所使用的物理资源 control grouos是linux内核系统提供的一种可…

【动态规划】03斐波那契数列模型_最小花费爬楼梯_C++(easy1)

题目链接&#xff1a;leetcode使用最小花费爬楼梯 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求达到楼梯顶部的最低花费. 由题可得&#xff1a; cost[i] 是从楼梯第 i 个…

【LeetCode刷题-树】--113.路径总和II

113.路径总和II 方法一&#xff1a;深度优先搜素 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeN…

语音识别功能测试:90%问题,可以通过技术解决

现在市面上的智能电子产品千千万&#xff0c;为了达到人们使用更加方便的目的&#xff0c;很多智能产品都开发了语音识别功能&#xff0c;用来语音唤醒进行交互&#xff1b;另外&#xff0c;各大公司也开发出来了各种智能语音机器人&#xff0c;比如小米公司的“小爱”&#xf…

少儿编程考级:激发孩子逻辑思维能力的关键

在当今信息化时代&#xff0c;少儿编程已经成为孩子们不可或缺的一项技能。而少儿编程考级&#xff0c;则是检验孩子们在这一技能上所取得的成就的重要途径。少儿编程考级不仅能够激发孩子们的逻辑思维能力&#xff0c;还能够提高他们的动手能力和创造力。6547网将详细介绍少儿…

Windows Terminal的半透明效果

打开Windows Terminal的半透明效果 最终实现效果&#xff1a; 系统&#xff1a;win11 23H2 步骤&#xff1a; 1.winx打开终端 2.右键打开设置 3.打开外观->亚克力材料开启 4.默认值->外观->透明度&#xff0c;按喜好选择即可

使用opengl编写shader出现错误,提示无法创建片段shader,且提示:too much data in type constructor

最近在学opengl&#xff0c;在编写片段shader时&#xff0c;编译出现错误如下&#xff1a; 造成这个问题的原因是fragment shader的代码有问题&#xff0c;在创建片段着色器代码的第七行需要传入一些参数&#xff0c;如果传入参数的个数超过了规定值&#xff0c;就会报错。 解…

springboot 极简案例

安装idea File -> New Project 选择依赖 创建controller文件 输入controller类名 输入代码 运行项目 访问 localhost:8080/hello/boot package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.…

使用 VSCode 开发 Golang 代码,并支持 debug断点调试

背景 Go 自2012年发布至今&#xff0c;由于其出色的性能与并发处理能力&#xff0c;已经被各大互联网公司应用到成熟的产品服务上&#xff0c;目前本人从事项目的后端服务已经从Python全部切换到Go。 于是决定跟后端大佬系统的学习一下Golang语言&#xff0c;然后将自己学习过…

day3_qt

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xf…

用户登录权限

文章目录 [TOC](文章目录) 前言一、鉴权二、 Cookie与session1.HTTP无状态2.cookie的重要属性3.cookie 和 session 的生命周期3.1 cookie 生命周期影响因素3.2 session 生命周期影响因素 4.cookie 和 session 的区别5.工作原理3 用户登录Node.js和Express验证session 三、JSON …

亿胜盈科ATR2037 无限射频前端低噪声放大器

亿胜盈科ATR2037 是一款应用于无线通信射频前端&#xff0c;工作频段为 0.7 到 6GHz 的超低噪声放大器。 ATR2037 低噪声放大器采用先进的 GaAs pHEMT 工艺设计和制作&#xff0c;ATR2037 低噪声放大器在整个工作频段内可以获得非常好的射频性能超低噪声系数。 亿胜盈科ATR203…