[C语言]分支循环语句

目录

分支循环语句::

分支语句:

        1.if...else语句

        2.悬空else

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

        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学程序设计基础


分支循环语句::

分支语句:

1.if...else语句

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

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

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

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

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

#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语句

#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比较:会发现适当的使用{}可以使代码的逻辑更加清楚,代码风格很重要。

//代码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风格更好一些,逻辑更加清晰,不容易出错。

//代码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:判断一个数是否为奇数

#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之间的奇数   

#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后跟整型常量表达式。

#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语句。

#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\n");
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

6.default子句

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

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

#include<stdio.h>
//程序的输出结果是什么
int main()
{
    int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;//m=3
	case 2:
		n++;//n=2
	case 3:
		switch (n)
		{
			//switch允许嵌套使用
		case 1:
			n++;
		case 2:
			m++;//m=4
			n++;//n=3
			break;
		}
	case 4:
		m++;//m=5
		break;
	default:
		break;
	}
	printf("m=%d,n = %d\n", m, n);
	return 0;
}
//输出结果是 m = 5 n = 3

循环语句:

1.while循环

while语句

#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语句的判断部分,进行下一次循环入口的判断。

#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

 

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

#include<stdio.h>
//获取键盘上的字符并将其输出 功能:自动换行
//代码1
int main()
{
    int ch = 0;
    while((ch = getchar()) != EOF)
        putchar(ch);
    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循环的风格更好,使用频率也最高。

#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 = 1; i <= 100; i++)
	{
		sum += i;
	}
	printf("sum = %d\n", sum);
	return 0;
}

 

 4.for循环中的break和continue

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

#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循环的变种

#include<stdio.h>
int main()
{
	//代码1
	for (;;)
	{
		printf("haha\n");
	}
	//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议省略
	//运行结果为死循环打印haha
	//代码2
	int i = 0;
	int j = 0;
    int count = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("haha\n");
            count++;
		}
	}
    printf("%d\n", count);
	//运行结果为打印100个haha
	//代码3
	int i = 0;
	int j = 0;
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("haha\n");
		}
	}
    //i=0时,进入内循环,j=0满足条件,执行10次,第一次内循环结束,此时j=10,第二次外循环,i=1
    //j依然为10,不满足循环条件,不进入内循环
	//运行结果为打印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;
    //运行结果为打印2个haha
}

 

 

 

 一道笔试题

#include<stdio.h>
//问程序循环多少次
int main()
{
    int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)
	{
		k++;
	}
	return 0;
//判断语句为k=0,注意该操作符为赋值操作符,又因为k被赋值为0,0为假,不进入循环,执行0次
//答案:0次

6.do...while循环

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

#include<stdio.h>
int main()
{
    int a = 1;
	do
	{
		a++;
		printf("a=%d\n", a);
	} while (a < 10);
	return 0;
}
//程序输出结果为2,3,4,5,6,7,8,9,10

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

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

 8.goto语句

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

注:一个工程中可以有多个.c,但是多个.c只能有一个main函数

#include<stdio.h>
int main()
{
    for(...)
    {    
        for(...)
        {
            for(...)
            {
                if(diaster)
                    goto error;
            }
        }
    }
error:
    if(diaster)
    return 0;
}

分支循环语句代码训练:

1.计算n的阶乘

#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!

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

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

#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 k = 7;
	while (left <= right)
	{
		int mid = (left + right) / 2;	
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (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 k = 7;
	while (left <= right)
	{
		int mid = left + (right - left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下标为:%d\n", mid);
			break;
		}
	}
	if (left < right)
	{
		printf("找不到\n");
	}
	return 0;
}

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

#include<stdio.h>
#include<string.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--;
	}
	printf("%s\n", arr2);
	return 0;
}

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

#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.猜数字游戏(函数形式)

时间戳:现在的时间相对于计算机起始时间的差值,单位是秒,time函数返回的就是时间戳。虽然要求在rand函数调用之前调用srand,但不是要求每次调用rand函数都调用srand,而是在整个工程中设置一次就可以了。

注:rand函数生成随机数的范围是0—32767

#include<stdio.h>
void menu()
{
	printf("***************************\n");
	printf("**********  1.play  *******\n");
	printf("**********  0.exit  *******\n");
	printf("***************************\n");
}
void game()
{
	int ret = rand() % 100 + 1;
	int guess = 0;
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了\n");
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned  int)time(NULL));
	int input = 0;
	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.关机小程序

//电脑运行起来后 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函数的返回值

 

#include <stdio.h>

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

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

 

#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码

 

#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——出生日期输入输出

 

#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——计算体重指数

#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——计算球体的体积

 

#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——小乐乐找最大数

 

#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学程序设计基础

 

#include <stdio.h>

int main() 
{
    printf("printf(\"Hello world!\\n\");\n");
    printf("cout << \"Hello world!\" << endl;\n");
    return 0;
}

  • 39
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值