C语言第五次学习记录

目录

一、语句

二、分支语句

2.1 if 分支

2.1.1   单分支if语句

2.1.2   双分支if语句

2.1.3   多分支if语句

2.2  switch分支

2.2.1 在switch语句中的break

2.2.2   default子句

三、循环语句

3.1 while循环

3.1.1 while语句中的break

3.1.2while语句中的continue

3.2 for循环

3.2.1for循环与while循环的对比

3.2.2 for循环语句中的break

3.3.3for循环中的continue

3.3.4    for循环语句的一些其他例子

3.3 do while循环

3.3.1do  while循环语句中的break

3.3.2 do while 循环语句中的continue


一、语句

在C语言中,语句分为五类,分别如下:

1、表达式语句(如3+2;6+10此类就叫表达式语句)

2、函数调用语句

3、控制语句

4、复合语句

5、空语句(;就叫做空语句)

简单讲讲C语言中的控制语句。控制语句用于控制程序的执行流程,以便实现程序的各种结构方式(C语言中的结构为顺序结构、循环结构、选择结构)。

C语言的九种控制语句分为三类:

1、分支语句: if语句,switch语句

2、循环执行语句:do while循环、 for循环、while循环

3、转向语句:break语句、goto语句、continue语句、return语句

       注意:在C语言中,0为假;非0为真。

二、分支语句

2.1 if 分支

2.1.1   单分支if语句

单分支if语句的语法结构为:

if(表达式)

{

语句;

}

代码演示例子如下:

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

2.1.2   双分支if语句

双分支if语句的语法结构为:

if(表达式1)

{

语句1;

}

else 

{

语句2;

}

代码演示例子如下:

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d",&age);
	if (age > 18)
	{
		printf("成年了\n");
	}
	else
	{
		printf("还没有成年\n");
	}
	return 0;
}

2.1.3   多分支if语句

多分支if语句的语法结构为:

if(表达式1)

{

语句1;

}

else if(表达式2)

{

语句2;

}

else

{

语句3;

}

代码演示例子如下:

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

在书写if分支语句的时候,应该规范书写规范,防止出现else悬空现象

例如下班的代码:

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

乍一看,输出值应当为haha;事实上这个输出值为没有任何输出;造成这样的原因是书写代码不规范导致的。所以在书写代码时候,我们应该规范书写。也提醒我们else 与它最近的那个if相匹配。

正确书写如下:

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

下面是几个课后作业的练习题:

//判断一个数字是不是奇数:

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

2.2  switch分支

switch语句的书写方式为:

switch(整形表达式)

{

语句项;

}

在这里,语句项是一些case语句;如下:

case  整形常量表达式;

  语句;

2.2.1 在switch语句中的break

#include<stdio.h>
int main()
{
	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;
	default :
		printf("输错啦;");
		break;
	}
	return 0;
}

在switch语句中,case决定了入口,break决定了出口,并不是case后边一定要加break。但是一旦case后边加上了break,当结果满足这个case之后,程序会执行case里面的语句,遇到break之后,就跳出这个case。break的效果实际上就是把语句列表划分为不同的分支部分。

下面有一个代码展示了一些case后面不加break的情况:

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d",&day);
	switch (day)
	{
	case 1:
		
	case 2:
		
	case 3:
		
	case 4:
		
	case 5:
		printf("工作日,好好加班\n");
		break;
	case 6:
		
	case 7:
		printf("可以休息了,舒服\n");
		break;
	default:
		printf("输错啦;");
		break;
	}
	return 0;
}

2.2.2   default子句

当switch表达式的值不匹配所有case标签的值时,default子句后面那的语句就会执行。default子句可以写在任何一个case标签可以出现的位置,每个switch语句只有一条default子句。

看看下面代码输出值为多少:

#include<stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{case 1:
		m++;
	case 2:
		n++;
	case 3:
		switch (n)
		{case 1:
			n++;
		case 2:
			m++;
			n++;
			break;
		}
	case 4:
		m++;
		break;
	default :
		break;
	}
	printf("m=%d   n=%d ",m,n);
	return 0;
}

输出结果为m=5;n=3。在这里需要注意,语句里面没有break的时候,程序会继续往下执行。

三、循环语句

循环语句分为:while循环、for循环、do while循环三种。

3.1 while循环

while循环的语法结构为:

while(表达式)

{

循环语句;

}

以在屏幕上打印1到10的数字举例来看while循环的语法结构:

#include<stdio.h>
int main()
{
	int i = 1;//初始化部分
	while (i <= 10)//判断部分
	{
		printf("%d\n",i);
		i++;//调整部分
	}
	return 0;
}

3.1.1 while语句中的break

看下面的代码示例:

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

