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语言分支循环选择 -> 正文阅读

[C++知识库]c语言分支循环选择

前言

c语言是一门结构化的程序设计语言 有以下三种结构

顺序结构
选择结构
循环结构
我们生活中任何一件事都可以拆分成顺序选择循环 或者是它们的组合

if语句

if语句的语法结构是什么样子的?

单分支语句

	int a = 1;
	if (a==1)
	{
		printf("hehe\n");
	}
	int a = 1;
	if (a==1)
	{
		printf("hehe\n");
		printf("hello world\n");
	}

1 这里需要注意的一点是if的条件后面要用括号括起来才可以
2 如果后面出现多条语句话需要使用{}代码块
当然没有的时候也推荐这样子做 养成一个良好的代码编程习惯

多分支语句

	if (a==1)
	{
		printf("1");
	}
	else if ( a==2)
	{
		printf("2");
	}
	else
	{
		printf("3");
	}

格式如下

那么如果我要表示一个人的年龄大于等于18岁并且小于等于45岁应该使用什么代码呢?

	if (18<age && age<45)
		{
			printf("true");
		}

易错题

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

这段代码运行下去会打印什么呢?

正确答案是什么都不会打印

原因是因为再if语句中else会和离他最近的一个if语句结合

nt main()
{
	int a = 1;
	int b = 2;
	if (a==1)
	{
		return a;
	}
	return b;
	return 0;
}

这一段代码是如果a=1返回a 如果不等于返回b是嘛?

正确答案是是的 因为return一个值之后函数就不会return其他的值了

这两道题目启示了我们 要尽量少写这些让人引起误会的代码 代码写的格式要尽量规范

练习题

写出一段代码 判断是奇数还是偶数

int main()
{
	int i = 0;
	for ( i = 0; i < 100; i++)
	{
		if (i%2==1)
		{
			printf("%d\n", i);
		}
	}
	return 0;
}


switch语句

写出一个switch语句要求输入一个数字就能输出星期几

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一\n");
	case 2:
		printf("星期二\n");
	case 3:
		printf("星期三\n");
	case 4:
		printf("星期四\n");
	case 5:
		printf("星期五\n");
	case 6:
		printf("星期六\n");
	case 7:
		printf("星期天\n");

	}

}

写出来以上代码 我们可以发现输入了一个1之后打印出来的并不是星期一
而是星期一 星期二 星期三 星期四 星期五 星期六 星期天

那我们应该怎么优化上面的一段代码呢?
正确答案是 加上break

int main()
{
	int day = 0;
	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;

	}

}

那么如果用户输入时输入1~7以外的数字呢?
我们说 如果想要避免这样的错误 我们应该使用default语句

int main()
{
	int day = 0;
	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("bug!!");
	}

}

while语句

写出一个while语句的代码

int main()
{
	while (1)
	{
		printf("hehe\n");
	}
	return 0;
}

我们可以发现1在计算机中恒为真 所以while进入了一个死循环
那么要如何破解这个局面呢?
很简单 只需要在后面加上一个break就可以了

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

请问下面这段代码会打印什么? 进入什么状态?

正确答案是打印四个hehe 并且进入一个死循环!

要理解这段代码为什么会这样子我们首先要理解continue的含义
continue:跳过本次循环后面的代码 直接去判断部分 所以会进入死循环

那如果我就是不想打印5怎么办呢?
代码如下

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

这样子久只能打印五个hehe了 将i++条件前置放在continue的前面

介绍下getchar() putchar()

getchar() 获取一个字符
putchar() 输出一个字符

写出一个打印输出字符的代码

int main()
{
	int ch = 0;
	while ((ch=getchar())!=EOF)
	{
		putchar(ch);
	}
	return 0;
}

为什么要用int ch 而不是 char呢
因为实际上计算机内部储存的是ascll码字符

EOF

EOF是文件结束的表示 它实际上的值是-1
在输入的情况下怎么退出呢
按住ctrl和z(模拟文件结束)

用处

由于我们在输入数据的时候 并不是直接由键盘输入到函数中 而是中间要经历一个输入缓冲区
而sacnf函数在输入缓冲区中读取数据的时候遇到空格、回车和Tab键都会认为输入结束
所以说输入缓冲区内的数据并没有被拿干净 很可能会造成许多意想不到的错误
而这个时候下面这段代码就可以很好的清理输入缓冲区 从而避免这些错误的发生
while ((tmp = getchar()) != ‘\n’)
{
;
}

练习题

写出一段代码 判断一个数是不是数字 如果是打印它 如果不是不打印 继续输入下一个数
代码如下

int main()
{
	int ch = 0;
	while ((ch=getchar())!=EOF)
	{
		if (ch < '0' || ch>'9')
			continue;
		putchar(ch);
	}
	return 0;
}
#include<stdio.h>
int main()
{
    char ch;
      while ((ch = getchar()) != EOF)
    {
       
        if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}

判断上面这段代码能否正确判断大小写?
正确答案是不可以 因为getchar每次读取一个字符之后后面还有个换行符
所以每次输出的结果后面一定跟着一个NO
正确代码如下

#include<stdio.h>
int main()
{
    int ch=0;
    while((ch=getchar())!=EOF)//多组输入
    {
        int tmp =0;
        while ((tmp = getchar()) != '\n')
        {
            ;
        }

        //因为你要多按一个回车才输入下一个
        //所以每行不仅仅是有一个字母或数字,还有一个'\n'
        if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
        {
            printf("YES\n");
        }
        else
        {
            printf("NO");
        }
    }
}

运用到了上面讲解的知识

For循环

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i==5)
			break;

		printf("%d", i);
	}
	return 0;
}

上面这段代码会打印什么?
如果break换成continue呢?

for循环易错题

int main()
{
	int i = 0;
	int j = 0;
	for ( ; i< 10; i++)
	{
		for ( ; j<10 ;j++)
		{
			printf("hehe\n");
		}
	}
	return 0;
}

请问下面这段代码会循环几次hehe呢?

正确答案是十次
因为i j的变量没有重置
走完第一次循环的时候i的变量是1
j的变量是10
所以说以后j不会再进入循环之中

	int i = 0;
	int j = 0;
	for ( i = 0 ,j=0; j=0; i++,j++)
	{
		printf("haha\n");
	}

那么这一段代码会循环多少次呢?
正确答案是0次
因为判断条件是j=0 而0恒为假所以一次都不循环
同理 要是第二个条件改成j=1的话就会变成无线循环

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 00:51:43  更:2022-09-04 00:53:42 
 
开发: 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/19 7:50:13-

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