IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言基础-学习笔记(3)- 分支语句和循环语句 -> 正文阅读

[C++知识库]C语言基础-学习笔记(3)- 分支语句和循环语句

C语言是一门程序化的结构设计语言

1.顺序结构
2.选择结构
3.循环结构

分支语句和循环语句

1.分支语句

  • if
  • switch

2.循环语句

  • while
  • for
  • do while

3.goto语句

什么是语句?

C语言中有一个分号;隔开的就是一条语句。比如:

printf("hehe");
;  //空语句
1+2;

分支语句(选择结构)

if语句

if语句的语法结构:

if(表达式)
    语句;
    
if(表达式)
    语句1;
else
    语句2;
    
//多分支
if(表达式)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;  

演示代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <string.h>

int main() {
	int age = 0;
	scanf("%d",&age);

	if (age < 18)
		printf("少年\n");
	else if (age >= 18 && age < 28)
		printf("青年\n");
	else if (age >= 28 && age < 50)
		printf("壮年\n");
	else
		printf("老年");
	return 0;
}

注:在循环语句中,如果表达式的结果为真,则语句执行。
在C语言中如何表示真假? 0表示假,非0表示真。

如果条件成立,要执行多条语句,应该使用代码块。

#include <stdio.h>
int main(){
    if(表达式1){
          语句列表1;  
    }
    else{
        语句列表2;
    }
    return 0;
}

这里的一对 { } 就是一个代码块。

悬空else

#include<stdio.h>
#include <string.h>

int main() {
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");
	return 0;
}

注:else和离自己最近的if进行匹配。

练习:
1、判断一个数是否为奇数

#include<stdio.h>
#include <string.h>

int main() {
	//1、判断一个数是否为奇数
	int  num = 0;
	printf("请输入一个数:");
	scanf("%d",&num);
	if (num % 2 == 0)
		printf("输入的数是偶数");
	else
		printf("输入的数是奇数");

	return 0;
}

2、输出1~100之间的奇数

#include<stdio.h>
#include <string.h>

int main() {
	//2、输出1~100之间的奇数
	int i;
	for (i = 1; i <= 100; i++) { 
		if (i % 2 == 1) {
			printf("%d\n",i);
		}
	}
	return 0;
}

switch语句

switch语句也是一种分支语句。常常用于多分支的情况。

switch(整形表达式)
{
    语句项;
}

而语句项是什么呢?

//是一些case语句:
//如下
case 整形常量表达式:
    语句;

在switch语句中的break

在switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支。

例:

#include<stdio.h>
#include <string.h>

int main() {
	int day = 0;
	printf("请输入1-7之间的数字:");
	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("输入有误\n");
           break;
	}
	return 0;
}

在switch语句中 case 后也可以是字符常量

例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <string.h>

int main() {
	char letter = 0;
	printf("请输入a-c之间的字母:");
	scanf("%c",&letter);
	switch (letter)
	{
	case 'a':
		printf("a\n");
		break;
	case 'b':
		printf("b\n");
		break;
	case 'c':
		printf("c\n");
		break;
   default:
           printf("输入有误\n");
           break;
	}
	return 0;
}

break语句的实际效果是把语句列表划分为不同的部分。

default子句

当switch表达式的值并不匹配所有case标签的值时,这个defailt子句后面的语句就会执行。
所以每个switch语句中只能出现一条default子句。但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default子句。

循环语句

  • while
  • for
  • do while

while 循环

//while语法结构
while(表达式){
    循环语句;
};

在这里插入图片描述
例:在屏幕打印1-10的数字

#include<stdio.h>

int main() {
	int i = 1;
	while (i <= 10) {
         printf("%d\n", i);
         i++;
	}
	return 0;
}

while语句中的break和continue

break介绍:

//break代码实例
#include<stdio.h>

int main() {
	int i = 1;
	while (i <= 10) {
		if (i == 5) {
			break;;
		}
		printf("%d\n", i);
		i++;
	}
	return 0;
}

在这里插入图片描述

总结:
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有循环,直接终止循环。
所以:while中的break是用来永久终止循环的。

continue介绍:

//continue代码实例
#include<stdio.h>

int main() {
	int i = 0;
	while (i <= 10) {
		i++;
		if (i == 5) {
			continue;
		}
		printf("%d\n", i);
		
	}
	return 0;
}

在这里插入图片描述

总结:
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