输出结果为:1 2 3 4 ;这是因为当程序中只要遇到break时,就停止后期的所有的循环,直接终止程序。所以在while循环中的 break,是用于永久终止循环的。

3.1.2while语句中的continue

看下面的代码:

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

结果为1 2 3 4 +死循环;这是因为continue是用来终止本次程序的,continue之后的语句不会执行,会返回到while循环语句的判断部分,继续下一次循环的判断。在本例中,当打印i的值是4时候,往下执行i=i+1语句,i的值此时变为5;5小于10;进入while循环,然后5等于5,执行continue,程序又跑到判断部分,即5<=10处;然后就一直死循环了。

下面的代码执行情况就有所不同于上面的了:

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

在本例中,输出结果为2、3、4、6、7、8、9、10;造成这样的原因是因为程序执行到i=5处时;会进入if分支语句中,然后continue直接跳到while循环的判断部分,即i<=10这里。就没有打印5这个数字了。

可以使用while循环语句中的continue语句,打印数字字符,看下面代码:

#include <stdio.h>
int main()
{
	char ch = '\0';
	while ((ch = getchar()) != EOF)
	{
		if (ch < '0' || ch>'9')
		{
			continue;
		}
		putchar(ch);
	}
	return 0;
}

也就是说,当遇到输入字符时候,程序不输出任何值,只输出数字字符。

3.2 for循环

for循环的语法结构如下所示:

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

{

        循环语句;

}

其中:

表达式1是for循环的初始化部分;用于初始化循环变量

表达式2是for循环的判断部分;用于判断循环什么时候结束

表达式3是for循环的调整部分;用于循环条件的调整

 运用for循环打印1到10的数字代码如下:

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

3.2.1for循环与while循环的对比

for循环语句的结构如下:

for(初始化部分;判断部分;调整部分)

{

        循环语句;

}

while循环语句的结构如下:

初始化部分;

while(判断部分)

{

        调整部分;

}

 从上面可以看出,for循环语句在结构上比while循环语句更加工整,更加美观。所以for循环使用频率更高。

3.2.2 for循环语句中的break

看下面的代码例子:

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

输出结果为1 2 3 4 ;在这里程序打印4的时候, 会执行i++语句;然后i的值为5;因为5等于5,所以程序执行break,跳出整个程序,那么结果就自然只打印1 2 3 4了。

可以发现,for循环中的break和while循环中的break是差不多的。

3.3.3for循环中的continue

看下面代码:

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

输出结果为1、2 、3、4、6、7、8、9、10;

这是因为当程序打印完4之后,会跳到i++位置处;此时i=5;然后执行if里面的判断,此时跳出后面的打印,来到i++位置处;i=6;依次往后打印。

在这里注意与while循环语句里面的continue区别开:

while循环语句中的continue是终止本次循环,跳转到while语句的判断部分。

而for循环语句中的continue是终止本次循环,跳转到for循环语句的调整部分。

3.3.4    for循环语句的一些其他例子

for循环语句中,初始化部分,判断部分,调整部分都可以省略,但是对于初学者,不推荐这样搞。如下:

#include<stdio.h>
int  main()
{
	for (;;)
	{
		printf("hello   world\n");
	}
	return 0;
}

可以看到程序死循环打印hello world;原因是省略掉判断部分之后,判断部分恒为真;程序会死循环打印

还有在书写for循环语句时候,不建议省略掉初始化部分,判断部分,调整部分;例如下面两个代码;只是一个都初始化部分没有省略,一个初始化部分省略掉了,就会导致天壤之别:

代码1:

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			printf("hello world\n");
		}
	}
	return 0;
}

代码2:

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (; i < 3; i++)
	{
		for (; j < 3; j++)
		{
			printf("hello world\n");
		}
	}
	return 0;
}

 可以看到代码2 的两个for循环中的初始化部分都省略掉了,然而代码1里面的没有省略掉,所打印出来的结果为第一个打印9个hello world;第二个打印结果为3个hello world;所以在书写代码时候,在不完全理解的情况下,不太建议省略for循环里面的三个限制条件(初始化部分、判断部分、调整部分)。

3.3 do while循环

do  while 循环的语法结构为:

do

{

        循环语句;

}

while(表达式)

do  while循环是至少执行一次;但是因为使用场景有限,所以不经常使用。

使用do  while循环打印1到10的数字;如下:

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

3.3.1do  while循环语句中的break

看下面代码:

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

输出结果为1 2 3 4 ;可以发现,do while循环中的break;和for循环语句;while循环语句差不多;

都是终止循环,直接退出程序。

3.3.2 do while 循环语句中的continue

看下面代码:

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

发现这个也和while循环语句中的continue差不多;便不再做过多叙述。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值