学习目标:

1 控制语句


学习内容:

1 控制语句

在C语言中,控制语句用于控制程序的执行流程。常见的控制语句包括条件语句(if-else语句)、循环语句(for、while、do-while语句)和跳转语句(break、continue、goto语句)等。

条件语句根据表达式的结果选择执行不同的代码块。循环语句可以重复执行一段代码块,直到满足某个条件才停止。跳转语句可以改变程序的执行顺序,使得程序跳转到指定的位置执行。

这些控制语句在C语言中非常重要,可以通过合理运用它们来实现程序的逻辑控制、循环处理和流程跳转。使用控制语句可以让程序按照我们的要求执行不同的操作,从而实现各种功能。

我们来开始慢慢学习。


1.1 控制语句 if循环

好的,我来用游戏的方式来描述C语言中的if控制语句。

C语言中的if语句用于条件判断,根据不同的条件执行不同的代码块。它的基本语法如下:

if (条件) {
// 当条件满足时执行的代码块
}

例如,我们可以使用if语句判断一个数是否为正数:

#define _CRT_SECURE_NO_WARNINGS#include int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num > 0) {printf("这是一个正数\n");}return 0;}

在上面的例子中,用户输入一个整数,如果该数大于0,则输出”这是一个正数”。

除了单个if语句外,我们还可以使用else关键字来添加一个可选的执行路径。

这样,当条件不满足时,可以执行其他的代码块。


1.2 控制语句 if else 语句

这就是if else

// 引入安全警告消除宏,避免在Visual Studio等编译器中因使用不安全的C标准库函数而产生警告
#define _CRT_SECURE_NO_WARNINGS

// 包含输入输出流头文件,以使用printf和scanf函数
#include

// 定义主函数入口点
int main() {
// 声明一个整数变量num
int num;

// 输出提示信息,要求用户输入一个整数
printf(“请输入一个整数:”);

// 使用scanf函数等待用户输入并读取一个整数值到变量num中
scanf(“%d”, &num);

// 使用if-else结构判断num是否大于0
if (num > 0) {
// 如果num大于0,则输出“这是一个正数”
printf(“这是一个正数\n”);
}
else {
// 否则(即num不大于0,包括num等于0和num为负数的情况),输出“这是一个非正数”
printf(“这是一个非正数\n”);
}

// 主函数返回0,表示程序执行成功结束
return 0;
}

在上面的例子中,如果输入的数大于0,则输出”这是一个正数”,否则输出”这是一个非正数”。

如果有多个条件需要判断,可以使用多个if语句嵌套或者使用else if关键字。

下面是一个根据分数等级输出评价的例子:


1.3 控制语句 if else if else语句。

#define _CRT_SECURE_NO_WARNINGS
#include

int main() {
int score;

printf(“请输入你的分数:”);
scanf(“%d”, &score);

if (score >= 90) {
printf(“优秀\n”);
}
else if (score >= 80) {
printf(“良好\n”);
}
else if (score >= 70) {
printf(“中等\n”);
}
else if (score >= 60) {
printf(“及格\n”);
}
else {
printf(“不及格\n”);
}

return 0;
}

以上是关于if语句的基本介绍,希望能帮助你更好地理解和使用。如果你有任何问题,请随时提问。

1.4 控制语句 三目运算符

当使用逗号表达式时,它将为原则上允许表达式列表执行求值,并且返回最后一个表达式的值。使用逗号运算符可以在单个语句中执行多个操作,这对于简化代码非常有用。让我们看一个例子:

#include

int main() {
int a = 10, b = 5;

// 使用三目运算符判断 a 是否大于 b,并打印结果
printf(“%s\n”, (a > b) ? “a 大于 b” : “a 不大于 b”);

// 使用逗号运算符执行多个操作,并打印结果
printf(“a 的值是 %d, b 的值是 %d\n”, (a++, a), (b++, b));

return 0;
}

以上代码使用了三目运算符来判断变量 `a` 是否大于变量 `b`,并根据结果打印相应的消息。

