栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

再识C语言(一)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

再识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
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年n");
	return 0;
}

表达式为真:

表达式为假:

 

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

表达式为真:

表达式为假:

  • 多分支:
#include
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
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 
int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)
        if (b == 2)
            printf("hehen");
    else
         printf("hahan");
    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 
int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)
    {
        if (b == 2)
            printf("hehen");
        else
            printf("hahan");
    }
    return 0;
}

 4、 if 语句书写形式对比

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

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

    }

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

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

运行结果:

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

看下面的代码:

#include
int main()
{
	int a=0;
	scanf("%d", &a);
	//代码1
	if (a) {
		printf("hehen");
	}
		printf("hahan");
	//代码2
	if (a)
	{
		printf("hehen");
	}
	else
	{
		printf("hahan");
	}
	return 0;
}

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

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


 5、易错点

  • 易错点一

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

#include
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
int main()
{
	//代码1
	int num = 10;
	if (num == 5)
	{
		printf("hehen");
	}
	//代码2
	int num = 10;
	if (5 == num)
	{
		printf("hehen");
	}
	return 0;
}

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

#include
int main()
{
	//代码1
	int num = 10;
	if (num = 5)
	{
		printf("hehen");
	}
	return 0;
}

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

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

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

 

但是如果写成下面这种:

#include
int main()
{
	//代码2
	int num = 10;
	if (5 = num)
	{
		printf("hehen");
	}
	return 0;
}

代码执行结果:

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

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


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

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

#include
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 
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 
int main()
{
	int day;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekdayn");
		break;
	case 6:
	case 7:
		printf("weekendn");
		break;
	}
	return 0;
}

运行结果:

 

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

运行结果:

 


 写一个简单的计算器

(2)case后面跟字符:

#include
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=%dn", num1, num2, sum);
		break;
	case '-':sum = num1 - num2;
		printf("%d-%d=%dn", num1, num2, sum);
		break;
	case '*':sum = num1 * num2;
		printf("%d*%d=%dn", num1, num2, sum);
		break;
	case '/':sum = num1 / num2;
		printf("%d/%d=%dn", num1, num2, sum);
		break;
	default:printf("输入错误,请按要求重新输入n");
		break;
	}
	return 0;
}

运行结果:


 总结

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号