C语言-分支和循环语句

本章内容

分支语句

if语句

1.什么是语句?

C语言是一门程序设计语言
由分号隔开的句子,称为语句。

printf("Hello world\n");
;					//空语句
3.14;
2.单个if
#include <stdio.h>

int main()
{
	int i=1;
	if(i>0)			//()里面的表达式成立,执行printf语句
		printf("hello\n");
	return 0;
}

if控制的表达式,0表示假,语句不执行,非0表示真,执行

3.if-else
#include <stdio.h>

int main()
{
	int i=1;
	if(i<0)
		printf("haha\n");
	else
		printf("hehe\n");
	return 0;
}

if-else语句,如果if的表达式不成立,则执行else后面的语句

4.多分支if-else
#include <stdio.h>

int main()
{
	int	i = 0;
	scanf("%d",&i);
	if (i < 0)
		printf("负数\n");
	else if (i == 0)
		printf("0\n");
	else
		printf("正数\n");
	return 0;
}
4.悬空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匹配
#include <stdio.h>

int main()
{
	int a=0;
	int b=2;
	if(a==1)
	{
		if(b==2)
		{
			printf("haha\n");
		}
	}
	else
	{
		printf("hehe\n");
	}

	return 0;
}
5.在函数中省略else
#include <stdio.h>

int test(int x)
{
	if (x >= 0)
		return 0;
	return	-1;
}
/*int test(int x)
{
	if(x>=0)
		return 0;
	else
		return -1;
}
*/
int main()
{
	int i = 1;
	int ret = test(i);
	printf("%d\n", ret);
	return 0;
}
//程序返回0;
练习1-判断一个数是否为奇数
#include <stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 2 == 0)
		printf("您输入的是偶数\n");
	else
		printf("您输入的是奇数\n");
	return 0;
}
练习2-输出1-100的奇数
#include <stdio.h>

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

switch语句

常用于多分支

#include <stdio.h>

int main()
{
	int n;
	scanf("%d", &n);
	switch (n)
	{
	case 1:
		printf("星期1\n");
	case 2:
		printf("星期2\n");
	case 3:
		printf("星期3\n");
	case 4:
		printf("星期4\n");
	case 5:
		printf("星期5\n");
	case 6:
		printf("星期6\n");
	case 7:
		printf("星期7\n");
	default:
		printf("请输入1-7的数字\n");
		break;
	}
	return 0;
}
//switch接受n的值,当n的值在1-7之间,任意输入一个数,后面的语句都会执行
//例如3,那么输出的结果为星期3到星期7加上default控制的语句,这是因为每条case语句都没有break

case后面的数字如果跟n相等,则执行case后面的语句
default用来接受,没有case符合n的值,则由default接受这些不在case范围内的数字

#include

int main()
{
	int n=0;
	scanf("%d",&n);
	switch(n)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误\n");
	}
	return 0;
}

在这个程序中,输入1-5的数字都会得到工作日,输入6-7的数字得到休息日,其他的数字,则输出错误,注意switch控制的表达式为整型表达式,case控制的是整型常量表达式
在最后一个 case 语句的后面加上一条 break语句。 (之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。
当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。
所以,每个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)
		{
		//switch可以套用
		case 1:
			n++;
		case 2:
			m++;
			n++;
			break;
		}
	case 4:
		m++;
		break;
	default:
		break;
	}

	printf("%d %d\n", m, n);
	return 0;
}

n=1,先进入case 1,m++,因为没有break,继续执行case2,n++
此时n=2,m=3,第二个switch,执行case 2,n++,m++,break跳出switch
到case 4,m++,break
最终结果为m=5,n=3;

循环语句

while

#include <stdio.h>

int main()
{
	int i=0;
	while(i<10)
	{
		printf("haha\n");
		i++}
	return 0;
}

屏幕上会打印出10个haha,这是因为只要while后面的表达式不为0,则一直执行,代码块里的语句,当i=10时,条件不满足,退出循环

while中的break
#include <stdio.h>