同时,我们使用逗号运算符在 `printf` 函数中执行了两个操作,分别是 `a++` 和 `a`,以及 `b++` 和 `b`。

这样可以方便地在一个语句中执行多个操作,使代码更加简洁。

总结起来,逗号运算符能够在单个语句中执行多个操作,而三目运算符则用于进行条件判断。通过合理运用这两种语法,我们可以使代码更加清晰易懂,并附加适当的注释以便于他人理解。希望这个示例对您有所帮助!


1.4 小游戏部分代码

假设我们要编写一个小游戏,游戏的目标是控制一只小猫走到食物盘子前吃到食物。

现在请看代码:

#include int main() {// 定义小猫的位置和食物的位置int cat = 1;int food = 10;// 判断小猫和食物是否在同一个位置上if (cat == food) {printf("小猫找到了食物!\n");printf("(^▽^) 牛啊!");} else {printf("小猫还没找到食物呢!\n");printf("(づ ̄3 ̄)づ 加油!");}return 0;}

上面的代码段使用了if控制语句来判断小猫和食物是否在同一个位置上。如果它们在同一个位置上,就会输出”小猫找到了食物!”并显示一个开心的表情包;否则,就会输出”小猫还没找到食物呢!”并显示一个加油的表情包。

另外,我们还可以举几个例子来更生动地说明if控制语句的用法。比如,我们可以编写一个游戏,让玩家猜数字:

#define _CRT_SECURE_NO_WARNINGS#include int main() {int secretNumber = 7;int guess;printf("猜猜我心里想的是哪个数字?\n");scanf("%d", &guess);if (guess == secretNumber) {printf("恭喜你,猜对了!\n");printf("(^▽^) 厉害!");}else {printf("很遗憾,猜错了!\n");printf("(╥﹏╥) 再试一次吧!");}return 0;}

在上面的代码中,玩家需要猜测程序所设定的一个秘密数字。

如果猜对了,就会输出”恭喜你,猜对了!”并显示一个厉害的表情包;

如果猜错了,就会输出”很遗憾,猜错了!”并显示一个再试一次的表情包。

综上所述,if控制语句是C语言中非常重要和常用的语句之一,通过判断条件的真假执行不同的代码,可以实现各种有趣的功能。

希望以上给出的代码示例能够帮助您更好地理解和使用if控制语句。加油!(づ ̄3 ̄)づ

扩展代码,有vs的朋友可以试一下

小游戏完整代码

