C语言 | 第九章 | break continue 枚举

P 81 breakd执行流程分析 2022/12/12

一、需求引入

  • 随机生成一个数,直到生成了97这个数,看看你一共用了几次?

提示使用

  1. rand() 返回一个范围在 0 到 RAND_MAX 之间的伪随机数
  2. rand() 函数 在 stdlib.h 头文件.
c 复制代码
#include<stdio.h>
#include<stdlib.h>

void main(){
	int i = 1;
	int count = 0;
	for(i=1;; i++){
		int num = rand()%100; // 如果要产生1~100,则是这样:int num = rand() % 100 + 1;
// 总结来说,可以表示为:int num = rand() % n +a;其中的a是起始值,n-1+a是终止值,n是整数的范围。
		printf("%d\n",num);
		count ++;
		if(num==97){break;}
	}
	printf("在100以内输出97共使用了%d次\n",count);
	getchar();
}

需求:通过该需求可以说明其它流程控制数据的必要性 ,比如break在执行循环的过程中当满足某个条件时,可以提前退出该循环, 这时,就可能使用break

二、基本语法

介绍:break语句用于终止某个语句块的执行,一般使用在switch或者循环[三大循环]中。

三、题目测试

c 复制代码
#include<stdio.h>
void main(){

	int i;
	for(i = 0; i < 10; i++) {
//		if(i ==3) {    //此时如果不添加break,会输出到9
//			break;		// 但是如果加上break会直接跳出循环,只会输出0,1,2;
        				 // 当执行到break的时候会直接退出循环,后面的将不执行
		}
		printf("i=%d\n", i);
	}
	getchar();
}

P 82 break课堂练习题 2022/12/13

一、题目练习

题目一:分析下面代码输出内容是什么?

c 复制代码
#include<stdio.h>
void main(){
	int j,i;
	for( j = 0; j < 4; j++) {
		for( i = 0; i < 10; i++) {
			if(i == 2){    // 使用break语句会直接跳出内层循环
				break ;		// 所以最终结果是输出4个i=0,i=1。
			} 
			printf("i = %d \n" , i);
		}
	}
	getchar();
}

题目二:100以内的数求和,求出 当和 第一次大于20的当前数【for】

c 复制代码
#include<stdio.h>
void main(){
	int i = 1;
	int sum = 0;
	for(i =1; i <= 100 ; i++){
		 sum += i ;
		 if(sum > 20){
			 printf("当和第一次大于20的当前数 = %d",i); // 此时输出6,当添加到20的时候就已经超过20了
			 break;
		 }
	}

	getchar();
}

题目三:实现登录验证,有三次机会,如果用户名为"张无忌" ,密码"888"提示登录成功,否则提示还有几次机会,请使用for 循环完成

c 复制代码
#include<stdio.h>
#include<string.h>
void main(){

	// 分析:
	// 1.  首先要定义一个变量,保存登录的机会(次数)chance
	// 2. 定义两个字符数组,接收用户名
	// 3. 使用for循环+break(如果登录成功就提前退出)

	int chance = 3;
	int logCount = chance; // 登录次数是需要固定
	char name[10] = "";
	char pwd[10] = "";

	int i = 1; // 循环变量
	for(i = 1; i <= logCount ; i++){  // 循环最多登录三次

		printf("\n请输入名字");
		scanf("%s",name);  // 字符数组不用加&符
		printf("\n请输入密码");
		scanf("%s",pwd);

		// 判断字符串是否相同使用strcmp
		if(strcmp("张无忌",name)==0 && strcmp("888",pwd)==0){
			printf("\n登录成功");
			break; //
		}
		else{
			// 机会次数减一
			chance--;
			printf("\n你还有%d次登录机会",chance);
		}
	}
	getchar();
	getchar();
}

P 83 continue执行流程分析 2022/12/23

一、基本介绍

介绍:continue语句用于结束本次循环,继续执行下一次循环;当执行到continue的时候,下面变量的迭代是不会执行的,直接进行下一次循环条件的判断,而不是直接退出整个循环。