int main()
{
	int i=1;
	while(i<=10)
	{
		printf("%d ",i);
		if(i==5)
		{
			break;
		}
		i++;
	}
	return 0;
}
//屏幕输出1 2 3 4 5,当i=5时,执行break,跳出整个循环
while中的continue
#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		if (i == 5)
		{
			continue;
		}
		i++;
	}
	return 0;
}
//程序死循环打印5,因为当i=5时,执行continue语句,后面的代码不执行,跳到while判断条件语句,5《10永为真,一直执行printf

continue:终止本次循环,后面的代码不执行,直接跳到while语句的判断部分,进行下一次循环的入口判断

#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		if (i = 5)
		{
			continue;
		}
		i++;
	}
	return 0;
}
//死循环打印5,因为在if里面对i重新赋值了,让i一直等于5
#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i++;
	}
	return 0;
}
//程序输出结果为1 2 3 4 闪光标,可以看出程序时从上到下执行的
#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)
		{
			printf("%d ", i);
			continue;
		}
		i++;
	}
	return 0;
}
//死循环打印5,如果把printf和continue换位置,输出为一直闪光标。死循环
getchar、putchar函数
#include <stdio.h>

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}
	return 0;
}
//getchar函数是从键盘上接收字符,putchar是打印字符,getchar返回int类型,所以用int接受
//EOF end of file 文件结束标志,-1
#include <stdio.h>

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if (ch >= '0' && ch <= '9')
			printf("%c\n", ch);
	}
	return 0;
}
//从键盘上接受数字并打印,不是数字不打印

for循环

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}
	return 0;
}
//程序输出1 2 3 4 5 6 7 8 9 10

for(表达式1;表达式2;表达式3)
表达式1为对i赋值
表达式2为判断条件,条件成立进入,循环
表达式3为调整部分,对循环条件的调整

for中的break
#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
	return 0;
}
//程序输出1 2 3 4 ,当i=5时,执行break,跳出循环
for中的continue
#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			continue;
		printf("%d ", i);
	}
	return 0;
}
//跳过5,输出1 2 3 4 6 7 8 9 10
//因为i++在上面,当i=5时,不打印,回到上面继续判断

不能在for循环里面改变控制变量

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i = 5)
			printf("haha\n");
		printf("hehe\n");
	}
	return 0;
}
//死循环打印haha
//i的值被改变
练习
#include <stdio.h>

int main()
{
	for (;;)
		printf("haha\n");
	return 0;
}
//没有条件判断不行,会一直打印haha
//表达式1和表达式3可以省略
#include <stdio.h>

int main()
{
	int x, y;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("hehe\n");
	}
	return 0;
}
//打印两个hehe,条件要同时成立
#include <stdio.h>

int main()
{
	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)
		k++;
	printf("%d\n", k);
	return 0;
}
//for循环不执行,表达式2,判断条件为假

do…while

#include <stdio.h>

int main()
{
	int i = 10;
	do
	{
		printf("%d\n", i);
	} while (i < 10);
	return 0;
}
//程序输出结果为10

do…while语句特点,先不管判断条件成不成立,先执行,后判断
至少执行一次

break
#include <stdio.h>

int main()
{
	int i = 1;
	do {
		if (i == 5)
			break;
		printf("%d\n", i);
		i++;
	} while (i < 10);
	return 0;
}
//程序输出1 2 3 4
continue
#include <stdio.h>

int main()
{
	int i = 1;
	do {
		if (i == 5)
			continue;
		printf("%d\n", i);
		i++;
	} while (i < 10);
	return 0;
}
//1 2 3 4 闪光标

goto语句

goto语句最常用的就是终止程序在某些深度嵌套的结构的处理过
程,例如一次跳出两层或多层循环。
break只能跳出一层循环

#include <stdio.h>
#include <string.h>
#include <windows.h>


int main()
{
	char input[10] = { 0 };
	system("shutdown -s -t 60");
again:
	printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
	//again:执行到goto时,goto指向again,在从again向下执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值