// 引入必要的头文件#include  // 用于基本输入输出操作#include  // 提供随机数生成和内存管理函数#include  // 用于非缓冲键盘输入(如_getch())#define SIZE 10 // 定义游戏区域的大小// 全局变量:猫与食物的位置及得分int cat_x = 0;int cat_y = 0;int food_x;int food_y;int score = 0;// 初始化函数:设置初始位置并生成食物位置void init() {srand((unsigned)time(NULL)); // 利用当前时间初始化随机数种子food_x = rand() % SIZE; // 食物横坐标随机生成food_y = rand() % SIZE; // 食物纵坐标随机生成}// 显示游戏界面函数void display() {system("cls"); // 清屏// 遍历游戏区域,打印对应字符for (int i = 0; i < SIZE; i++) {for (int j = 0; j  0) {cat_y--;}break;case 's': // 下移if (cat_y  0) {cat_x--;}break;case 'd': // 右移if (cat_x < SIZE - 1) {cat_x++;}break;}}// 主函数int main() {init(); // 初始化游戏状态while (1) { // 循环显示游戏界面并处理用户输入display();// 检查猫是否吃到食物,并更新得分与食物位置if (cat_x == food_x && cat_y == food_y) {score++;cat_x = rand() % SIZE;cat_y = rand() % SIZE;// 根据得分情况输出不同的鼓励语句switch (score) {case 1:printf("太棒了!你已经成功捕获到第1条小鱼!\n");break;case 2:printf("继续加油!你已成功捕获2条小鱼啦!\n");break;case 3:printf("越来越厉害!你已经捕获到了3条小鱼!\n");break;case 4:printf("太赞了!你已经成功吃掉4个食物啦!\n");break;default:printf("干得漂亮!你已经成功捕获了%d条小鱼!\n", score);break;}}// 提示玩家输入控制指令printf("请按键盘方向键控制喵咪移动(↑w-上,↓s-下,←a-左,→d-右):");char direction = _getch();moveCat(direction);}return 0; // 程序结束}
#define _CRT_SECURE_NO_WARNINGS#include #include // 定义全局变量int health = 100; // 生命值int score = 0; // 分数int weaponLevel = 1; // 武器级别int gold = 0; // 金币数int backpack[10] = { 0 }; // 背包,存放掉落的物品编号int numBackpackItems = 0; // 背包中物品的数量int teamCount = 0; // 队伍中美女的数量int skillLevel = 1; // 技能等级// 打印背包中的物品void printBackpackItems() {printf("\n背包中的物品:\n");if (numBackpackItems == 0) {printf("背包是空的,还没有掉落任何物品。\n");}else {for (int i = 0; i = cost) {return 1; // 有足够的金币}return 0; // 金币不足}int main() {printf("欢迎来到Health补给站!\n");printf("你的初始生命值为100。\n");while (health > 0) {printf("\n请选择以下操作:\n");printf("1. 前进\n");printf("2. 遇敌\n");printf("3. 恢复\n");printf("4. 查看背包\n");printf("5. 查看队伍情况\n");printf("6. 查看技能等级\n");int choice;scanf("%d", &choice);if (choice == 1) {printf("你继续前进...\n");score += 10;// 前进50%的概率遇到美女if (rand() % 2 == 0) {printf("遇到了一位美女,需要解救她吗?(是:1,否:0)\n");int rescueChoice;scanf("%d", &rescueChoice);if (rescueChoice == 1) {teamCount++;printf("成功解救美女,你们组成了一个强大的队伍!\n");}else {printf("你选择不解救美女,继续前进。\n");}}}else if (choice == 2) {int enemyHealth = 50;printf("你遇到了一只怪物!\n");printf("你的生命值:%d\n", health);printf("怪物的生命值:%d\n", enemyHealth);while (health > 0 && enemyHealth > 0) {printf("\n请选择攻击方式:\n");printf("1. 火球术(造成30点伤害)\n");printf("2. 近身格斗(造成20点伤害)\n");int attack;scanf("%d", &attack);if (attack == 1) {printf("你释放了火球术!\n");enemyHealth -= 30;}else if (attack == 2) {printf("你进行了近身格斗!\n");enemyHealth -= 20;}printf("怪物的生命值:%d\n", enemyHealth);if (enemyHealth > 0) {printf("怪物攻击了你!\n");health -= 20;printf("你的生命值:%d\n", health);}}if (health <= 0) {printf("\n很遗憾!你被怪物击败了。\n");break;}else {printf("\n你成功击败了怪物!得到了10点分数和金币。\n");score += 10;// 根据掉落几率计算获得的武器级别和金币数int dropChance = rand() % 100 + 1; // 生成1-100之间的随机数if (dropChance <= 80) {weaponLevel++;printf("怪物掉落了1级别的武器,你的武器级别提高了!\n");}else if (dropChance <= 80 + 70) {weaponLevel += 2;printf("怪物掉落了2级别的武器,你的武器级别提高了!\n");}else if (dropChance <= 80 + 70 + 60) {weaponLevel += 3;printf("怪物掉落了3级别的武器,你的武器级别提高了!\n");}else if (dropChance <= 80 + 70 + 60 + 50) {weaponLevel += 4;printf("怪物掉落了4级别的武器,你的武器级别提高了!\n");}else if (dropChance <= 80 + 70 + 60 + 50 + 30) {weaponLevel += 5;printf("怪物掉落了5级别的武器,你的武器级别提高了!\n");}// 掉落金币int droppedGold = rand() % 100 + 1;gold += droppedGold;printf("怪物掉落了%d个金币!\n", droppedGold);// 将金币放入背包backpack[numBackpackItems++] = droppedGold;}}else if (choice == 3) {printf("你使用了恢复药剂,恢复了30点生命值!\n");health += 30;}else if (choice == 4) {printBackpackItems();}else if (choice == 5) {printf("队伍中美女数量:%d\n", teamCount);}else if (choice == 6) {printf("当前技能等级:%d\n", skillLevel);if (checkGoldForSkillUpgrade()) {printf("你可以升级技能!需要消耗%d金币。\n", skillLevel * 100);int upgradeChoice;scanf("%d", &upgradeChoice);if (upgradeChoice == 1) {gold -= skillLevel * 100; // 扣除金币skillLevel++; // 技能等级提升printf("技能升级成功!\n");}else {printf("你选择不升级技能。\n");}}else {printf("金币不足,无法升级技能。\n");}}}printf("\n游戏结束!\n");printf("你的分数:%d\n", score);return 0;}

