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……else 语句

?二、switch语句

?总结


C语言中语句分类

  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句

?C语言中的语句都是以 分号(;) 结束的。

  • 表达式语句:

??? int a = 10;
?? ?int b = 20;
?? ?int c = 0;
??? int c = a + b; //表达式语句

  • 空语句:

分号前面什么都不写就是一条空语句。

  • 函数调用语句:

使用C语言提供的函数或调用自定义函数,都是函数调用语句。

  • ?控制语句

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句

可分成以下三类:

  1. 条件判断语句也叫分支语句:if语句、switch语句;
  2. 循环执行语句:do while语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句。

分支语句(选择结构)

前面已经了解了C语言中的分支语句:

  • if……else 语句
  • switch????? 语句

再详细的阐述一下分支语句

一、if……else 语句

1、语法结构

  • 单分支

if(表达式)

??????? 语句;

表达式为真,则执行语句,表达式为假,则不执行语句(什么也不输出)。

  • 双分支

if(表达式)

??????? 语句1;

else

??????? 语句2;

表达式为真,则执行语句1,表达式为假,则执行语句2。

只执行其中的一条语句。

  • 多分支

if(表达式1)

??????? 语句1;

else if(表达式2)

??????? 语句2;

else

??????? 语句3;

  • 表达式1为真,则执行语句1。
  • 表达式1为假,表达式2为真,则执行语句2。
  • 表达式1和表达式2都为假,则执行语句3。

三条语句只会执行其中的一条语句。

C语言中:0表示假,非0表示真


?2、代码演示:

  • 单分支:
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年\n");
	return 0;
}

表达式为真:

表达式为假:

?

  • 双分支:
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年\n");
	else
		printf("未成年\n");
	return 0;
}

表达式为真:

表达式为假:

  • 多分支:
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("少年\n");
	else if (age >= 18 && age < 30)
		printf("青年\n");
	else if (age >= 30 && age < 50)
		printf("壮年\n");
	else if (age >= 50 && age < 90)
		printf("老年\n");
	else 
		printf("老寿星\n");
	return 0;
}

?运行结果:

?多分支简化后的代码:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("少年\n");
	else if (age < 30)
		printf("青年\n");
	else if (age < 50)
		printf("壮年\n");
	else if (age < 90)
		printf("老年\n");
	else 
		printf("老寿星\n");
	return 0;
}

第一种写法可读性更好一些。


?3.、悬空else

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)
        if (b == 2)
            printf("hehe\n");
    else
         printf("haha\n");
    return 0;
}

运行结果:

从运行结果可以看到,程序执行后什么都没有打印。

代码分析:

因为 int a = 0,所以表达式1(a==1)为假,程序不会执行 if( b == 2) 语句。但是else 是与 if( b == 2)匹配的。只有表达式1(a==1)为真时才会执行? if( b == 2) 语句,所以程序执行后什么也不输出。

else的匹配:else是和它离的最近的 if 匹配的。

补充:C语言中:

  • = 是赋值运算符
  • ==是等号运算符,判断值是否相等。

加上{}可以使这段代码更加清晰:

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)
    {
        if (b == 2)
            printf("hehe\n");
        else
            printf("haha\n");
    }
    return 0;
}

?4、 if 语句书写形式对比

if(表达式)?? 表达式可以是常量也可以是变量

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

?? ?}

如果条件成立(表达式为真),要执行多条语句,应该使用代码块(使用{ }括起来)

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n");
		printf("可以谈恋爱\n");
	}
	else
	{
		printf("未成年\n");
	}
	return 0;
}

运行结果:

这段代码中 else 后面也可以不加大括号,建议不管 if 后面有几条语句都加上大括号,加上不会出错,不加有时候写代码容易出错。(看个人习惯)。

看下面的代码:

#include<stdio.h>
int main()
{
	int a=0;
	scanf("%d", &a);
	//代码1
	if (a) {
		printf("hehe\n");
	}
		printf("haha\n");
	//代码2
	if (a)
	{
		printf("hehe\n");
	}
	else
	{
		printf("haha\n");
	}
	return 0;
}

代码1与代码2执行结果相同,a为0打印haha,a为非0打印hehe。

但是我们可以发现,代码2的可读性比代码1的更好一些。


?5、易错点

  • 易错点一

?? if(表达式)????????表达式为:判断是否满足条件,容易写成数学中的形式。

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	//第一种:
	if (age >= 18 && age < 40)
	{
		printf("1:呵呵\n");
	}
	//第二种:
	if (18 <= age < 40)
	{
		printf("2:哈哈\n");
	}
	return 0;
}

表达式为真:

看到这可能有人就会认为这两段代码都是正确。但真的都是正确的吗?

