Views: 0
if语句
使用场景:某些代码,在满足条件的时候才执行
利用if语句对数据进行判断,从而执行不同的代码
格式
if(关系表达式){
语句体;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int a, b;
printf("请输入两个数字:");
scanf("%d %d", &a, &b);
if (a < b)
{
printf("大的数字为:%d",b);
if (a>b)
{
printf("大的数字为:%d", a);
}
}
else
{
printf("两个数字一样大");
}
return 0;
}
细节1:在C语言当中,如果判断的结果是一个数字,非0表示条件成立,0表示条件不成立
细节2:如果大括号里面的语句体只有一行,那么大括号可以省略不写(但是还是写的好)
if(关系表达式)
{
语句体A;
}
else
{
语句体B;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
double w;
printf("请输入人的温度:");
scanf("%lf",&w);
if (w > 37.5)
{
printf("温度过高,语音警报");
}
return 0;
}
if(关系表达式A){
语句体A;
}
else if(关系表达式B){
语句体B;
}
else if(关系表达式C){
语句体C;
}
else{
语句体N;
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
/
需求:
键盘录入游戏氪金的总额度,不同的额度VIP等级也不一样
1~99元 : 尊贵的VIP1
100~499元 : 尊贵的VIP2
500~999元 : 尊贵的VIP3
1000~1999元 : 尊贵的VIP4
* 2008~5000元 : 顶级的VIP5*
/
int money;
printf("录入游戏氪金的总额度:\n");
scanf("%d", &money);
if (money ==0)
{
printf("0冲玩家\n");
}
else if (money>=1 && money<=99)
{
printf("尊贵的VIP1\n");
}
else if(money>=100 && money<=499)
{
printf("尊贵的VIP2\n");
}
else if (money >= 500 && money <= 999)
{
printf("尊贵的VIP3\n");
}
else if (money >= 10000 && money <= 1999)
{
printf("尊贵的VIP4\n");
}
else
{
printf("顶级的VIP5\n");
}
return 0;
}
switch语句
作用:把所有的选择一一列举出来,根据不同的条件任选其一
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n;
break;
}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
//需求:键盘录入月份数,输出输出对应的季节。
//春季:3、4、5月份
//夏季 : 6、7、8月份
//秋季 : 9、18、11月份
//冬季 : 12月份到次年的2月份
int month;
printf("请输入月份:");
scanf("%d",&month);
switch (month)
{
case 12:
case 1:
case 2:
printf("冬季\n");
break;
case 3:
case 4:
case 5:
printf("春季\n");
break;
case 6:
case 7:
case 8:
printf("夏季\n");
break;
case 9:
case 10:
case 11:
printf("秋季\n");
default:
printf("没有这个月份\n");
break;
}
return 0;
}
执行流程:
首先计算表达式的值。
依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句
格式细节说明:
表达式:计算结果只能为(字符/整数)
case:值只能是(字符 /整数)的字面量,不能是变量
case:值不允许重复
break:表示中断,结束的意思,结束switch语句
defaut:所有情况都不匹配,执行该处的内容 defaut可以写在任意位置,甚至可以省略不写
switch和if第三种格式各自的使用场景:
switch:有限个case进行匹配的情况,10个左右
if:一般是对一个范围进行判断
case穿透的规则:
还是根据小括号中表达式的结果去匹配对应的case
执行对应case里面的代码
如果在执行的过程中,遇到了break,那么直接结束整个switch,但是如果没有遇到break,就会继续执行下面case中的代码,直到遇到break,或者把整个switch中所有的代码全部执行完了,才会结束
细节:case穿透只会往下穿,不会回上面
循环结构
循环:重复的执行某件事情
for循环
for(初始化语句;条件判断语句;条件控制语句){
循环体语句
}
//每段代码是单独的,用的时候注释掉其他
#include<stdio.h>
int main() {
for (int i = 0; i <5; i++)
{
printf("你早睡了吗?\n");
}
//需求:在实际开发中,如果要获取一个范围中的每一个数据时,就会用到循环
//要求1 : 打印1 - 5
//要求2 : 打印5 - 1
for (int i = 1; i <= 5; i++) {
printf("%d\t", i);
}
printf("\n");
for (int j = 5; j >= 1; j--) {
printf("%d\t", j);
}
//需求:在实际开发中,如果要获取一个范围中的每一个数据时,也会用到循环。
// 要求:求1 - 5之间的和
//变量的生命周期:变量只在所属的大括号中有效
int s=0;
for (int i = 1; i <= 5; i++) {
s = i + s;
}
printf("%d\n", s);
//需求:在实际开发中,如果要获取一个范围中的每一个数据时,会用到循环。
// 但是,如果不想获取所有的数据,而是获取其中符合要求的数据,此时就需要循环和其他语句结合使用了。
// 比如:求1 - 100之间的偶数和
int s = 0;
for (int i = 1; i <= 100; i++) {
if (i%2==0)//判断,只有当前的数字是偶数的时候,才进行累加
{
s = i + s;
}
}
printf("%d\n", s);
//需求:键盘录入两个数字,表示一个范围。
//统计这个范围中。
//既能被6整除,又能被8整除数字有多少个 ?
int a, b,count=0;//count用来统计个数
printf("请输入两个数字代表范围:");
scanf("%d %d",&a,&b);
if (a < b) {//判断输入的两个哪个数字较大
for (int i = a; i <= b; i++) {
if (i % 6 == 0 && i % 8 == 0) {
/
*printf("%d\n",i);*
/
count++;
}
}
}
else {
for (int i = b; i <= a; i++) {
if (i % 6 == 0 && i % 8 == 0) {
/
*printf("%d\n",i);*
/
count++;
}
}
}
printf("既能被6整除,又能被8整除数字有%d个\n",count);
return 0;
}
初始化语句:循环的开始条件
条件判断语句:循环的结束条件
条件控制语句:控制循环次数的
循环体语句:要重复执行的代码
执行流程: 1
执行初始化语句 2
执行条件判断语句,看其结果是否成立 成立:执行循环体语句 不成立:结束循环
3
执行条件控制语句 4
回到2
继续执行条件判断语句
初始化语句只执行一次
判断语句成立,循环继续
判断语句不成立,循环结束
while循环
初始化语句
while(条件判断语句{
循环体语句
条件控制语句
};
#include<stdio.h>
int main() {
//打印三遍你好!
int n=1;
while (n <= 3) {
n++;
printf("你好!\n");
}
}
for和while的对比
相同点:运行规则都是一样的
for 和 while 的区别:
for循环中:知道循环次数或者循环的范围 while循环:不知道循环的次数和范围,只知道循环的结束条件
例题
#include<stdio.h>
int main() {
//给你一个整数 n,请你判断该整数是否是2的幕次方举例 :
//n = 1 输出 : yes 2的0次方
//n = 2 输出 : yes 2的1次方
//n = 3 输出 : no
//n = 4 输出 : yes 2的2次方
//n = 5 输出 : no
//规则:任意的一个数字,不断的除以2,, 最终都会得到数字1
//循环的结束条件是什么 ? 1,结果是1的时候,就可以结束了 yes
//结果无法被2再次整除了,也可以结束了,no
int n;
printf("请输入一个整数:");
scanf("%d", &n);
//利用循环不断的除以2
//小括号里面写的是:什么情况下,循环可以继续执行,跟上面的推断是反过来的
while (n > 1 && n % 2==0) {
{
n = n / 2;
}
}
if (n == 1) {
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
#include<stdio.h>
int main() {
//需求:世界最高山峰是珠穆朗玛峰(8844.43米 = 8844430毫米)
// 假如我有一张足够大的纸,它的厚度是0.1毫米。
// 请问,我折叠多少次,可以折成珠穆朗玛峰的高度 ?
//思路:
// 利用循环折叠纸张,当纸张的厚度超过珠穆朗玛峰的高度,循环就结束了
// 循环的结束条件 : 纸张的厚度 > 穆朗玛峰的高度
int height= 8844430;
double paper = 0.1;
int count = 0;
//利用循环折兽纸张
//小括号里面的内容:什么情况下,循环可以继续执行,跟上面的结束条件是反过来的
while (paper <= height) {
paper = paper * 2;
count++;
}
printf("折叠%d次,可以折成珠穆朗玛峰的高度\n", count);
}
do…while语句
格式
初始化语句;
do {
循环体语句;
条件控制语句;
}while(条件判断语句);
从上到下执行;先执行后判断,循环体至少执行一次
#include<stdio.h>
int main() {
//do while打印1-5
int t=1;
do
{
printf("%d\n", t);
t++;
} while (t <= 5);
return 0;
}
无限循环
三种格式
#include<stdio.h>
int main() {
for (;;) {
printf("无限循环\n");
}
/
while (1) {
printf("无限循环\n");
}
do {
printf("无限循环\n");
* } while (1);*
/
return 0;
}
//注意点:无限循环因为永远停不下来,所以下面不能再写其他的代码了
跳转控制语句
跳转控制语句:在循环的过程中,跳到其他语句上执行
Break
不能单独书写,只能写在switch,或者是循环中,表示结束,跳出的意思
#include<stdio.h>
int main() {
/
找符合要求的数字
* 在1~100之间,找第一个既能被3,又能被5整除的数字*
/
/
int i=0;
while (i < 100) {
i++;
if (i % 3 == 0 && i % 5 == 0) {
printf("%d\n", i);
break;
}
* }*
/
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0 && i % 5 == 0) {
printf("%d\n", i);
break;
}
}
return 0;
}
Continue
只能写在循环中,表示跳过本次循环,继续执行下次循环
#include<stdio.h>
int main() {
//小全全早上一共买了5个包子,吃到第三个包子时,发现里面有个虫子。直接扔掉不吃了,开始吃下一个包子
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
}
printf("在吃第%d个包子\n", i);
}
return 0;
}
嵌套循环
循环嵌套:循环里面还有其他循环
1.先判断最外层循环条件,若满足条件则进入第一层循环体;
2.进入第一层循环体后进行第二层循环条件判断,若满足判断条件,进入第二层循环体;
3.由内而外执行循环体操作;
4.执行完第一次内循环体操作后,进行内循环体变量累加,再次执行内循环体操作,直到不满足进入内循环体条件为止;
5.执行外循环体操作;
6.在第一次外循环体操作完成后,外循环体变量累加,回到步骤1,判断是否满足进入外循环体条件,若满足条件,再次依次执行上述步骤,直到不满足进入外循环体条件为止;
7.彻底退出嵌套循环操作。
#include<stdio.h>
int main() {
//打印矩形
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 5; j++) {
printf("*");
}
printf("\n");
}
printf("\n");
//打印三角形
//解释代码
// 打印第一行的* 内循环:1~5
// 打印第二行的* 内循环:2~5
// 打印第三行的* 内循环:3 ~5
//.....
for (int i = 1; i <= 5; i++) {
for (int j = i; j <= 5; j++) {
printf("*");
}
printf("\n");
}
printf("\n");
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}
printf("\n");
//打印乘法表
for (int i = 1; i <= 9; i++) {//多少行
for (int j = 1; j <= i; j++) {//多少列
int a = i * j;
printf("%d*%d=%d\t", j, i, a);// \t:制表符 长度可变的大空格
}
printf("\n");
}
return 0;
}
\t:制表符 长度可变的大空格
会根据前面字母的个数在后面补空格,让整体的长度达到8或者8的倍数,最少补1个,最多补8个
作用:打印表格数据的时候,可以对齐