上面代码都可以在vs中可使用,嘿嘿嘿

好了吗开始下一个


1.5 控制语句switch

嘿,我来帮你理解C语言中的switch控制语句。它就像一个多功能开关,根据不同的输入值执行不同的代码块。下面是一些生动的例子,并且每段代码都有注释和表情符号辅助说明。

**例子1:判断一周中的哪一天**

// 首先,禁用安全警告,以兼容老版本C运行时库的函数#define _CRT_SECURE_NO_WARNINGS// 引入标准输入输出头文件#include int main() {// 定义一个整型变量 dayOfWeek 用于存储用户输入的今天是周几(1-7分别代表周一到周日)int dayOfWeek;// 输出提示语句,让用户输入今天是周几printf("请输入今天是周几(1-7分别代表周一到周日): ");// 从键盘接收用户的输入,并将其赋值给 dayOfWeek 变量scanf("%d", &dayOfWeek);// 使用 switch 语句根据 dayOfWeek 的值执行相应的 case 分支switch (dayOfWeek) {// 如果 dayOfWeek 为 1,则输出“ 今天是周一!”并跳出 switch 语句case 1:printf(" 今天是周一!\n");break;// 如果 dayOfWeek 为 2,则输出“ 今天是周二!”并跳出 switch 语句case 2:printf(" 今天是周二!\n");break;// 如果 dayOfWeek 为 3,则输出“ 今天是周三!”并跳出 switch 语句case 3:printf(" 今天是周三!\n");break;// ... 对于其他星期几的情况(省略了4至6),也可以按照此格式编写 case 分支// 当 dayOfWeek 为 7 时,输出“ 今天是周日,休息日耶!”并跳出 switch 语句case 7:printf(" 今天是周日,休息日耶!\n");break;// 若输入的 dayOfWeek 不在 1 到 7 范围内,则执行 default 分支,输出错误提示信息default:printf(" 输入的数字不对哦,请确保输入的是1到7之间的数。\n");}// 主函数返回0,表示程序执行成功结束return 0;}

**例子2:根据成绩等级打印评价**

// 禁止Visual Studio编译器对不安全函数发出警告#define _CRT_SECURE_NO_WARNINGS// 引入stdio库,用于输入输出功能#include int main() {// 定义一个浮点型变量score用于存储用户输入的成绩float score;// 输出提示信息,要求用户输入成绩printf("请输入你的成绩(0-100分): ");// 使用scanf从控制台读取用户输入的浮点数scanf("%f", &score);// 将分数转换为整数(通过除以10并向下取整),以便于switch语句处理switch ((int)(score / 10)) {// 当成绩在90-100分之间(含90和100分)case 10:case 9:// 输出鼓励信息:成绩优秀,继续保持!printf(" 成绩优秀,继续保持!\n");break;// 当成绩在80-89分之间(含80分)case 8:// 输出鼓励信息:成绩良好,继续加油!printf(" 成绩良好,继续加油!\n");break;// 当成绩在70-79分之间(含70分)case 7:// 输出建议信息:成绩一般,需要努力提升哦!printf(" 成绩一般,需要努力提升哦!\n");break;// 当成绩低于70分时(包含60以下及非整十位的分数)default:// 输出警示信息:成绩低于及格线,要加倍努力了!printf(" 抱歉,成绩低于及格线,要加倍努力了!\n");}// 主函数返回0,表示程序正常结束return 0;}