再看一下表达式为假:

第二种写法语法上没有错误,但是逻辑上不满足要求。

18 <= age < 40 :先计算 18<=15(此时输入的age为15),结果为0(假);再计算0<40,结果为1(真),所以才会打印 2:哈哈。


  • ?易错点二

?? if(表达式)????????表达式为:判断常量与变量值是否相等,容易将两个等号,写成一个等号。

#include<stdio.h>
int main()
{
	//代码1
	int num = 10;
	if (num == 5)
	{
		printf("hehe\n");
	}
	//代码2
	int num = 10;
	if (5 == num)
	{
		printf("hehe\n");
	}
	return 0;
}

有时候写条件判断时容易写成下面这种:

#include<stdio.h>
int main()
{
	//代码1
	int num = 10;
	if (num = 5)
	{
		printf("hehe\n");
	}
	return 0;
}

写成这样语法是正确的,但是所表达的含义就不同了。

代码分析:if (num = 5) 将5赋给num,所以表达式永远为真,打印 hehe。

这种写法不容易找到错在哪。

?

但是如果写成下面这种:

#include<stdio.h>
int main()
{
	//代码2
	int num = 10;
	if (5 = num)
	{
		printf("hehe\n");
	}
	return 0;
}

代码执行结果:

?代码2这种如果漏写了一个 = 编译器就会报错,很容易知道错在哪里。

写if(表达式),如果表达式是判断常量与变量值是否相等,建议写成 if(常量==变量)这种形式。??? 例 :if(5==num)


?6、 了解了 if....else 语句,做一道题感受一下分支语句

判断一个数是奇数还是偶数。


#include<stdio.h>
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1)
	{
		printf("%d是奇数\n", num);
	}
	else
	{
		printf("%d是偶数\n", num);
	}
	return 0;
}

代码分析:

% 取模运算符。是计算两个整数相除后的余数。

一个整数除2,余数为0则是偶数,余数为1则是奇数。

运行结果:

?


?二、switch语句

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

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

写成 if...else if ...else if 的形式太复杂,那就得有不一样的语法形式。

  • switch语法结构:

switch(整型表达式)

{

??????? 语句项;

}

  • 语句项:

case 整型常量表达式:

??????? 语句;

注:case 与整型常量表达式之间要有空格。

?????? case 后面必须跟整型常量表达式,可以是整数,也可以是字符。

  • switch语句中的 break

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

switch中执行case语句:

  • switch(表达式),表达式是几,switch就是几开始执行。
  • 如果case语句后面没有break,则程序会一直执行,直到遇到break 或执行完case语句才会跳出switch语句。

(1)case后面跟整数:

#include <stdio.h>
int main()
{
	int day;
	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;
	}
	return 0;
}

运行结果:

?

有时候我们的需求变了:

  • 输入1-5,输出的是“weekday”
  • 输入6-7,输出“weekend”
#include <stdio.h>
int main()
{
	int day;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	}
	return 0;
}

运行结果:

?

  • switch语句中的 default 子句
  1. 如果表达的值与所有的case后面的整型常量表达式的值都不匹配,结果就是所有的语句都被跳过。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。
  2. 如果不想忽略不匹配所有标签的表达式的值,可以在switch语句列表中增加一条default子句, 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置。
  3. default子句虽然可以写在switch语句中任何位置,但一般是将它写在所有case语句的最后。
#include <stdio.h>
int main()
{
	int day;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
		break;
	default :
		printf("输入错误,请输入1~7的数字\n");
	}
	return 0;
}

运行结果:

?


?写一个简单的计算器

(2)case后面跟字符:

#include<stdio.h>
int main()
{
	int num1=0, num2=0,sum=0;
	char ch;
	printf("请输入要计算的两个整数与运算符(+、-、*、/),输入时不要加空格\n");
	scanf("%d%c%d", &num1, &ch, &num2);
	switch (ch)
	{
	case '+':sum = num1 + num2;
		printf("%d+%d=%d\n", num1, num2, sum);
		break;
	case '-':sum = num1 - num2;
		printf("%d-%d=%d\n", num1, num2, sum);
		break;
	case '*':sum = num1 * num2;
		printf("%d*%d=%d\n", num1, num2, sum);
		break;
	case '/':sum = num1 / num2;
		printf("%d/%d=%d\n", num1, num2, sum);
		break;
	default:printf("输入错误,请按要求重新输入\n");
		break;
	}
	return 0;
}

运行结果:


?总结

再识C语言(一)主要详细的阐述了C语言中的选择结构(分支语句)。

再识C语言这个系列会继续学习C语言,将会更进一步的阐述C语言的知识。

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

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