C语言 (分支和循环)

分支语句

if语句(条件判断语句)

int main()
{
	int age=0;
	printf("输入年龄:\n");
	scanf("%d", &age);
	if (age < 18)
		printf("未成年\n");
	else if (age >= 18 && age <= 28)
		printf("青年\n");
	else if (age >= 28 && age<= 50)
		printf("壮年\n");
	else if (age >= 50 && age <=80)
		printf("老年\n");
	else
		printf("高龄\n");
	return 0;
}

如果if语句后边有多条代码,需要加大括号{};

#include <stdio.h>
int main()
{
    if(表达式)
   {
        语句列表1;
   }
    else
   {
        语句列表2;
   }
    return 0;
}

悬空else(特别注意)

int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)
        if (b == 2)
            printf("111\n");
        else
            printf("222\n");
    return 0;
}

这段代码输出结果为什么都没有,第一个if不符合直接不执行后边代码,if和离他最近的else匹配

改进后

int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)
       { if (b == 2)
            printf("111\n");
        }
    else
        {    printf("222\n");
        }
    return 0;
}

练习:打印出100以内的奇数

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 0; i < 101; i++)
	{
		if (i%2 == 1)
			printf("奇数=%d\n",i);
	}
	return 0;
}

switch语句(分支语句)

switch语句也是一种分支语句。 常常用于多分支的情况。定义后边判断变量时必须是整型;

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

示例程序

工作日

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

编程习惯:每个case语句中都放default,然后再加上break。

循环语句

 while循环

break与continue

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

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

for循环

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

表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。

int i = 0;
//实现相同的功能,使用while
i=1;//初始化部分
while(i<=10)//判断部分
{
 printf("hehe\n");
 i = i+1;//调整部分
}
//实现相同的功能,使用while
for(i=1; i<=10; i++)
{
 printf("hehe\n");
}

同样的效果显然for循环能够使循环的三个条件位置更加集中,调试代码时不容易忽略条件,所以for循环更胜一筹。

for语句循环控制变量

1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}

for循环其它变种

#include <stdio.h>
int main()
{
 //代码1
 for(;;)
 {
 printf("hehe\n");
 }
    //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
题。
    
    //代码2
    int i = 0;
    int j = 0;
    //这里打印多少个hehe?
    for(i=0; i<10; i++)
   {
        for(j=0; j<10; j++)
       {
 printf("hehe\n");
       }
   }
    
    //代码3
    int i = 0;
    int j = 0;
    //如果省略掉初始化部分,这里打印多少个hehe?
    for(; i<10; i++)
   {
        for(; j<10; j++)
       {
 printf("hehe\n");
       }
   }
    
 //代码4-使用多余一个变量控制循环
 int x, y;
    for (x = 0, y = 0; x<2 && y<5; ++x, y++)
   {
        printf("hehe\n");
   }
 return 0;
}

do...while循环

这个循环程序至少会被执行一次,不经常使用。

#include <stdio.h>
int main()
{
 int i = 10;
 do
 {
 printf("%d\n", i);
 }while(i<10);
 return 0;
}

练习

//
//int main()
//{
//	int i = 0;
//	int n = 0;
//	int j = 0;
//	for (i = 1; i < 10; i++)
//	{
//		for (j = 1; j <=i; j++)
//		{
//			n = i * j;
//			printf("%d*%d=%2d ", i, j, n);
//		}
//		printf("\n");
//	}
//	return 0;
//}



//比大小
//int main()
//{
//	int i = 0;
//	int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	int max= arr[0];
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (i = 0; i < sz; i++)
//	{
//		if (arr[i] > max)
//		{
//			max = arr[i];
//		}
//	}
//	printf("max=%d\n", max);
//	return 0;
//}



//质数
//#include<math.h>
//int main()
//{
//	int i = 0;
//	int n = 0;
//	for (i = 100; i <=200; i++)
//	{
//		int j = 0;
//		for (j = 2; j <=sqrt(i); j++)
//		{	
//			if (i % j == 0)
//			{
//				break;
//			}
//		}
//		if (j>sqrt(i))
//		{
//			printf("%d\n", i);
//			n++;
//		}
//	}	printf("%d\n", n);
//	return 0;
//}



