目录
C语言中语法结构
C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实 现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种 结构的组合。下面我们详细讲解一下选择结构和循环结构
分支语句(选择结构)
人的一生面临着很多选择,像考上大学后可以选择专心致志地学,也可以选择碌碌无为地混。但不同的选择,沿途会有不同的风景,最终也会有不同的结局。在程序设计中,存在着同样的问题,需要根据不同的选择采取不同的解决方案,最终得到不同的结果,这就是分支结构的核心思想。
if语句:
1.if语句的语法形式
1 if(表达式)
2 语句;
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行
2.if …else…语句
1 if(表达式)
2 语句1;
3 else
4 语句2;
语义为:如果表达式的值为真,则执行语句1,否则执行语句2。其分支形式适用于条件成立与否均需进行操作,但操作不同的情况。
3.分支中的多条语句
默认在if和else语句中默认都只控制一条语句,如果我们要if语句同时控制两个语句,怎么办呢?那就使用{}将代码括起来,else后同样如此。if和else后使用{}控制多条语句--这个块也叫:程序块,或者复合语句。
4.嵌套if
if语句的双分支和单分支都是处理二选一的情况,但实际应用往往需要处理多(三或三以上)选一的情况,则可以用if语句的嵌套形式。if语句的嵌套形式是指if语句基本形式中的语句1或语句2又是一个if语句。在if else语句中,else可以与另一个if语句连用,构成多重判断。
在 C 语言中,嵌套 if 语句是指在一个 if 语句中包含另一个 if 语句。下面是一个简单的例子:
#include <stdio.h>
int main()
{
int age;
printf("请输入你的年龄:");
scanf("%d", &age);
if (age >= 18)
{
printf("你已经成年了!\n");
if (age >= 21)
{
printf("你已经可以合法饮酒了!\n");
}
}
else {
printf("你还未成年!\n");
}
return 0;
}
5.悬空else
谨记if与else的配对原则为:本层就近,即else总是跟最近的if匹配。
本例使用的是“单分支if嵌套双分支if”形式,根据“本层就近”配对原则,else与第二个if是一对。
# include <stdio.h> int main(){
float score; int flag;
printf("请输入课程原始成绩:");
scanf("%f",&score);
printf("是否为特长生:(1:是,0:否)");
scanf("%d",&flag);
if (flag==1&&score<80) /
if (score*1.4<80)
score=score*1.4;
else
score=80;
printf("最终成绩为:%.2f\n",score);}
switch语句:
switch语句是一种特殊形式的if…else结构,用于判断条件有多个结果的情况。它把多重的else if改成更易用的形式。
1.switch语句的语法形式
switch (expression) {
case constant_expression1:
statements1; break;
case constant_expression2:
statements2; break;case constant_expressionN:
statementsN; break; default:
default_statements;}
其中,expression 是一个整数表达式, constant_expression1 、 const ant_expression2等是常量表达式, statements1、 statements2 等是语句序列。break 语句用于结束 case 语句块的执行。default 语句块是可选的,如果没有匹配的case 常量表达式,则执行default 语句块。
注意:1.switch后的expression必须是整形表达式 2.case后的值,必须是整形常量表达式
2.switch语句中的break
switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case 2 中的语句。 所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了。
3.switch语句中的default
在C语言中,switch 语句中的 default 子句是可选的。如果在switch 语句中没有匹配的case 子句,则执行default 子句中的代码。
以下是一个使用switch语句中的default子句的例子:
#include <stdio.h>
int main() {
int number;
printf("请输入一个数字(1-5):");
scanf("%d", &number);
switch (number) {
case 1:
printf("你输入的数字是 1。\n");
break;
case 2:
printf("你输入的数字是 2。\n");
break;
default:
printf("无效的输入。\n");
}
return 0;
}
在这个例子中,我们首先使用 scanf 函数获取用户输入的数字。然后,我们使用一个 switch 语句来根据输入的数字打印相应的消息。如果输入的数字不在 1 到 5 之间,则执行 default 子句,打印一条错误消息。请注意, default 子句通常用于处理意外情况或错误情况,例如输入的值不在预期范围内。在实际编程中,应该尽量避免使用 default 子句,而是应该使用更明确的错误处理机制。
在switch语句中case语句和default语句是没有顺序要求的,只要你的顺序满足实际需求就可以。不过我们通常把default子句放在最后处理。
循环语句(循环结构)
在编程界有一句名言:懒惰是程序员美德的第一要素。这里所谓的“懒惰”,并不是不爱劳动不学习、不思进取,而是指写尽量少的代码达到同样甚至更好的目标。因此,懒惰的程序员更善于归纳总结,寻找规律,利用“循环”解决问题。下面让我们来认识3种循环吧!
while循环
while 循环是一种在程序中重复执行一段代码的控制结构,只要条件为真,就会一直执行循环体中的代码。 while 循环的语法如下:
while(condition)
{ //循环体 }
其中 condition 是一个布尔表达式,它的值决定了循环是否执行。循环体是要重复执行的代码块。
以下是一个使用 while 循环的示例:
#include <stdio.h>
int main() {
int i = 0;
while (i < 10) {
printf("%d ", i);
i++;
}
return 0;
}
在这个示例中,我们使用 while 循环来打印数字 0 到 9。循环的条件是 i < 10 ,只要 i 小于 10,就会执行循环体中的代码。在循环体中,我们打印出当前的 i 值,并将 i 加 1。当 i 大于或等于 10 时,循环结束。
请注意,在 while 循环中,条件的求值是在每次循环执行之前进行的。如果条件为假,则循环不会执行,程序会继续执行循环后面的代码。如果条件一直为真,则循环会一直执行,直到条件变为假为止。
for循环
for 循环是另一种在程序中重复执行一段代码的控制结构,它通常用于迭代一个数组或其他可迭代对象。for 循环的语法如下:
for (初始化表达式; 条件表达式; 更新表达式) {
// 循环体
}
其中,初始化表达式在循环开始前执行一次,通常用于初始化循环变量。条件表达式在每次循环执行前进行求值,如果条件为真,则执行循环体中的代码。更新表达式在每次循环执行后执行,通常用于更新循环变量。
以下是一个使用 for 循环的示例:
#include <stdio.h>
int main() {
int i;
for (i = 0; i < 10; i++) {
printf("%d ", i);
}
return 0;
}
在这个示例中,我们使用 for 循环来打印数字 0 到 9。循环的初始化表达式是 i = 0 ,它将 i 初始化为 0。条件表达式是 i < 10 ,只要 i 小于 10,就会执行循环体中的代码。更新表达式是 i++ ,它将 i 加 1。每次循环执行后, i 的值都会增加 1,直到 i 大于或等于 10 时,循环结束。
请注意,在 for 循环中,初始化表达式、条件表达式和更新表达式都是可选的,可以根据需要省略或修改。如果省略初始化表达式,则循环变量在循环开始前不会被初始化。如果省略条件表达式,则循环会一直执行,直到使用 break 语句或 return 语句退出循环。如果省略更新表达式,则循环变量在循环执行后不会被更新。
do-while循环
do-while 循环是一种在程序中重复执行一段代码的控制结构,与 while 循环类似,不同的是 do-while 循环会先执行循环体中的代码,然后再检查条件。do-while 循环的语法如下:
do {
// 循环体
} while (condition);
其中,循环体是需要重复执行的代码块, condition 是一个布尔表达式,它的值决定了循环是否执行。以下是一个使用 do-while 循环的示例:
#include <stdio.h>
int main() {
int i = 0;
do {
printf("%d ", i);
i++;
} while (i < 10);
return 0;
}
在这个示例中,我们使用 do-while 循环来打印数字 0 到 9。循环的条件是 i < 10 ,只要 i 小于 10,就会执行循环体中的代码。在循环体中,我们打印出当前的 i 值,并将 i 加 1。每次循环执行后, i 的值都会增加 1,直到 i 大于或等于 10 时,循环结束。
请注意,在 do-while 循环中,条件的求值是在循环体执行后进行的。这意味着无论条件的值是什么,循环体都会至少执行一次。如果条件为真,则循环会一直执行,直到条件变为假为止。
break和continue语句在循环中的应用
break 和 continue 语句是在循环中常用的控制语句,它们用于控制循环的执行流程。
- break 语句: break 语句用于立即退出循环。当在循环中遇到 break 语句时,循环会立即结束,程序会继续执行循环后面的代码。使用 break 语句可以在满足特定条件时快速退出循环。
- continue 语句: continue 语句用于跳过当前循环迭代中的剩余代码,并立即进入下一次循环。当在循环中遇到 continue 语句时,循环不会结束,而是跳过当前迭代中的剩余代码,直接进入下一次迭代。使用 continue 语句可以在特定条件下跳过不必要的代码,提高循环的效率。
以下是一个使用 break 和 continue 语句的示例:
#include <stdio.h>int main() {
int i;for (i = 0; i < 10; i++) {
if (i == 5) {
printf("跳过第 5 次迭代。\n");
continue;
} if (i == 7) {
printf("退出循环。\n");
break; }
printf("%d ", i); } return 0;
}
在这个示例中,我们使用一个 for 循环来输出从 0 到 9 的整数。在循环中,我们使用 if 语句来检查当前的 i 值。如果 i 等于 5,我们使用 continue 语句跳过当前迭代。如果 i 等于 7,我们使用 break 语句退出循环。在其他情况下,我们打印出当前的 i 值。运行这段代码,你将得到以下输出:0 1 2 3 4 跳过第 5 次迭代。 6 退出循环。这表明当 i 等于 5 时, continue 语句跳过了第 5 次迭代,当 i 等于 7 时, break 语句退出了循环。
goto语句(C语言中特别的语法)
goto 语句是一种在程序中跳转到指定行的控制语句。它允许程序直接跳转到程序中的另一个位置,而无需按照正常的控制流程执行。goto 语句的语法如下:
goto label;
其中, label 是一个标识符,它标识了程序中的一个位置。在 goto 语句后面的代码会被跳过,程序会直接跳转到 label 标识的位置继续执行。以下是一个使用 goto 语句的示例:
#include <stdio.h>
int main() {
int i = 0; loop:
printf("%d ", i);
i++;
if (i < 10) {
goto loop;
} return 0;
}
在这个示例中,我们使用 goto 语句来实现一个简单的循环。在 loop 标签处,我们打印出当前的 i 值,并将 i 加 1。然后,我们检查 i 是否小于 10。如果是,我们使用 goto 语句跳转到 loop 标签处,继续执行循环。当 i 大于或等于 10 时,循环结束。
请注意, goto 语句可能会使程序的控制流程变得复杂和难以理解,因此在实际编程中应该尽量避免使用 goto 语句。使用结构化的控制结构(如 if 、 while 、 for 等)可以使程序更易于理解和维护。
结束语
学习 C 语言是一次激动人心的旅程,它将为你打开计算机科学世界的大门。虽然学习 C 语言可能会有一些挑战,但请相信自己的能力。坚持下去,不断练习,你将逐渐掌握这门语言,并能够实现自己的创意。学习是一个持续的过程,不要害怕犯错误。相信自己的能力,愿我们在学习 C 语言的道路上取得成功!加油!