栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

分支语句与循环语句

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分支语句与循环语句

目录

1.分支语句

1. 1 分支语句 - if 语句

1.2 分支语句 - Switch 语句

2. 循环语句 

2.1 while 循环

 2.1.1 while 循环中的break 和continue

 2.2 fo 循环

​编辑

2.2.1 for 循环中的 break 和 continue

 2.2.2 for 循环的一些变种

2.3 do while 循环语句

2.3.1 do while 循环中的 break 和continue

3. 计算 n 的阶乘

3.1 使用 for 循环计算

3.2 使用 while 循环计算

4. 计算 1!+2!+3!+……+10!

4.1 使用 for 循环计算

4.2 使用 while 循环计算

5. 在一个有序数组中查找具体的某个数字n。(二分查找法)

6 . goto 语句(附加)


1.分支语句

条件判断语句也叫分支语句:if语句、switch语句;

1. 1 分支语句 - if 语句

c语言中0表示假,非0为真

语法结构:
if(表达式)//如果表达式为真,执行下面语句
    语句;

if(表达式)//如果表达式为真,执行下面语句
    语句1;
else     //否则执行下面语句
    语句2;

//多分支    
if(表达式1)//如果表达式为真,执行下面语句
    语句1;
else if(表达式2)//如果表达式为真,执行下面语句
    语句2;
else           //否则执行下面语句
    语句3;

一个三种用法,我们用代码来介绍。

第一种:

int main()
{
	int score = 0; //定义一个成绩变量
	scanf("%d", &score); //输入成绩变量
	if (score >= 60)    //如果大于等于60
		printf("成绩及格"); //打印成绩及格
	return 0;
}

当我们执行代码时,输入70,屏幕会打印 “成绩及格” 

当输入50时,什么都不打印,直接结束程序

第二种:

int main()
{
	int age = 0;//创建一个年龄变量
	scanf("%d",&age); //输入年龄
	if (age < 18)    //如果年龄小于18
		printf("未成年n");//打印未成年
	else        //否则
		printf("成年");//打印成年
	return 0;

}

当输入16时,屏幕打印 “未成年” 

 

当输入20时,打印 “成年”

第三种:

int main()
{
	int iq = 0;//定义一个变量 智商
	scanf("%d", &iq);//输入智商值
	if (iq < 100)	//如果小于100
		printf("一般");//打印一般
	else if (iq < 150 && iq < 200)// 如果小于150并且小于200
		printf("聪明");	//打印聪明
	else			// 否则
		printf("天才");	//打印天才
	return 0;
}

 当执行各个语句时输出以下:

 

 


int main()
{
	if ()
	{
		执行多个语句时应用大括号
	}
	else
	{

	}
	return 0;
}

 接下来我们来看一段代码你觉得会打印什么

int main()
{
	int a = 1;
	int b = 2;
	if (a == 0)
		if (b == 2)
			printf("666n");
	else
		printf("777n");
	return 0;
}

结果是什么都不打印,c语言中if 和 else 是就近匹配的,当上面的 if 语句不成立时下面的语句也不会执行

 当我们加上大括号后

int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("666n");
	}
	else
			printf("777n");
	return 0;
}

打印777

1.2 分支语句 - Switch 语句

语法结构:

switch (整型表达式)
{
    语句项;
}
//语句项
case 整形常量表达式:
    语句;

 case后必须是整型常量表达式。

当我们使用变量时会发生报错。


使用方法·

int main()
{
    int day = 0;
    scanf("%d", &day);
    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;
   }
    return 0;
}

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

当我输入1时,打印完星期一后并不会结束语句,继续向下执行。


如果我们需要输入1 - 5 时打印工作日,6 -7时打印休息日

 这俩个代码是一样的,相比之下右边更加简略。

Switch 也是支持嵌套的

int main()
{
    int m = 1;
    int n = 2;
    switch (n)
    {
    case 1:m++;
    case 2:n++;
    case 3:
        switch (n)
        {
        case 1:n++;
        case 2:m++;
            break;
        }
    case 4:
        m++;
        break;
    default:
        break;
    }
    printf("m = %d,n = %d", m, n);
    return 0;
}

default 和 if 语句中else 的意思是一样的 

可以试着猜一下 m 和 n 是多少

 

2. 循环语句 

   循环语句有:

                      ● while

                      ● for

                      ● do while

2.1 while 循环

语法结构:

while(语法结构)
		循环语句

写一个打印1 - 10的代码

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

运行结果为 

 2.1.1 while 循环中的break 和continue
int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (i == 5)//当i = 5时,执行下方break,终止while循环
			break;
		printf("%d ", i);
		i++;
	}
	return 0;
}

运行结果 

 在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。


int main()
{
	int i = 0;
	while (i < 10)
	{
		i++;
		if (i == 5)//当 i = 5时,执行continue,终止本次循环,执行下次循环
			continue;
		printf("%d ", i);
	}
	return 0;
}

运行结果: 

         

 continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

 2.2 fo 循环

在for循环中也可以出现break和continue,他们的意义和在while循环中是一样的。 但是还是有些差异。

