c语言常用语句(分支,循环)

目录

一.if语句

2.else语句

3.else if语句

二.for循环

1.对于表达式1

2.对于表达式2

3.对于表达式3

4.学会for循环后必学的冒泡排序

三.while循环

四.do while循环

五.Switch语句

1.如果不用break语句呢,或者部分用break语句呢?

A:都不用break语句的情况:(注意i的值为1)

B:部分有break语句的情况:

六.goto语句

七.break语句

1.那如果一个循环里面嵌套着另一个循环呢?

八.continue语句

前言:本文章比较长,可点击目录学习要学的内容

有看不懂的可以咨询作者

.if语句

if(表达式){

(语句)

}

如果表达式成立,则直接执行语句

int main(){
int a=10;
if(a>9){
   a=9;
}
return 0;

可以看到a>9的表达式明显成立,则直接执行语句(a=9)

2.else语句

if(表达式){
(语句)

}

else{

(语句)

}

else语句是if语句的一个分支,通常用来处理if语句的表达式不成立的情况,执行else后面所接的语句

int main(){
int a=10;
if(a>10){
   a=9;
}
else{
   a=11;
}
return 0;
}

可以看到a>10并不成立,则其会直接跳过a=9,直接执行else后面接的语句a=11。

3.else if语句

if(表达式){

(语句)

}

else if(表达式){

(语句)
}

else if语句也是if语句的一个分支,在if后面接的表达式不成立后会转而判断else if后面接的表达式成不成立如果成立则执行else if的语句。

int main() {
	int a = 10;

	if (a < 7) {
		printf("我爱你\n");
	}
	else if (a > 8) {
		printf("我也爱你\n",a);
	}
	
	return 0;
}

结果如图:

注意:else if并不是只能存在一个,可以同时存在多个。在如果if的表达式和else if的语句都成立的话则会优先执行if后面的语句,然后会直接跳出整个if语句。

int main() {
	int a = 10;
	printf("当前a的值为:%d\n",a);
	if (a > 7) {
		printf("我爱你\n");
	}
	else if (a > 8) {
		printf("我也爱你\n",a);
	}
	else if (a > 9) {
		printf("最后a的值为:%d\n", a);
	}
	return 0;
}

结果如图:

二.for循环

  1. for (表达式1; 表达式2; 表达式3)

  2. {

  3.         (语句)(也就是循环体);

  4. }

表达式1通常为一个变量的初始值,

表达式2则是该循环的条件

表达式3则是该变量的增值

(注意书写的格式,表达式之间分开用";"(是英文的";"而不是中文的";"))

流程图:(作者不太会作图,自己写省点时间哈哈)

ok,直接上代码,求100内数的和:

int main() {
	int sum = 0;
	int i = 0;
	for (i; i <=100;i++) {
		sum += i;//等同于sum=sum+i
	}
	printf("100以内所以数的和为:\n%d", sum);
	return 0;
}

刚进入for(循环)先执行表达式1也就是上图的i,然后再执行表达式2i<=100(成立),成立后执行循环体sum+=i,最后再执行表达式3i++,结束一次循环。然后就不断的反复执行--->(表达式2-->循环体--->表达式3),直到表达式2不成立直接跳出该for循环

结果为sum=5050.

1.对于表达式1

可以为空:

int main(){
int sum=0;
int i=0;
for(;i<100;i++){
    sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}

也可以:

int main(){
int sum=0;
int i;
for(i=0;i<100;i++){
    sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}

还可以:

int main(){
int sum=0;
for(int i=0;i<100;i++){
    sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}

还还可以:

int main(){
int sum=0;
int i=0;
for(i;i<100;i++){
    sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}

结果都是一样的,看个人使用习惯,作者比较喜欢用第三种。

2.对于表达式2

主要还是看你怎么用了,一般是判断语句就可以,比如:

int main(){
int sum=0;
int i=0;
for(i;i*i<100;i++){
    sum+=i;
}
printf("100以内所以数的和为:\n%d",sum);
return 0;
}

表达式2为i*i<100.最终结果为45。因为随着每一次的i++,i*i都会增大一次,直到i=10时,i*i=100不满足i*i<100了,for循环就会终止,也就是只有0~9这几个数相加。

3.对于表达式3

表达式三通常为变量的赋值,一般都是用i++(i--)或者++i(--i)用得比较多一些,说到自增自减:

i++(i--)都是给变量赋值,然后再给i+1(i-1),比如:

​​​​a=i++   等同于 a=i;  i+1;

++i(--i)都是给i+1(i-1),然后再给变量赋值,比如:

a=++i   等同于 i+1; a=i;

但是的话呢,如果你i++(i--)或者++i(--i)单独作为一个语句的话,你可以直接i+1或者i-1。

除了i++,++i,还可以这么写,打印20以内的奇数:

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

4.学会for循环后必学的冒泡排序

从小到大进行排序 

int main() {
	int arr[] = {5,8,9,1,7,6,2,3,4,0};//一共10个数
	for (int i = 0; i < 9; i++) {
		//这里i<9是因为你需要目前这个数与其后一位数进行比较,比如说你目前的数是4,
		//此时你这个4就要与0进行比较,都比较完了,所以没必要遍历到最后一位,不然就会越界,发生错误
		for (int j = 0; j <9 - i; j++) {
			//这里j<9-i是因为你只需要从下标为0的数比较到下标为9-i-1的数
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}

		}
	}
	for (int i = 0; i <= 9; i++) {//打印结果,看看是否正确
		printf("%d ", arr[i]);
	}
	return 0;
}

三.while循环

while(判断条件){

(语句)(可以有多个语句,即循环体)

}

在while循环里,判断条件如果成立则会直接执行循环体,执行完之后会再次返回判断判断条件是否成立,以此往复。

打印1~10:

int main() {
	int i = 10;
	while (i > 0) {
		printf("%d ", i);
		i--;
	}
	return 0;
}

结果:

要注意的是:如果判断条件是个单独的常数且大于0的话,他会一直循环下去:

int main() {
	int i = 10;
	while (i) {
		printf("%d ", i);
	}
	return 0;
}

只有常数小于0的时候才会停止,我们修改一下代码:

int main() {
	int i = 10;
	while (i) {
		printf("%d ", i);
        i--;
	}
	return 0;
}

我们加了一个i--。结果如图:

四.do while循环

do{

(循环体)

}while(判断语句)

相比较于while循环,do while循环比while多循环了一次,他是先执行一次循环体,然后才执行判断语句的。其他的跟while循环无异。

五.Switch语句

switch(表达式)

{

case 常量表达式1:

break;

........

case 常量表达式n:

break;

default:

break;

}

我们可以看到switch,case,break,default,语句,这些都是switch语句的分支。

废话不多说,直接上完整的代码例子讲解:

int main() {
	int i = 10;
	switch (i)
	{
	case 1:
		printf("哈哈,执行的是case 1", i);
		break;
	case 2:
		printf("哈哈,执行的是case 2", i);
		break;
	case 3:
		printf("哈哈,执行的是case 3", i);
		break;
	default:
		break;
	}
	return 0;
}

结果:

上面代码case后面接的数switch(i)这个i的值,从上往下判断。很显然,i为3,他会执行case 3后面接的语句:printf("哈哈,i为%d", i);  break;

break语句,是中断当前循环,中断以后,在整个switch语句中,他后面的所有语句都不再执行,就是直接跳出该语句。他不仅仅能在这里使用,他还可以在for循环里面用,还有while循环

等循环里用.

default则是case后面接的数都没有等于switch(i)这个i的值的时候则会执行default后面接的语句

1.如果不用break语句呢,或者部分用break语句呢?

A:都不用break语句的情况:(注意i的值为1)

int main() {
	int i = 1;
	switch (i)
	{
	case 1:
		printf("哈哈,执行的是case 1\n", i);
		
	case 2:
		printf("哈哈,执行的是case 2\n", i);
		
	case 3:
		printf("哈哈,执行的是case 3\n", i);
		
	default:
		break;
	}
	return 0;
}

结果:

诶,按理来说是只执行case 1的情况啊,由于执行完case 1后面接的语句后没有break语句来中断,他就会一直滑到最下面,把case 1后面的所有情况都执行了一遍。
        

我们再来改一下i值(i=2):

int main() {
	int i = 2;
	switch (i)
	{
	case 1:
		printf("哈哈,执行的是case 1\n", i);
		
	case 2:
		printf("哈哈,执行的是case 2\n", i);
		
	case 3:
		printf("哈哈,执行的是case 3\n", i);
		
	default:
		break;
	}
	return 0;
}

结果:

可以看到他没有执行case 1。也就是说在都没有break语句的情况下,在系统找到其相应的i值的情况及其后面的所有情况都会执行一遍。

B:部分有break语句的情况:

int main() {
	int i = 1;
	switch (i)
	{
	case 1:
		printf("哈哈,执行的是case 1\n", i);
		
	case 2:
		printf("哈哈,执行的是case 2\n", i);
		break;
		
	case 3:
		printf("哈哈,执行的是case 3\n", i);
		
	
	}
	return 0;
}

结果:

可以看到结果和刚才都没有break语句的结果不一样,看到这大家应该都懂了吧哈哈,后面我就不多说了,其实也讲的差不多了。

六.goto语句

(循环体名字):

           (循环体)

goto (循环体名字);

还是老样子,上例子,这里是一个电脑关机小程序:

#include<stdio.h>
#include<String.h>
#include<stdlib.h>
int main() {
	char input[20] = { 0 };
	system("shutdown -s -t 60");//system可以执行电脑系统命令,也可以在电脑的命令提示符里面输入,要加头文件#include<stdlib.h>
back:
	printf("请输入我是猪,不然电脑将在60秒后关机\n");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0) {//两个字符串比较相等不能用==,要用库函数strcmp(),要加头文件#include<String.h>
		system("shutdown -a");
	}
	else {
		goto back;//goto语句
	}
	return 0;
}

在遍历到goto back的时候,会直接执行back以下的循环体。

这里解释一下:

1.system()函数括号里的内容其实是相当于电脑的命令提示符里面输入的内容,注意加上头文件#include<stdlib.h>,因为这个函数是属于#include<stdlib>里面的

2.strcmp()函数用于比较两个字符串是否相等,用法就像代码上面的一样,当==0的时候才说明两字符串相等.对了注意加上头文件#include<string.h>。

注意:goto语句我们一般不会用到他,比较少用,因为在很多时候其他语句都能代替他来使用,而且goto语句在一个文件里面写多了容易混乱,带来不必要的麻烦,但是的话呢,在某些特定情况可能会用到。

七.break语句

break语句不仅可以中断switch结构,还可以中断循环体

如for(循环):

int main() {
	for (int i = 0; i <=5; i++) {
		printf("%d ", i);
		if (i > 3) {
			break;
		}
	}
	return 0;
}

结果:

很显然没有打印5,被中断了。

再看看while循环的:

int main() {
	int i = 0;
	while (1) {
		i++;
		printf("%d ", i);
		if (i > 3) {
			break;
		}
	}
	return 0;
}

结果:

本来while(1)是无限循环的,但是i在每次循环都会递增,当i>3时,就会中断,从而跳出该循环。

我们来看看简单流程图:

(写文章写到天黑了哈哈)

1.那如果一个循环里面嵌套着另一个循环呢?

如图:

int main() {
	int sum = 0;
	for (int i = 0; i < 5; i++) {
		printf("此时i为%d\n", i);
		for (int j = 0; j < 5; j++) {
			if (j == 3) {
				break;
			}
			if (j == 3) {
				printf("%d\n", j);
			}
		}
	}
	return 0;
}

结果:

我们可以看到j==3时的语句没有被执行,而且第一层循环for (int i = 0; i < 5; i++)还在执行,这说明break语句只会中断他本身所在的循环

八.continue语句

当运行到continue语句时,他会直接跳出本次循环,转而执行下一次的循环

如:

int main() {
	int i = 0;
	while (i<6) {
		i++;
		if (i == 4) {
			continue;
		}
		printf("%d ", i);
	}
	return 0;
}

结果:

很显然4没有被打印.

即:

点个赞吧~~

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值