二、案例讲解

c 复制代码
#include<stdio.h>

void main() {
	int i = 1;
	while(i <= 4) {
		i++;
		if( i == 3) {
			continue;   // 当i=3的时候,会直接进行下一次条件判断,将不会在执行下面的输出语句
		}
		printf("i=%d\n", i );  // 所以总共会输出 i=2,i=4,i=5 
	}
	getchar();
}

三、案例分析和说明

结合流程分析图,分析内存执行情况

c 复制代码
#include<stdio.h>

void main() {
	int i,j;
	for( j = 0; j < 4; j++){
		for( i = 0; i < 10; i++){
			if(i == 2){
				//看看分别输出什么值,并分析;不会输出i=2
				continue ;
			}
			printf("i = %d\n" , i);
		}
		printf("================\n");
	}
	getchar();
}// 输出 4次 i=0, 1 ,3,4,5,6,7,8,9

P 84 continue课堂练习 2022/12/24

一、注意事项和细节说明

  • continue语句,只能配合循环语言使用,不能单独和switch/if使用。

    c 复制代码
    #include<stdio.h>
    
    void main() {
    	int i = 0;
    	switch(i) {
    	case 1: continue; //错误
    	}
    	if(i > 1) {
    		continue; //错误
    	}}

二、题目练习

  • 题目一 :从键盘读入 个数 不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序【使用for循环 ,break, continue完成】 【positive 正数,negative】
c 复制代码
#include<stdio.h>

void main(){

	/* 题目一 :从键盘读入 个数 不确定的整数,并判断读入的正数和负数的个数,
	输入为0时结束程序【使用for循环 ,break, continue完成】 【positive 正数,negative】*/

	// 分析:
	// 1.定义变量positive保存正数的个数
	// 2.定义变量negative保存负数的个数

	// 3.使用for + break + continue

	int positive = 0;
	int negative = 0;
	int num = 0;  // 接收从控制台输入的数

	for(; ; ){  // 是一个死循环
		printf("请输入数");
		scanf("%d",&num);
		if(num == 0 ){
			break;
		}

		if(num > 0){
			positive++;
			continue;  // 当为正数下面的将不会在执行
		}

		// num是一个负数
		negative++;
	}

	printf("正数个数%d,负数个数%d",positive,negative);

	getchar();
	getchar();
}
  • 题目二:

  • 某人有100,000元,每经过一次路口,需要交费,规则如下:

    1.当现金>50000时,每次交5%

    2.当现金<=50000时,每次交1000

    编程计算该人可以经过多少次路口,使用 while break方式完成

c 复制代码
#include<stdio.h>
void main(){

	//	题目二:某人有100,000元,每经过一次路口,需要交费,规则如下:
	//1.当现金>50000时,每次交5%
	//2.当现金<=50000时,每次交1000
	//编程计算该人可以经过多少次路口,使用 while break方式完成

	// 分析:
	// 1. money 保存 金额
	// 2. 定义变量 count 统计可以经过多少个路口
	// 3. break 条件是money < 1000 时

	int count = 0;
	int money = 100000;  // 现有的money
	while(1){ // 死循环

		if(money < 1000){ // 当现金小于1000的时候,退出循环
			break;
		}

		if (money > 50000){// 当现金大于50000的时候,每次交5%
			money = money * 0.95;

		} else if(money <= 50000){// 当现金小于50000的时候,每次减100
			money -= 1000;
		}
		count++;  // 经过的路口增加1
	}
	printf("100,000元可以经过 %d个路口,剩余%d元",count,money);

	getchar();
}

P 85 goto语句和return语句 2022/12/25

一、goto基本介绍

  • C 语言的 goto 语句可以无条件地转移到程序中指定的行。
  • goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能。
  • 在C程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难

案例说明:

c 复制代码
#include<stdio.h>
void main() {
	printf("start\n");
	goto label1; //label1 称为标签,与下面的标签是要有对应关系的
	printf("ok1\n");
	printf("ok2\n");
label1: 
	printf("ok3\n");
	printf("ok4\n");
	getchar();
} //输出 ok3 和 ok4

二、return基本介绍

  • return使用在函数,表示跳出所在的函数 ,在讲解函数的时候,会详细的介绍,这里我们简单的提一下。

P 86 流程控制综合练习(1) 2022/12/25

一、综合练习

  1. 实现判断一个整数,属于哪个范围:大于0;小于0;等于0 (多分支-if else if )
  2. 判断一个年份是否为闰年 [课堂上讲过:闰年-被四整除但不能被100整除,或者被400整除]
  3. 判断一个整数是否是水仙花数 ,所谓水仙花数是指一个3位数,其各个位上数字立方和等于其本身。例如: 153 = 111 + 55 5 + 333
c 复制代码
#include<stdio.h>
void main(){
	/*
	题目:判断一个整数是否是水仙花数,
	所谓水仙花数是指一个3位数,
	其各个位上数字立方和等于其本身。例如: 153 = 111 + 5*5*5 + 3*3*3

	思路分析:
	1、先获取到一个三位数各个位上的数字
	2、先得到的各个数字(百位、十位、个位)立方并且求和
	*/

	int num,a,b,c;
	printf("\n请输入一个数:");
	scanf("%d",&num);

	a=num/100;  // 百位
	b=(num/10)%10; // 十位
	c=num%10;  // 个位

	if(a*a*a +b*b*b + c*c*c==num){
		printf("\n%d 是水仙花数",num);
	}else{
		printf("\n%d不是水仙花数",num);
	}
	getchar();
	getchar();
}

4.编写程序,根据输入的月份和年份,求出该月的天数(1-12), 就是需要考虑闰年(2月份 29)和平年(2月份 28)

c 复制代码
#include<stdio.h>
void main(){
	//题目:编写程序,根据输入的月份和年份,
	//	求出该月的天数(1-12), 就是需要考虑闰年(2月份 29)和平年(2月份 28)

	// 规则 :
	// 1,3,5,7,8,10,12----31
	// 2月份:闰年(2月份 29)和平年(2月份 28)
	int year = 2020;
	int month = 2;

	switch(month){
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		printf("%d 这一年的%d月是31天",year,month);
		break;
	case 2:
		// 判断year是闰年还是平年
		if(year % 4 ==0 && year %100 != 0 || year % 400 == 0){
			printf("%d 这一年的%d月是29天",year,month);
		}else{
			printf("%d 这一年的%d月是28天",year,month);
		}
		break;
	default:
		printf("%d 这一年的%d月是30天",year,month);

	}
	getchar();
}

P 87 流程控制综合练习(2) 2022/12/25

一、综合练习

  1. 定义变量保存一个数,判断(if)是否能被3整除或(||)能被7整除(%),如果是,则提示:能,否则提示:不能
  2. 输入星期几,如果是星期一到星期三,打印:AAA,星期四到星期五,打印:BBB,星期六到星期日,打印CCC, 如果都不是,提示,输入错误(提示switch+穿透)
  3. 看下面代码输出什么?
c 复制代码
#include<stdio.h>
void main(){

	int b1=0,b2=0;
	// 将 b2==5>0 改成 b2=5>0 又输出什么;赋值运算符的优先级比较低,5>0为真1,b2=1;都为真,则会输出下面内容,b1=0,b2=1
    // 这里改变后,有限考虑的是运算符优先级的问题
	if((b1==2>3) && (b2==5>0)){
	// 	   真=非0              假=0
		printf("\n(b1=2>3) && (b2=5>0)为真");
	}
	printf("\nb1= %d ;b2= %d", b1,b2);
	// 最后输出b1=0,b2=0
	getchar();
}
  1. 看下面代码输出什么?
