C语言基础 —— 有关与语句的学习

前言

进入 STM32F103 的学习,让我们需要更多的 C语言基础,我们会在这一栏里面继续我们的 C 语言学习

当然,我们这节将会以之前文章作为基础进行学习

——————————————————————

一· 什么是语句

c语句可以分成5个类型:

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

我们的分支语句和和循环语句就是  —— 控制语句

————————

我们来看一看 控制语句的分类 

 ——————————————————————————————————————

二. 分支语句

————————————————

1.  if 语句

我们的 if 语句 就可以是个 分支语句,从我们输入的值开始,会从每一条 if 开始一句一句往下判断,如果满足 if 里面的条件,就会执行我们 if 语句后面所带着的命令

这种形式在 STM32 里面也是非常常见的,我们来看下面的这一个例子

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

但是需要注意的是 , if 语句里面的 else 所对应的目标是谁 ,就会变成一个问题,在我们上面的 else if里面 ,我们每执行完一个语句 ,我们都会给他  {  }  起来,这样也方便我们判断是 属于哪个 if 的 else,但是  如果我们没有 { } 该怎么办呢 ?

————————————

这就有了我们下面的一个问题  —— 悬空 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; }

我们看看这个程序,猜一猜我们最后的结果会是什么?

——————

什么都不会打印出来 —  悬空的 else 他会自己默认跟随着离他最近的 if ,在这个程序里面,我们的第一个 if 都不会成立,他自然就不会到第二个 if 判断里了,就更别说后面的 else 了

————————————————————————————————

2. Swtch 语句

switch(...)...是整型表达式,而case(...)...是整型常量表达式

——————

我们来看下面的例子

#include <stdio.h>
int main()
{
  scanf("%d",&day);
    int day = 0;
    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;
}

我们定义了一个整型 day,接下来我们要对 day 进行一个输入(赋值)

而我们对 day 所赋的值,就会进入一个 switch 语句的判断,我们对不同的情况进行一个个分类,剩下的我们就可以使用 default 来归类

default :
 .......

需要注意的是, switch 语句里面的小情况 case 需要在执行语句的最后加上 break ;如果不加上的话,我们执行完这些执行语句他是不会停止的,他会继续找到符合条件的 case 继续执行,直到他找不到为止,加上的话,当我们执行完成后他就会自己退出 switch 语句了

———————————————————————————————————————

三. 循环语句

————————————————

1. While 循环

我们先来大体的看看 while 循环一个流程图

 我们的语句 : 

while (执行条件)

{

 // 执行内容

}

接下来给大家举个例子

//在屏幕上打印1~10
#include<stdio.h>
int main()
{
int i =1;
while(i<=10)
{
print("%d",i);
i++;
}
return 0 ;
}

我们给 i 一个初始值 1 ,这样 i ,就会一直在 while 循环里面执行,直到 i 的值不满足条件时,他才会跳出循环(如果一直跳不出去,那就是死循环了)

我们的 STM32里的主函数,就包括了 while (1) 这样的死循环

——————————————

1.1 break 语句

 break 语句相信大家已经不陌生了,在switch语句里,我们就说过 break;即跳出循环

我们来看下面这个例子

#include<stdio.h>
int main()
{
int i =1;
while(i<=10)
{
if (i == 5)
break;
 
print("%d",i);
i++;
}
return 0 ;
}

我们在 while 循环里面补上 if 语句判断,并在里面加上了break语句;当 i = 5时,满足里面的 if 语句,那么就会执行 break 语句,跳出这个  while 循环

这样的话,当我们的程序进行到5时,就会被break打断,中止整个循环,所以打印出的为1 2 3 4

——————————

1.2 continue

continue 和 break 最大的差别就是 ,break 是直接停止整个循环,但是 continue 是只会停止本次循环,我们接着看下面的例子

#include<stdio.h>
int main()
{
int i =1;
while(i<=10)
{
if (i == 5)
continue;
 
print("%d",i);
i++;
}
return 0 ;
}

在这个语句里,当 i= 5时,将会停止这次循环,但是不会全部停止,所以对这个程序来说,

我们会打出1 2 3 4 _ (闪光标),因为到了 5,他就停止下来了,不会执行后面的 printf 和 i++,这样回头回去又回到 while 里面,还是5,他变成了一个死循环

——————————————————————

2. for 循环语句

我们来看看 for 循环整体的语法

语法:for(表达式1;表达式2;表达式3){

                循环语句;}

——————————

表达式1:初始化部分,用于初始化循环变量。

表达式2:条件判断部分,用于判断循环时候中止。

表达式3:调整部分,用于循环调整

——————————

for 循环和 while 循环非常的像,但是 for 循环他把对值得初始化,判断条件,对 值 所执行的命令都放在了 for ()的里面,而下面的循环则是在每次循环里需要做的事,我们来看下面的例子

#include<stdio.h>
int main(){
int i = 0;
for(i = 1; i <= 10;  i++)
{
printf("%d",i);
}
return0;
}