// 总结:
// Switch 控制结构的核心在于`switch(expression)`后的expression求值,
// 然后逐个与case后的常量表达式匹配,一旦匹配成功,则执行该case后的语句,
// 直到遇到break关键字跳出switch结构。如果所有case都不匹配,则执行default部分的语句。
“`

在每个switch语句中,”break”关键词至关重要,它的作用是在执行完相应case的代码后结束整个switch结构。

若没有break,程序会继续执行下一个case的代码块,这被称为“穿透”现象。


1.6 while语句

例子1

#include int main(void){// 初始化变量 a 为20int a = 20;// 创建一个当变量 a 大于10时持续执行的循环while (a > 10){// 从标准输入读取用户输入的整数,并将其赋值给变量 ascanf_s("%d", &a);// 打印当前变量 a 的值printf("a = %d\n", a);}// 主函数返回0,表示程序正常结束return 0;}

这个修改过的代码包含了对每一部分功能的注释解释。在运行该程序时,它会不断接收用户输入的整数并更新 a 的值,直到用户输入一个不大于10的整数为止,每次输入后都会输出对应的 a 值。

由于表情无法在纯文本中显示,我将尽量用口语化、生动的方式来描述并提供C语言while循环的几个简单实例,并且每段代码都有注释说明。


// 示例2:打印数字 1 到 5

#include int main() {int i = 1; // 初始化计数器变量为1// while 循环条件:只要 i 小于等于5,就执行循环体内的代码while (i <= 5) {printf("这是第 %d 个数字\n", i); // 输出当前的数字i++; // 每次循环后,让 i 自增1}return 0;}

// 示例2:猜数字游戏(目标数字是3)

// 总结:
// 在C语言中,while循环的基本结构是:
// while(循环条件) {
// 循环体内的代码
// }
// 当满足循环条件时,会不断执行循环体内的代码。每个例子都展示了如何根据不同的需求设置循环条件和更新循环状态。
“`

以上代码分别展示了两种使用while循环的不同场景,第一种是简单的计数与输出,第二种是一个互动的小游戏,通过while循环实现了多次尝试直到猜对数字的过程。

1.7 do while 语句

没问题,下面给你讲解C语言中的do-while循环控制语句。简单易懂,新手也能看懂哦!

先来个简单的例子吧!比如我们想要打印出1到5的数字,可以这样写:

// 引入stdio库,用于实现输入输出功能#include int main() {// 初始化一个整数变量i为1int i = 1;// 使用do-while循环结构,确保至少执行一次循环体do {// 在控制台上打印变量i的值,并在其后添加一个空格printf("%d ", i);// 循环体内自增操作,将i加1i++;} while ( // 当条件满足时(即i小于等于5),继续循环i <= 5);// 打印换行符,使得输出结果在数字序列后换行printf("\n");// 主函数返回0,表示程序正常结束return 0;}

输出结果会是:1 2 3 4 5,每个数字后面加了个空格。

嗯,形象一点的例子来了!假设你去网吧打游戏,每玩一次游戏需要8个金币,现在有25个金币,你要玩几次游戏呢?我们用do-while循环来解决这个问题:

// 引入stdio.h库,以便使用printf函数进行输出#include int main() {// 定义变量coins表示初始拥有的金币数量int coins = 25;// 定义变量games用于记录玩过的游戏次数int games = 0;// 使用do-while循环结构,在条件满足时不断执行循环体do {// 每次循环减少8个金币(玩一次游戏的消耗)coins -= 8;// 每完成一次游戏,游戏次数加1games++;// 当剩余金币数量大于等于8时,继续执行循环} while (coins >= 8);// 输出玩过的游戏次数和剩余的金币数量printf("你玩了 %d 次游戏,剩余 %d 个金币。\n", games, coins);// 程序运行成功,返回0return 0;}

这段代码告诉你,你玩了几次游戏,并显示剩余的金币数量。

