前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[C语言]分支循环语句

[C语言]分支循环语句

作者头像
IT编程爱好者
发布2023-04-12 13:43:14
7690
发布2023-04-12 13:43:14
举报
文章被收录于专栏:C/C++爱好者

分支循环语句::

分支语句:

1.if...else语句

C语言有九种控制语句,可分成以下三类:

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

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

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

if...else语句的执行结构

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    if(a>b)
    {
        printf("%d\n",a);
    }
    else
    {
        printf("%d\n",b);
    }
    return 0;
}

if...else if...else语句

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("少年\n");
	}
	else if (age >= 18 && age < 30)
	{
		printf("青年\n");
	}
	else if (age >= 30 && age < 50)
	{
		printf("中年\n");
	}
	else if (age >= 50 && age < 80)
	{
		printf("老年\n");
	}
	else
	{
		printf("老寿星\n");
	}
	return 0;
}

2.悬空else

else的匹配:else是和它离得最近的if匹配的。

代码1和代码2比较:会发现适当的使用{}可以使代码的逻辑更加清楚,代码风格很重要。

代码语言:javascript
复制
//代码1
int main()
{
	int a = 0;
	int b = 2;
	if (1 == a)
		if (2 == b)
			printf("hehe\n");
	else
			printf("haha\n");
	return 0;
}
//代码2
int main()
{
	int a = 0;
	int b = 2;
	if (1 == a)
	{
		if (2 == b)
		{
			printf("hehe\n");
		}
	}
	else
	{
		printf("haha\n");
	}
	return 0;
}

3.if书写形式的对比及练习

if书写形式的对比

代码2和代码4风格更好一些,逻辑更加清晰,不容易出错。

代码语言:javascript
复制
//代码1
if (condition){
   return x;
}
return y;
//代码2
if(condition)
{
    return x;
}
else
{
    return y;
}
//代码3
int num = 1;
if(num == 5)
{
    printf("haha\n");
}
//代码4
int num = 1;
if(5 == num)
{
    printf("haha\n");
}

 练习1:判断一个数是否为奇数

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int num = 0;
    scanf("%d",&num);
    if(num % 2 == 1)
        printf("奇数\n");
    else
        printf("No\n");
    return 0;
}

 练习2:输出1-100之间的奇数   

代码语言:javascript
复制
#include<stdio.h>
//方法一:
int main()
{
    int i = 1;
    while(i <= 100)
{
    if(i % 2 = 1)
{
        printf("%d ",i);
}
    i++;
}
    return 0;
}
//方法二:
int main()
{
    int i = 1;
    while(i <= 100)
{
    printf("%d ",i);
    i += 2;
}
    return 0;
}

 4.switch语句

switch语句也是一种分支语句,常常用于多分支的情况.switch后跟整型表达式,case后跟整型常量表达式。

代码语言:javascript
复制
#include<stdio.h>
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;
    default:
        printf("输入错误\n");
        break;
}
    return 0;
}

5.switch语句中的break

在switch语句条件语句中时,作用是终止某个case并跳出switch结构,同时,多个case语句可以匹配一个表达式。

编程好习惯:在最后一个case的语句的后面加上一条break语句。

代码语言:javascript
复制
#include<stdio.h>
//输入1-5 输出的是weekday
//输入6-7 输出的是weekend
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("weekday\n");
        break;
    case 6:
    case 7:
        printf("weekend");
        break;
    default:
        printf("输入错误\n");
        break;
}
    return 0;
}

 6.default子句

如果表达的值与所有的case标签的值都不匹配,可以在列表中加上default子句。当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。所以每个switch语句只能出现一条default子句。

编程好习惯:在每个switch语句中都放一条default子句是个好习惯,甚至可以在后面再加上一个break。

代码语言:javascript
复制
#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("m = %d, n = %d\n",m,n);
    return 0;
}
//输出结果是 m = 5 n = 3

循环语句:

1.while循环

while语句

代码语言:javascript
复制
#include<stdio.h>
//实例1:
//打印1-10的数字
int main()
{
    int i = 1;
    while(i <= 10)
{
    printf("%d ",i);
    i++;
}
    return 0;
}
//实例2:
int main()
{
    int a = 20;
    while(a > 10)
{
        scanf("%d",&a);
        printf("a = %d\n",a);
}
    return 0;
}

2.while循环中的break和continue

break介绍:

break当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码。当它出现在嵌套循环语句中时,跳出最近的内循环语句,执行后面的代码。

break在while循环中的作用:其实在while循环中,只要碰到break,就停止后期的所有循环,直接终止循环。所以,while中的break是用于永久终止循环的。

continue介绍:

在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。

continue在while循环中的作用是:

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