这就是我们的从 1 打印到 10;

——————

来看看他的循环过程

因为 对值所放置的位置不一样,所以在这里,我们的 continue 语句会与 while 出现一些差别,我们看下面的程序

#include<stdio.h>
{
int i = 0;
for(i =1; i<=10;i++)
{
if(5==i)
{
comtinue;
}
printf("%d",i);
}
return 0 ;
}

这样子打印出来会是1 2 3 4 6 7 8 9 10,不再是死循环,因为我们的 i ++,我们把他放到continue的前面去

 但是如果我们想要使用 for 循环,最好注意下面的几个点

——————————

注意:最好不要在for循环里面改变循环变量,否则会使循环失去控制

          我们最好采取前闭后开的结果

1.for循环的初始,判断,循环都可以省略

2.判断部分如果省略,意味着判断恒为真,就构成死循环

_________________

2.1 for 循环的嵌套

这是一个在 for循环里非常有意思的东西,我们来看看下面的程序

#include<stdio.h>
int main(){
int i = 0;
int j = 0;

for(i = 0; i < 3;i++)
{
for(j = 0; j < 3;j++)
{
printf("hehe/n");
}
}
return 0 ;
}

这种嵌套的形式是一层一层的,我们会从最里面的 for开始执行,等到最里面的for执行完了,然后回到他的上一层的 for,然后继续进入到这个for里面再循环,执行完再回去,这样类推

所以,每一次外层的循环进来一次,里面的循环都要执行完——在这里,外面进来一次,里面要执行3次),也就是 j 加了 9 遍

————————————————

3. do ... while 语句

其实和 while没有本质的差别,只是先强制的执行了一遍程序里面的内容

我们来看看他的流程图

 ————————————————

4. goto 语句

对于goto语句的讲解,我们会用一个 关机的小游戏来给大家说明

来看看我们的程序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
int main(){
	char input[20] = {0};
	system("shutdown -s -t 60");
	
again:
	printf("我不做作业啦!DIO! 如果你说可以,就不给你关机了\n");
	scanf("%s",input);
	if(strcmp(input,"可以")==0)
	{
		system("shutdown -a");
	}
	else{
		goto again;
	}
	return 0;
}

——————

我们直接从语句内看,因为我们要比较的是字符组,所以我们需要用到   strcmp

strcmp 这个函数,就有来比较字符串的功能,所以我们定义了 20 个字符的变量  input,

strcmp (...   ,   ... )前面要填入的就是我们所输入的字符串,后面要填入的就是我们要比较的字符串

————————

对于 system 的 说明,我们给出一个表格

 ——————————

goto语句的说明:

这个goto语句其实就是一个循环,让我们的回到again:,并继续向下执行。

也就是执行到 goto的时候,他会回到我们前面指定的 again 那里,继续执行下去

——————————

总结

这下子我们就帮大家过完了这些语句,最后呢,我来给出一个猜数字游戏的程序,作为这一章的总结

#include<stdio.h>
#include<string.h>
void menu()
{
	printf("1.开始游戏\n");
	printf("2.退出游戏\n");
}
void game()
{
	int guess = 0;
	int r = rand()%100+1;
	
	while(1)
	{
		printf("猜出你的数字:");
		scanf("%d",&guess);
		if(guess < r)
		{
			printf("猜小了\n");
			}
			else if(guess > r){
			printf("猜大了\n");
		}else{
			printf("对了哦\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择:");
		scanf("%d",&input);
		switch(input)
		{
			case 1:
				game();
				break;
				case 2:
					printf("go out\n");
					break;
					default:
						while(1)
						printf("选择错误");
		 } 
	}while (input);
	return 0 ;
	
}

————————

1. menu() :

这就是打印一个菜单,但是我们用void函数,把他放在外面写,等我我们需要的时候就把放进去

2.game  ()   :

同样,我们用void函数把他放在外面

1. 我们先定义出我们要猜的数字 guess,然后设置出电脑随机生成的数

   这个数我们在这里设置的为 时间戳(rand())因为我们要猜1~100 的数字,所以我们取他除以100后的余数(0~99) 加1

2. 接下来用 if语句 进行我们的对数字的判断,两数对比,来说明猜大 猜小 和 猜对(当我们猜对之后我们就用break来停止我们的语句)

3.但是我们的游戏不能只是进行一次,所以我们用到一个 while(1),也就是死循环函数,让我们在输错之后能够继续回去,直到我们输对了,遇到break跳出这个循环

3.对菜单的内容进行使用 :

    我们不单只是打出菜单,我们需要使用他,所以我们最后是用了一个 do...while语句,先强制的把我们的菜单打印一遍,让我们进行选择,当我们选择1时,开始游戏,选择2就会出现 go out然后结束这个 do 继续回到 我们这个程序开始循环,让我们继续输入选择下去(当然当我们不玩了直接右上角走人就好,就是走个样子),如果不输入 1 2 就会选择错误,进入死循环
——————————————

谢谢观看

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WanGxxxx.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值