c 复制代码
#include<stdio.h>
void main(){
	int a=2;
	while(a<2){ //先判断
		printf("\n执行while");
	}

	do{
		printf("执行do-while");
	}while(a<2); //输出一次 "执行do-while "
	getchar();
}
  1. 复习:请使用for、while、do---while 三种形式打印1000------9999年内所有的闰年
c 复制代码
#include<stdio.h>
void main(){
	int count = 0;
	int min = 1000;
	int max = 9999;
	int year;
	for(year=min;year<=max;year++){  // 只展示for循环其他同理
		if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
			printf("%d年是闰年\n",year);
			count++;
		}
	}
	printf("1000到9999中有%d个闰年",count);
	getchar();
}
  1. 输出小写的a-z以及大写的Z---A
c 复制代码
#include<stdio.h>
void main(){
	char c1;
	char c2;
	for(c1 = 'a'; c1 <= 'z'; c1++){
		printf("%c ",c1);
	}
	printf("\n");
	for(c2 = 'Z'; c2 >= 'A'; c2--){
		printf("%c ",c2);
	}
	getchar();
}
  1. 求出1-1/2+1/3-1/4......1/100的和
c 复制代码
#include<stdio.h>
void main(){
	// 题目:求出1-1/2+1/3-1/4.....1/100的和
	// 分析:找到算式的规律,并且求解
	//  1-1/2+1/3-1/4.....1/100---->1/1-1/2+1/3-1/4....1/100
	// 1.分母是奇数,则符号是+;
	// 2.分母是偶数,则符号是-

	double sum = 0.0;
	int i;
	for(i= 1; i <= 100; i++){
		// 如果i是奇数
		if(i % 2 != 0 ){
			sum += 1.0/i; // 注意,考虑保留小数1.0,而不是1
		}else{ // 其余为偶数
			sum -= 1.0/i;
		}
	}
	printf("sum=%.2f",sum); //输出保留2为小数,最终得到0.69
	getchar();
}

P 88 枚举语法和快速入门 2022/12/26

一、引入

引入 :举个例子,比如:一星期有 7 天, 请定义数据表示星期一到星期天

传统方法:

c 复制代码
使用#define 来完成
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7

分析:传统方法代码量比较多,并且不好管理-----> 枚举

二、基本介绍

  1. 枚举是 C 语言中的一种构造数据类型,它可以让数据更简洁,更易读, 对于只有几个有限的特定数据,可以使用枚举.

  2. 枚举对应英文(enumeration, 简写 enum)

  3. 枚举是一组常量的集合,包含一组有限的特定的数据

  4. 枚举语法定义格式为

    enum 枚举名 {枚举元素1,枚举元素2,......};

快速入门:

c 复制代码
#include<stdio.h>
int main(){
	enum DAY
	{
		MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7
	}; // 这里DAY 就是枚举类型, 包含了7个枚举元素
	enum DAY day; // enum DAY 是枚举类型, day 就是枚举变量
	day = WED; //给枚举变量 day 赋值,值就是某个枚举元素
	printf("%d",day);// 3 , 每个枚举元素对应一个值
	getchar();
	return 0;
}

P 89 枚举遍历和在switch使用 2022/12/26

一、枚举的遍历

  • C 语言中,枚举类型是被当做 int 或者 unsigned int 类型 来处理的,枚举类型必须连续是可以实现有条件的遍历。以下实例使用 for 来遍历枚举的元素
c 复制代码
#include<stdio.h>

	enum DAY {
		MON=1, TUE, WED, THU, FRI, SAT, SUN //如果没有给赋值,就会按照顺序赋值
	} day; // 表示 定义了一个枚举类型 enum Day ,同时定义了一个变量 day(类型是 enum DAY)


	int main() {
		// 遍历枚举元素,枚举的每一个元素都对应一个数据
		//day++ 会给出警告,但是可以运行
		for (day = MON; day <= SUN; day++) { // 要求枚举元素是连续赋值
			printf("枚举元素:%d \n", day);
		}
		getchar();
		return 0;
	}

