C语言学习——流程控制

一、选择结构与判断语句

1、if()…else…

(1)用if语句:

①<(小于)
②<=(小于等于)
③>(大于)
④>=(大于等于)
⑤==(等于)
⑥!=(不等于)
①②③④优先级高,⑤⑥优先级低

例1:

#include<stdio.h>

int main()
{
	int money;
	printf("请问你有多少钱?\n");
	scanf_s("%d", &money);
	if (money > 100)  
		               
	{
		printf("有钱人\n");
	}
	puts("谈话结束\n");
	printf("测试结果%d\n", money > 100);

	return 0;
}

注意: if (money > 100) //== 才是判断,if()括号的内容终究会转换成0, 1,是1(true)才会执行大括号里的内容*/
运行结果:
在这里插入图片描述

例2:
任意输入两个整数,按从小到大排列

#include<stdio.h>

int main()
{
	int a;
	int b;
	int c;

	printf("任意输入两个整数,按从小到大排列\n");
	scanf_s("%d%d",&a,&b);

	if (a > b)
	{
		c = a;
		a = b;
		b = c;
		printf("从小到大排列为:\n");
		printf("%d %d", a, b);
	}
	else
	{
		printf("%d %d",a,b);
	}
	return 0;
}

运行结果:
在这里插入图片描述

(2)逻辑运算符:&&(与)、||(或)、!(非)

#include<stdio.h>

int main()
{
	int a;
	int b;

	printf("请输入两个数:\n");
	scanf_s("%d%d",&a,&b);

	if (a == 1 && b == 0)//&&的左右两边都要满足
	{
		printf("逻辑与成功\n");
	}
	if (a == 1 || b == 0)//||的左右两边,满足其一即可
	{
		printf("逻辑或成功\n");
	}
	if (!a)
	{
		printf("逻辑非成功\n");
	}
	return 0;
}

(3)if…else

练习:输入一个字符,判别它是否为大写字母,如果是,将它转换为小写字母;如果不是,不转换,然后输出最后得到的字符。

#include<stdio.h>

int main()
{
	char cdata;

	printf("请输入一个字符:\n");
	scanf("%c",&cdata);
	if (cdata >= 97 && cdata <= 122) {
		printf("%c",cdata);
	}
	else if (cdata >= 65 && cdata <= 90) {
		printf("%c",cdata+32);
	}
	else {
		printf("请输入正确的字符\n");
	}

	return 0;
}

在这里插入图片描述

2、switch…case

(switch case 多个分支,每个分支都要加case)
if语句只有两个分支可供选择,而实际问题中常常需要用到分支的选择,例如学生成绩分类(85分以上为’A’,70-84分为‘B’,60-69为‘C’),人口分类(按年龄分为老中青少儿童),工资统计分类等,当然这些也可以用嵌套if语句来处理,但如果分支较多,则嵌套if语句层数多,程序冗长而且可读性降低,C语言提供switch语句直接处理多分支选择
例1:

#include<stdio.h>

int main()
{
	int data;
	printf("请输入一个数字:\n");
	scanf("%d",&data);
	switch (data) {
		case 1:
			printf("满足了第一种情况");
			break;
		case 2:
			printf("满足了第二种情况");
			break;
		case 3:
			printf("满足了第三种情况");
			break;
		default:
		puts("其他列表情况");
	}

	return 0;
}

例2:

#include<stdio.h>

int main()
{
	int data;
	char cdata;
	printf("请输入一个数字:\n");
	scanf("%d",&data);
	switch (data) {
		case 1:
		case 2:
		case 3:
			printf("满足了1,2,3种情况\n");
			break;
		case 4:
			printf("满足了第4种情况\n");
			break;
		default:
		puts("其他列表情况\n");
	}

	getchar();//注意:%c,空格、回车也会占一个字符,用getchar()吸收掉
	printf("请输入一个字符:\n");
	scanf("%c", &cdata);
	switch (cdata) {
	case 'a':
		puts("满足了a的情况");
		break;
	case 'b':
		puts("满足了b的情况");
		break;
	case 'c':
		puts("满足了c的情况");
		break;
	default:
		puts("其他列表情况");
	}

	return 0;
}