语法结构:

for (表达式1; 表达式2; 表达式3)
循环语句;

表达式1 表达式1为初始化部分,用于初始化循环变量的。

表达式2 表达式2为条件判断部分,用于判断循环时候终止。

表达式3 表达式3为调整部分,用于循环条件的调整。 

 写一个打印1 - 10的代码

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

 运行结果为

2.2.1 for 循环中的 break 和 continue
int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (i == 5)
			break;
		printf("%d ", i);
	}
		
	return 0;
}

运行结果为 

 


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

运行结果为

 2.2.2 for 循环的一些变种

初始化,判断,调整三个部分可以省略

省略掉判断部分就意味着判断恒为真。

int main()
{
	for (;;)
	{
		printf("hehen");
	}
	return 0;
}

代码进入死循环

 


 这段代码可以打印100个呵呵。

int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i< 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("hehen");
		}
		
	}
	return 0;
}

当我们省略掉初始化部分时

int main()
{
	int i = 0;
	int j = 0;
	for (; i< 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("hehen");
		}
		
	}
	return 0;
}

运行结果只有10 个呵呵

原因很简单

 


for 循环还可以使用多余一个变量控制循环

int main()
{
	int i = 0;
	int y = 0;
	for (i = 0, y = 0; i < 2 && y < 5; i++, y++)
		printf("hehen");
	return 0;
}

2.3 do while 循环语句

语法结构

do
 循环语句;
while(表达式);

do while 的循环语句在表达式之前,也就是说至少执行一次循环语句。

写一个打印1 - 10的代码

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

2.3.1 do while 循环中的 break 和continue
int main()
{
	int i = 1;
	do
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i++;
	} while (i <= 10);
	return 0;
}

运行结果:


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

运行结果:

目前我对分支与循环的了解就到这里了,接下来让我们来看几个小题目。

3. 计算 n 的阶乘

阶乘是指从1到n的连续自然数相乘的积。

例如,5的阶乘 = 1 * 2 *3 *4 *5 。

负数是没有阶乘的哦!!!

3.1 使用 for 循环计算
int main()
{
	int n = 0;
	int i = 0;
	int ret = 1;
	scanf("%d", &n);
	for (i = 1;i <= n; i++)
	{
		ret = ret * i;
	}
	printf("%d",ret);
	return 0;
}

3.2 使用 while 循环计算
int main()
{
	int n = 0;
	int i = 1;
	int ret = 1;
	scanf("%d", &n);
	while (i <= n)
	{
		ret = ret * i;
		i++;
	}
	printf("%d", ret);
	return 0;
}

4. 计算 1!+2!+3!+……+10!

1!表示1的阶乘,我们将计算出1的阶乘加到10的阶乘总和

4.1 使用 for 循环计算
int main()
{
	int i = 0;
	int ret = 1;
	int sum = 0;
	for (i = 1; i <= 10; i++)
	{
		ret = ret * i;
		sum = sum + ret;
	}
	printf("%d", sum);
	return 0;
}

4.2 使用 while 循环计算
int main()
{
	int i = 1;
	int ret = 1;
	int sum = 0;
	while (i <= 10)
	{
		ret = ret * i;
		sum = sum + ret;
		i++;
	 }
	printf("%d", sum);
	return 0;
}

5. 在一个有序数组中查找具体的某个数字n。(二分查找法)
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);//40 除以 4 = 10
	// sizefo(arr) = 总大小,当前数组10个数字 = 40个字节(一个整型32个比特位,四个字节)
	//sizeof(arr[0]) = 数组第一个数的大小 = 4个字节
	//总大小除以单个数字的大小就可以求出数组一共有几个数。
	int left = 0;//左边第一个数字在数组的下标中为arr[0]
	int right = sz - 1;//最右边的数字下标为数组中数字总个数减1
	//当前我们已知 sz 为10,即最右边的数字10的下表为arr[9]
	int k = 7;//假如我们要查找的那个数为7
	while (left <= right)//代表 left 和 right 中间还有数字
	{
		int mid = (left + right) / 2;//求出中间值
		if (arr[mid] < k)//如果mid小于我们要查找的数,那这个数肯定是在mid的右边
		{
			left = mid + 1;//此时我们就把 mid + 1赋值给left
		}
		else if (arr[mid] > k)//当mid大于我们要查找的数,那这个数肯定输在mid的左边
		{
			right = mid - 1;//此时我们把mid - 1赋值给right
		}
		else//此时情况为left = right,此时left和right中间没有数字了,就代表着找到了。
		{
			printf("找到了,是arr[%d]", mid);
			break;
		}	
	}
	if (left > right)//如果left 大于 right,那一定是找不到
		printf("找不到");
	return 0;
}

 当 left + right 过大时超出了我们的整型,结果肯定会出错。此时我们可以换一种写法

int mid = (left + right) / 2;
int mid = left+(right - left) / 2

6 . goto 语句(附加)

goto非常好理解,和字面意思一样。接下来看代码就明白

当我们执行到goto时,直接跳到goto指向的地方执行代码。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029974.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号