前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c语言的三种语句

c语言的三种语句

作者头像
编程交流
发布2024-05-11 19:14:27
880
发布2024-05-11 19:14:27
举报
文章被收录于专栏:编程编程

🌈个人主页:Rookie Maker 🔥 系列专栏:c语言 🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆


😀欢迎来到我的代码世界~ 😁 喜欢的小伙伴记得一键三连哦 ૮(˶ᵔ ᵕ ᵔ˶)ა

一、分支语句

1.if语句

(1)Tip:短路问题

(2)Tip:if和 eise if的嵌套

(3)Tip:悬空else问题

2.switch语句

二、循环语句

1.while语句

2.for语句

3.do-while循环

三、goto语句

四.猜数字游戏



前言:

梳理一下三大结构且做一个实践

C语⾔是结构化的程且序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合

一、分支语句

1.if语句

举个例子:输入一个整数,判断是否为奇数

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int num=0;
 scanf("%d",&num);
if(num%2=1)
{
printf("%d是奇数/n",&num);
}
return 0;
}

用一张图清楚的表达出这里面的逻辑,在c语言中0表示为假,非0表示为真,把这个逻辑用到奇数判断就行,判断奇数,首先为数学问题,模2为1则为奇数,然后根据编程思维写出来,利用if语句和scanf函数这个题很简单

else语句

代码语言:javascript
复制
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d,&age");
if(age>=18)
{
printf("成年/n";
else
printf("未成年/n");
}
return 0;
}

代码语言:javascript
复制
#include<stdio.h>
int main()
{
int year=0;
scanf("%d",&year);
if(year%4=0&&year%100!=0||year%400=0)
{
printf("这个年是闰年/n");
else
printf("不不不/n");
}
return 0;
}

(1)Tip:短路问题

短路问题

里面要特别注意&&这个操作符,记住左边一旦为真,左边即是0

注意:if 语句只能控制⼀条语句,就是 printf("成年了\n"); ,if语句为真,则打印成年了,

if语句为假,则不打印,对于 printf("可以谈恋爱了\n"); 是独⽴存在的,不管if语句的条件的真

假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤ {} 将代码括起来, else 后也可以跟上⼤括号。

(2)Tip:if和 eise if的嵌套

if else语句中else中能穿插 if吗?答案是 能的。这就是我接下来介绍的if嵌套,构成多重判断。

要求输入一个整数,判断输入的整数是0,还是正数或者负数。

代码语言:javascript
复制
int main()
{
	int num = 0;
	//输入
	scanf("%d", &num);
	//判断
	if (num == 0)
		printf("输入的值是0\n");
	else if (num > 0)
{
			printf("输入的值是正数\n");
}
		else{

			printf("输入的值是负数\n");	
}	
return 0;
}

输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:负数

代码语言:javascript
复制
#include<stdio.h>
int main()
{
int num=0;
scanf("%d",&num);
if(num>0)
{
if(num%2==0)
printf("偶数/n");
else
printf("奇数/n");
}
else
{
Printf("负数/n");
}
return 0;
}
(3)Tip:悬空else问题

有的人又要问了:if后不加{}else后不加{}能行吗?if后不加{}else后不加{}能行吗?else总跟最接近的if匹配这样很可能会构成逻辑错误,会把相近的语句进行对齐:悬空else问题

代码语言:javascript
复制
#include<stdio.h>
int main()
{
 int a = 0;
 int b = 0;
if(a==1)
if(b==2)
printf("hehe/n");
else
printf("haha/n")
return 0;
)
代码语言:javascript
复制
#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;
}

如果希望else确实和第⼀个if匹配,可以这样修改。

2.switch语句

1.除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。

2.switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。 它把多重

的 else if 改成更易⽤、可读性更好的形式

示例:

代码语言:javascript
复制
switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
}

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,就执行defult的形式。

注:

• switch 后的 expression 必须是整型表达式

• case 后的值,必须是整形常量表达式

练习:输⼊任意⼀个整数值,计算除3之后的余数

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 switch(n%3)
 {
 case 0:
 printf("整除,余数为0\n"); 
 break;
 case 1:
 printf("余数是1\n"); 
 break;
 case 2:
 printf("余数是2\n"); 
 break;
 }
 return 0;
}

前⾯的代码中,如果我们去掉case语句中的break,会出现什么情况呢?

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 switch(n%3)
 {
 case 0:
 printf("整除,余数为0\n"); 

 case 1:
 printf("余数是1\n"); 
 
 case 2:
 printf("余数是2\n"); 
 
 }
 return 0;
}

我们发现,7除以3本来余数是1,但是我们发现程序运⾏的结果多了⼀⾏“余数是2”的打印

原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语

句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case

语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case2中的语句

在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹

配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加上default

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏ default ⼦句

代码语言:javascript
复制
	default :
			System.out.println("default");
			break;

case和default没有先后的关系

二、循环语句

1.while语句

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

示例: 在屏幕上打印1~10的值

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

while里面的break和continue

break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环。

示例:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 break;//当i等于5后,就执⾏break,循环就终⽌了
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

​为什么会出现这种结构?

