欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言-分支和循环语句

程序员文章站 2022-04-06 15:09:07
...

本章内容

分支语句

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向下执行