代码语言:javascript
复制
#include<stdio.h>
//程序的执行结果是什么
int main()
{
    int i = 1;
    while(i <= 10)
{
        if(5 == i)
            break;
        printf("%d ",i);
        i++;
}
    return 0;
}
//输出结果是:1,2,3,4
#include<stdio.h>
//示例一:
//这个程序的运行结果是是什么
int main()
{
    int i = 1;
    while(i <= 10)
{
        if(5 == i)
            continue;
        printf("%d ",i);
        i++;
}
    return 0;
}
程序输出结果为:1,2,3,4...死循环
//示例二:
//这个程序的运行结果是是什么
int main()
{
    int i = 1;
    while(i <= 10)
{
    i++;
    if(5 == i)
        continue;
    printf("%d ",i);
}
    return 0;
}
程序输出结果为:2,3,4,5,6,7,8,9,10,11

下面三段代码的功能分别是:

代码语言:javascript
复制
#include<stdio.h>
//获取键盘上的字符并将其输出
//代码1
int main()
{
    int ch = 0;
    while((ch = getchar()) != EOF)
        putchar();
    return 0;
}
//只打印数字字符,跳过其他字符
//代码2
int main()
{
    char ch = '\0';
    while((ch = getchar()) != EOF)
{
        if(ch < '0' || ch > '9')
            continue;
        putchar(ch);
}
    return 0;
}
//清理缓冲区
//代码3中将代码1进行适当修改有清理输入缓冲区的作用
int main()
{
     char password[20] = {0};
     printf("请输入密码:->");
     scanf("%s",password);
     int ch = 0;
     while((ch = getchar()) != '\n');
{
     ;
}
     printf("请确认密码(Y/N):->");
     int ret = getchar();
     if('Y' == ret)
{
     printf("Yes\n");
}
     else
{
     printf("No\n");
}
     return 0;
}

3.for循环

for循环的语法结构:for(表达式1;表达式2;表达式3;) 循环语句;

表达式1:

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

表达式2:

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

表达式3:

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

for循环相对于while循环的优点:

在while循环中依然存在着三个必须条件。但是由于代码风格的问题使得三个部分可能偏离较远,这样查找修改就不够集中和方便。所以for循环的风格更好,使用频率也最高。

代码语言:javascript
复制
#include<stdio.h>
//代码1
//在屏幕上打印1-10的数字
int main()
{
    int i = 0;
    for(i = 1;i <= 10;i++)
{
       printf("%d ",i);
}
    return 0;
}
//代码2
//计算1+2+...+100
int main()
{
    int i = 0;
    int sum = 0;
    for(i = 0;i <= 100;i++)
{
        sum += i;
}
    printf("sum = %d\n",sum);
    return 0;
}

4.for循环中的break和continue

for循环中的break和continue的意义和在while循环中一样。

代码语言:javascript
复制
#include<stdio.h>
//代码1
int main()
{
    int i = 0;
    for(i = 1;i <= 10;i++)
{
        if(5 == i)
            break;
        printf("%d ",i);
}
    return 0;
}
//输出结果是1,2,3,4
//代码2
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

 5.for循环的变种及一道笔试题

  for循环的变种

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	//代码1
	for (;;)
	{
		printf("haha\n");
	}
	//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议省略
	//运行结果为死循环打印haha
	//代码2
	int i = 0;
	int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("haha\n");
		}
	}
	//运行结果为打印100个haha
	//代码3
	int i = 0;
	int j = 0;
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("haha\n");
		}
	}
	//运行结果为打印10个haha
	//代码4
	//使用多个变量控制循环
	int x = 0;
	int y = 0;
	for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
	{
		printf("haha\n");
	}
	return 0;
}

一道笔试题

代码语言:javascript
复制
#include<stdio.h>
//问程序循环多少次
int main()
{
    int i = 0;
    int k = 0;
    for(i = 0, k = 0;k = 0;i++,k++)
{
    k++;
}
    return 0;
}
答案:0次

6.do...while循环

do...while循环至少执行一次,使用场景有限,所以不经常使用。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int a = 1;
    do
{
    a++;
    printf("a=%d\n",a);
}
    return 0;
}while(a < 10);

 7.do...while循环中的break和continue

代码语言:javascript
复制
#include<stdio.h>
//代码1
int main()
{
    int i = 0;
    do
{
        if(5 == i)
            break;
        printf("%d\n",i);
        i++;
}while(i < 10);
}
//代码2
int main()
{
    int i = 0;
    do
{
        if(5 == i)
            continue;
        printf("%d\n",i);
        i++;
}while(i < 10);
}

 8.goto语句

C语言中提供了可以随意滥用的goto语句和标记跳转的符号,理论上goto语句没有必要存在,没有goto语句也可以很容易的写出代码,某些场合下goto语句还是用得着的,例如:跳出深度嵌套的循环。但是goto语句不能跨函数跳转。

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    for(...)
    {    
        for(...)
        {
            for(...)
            {
                if(diaster)
                    goto error;
            }
        }
    }