打印了1,2,3,4后,当i等于5的时候,循环到 break 的地⽅终⽌,不再打印,不再循环。

所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。

那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。

而for循环是先判断再进表达式,最后在调整。·

continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏

下⼀次循环的判断

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 continue;
 //当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地方
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接

到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环

2.for语句

for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:

代码语言:javascript
复制
1. for(表达式1; 表达式2; 表达式3)
2. 语句;

表达式1 ⽤于循环变量的初始化

表达式2 ⽤于循环结束条件的判断

表达式3 ⽤于循环变量的调整

示例图:

练习:在屏幕上打印1~10的值

代码语言:javascript
复制
1 #include <stdio.h>
2
3 int main()
4 {
5 int i = 0;
6 for(i=1; i<=10; i++)
7 {
8 printf("%d ", i);
9 }
10 
11 return 0;
}

运行结果 1.2.3.4.5.6.7.8.9.10

for和while的区别

​示例

计算1~100之间3的倍数的数字之和

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 0;
 int sum = 0;
 for(i=1; i<=100; i++)
 {
 if(i % 3 == 0)
 sum += i;
 }
 printf("%d\n", sum);
 return 0;
}

如果能直接产⽣3的倍数的数字就省去了多余的循环和判断

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 0;
 int sum = 0;
 for(i=3; i<=100; i+=3)
 {
 sum += i;
 }
 printf("%d\n", sum);
 return 0;
}

break和continue

其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需

要循环多少次,只要执⾏到了 break ,循环就彻底终⽌

示例:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 break;
 printf("%d ", i);
 }
 return 0;
}

运行结果为1.2.3.4.

break 的作⽤是永久的终⽌循环,未来我们在某个条件发⽣的时候,不想再继续循环的时候,就可以使⽤ break 来完成。

continue

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
 printf("%d ", i);
 }
 return 0;
}

打印的结果为1.2.3.4.5.6.7.8.9.10

  • while遇见continue是到判断了
  • for遇见continue是到调整部分了

3.do-while循环

在循环语句中 do while 语句的使⽤最少,它的语法如下:

do

语句;

while ( 表达式 ) ;

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳

出循环; ⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表 达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。、

示例图

do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅

示例 在屏幕上打印1~10的值

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int i = 1;
 do
 {
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 
 return 0;
}

⼀般 do while 使⽤在循环体⾄少被执⾏⼀次的场景下,所以较少⼀些。

但有的时候得用do while循环最好

输⼊⼀个正整数,计算这个整数是⼏位数?

这⾥并⾮必须使⽤ do while 语句,但是这个代码就⽐较适合使⽤ do while 循环,因为n即使是

0,也是1位数,要统计位数的

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 int cnt = 0;
 do
 {
 cnt++;
n=n/10;
} while (n);
printf("%d\n", cnt);
return 0;
}

do.while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样 ,这里就不赘述了

三、goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数

内跳转到设置好的标号处。

代码语言:javascript
复制
#include <stdio.h>
int main()
{
 printf("hehe\n");
 goto next:
 printf("haha\n");
 
next:
 printf("跳过了haha的打印\n");
return 0;
}

goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出 使⽤ goto 就⾮常的⽅便了

四.猜数字游戏

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()//设置一个函数,具有返回值
{
	printf("*************************/n");
	printf("********1.play 0.exit/n");
	printf("*******************************/n");
}
void game()
{
	int r = rand() % 100 + 1;//生成一个随机数,为了提高代码运行的效率,所以缩短范围,采用模100+1出来的为0-100之间的数
	int guess = 0;
 
	
	while (1)//采用while语句进入循环
	{
		printf("猜一下数字:");
		scanf("%d" ,& guess);
		//使用if语句进行判断
		if (guess > r)
		{
			printf("猜大了/n");
		}
		else  if (guess < r)
		{
			printf("猜小了/n");
		}
		else
		{
			printf("恭喜你,你成功了");
			break;
		}
	}
}
//开始游戏
	int main()
	{
		int input = 0;//开始游戏,需要值的启动,设置初始化变量)
		//因为随机数生成与种子有关,所以采用time返回值为时间戳,种子会一直变化,unsigned进行强制转换为整型
		srand((unsigned int)time(NULL));
 
		//一开始就要进行循环,选择do while语句
		
		{
			menu();//引入一个函数,就是菜单
			printf("请选择数字");
			scanf("%d", &input);//输出一个值,在vs中要么用scanf-s,要不然在第一行定义
			switch (input)//使用case语句
			{
			case 1:
 
				game();
				break;//跳出循环
			case 0:
				printf("游戏结束,请去打王者荣耀");
				break;
			default://其他情况
				printf("输入错误,重新输入/n");
					break;
			}
		} while (input);
		return 0;
	}

🎁🎁🎁今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,您的支持就是我前进的动力!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、分支语句
    • 1.if语句
      • (1)Tip:短路问题
        • (2)Tip:if和 eise if的嵌套
        • (3)Tip:悬空else问题
      • 2.switch语句
      • 二、循环语句
        • 1.while语句
          • 2.for语句
            • 3.do-while循环
            • 三、goto语句
            • 四.猜数字游戏
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档