二、枚举在switch中使用

C 语言中,switch 中可以使用枚举类型,案例如下:

c 复制代码
#include<stdio.h>
void main() { 
	enum SEASONS {SPRING=1, SUMMER, AUTUMN, WINTER}; //定义枚举类型 enum SEASONS 
	enum SEASONS season;//定义了一个枚举类型变量 season(类型 enum SEASONS )
	printf("请输入你喜欢的季节: (1. spring, 2. summer, 3. autumn 4 winter): ");
	scanf("%d", &season);
	switch (season) {
	case SPRING:
		printf("你喜欢的季节是春天");
		break;
	case SUMMER:
		printf("你喜欢的季节是夏天");
		break;
	case AUTUMN:
		printf("你喜欢的季节是秋天");
		break;
	case WINTER:
		printf("你喜欢的季节是冬天");
		break;
	default:
		printf("这里没有你喜欢的季节");
	}
	getchar();
	getchar();
}

P 90 枚举类型使用注意事项和细节 2022/12/29

一、注意事项

  1. 第一个枚举成员的默认值为整型的 0(如果没有给予初始值),后续枚举成员的值在前一个成员上加1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推. [案例]

  2. 在定义枚举类型时改变枚举元素的值 [案例]

c 复制代码
enum DAY {
		MON, TUE, WED, THU=9, FRI, SAT, SUN //当THU=9,后面的会自动增加,而前面的未定义的值会默认为0增加到我们定义的位置
	} day;
  1. 枚举变量的定义的形式1-先定义枚举类型,再定义枚举变量 [案例前面讲过]
c 复制代码
	enum DAY   // 这里定义了枚举类型DAY
	{
		MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7
	}; // 这里DAY 就是枚举类型, 包含了7个枚举元素
	enum DAY day; // 然后在定义枚举变量day
  1. 枚举变量的定义的形式2-定义枚举类型的同时定义枚举变量
c 复制代码
	enum DAY {
		MON, TUE, WED, THU=9, FRI, SAT, SUN //如果没有给赋值,就会按照顺序赋值
	} day; // 表示 定义了一个枚举类型 enum Day ,同时定义了一个变量 day(类型是 enum DAY)
  1. 枚举变量的定义的形式3-省略枚举名称,直接定义枚举变量 [案例]

     enum { // 这里省略枚举名称
     	MON, TUE, WED, THU=9, FRI, SAT, SUN 
     } day; // 这样使用枚举,该枚举类型只能使用一次
    
  2. 可以将整数转换为对应的枚举值 [案例]

c 复制代码
#include<stdio.h>
int main() {
	enum SEASONS {SPRING=1, SUMMER, AUTUMN, WINTER};
	enum SEASONS season;
	int n = 4;
	season = (enum SEASONS) n;   // 这里将4转换成枚举类型,然后赋给枚举变量
	printf("season=:%d",season);
	getchar();
	return 0;
}
相关推荐
zongzi_4941 小时前
二次封装的天气时间日历选择组件
开发语言·javascript·ecmascript
平头哥在等你1 小时前
求一个3*3矩阵对角线元素之和
c语言·算法·矩阵
kikyo哎哟喂1 小时前
Java 代理模式详解
java·开发语言·代理模式
duration~1 小时前
SpringAOP模拟实现
java·开发语言
一条晒干的咸魚1 小时前
【Web前端】实现基于 Promise 的 API:alarm API
开发语言·前端·javascript·api·promise
尹蓝锐1 小时前
C语言-11-18笔记
c语言
ahadee1 小时前
蓝桥杯每日真题 - 第18天
c语言·vscode·算法·蓝桥杯
就爱六点起1 小时前
C/C++ 中的类型转换方式
c语言·开发语言·c++
我明天再来学Web渗透2 小时前
【SQL50】day 2
开发语言·数据结构·leetcode·面试
猫猫的小茶馆2 小时前
【C语言】指针常量和常量指针
linux·c语言·开发语言·嵌入式软件