error:
    if(diaster)
    return 0;
}

分支循环语句代码训练:

1.计算n的阶乘

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int i = 0;
	int n = 0;
	int ret = 1;
	scanf("%d", &n);
	for (i = 1; i < n; i++)
	{
		ret = ret * i;
	}
	printf("%d\n", ret);
	return 0;
}

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

代码语言:javascript
复制
#include<stdio.h>
//代码1
int main()
{
	int n = 0
	int i = 0;
	int ret = 1;
	int sum = 0;
	for (n = 1; n <= 10; n++)
	{
		ret = 1;
		for (i = 1; i <= n; i++)
		{
			ret = ret * i;
		}
		sum = sum + ret;
		printf("%d\n", sum);
	}
	return 0;
}
//优化代码1
int main()
{
	int n = 0
	int sum = 0;
	int ret = 1;
	for (n = 1; n <= 10; n++)
	{
		ret = ret * i;
		sum = sum + ret;
	}
	printf("%d\n", sum);
	return 0;
}

3.在一个有序数组中查找具体的某个数字n(折半查找算法)

代码语言:javascript
复制
#include<stdio.h>
//遍历查找
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,,9,10 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]) ;
	int k = 7;
	for (i = 0; i < sz; i++)
	{
		if (arr[i] = k)
		{
			printf("找到了,下标为:%d\n",i);
			break;
		}
	}
	if (i == sz)
	{
		printf("找不到\n");
	}
	return 0;
}
//二分查找
//二分查找算法的时间复杂度是log以2为底的n次方
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0
	int right = sz - 1;
	int mid = (left + right) / 2;
	int k = 7;
	while (left <= right);
	{
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		elseif(arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下标为:%d\n", mid);
			break;
		}
	}
	if (left > right)
	{
		printf("找不到\n");
	}
	return 0;
}
//优化:防止数值溢出
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0
	int right = sz - 1;
	int mid = left + (right - left)/2;
	int k = 7;
	while (left <= right);
	{
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		elseif(arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下标为:%d\n", mid);
			break;
		}
	}
	if (left > right)
	{
		printf("找不到\n");
	}
	return 0;
}

4.演示个字符从两端移动,向中间汇聚

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
	char arr1[] = { "Happy Sister weiwei"};
	char arr2[] = { "###################" };
	int left = 0
	int right = strlen(arr1) - 1;
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);
		system("cls");
		left++;
		right--;
	}
	return 0;
}

5.模拟用户登录场景,只能登录三次,允许输入三次密码,密码               正确则提示登录成功,三次均错误,退出程序

代码语言:javascript
复制
#include<stdio.h>
//比较两个字符串是否相等,不能使用==而应该使用字符串函数strcmp
int main()
{
	int i = 0;
	//假设密码是字符串 abcdef
	char password[20] = { 0 };
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:->");
		scanf("%s", password);
		if (strcmp(password, "abcdef") == 0)
		{
			printf("登录成功\n");
			break;
		}
		else
		{
			printf("密码错误\n");
		}

	}
	if (i == 3)
	{
		printf("三次密码均输入错误,退出程序\n");
	}
	return 0;
}

6.猜数字游戏(函数形式)

代码语言:javascript
复制
#include<stdio.h>
void menu()
{
	printf("***************************\n");
	printf("**********  1.play  *******\n");
	printf("**********  0.exit  *******\n");
	printf("***************************\n");
}
void game()
{
	//时间戳 现在的时间点相当于计算机起始时间的差值 单位是秒
	//1.生成随机数
	//0-RAND_MAX(32767)
	int guess = 0;
	int ret = rand() % 100 + 1;//生成随机数的函数
	//2.猜数字
	printf("请猜数字:->");
	scanf("%d", &guess);
	while(1)
		if (guess < ret)
		{
			printf("猜小了\n");
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
		}
		else
		{
		printf("恭喜你,猜对了!\n");
		break;
		}
}
int main()
{
	//猜数字游戏
	//电脑产生一个随机数(1-100)
	//猜数字 猜大了 猜小了 直到猜对了结束
	int input = 0;
	srand((unsigned int)time(NULL));//不是每一次产生随机数都要调用 整个工程中只生成一次就可以了,所以放在main函数中
	do
	{
		menu();
		printf("请选择:->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//猜数字的整个逻辑
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择!\n");
			break;
		}

	} while (input);
	
	return 0;
}

7.关机小程序

