关键字 static
在C语言中,static是用来修饰变量和函数的:
^修饰局部变量——称为局部静态变量
^修饰全部变量——称为全部静态变量
^修饰函数——称为静态函数
修饰局部变量
加上static⬇️

没有static⬇️

satic修饰局部变量的时候,局部变量出了作用域,所得的值被保存,不会销毁。
本质上,改变了变量的存储位置【栈区(局部变量)➡️静态去(局部变量)】。
影响了变量的生命周期,生命周期变得和程序的生命周期一样。
修饰全局变量
static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性。其他源文件就不能使用这个全局变量。(函数也是如此)
控制语句
^条件判断语句也叫分支语句:if语句 , switch语句 ;
^循环执行语句:do while语句 , while语句 ,for语句 ;
^转向语句:break语句 , goto语句 , continue语句 , return语句 ;
if语句
if(条件表达式)
{ //条件为真(非0)执行代码块,假(0)跳过
满足条件是执行的语句;
}
#include <stdio.h> // 包含输入输出函数库
int main() {
// 1. 定义变量存储成绩
int score;
// 2. 提示用户输入成绩
printf("请输入你的考试成绩(0-100):");
scanf("%d", &score); // 读取用户输入的整数成绩
// 3. 数据合法性校验(避免输入超出0-100的无效值)
if (score < 0 || score > 100) {
printf("输入错误!成绩需在0-100之间\n");
}
// 4. 多分支条件判断评级
else if (score >= 90) {
printf("你的成绩等级:优秀\n");
printf("评语:表现出色,继续保持!\n");
}
else if (score >= 80) {
printf("你的成绩等级:良好\n");
printf("评语:表现不错,仍有提升空间~\n");
}
else if (score >= 60) {
printf("你的成绩等级:及格\n");
printf("评语:顺利通过,下次争取更好!\n");
}
else {
printf("你的成绩等级:不及格\n");
printf("评语:需要加倍努力,查漏补缺哦!\n");
}
return 0; // 程序正常结束
}
注: if 后无 {} 时,仅执行紧跟的第一句代码,建议始终加 {} 避免逻辑错误。
swith语句
sitch(整型表达式)
{
case 整型常量表达式:
语句;
}
#include <stdio.h>
int main() {
int score;
printf("请输入成绩(0-100):");
scanf("%d", &score);
// 先校验输入合法性
if (score < 0 || score > 100) {
printf("输入错误!成绩需在0-100之间\n");
return 0; // 直接结束程序
}
// 核心:将成绩分组(10个case对应10个分数段)
switch (score / 10) { // 整除10,把0-100映射为0-10
case 10: // 100分
case 9: // 90-99分
printf("成绩等级:优秀\n评语:表现出色,继续保持!\n");
break; // 跳出switch,避免执行后续case
case 8: // 80-89分
printf("成绩等级:良好\n评语:表现不错,仍有提升空间~\n");
break;
case 7: // 70-79分
case 6: // 60-69分
printf("成绩等级:及格\n评语:顺利通过,下次争取更好!\n");
break;
case 5: // 0-59分(case 0-5合并)
case 4:
case 3:
case 2:
case 1:
case 0:
printf("成绩等级:不及格\n评语:需要加倍努力,查漏补缺哦!\n");
break;
}
return 0;
}
注:
1. switch(表达式) :表达式必须是整数类型(int、char等,不能是float);
2. case 常量 :常量必须是字面量(如10、'A')或宏定义,不能是变量;
3. break :必须加!否则会“穿透”到下一个case(比如case10没break会执行case9的代码);
4. default (可选):所有case都不匹配时执行,类似else,可放任意位置(建议放最后)。
do while语句
do while 语句是先执行再盘判断的循环语句,核心是至少执行1次循环体,满足条件再重复,适合必须先做一次的场景。
#include <stdio.h>
int main() {
int score;
// 核心:先执行输入,再判断是否合法,不合法则重复
do {
printf("请输入成绩(0-100):");
scanf("%d", &score);
// 输入不合法时提示错误
if (score < 0 || score > 100) {
printf("输入错误!请重新输入\n");
}
} while (score < 0 || score > 100); // 条件为真(输入无效)则继续循环
// 成绩评级(复用之前的switch逻辑)
switch (score / 10) {
case 10: case 9: printf("优秀!表现出色~\n"); break;
case 8: printf("良好!继续加油~\n"); break;
case 7: case 6: printf("及格!顺利通过~\n"); break;
default: printf("不及格!需要努力哦~\n"); break;
}
return 0;
}
注:
1. 结构: do { 循环体 } while (条件); ,末尾必须加分号;
2. 逻辑:循环体至少执行1次,条件为真(非0)时重复;
3. 对比 while : while 是“先判断后执行”,可能一次都不执行。
for 语句
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式1:为初始化部分,用于初始化循环变量的。
表达式2:为条件判断部分,用于判断循环时侯终止。
表达式3:为调整部分,用于循环条件的调整。
#include <stdio.h>
int main() {
// 计算1到100的总和(固定次数循环)
int sum = 0;
for (int i = 1; i <= 100; i++) { // 初始化i=1;i≤100时循环;每次i+1
sum += i; // 等价于 sum = sum + i
}
printf("1到100的总和:%d\n", sum); // 输出:5050
break语句和continue的区别
break是用于永久的终止循环。
continue是跳过本次循环后面的代码,直接去判断下部分,进行下一次循环的判断。
365

被折叠的 条评论
为什么被折叠?