getchar()的一个使用例子

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main() {
	int ch = 0;
	//EOF  -  end of file  -> -1
	while ((ch = getchar()) != 'A') {
		putchar(ch);
	}
	return 0;
}

重要

#include<stdio.h>

int main() {
	int ch = 0;
	int ret = 0;
	char password[20] = { 0 };
	printf("请输入密码");
	scanf("%s",password);
	
	printf("请确认(Y/N)");
	ret = getchar();
	if (ret == 'Y') {
		printf("确认成功");
	}
	else {
		printf("确认失败");
	}
	return 0;
}

在这里插入图片描述

这里为什么会直接报确认失败呢?
答:在scanf输入密码后,缓冲区还存在着 ‘\n’,getchar在读取缓冲区时,直接将’\n’读出,所以直接输出了确认失败。

改进之后:

#include<stdio.h>

int main() {
	int ch = 0;
	int ret = 0;
	char password[20] = { 0 };
	printf("请输入密码");
	scanf("%s",password);
	while ((ch = getchar()) != '\n') {
		;
	}
	printf("请确认(Y/N)");
	ret = getchar();
	if (ret == 'Y') {
		printf("确认成功");
	}
	else {
		printf("确认失败");
	}
	return 0;
}

for循环

语法:

for(表达式1;表达式2;表达式3)
    循环语句;

表达式1为初始化部分,用于初始化循环变量。表达式2为条件判断部分,用于判断循环何时结束。表达式3位调整部分,用于循环条件的调整

例:使用for循环打印1-10的数字

#include<stdio.h>

int main() {
	printf("打印1-10的数字");
	for (int i = 0; i <= 10; i++) {
		printf("%d\n",i);
	}
	return 0;
}

for循环流程图
在这里插入图片描述

for语句的循环控制变量

一些建议:
1、不可在for循环体内修改循环变量,防止for循环失去控制。
2、建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

一道笔试题:

//请问循环要循环多少次?
#include<stdio.h>
int main(){
    int i = 0;
    int k = 0;
    for(i = 0,k = 0;k=0;i++,k++)
        k++;
    return 0;
}

答:循环0次, k=0赋值,条件为假,直接跳过。

do while循环

do语句的语法:

do
    循环语句;
while(表达式);

使用do while循环打印1-10的数字

#include<stdio.h>

int main() {
	int i = 1;
	do {
		printf("%d\n",i);
		i++;
	} while (i<=10);
	return 0;
}

do语句执行流程
在这里插入图片描述

do while语句的特点: 循环至少执行一次。

习题:

折半查找算法(二分查找算法)

#include<stdio.h>

int main() {

	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int k = 7;
	int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	int left = 0;//左下标
	int right = sz - 1;//右下标
	

	while (right>=left) {

		int mid = (left + right) / 2; //中间下标

		if (arr[mid] > k) {
			right = mid - 1;
		}
		else if (arr[mid] < k) {
			left = mid + 1;
		}
		else {
			printf("找到了,下标为:%d\n",mid);
			printf("值为:%d",arr[mid]);
			break;
		}
	}
	if (right < left) {
		printf("找不到");
	}
	return 0;
}

在这里插入图片描述

编写代码,演示多个字符从两端移动,向中间汇聚。

#include<stdio.h>
#include<string.h>
#include<Windows.h>
#include<stdlib.h>

int main() {
	char arr1[] = "hello world!";
	char arr2[] = "############";

	int left = 0;
	// char arr[] = "abc";
	//[a b c \n]
	// 0 1 2  3
	//int right = sizeof(arr1) / sizeof(arr1[0]) - 2 ;
	int right = strlen(arr1) - 1;

	while (left<=right) {
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		Sleep(1000);	//延时1秒
		system("cls");	//清屏
		left++;
		right--;

		printf("%s\n",arr2); 
	}

	return 0;
}

模拟登陆

编写代码实现,模拟用户登录情景,并且只能登录三次。 (只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<Windows.h>
#include<stdlib.h>

int main() {
	int i = 0;
	char password[20] = {0};
	for (i = 0; i < 3;i++) {
		printf("请输入密码:");
		scanf("%s",password);
		// == 不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp
		if (strcmp(password,"123456") == 0) {
			printf("登录成功\n");
			break;
		}
		else {
			printf("密码错误\n");
		}
	}
	if (i == 3) {
		printf("三次密码均错误,退出程序\n");
	}
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 13:40:22  更:2021-08-09 13:40:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 2:06:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码