好了,现在给你总结一下所有代码的含义和作用:

– 第一个例子是简单打印出1到5的数字。
– 第二个例子是根据金币数来计算游戏次数,并显示剩余金币。

这两个例子都用到了do-while循环,它的语法形式为:

do {
// 代码块
} while (条件);

do-while循环首先会执行一次代码块,然后判断条件是否成立,如果成立就继续执行下一次循环,直到条件不成立才停止循环。

代码块部分可以是任意合法的C语言代码,你可以根据需求来编写循环体内的代码哦!

记得加上注释,把代码写得清晰易懂。

嘿嘿,希望这些例子能帮到你,有其他问题尽管问我!

1.8 for 语句

没问题,这里有一个简单的C语言for循环控制语句的例子,适合口语且易于理解。

看起来代码少一些,同时也会给出多个例子和注释,使代码更加清晰。

让我们开始吧!

#include int main() {int i;// 例子1:打印数字 0 到 4printf("例子1:打印数字 0 到 4\n");for (i = 0; i < 5; i++) {printf("%d ", i);}printf("\n\n");// 例子2:计算数字 1 到 10 的和int sum = 0;printf("例子2:计算数字 1 到 10 的和\n");for (i = 1; i <= 10; i++) {sum += i;}printf("总和为:%d\n\n", sum);// 例子3:打印乘法表printf("例子3:打印乘法表\n");for (i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {printf("%d * %d = %d\t", j, i, i * j);}printf("\n");}printf("\n");// 总结所有代码printf("总结:\n");printf("例子1 打印数字 0 到 4\n");printf("例子2 计算数字 1 到 10 的和\n");printf("例子3 打印乘法表\n");return 0;}/*将每一段代码用中文写上注释,并给出正式回复如下:这段代码是一个简单的C语言程序,主要展示了三个例子。例子1是一个循环打印数字0到4的示例,使用for循环语句从0到4迭代打印出每个数字。例子2是计算数字1到10之间的和的示例,使用for循环语句进行累加操作,将结果保存在sum变量中,最后输出总和。例子3是打印乘法表的示例,使用两个嵌套的for循环,外层循环控制行数,内层循环控制每行的列数,并通过乘法运算得出相应的乘法结果。总结这些代码并给出了每个例子的简要描述。希望以上回复能对你有所帮助!如果还有其他问题,请随时提问。*/

1.9 嵌套循环

C语言中的单嵌套循环控制语句非常简单易懂,适合口语讲解,即使是新手也能轻松理解。下面我将用一些生动的例子来演示,并用清晰的代码和注释来说明。别忘了加上一些表情和表情包哦!例子1:打印10次Hello World!

#include int main() {int i;for (i = 0; i < 10; i++) { // 循环10次printf("Hello World! "); // 打印Hello World!}return 0;}

这段代 ** 输出10次”Hello World!”。例子2:计算1到10的累加和

#include int main() {int i, sum = 0;for (i = 1; i <= 10; i++) { // 从1加到10sum += i; // 累加每个数字}printf("Sum: %d", sum); // 打印累加和return 0;}

这段代 ** 计算并打印出1到10的累加和。例子3:绘制一个矩形

#include int main() {int i, j, width = 5, height = 3;for (i = 0; i < height; i++) { // 控制行数for (j = 0; j < width; j++) { // 控制每行打印的次数printf("* "); // 打印一个星号和一个空格}printf("\n"); // 换行}return 0;}

这段代 ** 绘制一个宽度为5,高度为3的矩形。

总结:这些例子展示了单嵌套循环控制语句的基本应用。

通过使用适当的循环条件和循环体内的操作,我们可以实现不同的功能,如重复打印、累加求和和图形绘制等。希望这些例子能帮助你更好地理解单嵌套循环的使用方法!

如果还有其他问题,欢迎随时提问哦!

希望以上的代码能够满足你的要求。如果还有其他问题,请随时提问!


学习时间:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习产出:

多练习,别复制粘贴,多了解句子中的意思,不会的可以留言,大家一起解决问题,这样进步更快,祝朋友们早日成为c语言大佬。