[c语言]循环语句

目录

1.绪论

2.if else

3.switch

4.while循环

5.for循环

6.do while循环


1.绪论

本节学习内容:

分支语句

  • if
  • switch

循环语句

  • while
  • for
  • do while

2.if else语句

语法结构:

第一钟:

if(表达式)

语句1;

第二种:

if(表达式)

语句1;

 else

语句2;

第三种:

if(表达式1)

语句1;

else if(表达式2)

语句2;

else

语句3;

代码例子-->用if else语句写出年龄分段如下:

                         age<18为少年

                         age在18到26为青年

                         age在26到40为中年

                         age在40岁以上为老年

int main()
{
	int age = 0;
	scanf("%d",&age);
	if (age < 18)
		printf("少年");
	else if (age >= 18 && age < 26)
		printf("青年");
	else if (age >= 26 && age < 40)
		printf("中年");
	else
		printf("老年");
	return 0;
}

代码执行如下图: 

 注:else与最近的if语句为一组!!!

3.switch语句

语法结构:

switch(表达式)
{

case :语句;(break;)

case :语句;(break;)

}

代码例子-->判断星期几

当没有break时:

int main()
{
	int day = 0;
	scanf("%d",&day);
	switch (day)
	{
	case 1:printf("星期一\n");
	case 2:printf("星期二\n");
	case 3:printf("星期三\n");
	case 4:printf("星期四\n");
	case 5:printf("星期五\n");
	case 6:printf("星期六\n");
	case 7:printf("星期天\n");
	}
	return 0;
}

代码运行如图:

 当有break时:

代码运行如图:

所以我们可以看出break的作用-->在switch语句中,跳出该语句

现在我们想想怎么让代码1-5输出工作日,6-7为休息日呢?

我们可以将代码改成如下所示:

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;
	}
	return 0;
}

 那现在我们来讲讲switch中其他情况的语句--->default

比如上代码当我们输入8,9......等不符合的时候就不会输出什么,但我们想让他输出“输入错误”改怎么写?

我们可以修改如下:

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;
    }

4.while循环

语法结构:

while(表达式)

语句;

代码练习-->在屏幕上打印1-10,但是要求当i=5的时候代码跳出

int main()
{
	int i = 0;
	while (i <=10)
	{
		printf("%d\n", i);
		i++;
		if (i == 5)
			break;
	}
	return 0;
}

所以我们可以看出break的作用-->在while循环中,终止循环

那我们想想如果把break换成continue并且把if语句放在i++前面,那么会发生什么?

代码执行如图所示:

那是为什么呢?当i=5的时候我们没有跳出循环没有执行i++,所以i一直为死循环 

因此,我们可以发现,continue的作用-->跳过本次循环

现在我们来分析下下面的代码

int ch = 0;
	while ((ch = getchar() )!= EOF)
	{
		putchar(ch);
	}
return 0;

代码运行如下:

 

那么我们怎么让这个代码停下来呢?ctrl+z-->读取结束

getchar返回的是该字符的ASCII码值,如果遇到错误或文件结束则返回EOF(end of file)--->-1,是文件结束标志。getchar的返回类型为int型!!!!

代码例子-->密码的输入与确认

char password = { 0 };
	printf("请输入密码:");
	scanf("%s", &password);
		printf("请确认密码(Y/N)");
		int ch = getchar();
		if (ch =='Y')
			printf("确认成功");
		else
			printf("确认失败");
	return 0;

我们会发现我们还没有输入Y,他就会直接输出确认失败。这是为什么呢?

假如我们输入12345\n,那么scanf会把12345拿走,那么getchar就会把剩下的\n拿走,所以就会直接走else。

那么怎么解决这个问题?-->清除缓冲区的\n

在getchar前面再加个getchar();

那么当我们密码输入12345 abcde时会出现什么呢?

我们会发现会出现和之前一样的错误,这又是为什么呢?

scanf会把空格前面的12345拿走,而getchar只能消耗一个字符。

因此我们要清理缓冲区!!代码修改如下:

char password = { 0 };
	printf("请输入密码:");
	scanf("%s", &password);
	printf("请确认密码(Y/N)");
	int x=0;
	while ((x = getchar()) != '\n')
	{
		;
	}
	int ch = getchar();
	if (ch == 'Y')
		printf("确认成功");
	else
		printf("确认失败");
	return 0;

 5.for循环

语法结构:

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

     语句;

for (int i = 0; i < 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}

代码运行结果为0 1 2 3 4 6 7 8 9

从上我们可以发现continue的作用->跳过该次循环

建议--->采用左闭右开的方式写for循环

eg:for(i=0;i<10;i++)

下面我们来判断以下这个代码循环多少次?

int main()
{
    int i=0;
    int k=0;
    for(i=0,k=0;k=0;k++,i++)
      k++;
    return 0;
}

答案是0次.

因为这里的判断语句是k=0,意思是将0赋值给k,所以为假,因此循环次数为0次。

6.do while循环

语句结构:

do

      循环语句;

while(表达式);

特点:循环体至少执行一次!!!

今日代码练习题--->求n!

int main()
{
	int n = 0;
	int x = 1;
	scanf("%d", &n);
	for (int i = 1; i <=n; i++)
	{
		x *= i;
	}
	printf("%d", x);
	return 0;
}

代码练习题-->1!+2!+.....+n!

int main()
{
	int sum = 0;
	int n = 0;
	int x = 1;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		x *= i;
		sum = sum + x;
	}
	printf("%d", sum);
	return 0;
}

代码练习题-->按序查找一个数

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int k = 7;
	int n = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = n - 1;
	int mid = 0;
	while (left <= right)
	{
	    mid = (left + right) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid]>k)
			right = mid - 1;
		else
		{
			printf("%d", arr[mid]);
			break;
		}
	}
	if (left > right)
		printf("没找到!");
	getchar();
	getchar();
	return 0;
}

代码练习题-->如何实现该结果:

 

#include<windows.h>
int main()
{
	char arr1[] = { "welcome to bit!!!!!!" };
	char arr2[] = { "####################" };
	int left = 0;
	int right = sizeof(arr1)-1;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		
		printf("%s\n", arr2);
		Sleep(1000);//睡眠一秒
		left++;
		right--;
	}
	return 0;
}

其中Sleep函数需要引入头文件windows.h!!

那么本节学习就结束啦!!!

这里还是一个正在学习的小白,如果代码或者理解有问题还希望多多包涵并且私信我>_<。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值