getchar();//注意:%c,空格、回车也会占一个字符,用getchar()吸收掉

练习:switch练习学生成绩等级划分

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int score;
	printf("请输入学生成绩:\n");
	scanf("%d",&score);
	switch (score/10) {
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			puts("D,不及格");
			break;
		case 6:
		case 7:
			puts("C,良");
			break;
		case 8:
			puts("B,中");
			break;
		case 9:
		case 10:
			puts("A,优秀");
			break;
			puts("done");
		default:
			puts("请输入数字");
	}

	return 0;
}

折扣:if else实现

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int zhekou;
	int lucheng;
	
	puts("请输入路程");
	scanf("%d",&lucheng);

	if (lucheng<250) {
		zhekou = 0;
	}
	else if (lucheng >= 250&&lucheng < 500) {
		zhekou = 2;
	}
	else if (lucheng >= 500 && lucheng < 1000) {
		 zhekou = 5;
	}
	else if (lucheng >= 1000 && lucheng < 2000) {
		zhekou = 8;
	}
	else if (lucheng >= 2000 && lucheng < 3000) {
		 zhekou = 10;
	}
	else {
		zhekou=15;
	}

	printf("折扣是:%.2f\n",(float)zhekou/100);
	return 0;
}

折扣:switch case实现

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int lucheng;
	int zhekou;
	puts("请输入路程:");
	scanf("%d",&lucheng);
	switch (lucheng/250) {
		case 0:
			zhekou = 0;
			break;
		case 1:
			zhekou = 2;
			break;
		case 2:
		case 3:
			zhekou = 5;
			break;
		case 4:
		case 5:
		case 6:
		case 7:
			zhekou = 8;
			break;
		case 8:
		case 9:
		case 10:
		case 11:
			zhekou = 10;
			break;
		default:
			zhekou = 15;
			break;
	}
	printf("折扣是%.2f\n",(float)zhekou/100);

	/*<250 0  折扣0
	>=250 <500  1 zhekou2
	>=500<1000 2 3  zhekou5
	>=1000<2000  4 5 6 7 zhekou8
	>=2000<3000  8 9 10 11 zhekou10
		其他折扣15*/

	return 0;
}

3、作业

作业1:有一个函数
在这里插入图片描述
写程序,输入x的值,输出y相应的值。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int x;
	int y;
	puts("请输入数字:");
	scanf("%d",&x);
	if (x<1) {
		printf("%d\n",y=x);
	}
	else if(x>=1&&x<10){
		printf("%d\n",2*x-1);
	}
	else if (x>=10) {
		printf("%d\n",3*x-11);
	}else printf("请重新输入\n");
	return 0;
}

运行结果:
在这里插入图片描述
作业2:给出一百分制成绩,要求输出成绩等级‘A’、‘B’,‘C’,‘D’,‘E’.90分以上为‘A’,80~89分为’B’,70-79分为’C’,60-69分为’D’,60分以下为‘E’。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int score;
	puts("请输入分数:");
	scanf("%d",&score);
	switch(score/10){
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			puts("E"); 
			break;
		case 6:
			puts("D");
			break;
		case 7:
			puts("C");
			break;
		case 8:
			puts("B");
			break;
		case 9:
		case 10:
			puts("A");
			break;
		default:
			puts("请重新输入");		
	}
	return 0;
}

运行结果:
在这里插入图片描述

二、while循环控制语句

(1)while

例1:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int times;
	times = 10;
	while (times) {//只要条件为真,就一直执行,if,只执行一次
					//避免死循环,到一定程度能满足退出条件。除c51单片机代码
		puts("1+1=2");
		times = times -1;
		//times--;
	}

	return 0;
}