代码语言:javascript
复制
//电脑运行起来后 1分钟内关机
//如果输入我是猪 就取消关机
 方法一
 int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 60");
	again:
	printf("请注意你的60秒内关机,如果输入:我是猪,就取消关机\n");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
}
方法二
int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 60");
	while (1)
	{
		printf("请注意你的电脑将在60秒内关机,如果输入我是猪,就取消关机");
		scanf("%s", input);
		if (strcmp(input, "我是猪") == 0)
		{
			system("shutdown -a");
			break;
		}
	}
	return 0;
}

C语言编程训练(牛客网):

1.BC9——printf函数的返回值

代码语言:javascript
复制
#include <stdio.h>

int main()
{
    int n = printf("Hello world!");
    puts("");
    printf("%d\n",n);
    return 0;
}

2.BC11——学生基本信息输入输出

代码语言:javascript
复制
#include <stdio.h>

int main()
{
   int id = 0;
   float c = 0.0f;
   float math = 0.0f;
   float Eng = 0.0f;
   //输入
   scanf("%d;%f,%f,%f",&id,&c,&math,&Eng);
   //输出
   printf("The each subject score of No. %d is %.2f, %.2f, %.2f.\n",id,c,math,Eng);
    return 0;
}

3.BC13——ASCII码

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int arr[]={73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33};
    int i = 0;
    while(i < sizeof(arr)/sizeof(arr[0]))
    {
        printf("%c",arr[i]);
        i++;
    }
    return 0;
}

4.BC14——出生日期输入输出

代码语言:javascript
复制
#include <stdio.h>

int main()
{
    int year = 0;
    int month = 0;
    int date = 0;
    scanf("%4d%2d%2d",&year,&month,&date);
    printf("year=%d\n",year);
    printf("month=%02d\n",month);
    printf("date=%02d\n",date);
    return 0;
}

5.BC25——计算体重指数

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
   int weight = 0;
   int high = 0;
   scanf("%d %d",&weight,&high);
   float BMI = weight/(high/100.0)/(high/100.0);
   printf("%.2f\n",BMI);
    return 0;
}

6.BC27——计算球体的体积

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    double r = 0.0;
    double v = 0.0;
    scanf("%lf",&r);
    v = 4/3.0 * 3.1415926 * r * r * r;
    printf("%.3lf",v);
    return 0;
}

 7.BC123——小乐乐找最大数

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    int arr[4]={0};
    int i = 0;
    while(i < 4)
    {
        scanf("%d",&arr[i]);
        i++;
    }
    int max = arr[0];
        i = 1;
    while(i<4)
    {
        if(arr[i]>max)
            {
            max = arr[i];
            };
            i++;
    }
    printf("%d\n",max);
    return 0;
}

 8.BC131——KIKI学程序设计基础

代码语言:javascript
复制
#include <stdio.h>

int main() 
{
    printf("printf(\"Hello world!\\n\");\n");
    printf("cout << \"Hello world!\" << endl;\n");
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分支循环语句::
    • 分支语句:
      • 1.if...else语句
        • if...else语句的执行结构
      • if...else if...else语句
        • 2.悬空else
          • 3.if书写形式的对比及练习
            • if书写形式的对比
          •  练习1:判断一个数是否为奇数
            •  练习2:输出1-100之间的奇数   
              •  4.switch语句
                • 5.switch语句中的break
                  •  6.default子句
                    • 循环语句:
                      • 1.while循环
                        • 2.while循环中的break和continue
                          • 下面三段代码的功能分别是:
                            • 3.for循环
                              • 4.for循环中的break和continue
                                •  5.for循环的变种及一道笔试题
                                  • 一道笔试题
                                    • 6.do...while循环
                                      •  7.do...while循环中的break和continue
                                        •  8.goto语句
                                          • 分支循环语句代码训练:
                                            • 1.计算n的阶乘
                                              • 2.计算1!+2!+3!+......+10!
                                                • 3.在一个有序数组中查找具体的某个数字n(折半查找算法)
                                                  • 4.演示个字符从两端移动,向中间汇聚
                                                    • 5.模拟用户登录场景,只能登录三次,允许输入三次密码,密码               正确则提示登录成功,三次均错误,退出程序
                                                      • 6.猜数字游戏(函数形式)
                                                        • 7.关机小程序
                                                          • C语言编程训练(牛客网):
                                                            • 1.BC9——printf函数的返回值
                                                              • 2.BC11——学生基本信息输入输出
                                                                • 3.BC13——ASCII码
                                                                  • 4.BC14——出生日期输入输出
                                                                    • 5.BC25——计算体重指数
                                                                      • 6.BC27——计算球体的体积
                                                                        •  7.BC123——小乐乐找最大数
                                                                          •  8.BC131——KIKI学程序设计基础
                                                                          相关产品与服务
                                                                          云开发 CloudBase
                                                                          云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                                                                          领券
                                                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档