//闰年
//int main()
//{
//	int year = 1000;
//	int i = 0;
//	for (year = 1000; year <= 2022; year++)
//	{
//		if (year % 4 == 0 && year % 100 != 0)
//		{
//			printf("%d  ", year);
//			i++;
//		}
//	}
//	printf("%d\n", i);
//	return 0;
//}




//打印一百以内3的倍数
//int main()
//{
//	int i = 0;
//	for (i = 0; i <= 100; i++)
//	{
//		if (i%3 == 0)
//			printf("%d\n", i);
//
//	}
//	return 0;
//}


//最大公约数
//int main()
//{
//	int m = 0;
//	int n = 0;
//	int r = 0;
//	scanf("%d%d",&m,&n);
//	while (r = m % n)
//	{
//		m = n;
//		n = r;
//	}
//	printf("%d", n);
//	return 0;
//}




//比大小
//int main()
//{
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	scanf("%d %d %d",&a,&b,&c);
//	if (a < b)
//	{
//		int tmp = a;
//		a = b;
//		b = tmp;
//	}
//	if (a < c)
//	{
//		int tmp = a;
//		a = c;
//		c = tmp;
//	}
//	if (b < c)
//	{
//		int tmp = b;
//		b = c;
//		c = tmp;
//	}
//	printf("%d%d%d\n", a, b, c);
//	return 0;
// }



//#include<stdio.h>
//#include<string.h>
//int main()
//{   int i= 0;
//	char password[20] = {0};
//	for (i = 0; i < 3; i++)
//	{
//		printf("请输入密码:");
//		scanf("%s", password);
//		if(strcmp(password, "123456") == 0)
//		{
//			printf("登陆成功\n");
//			break;
//		}
//		else
//		{
//			printf("密码错误!\n");
//		}
//	}
//	if (i == 3)
//		printf("超过三次,无法登陆。\n");
//	return 0;
//}



//滚动文字
//#include<stdio.h>
//#include<string.h>
//#include<windows.h>
//#include<stdlib.h>
//
//int main()
//{
//	char arr1[] = { "welcome to here!" };
//	char arr2[] = { "################" };
//	int left = 0;
//	int right = strlen(arr1) - 1;
//	while(left<right)
//	{
//	arr2[left] = arr1[left];
//	arr2[right] = arr1[right];
//	left++;
//	right--;
//	Sleep(1000);
//	system("cls");
//	printf("%s\n", arr2);
//    }
//	printf("welcome to here!");
//	return 0;
//}




//找数字
//int main()
//{
//	int left = 0;
//	int arr[ ] = {0, 1, 2, 3, 4, 6, 7, 8, 9};
//	int right = sizeof(arr) / sizeof(arr[0])-1;
//	int n = 0;
//	int mid = 0;
//	printf("输入一个数:");
//	scanf("%d",&n);
//	while(left<=right)
//	{ 
//		mid = (left+right)/2;
//		if(arr[mid]<n)
//		{
//			left = mid+1;
//		}
//		else if ( arr[mid]>n)
//		{
//			right = mid-1;
//		}
//		else
//		{
//			printf("找到了,下标=%d\n", mid);
//			break;
//		}
//	}
//	if(left>right)
//	{
//		printf("输入错误!"); 
//	}
//	return 0;
//}



//阶乘相加
//int main()
//{
//	int i = 0;
//	int n = 0;
//	int sum = 0;
//	int ret = 1;
//	for (n = 1; n <= 3; n++)
//	{
//		ret = 1;
//    for (i = 1; i <= n; i++)
//	{
//		ret = ret* i;
//	}
//		sum = ret + sum;
//	}
//	printf("%d", sum);
//
//	return 0;
//}


//任意数阶乘
//int main()
//{
//	int i = 0;
//	int n = 9;
//	int sum = 1;
//	for (i = 1; i <=n; i++)
//	{
//		sum = sum* i;
//	}
//	printf("%d",sum);
//	return 0;
//}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值