例2:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int times=0;

	while (times<10) {//只要条件为真,就一直执行,if,只执行一次
					//避免死循环,到一定程度能满足退出条件。除c51单片机代码
		puts("1+1=2");
		times = times +1;
		printf("times=%d\n",times);		
	}
	return 0;
}

运行结果:
在这里插入图片描述
例3:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int times=0;

	while (times<10) {
		puts("1+1=2");
		printf("times=%d\n",times);	
		times = times + 1;
		//times++;//自加
	}
	return 0;
}

练习:while循环计算1到100所有数据之和

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int sum = 0;//变量最好初始化为0,编码习惯
	int data = 1;//第一个表达式,条件初始值
	
	while (data <= 100) {//第二个表达式,条件临界值
		sum = sum + data;
		data++;//第三个表达式,条件发生变化
	}
	printf("1到100的和为:%d\n", sum);

	return 0;
}

(2)do while

#include<stdio.h>

int main()
{
	int data = 1;

	do {
		printf("this is a test!\n");
		data--;
	} while (data != 0);//先执行完再判断,满足条件继续执行循环

	return 0;
}

运行结果:
在这里插入图片描述

三、 for循环控制语句

形式:
在这里插入图片描述

例1:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int data;
	//条件赋初值  判断临界值 条件改变
	for (data = 0; data < 10;data++) {
		printf("1+1=2\n");//循环体
	}//while(1)、for(;;);  死循环

	return 0;
}

四、用break提前结束循环

例:在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int numOfPerson;
	int totalMoney = 0;
	int money;
	for (numOfPerson = 1; numOfPerson <= 1000;numOfPerson++) {
		puts("请输入捐款数:");
		scanf("%d",&money);
		totalMoney = totalMoney + money;
		if (totalMoney >= 100000) {
			puts("捐款已达到十万");
			break;
		}	
	}
	printf("捐款人数为%d\n", numOfPerson);
	printf("平均每人捐款%f\n", (float)totalMoney / numOfPerson);//注意这两个的位置
	return 0;
}

五、用continue提前结束本次循环

例:要求输出100~200之间的不能被3整除的数(能被3整除就continue结束本次循环,执行新的循环)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int data;
	for(data=100;data<=200;data++){
		if (data%3==0) {
			continue;//符合被3整除,结束本次循环,执行data++,继续新的循环,!=0,执行printf("%d    ",data);
		}
		printf("%d  ",data);
	}
	return 0;
}

在这里插入图片描述

六、循环嵌套(输出某个规律的数列)

例:输出以下4*5的矩阵
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20

#define _CRT_SECURE_NOWARNINGS
#include<stdio.h>

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

运行结果:
在这里插入图片描述

七、作业

作业1:输入两个正整数m和n,求其最大公约数和最小公倍数。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int num1,num2,temp,a,b;
	puts("请输入两个数:");
	scanf("%d%d",&num1,&num2);
	while (num1 < num2)
	{
		temp = num1;
		num1 = num2;
		num2 = temp;
	}
	a = num1;
	b = num2;
	while (b != 0) 
	{
		temp = a % b;
		a = b;
		b = temp;
	}
	printf("两个数的最大公约数是:%d\n",a);
	printf("两个数的最小公倍数是:%d\n",num1*num2/a);
	return 0;
}

运行结果:
在这里插入图片描述

作业2:水仙花数
(水仙花数:一个三位数,它的个位、十位、百位数字的立方和,恰好等于该数本身)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	int a, b, c,d;
	for (a = 100; a <= 999; a++) {
		b = a / 100;//百分位
		c = a / 10 % 10;//十分位
		d = a % 10;//个位
		if (a == b * b * b + c * c * c + d * d * d) {
			printf("%d\n",a);
		}
	
	}
	return 0;
}

在这里插入图片描述

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值