1. 条件语句
1.1 if语句
if语句 is 最basic 条件语句, 用于根据条件执行不同 code块:
1.1.1 simple if语句
#include <stdio.h>
int main() {
int age;
printf("请输入你 年龄: ");
scanf("%d", &age);
if (age >= 18) {
printf("你已经成年了!\n");
}
return 0;
}
1.1.2 if-else语句
#include <stdio.h>
int main() {
int age;
printf("请输入你 年龄: ");
scanf("%d", &age);
if (age >= 18) {
printf("你已经成年了!\n");
} else {
printf("你还未成年!\n");
}
return 0;
}
1.1.3 if-else if-else语句
#include <stdio.h>
int main() {
int score;
printf("请输入你 分数: ");
scanf("%d", &score);
if (score >= 90) {
printf("优秀!\n");
} else if (score >= 80) {
printf("良 good !\n");
} else if (score >= 60) {
printf("及格!\n");
} else {
printf("不及格!\n");
}
return 0;
}
1.2 switch语句
switch语句用于根据表达式 值选择执行不同 code块, 适用于 many 个条件 circumstances:
#include <stdio.h>
int main() {
char grade;
printf("请输入你 etc.级: ");
scanf(" %c", &grade);
switch (grade) {
case 'A':
printf("优秀!\n");
break;
case 'B':
printf("良 good !\n");
break;
case 'C':
printf("及格!\n");
break;
case 'D':
printf("不及格!\n");
break;
default:
printf("无效 etc.级!\n");
}
return 0;
}
注意: in switch语句in, 每个casebranch都需要usingbreak语句来跳出switchstructure, 否则会继续执行 under 一个casebranch code (称 for "穿透"现象) .
2. 循环语句
2.1 while循环
while循环用于 in 条件 for 真时重复执行code块:
#include <stdio.h>
int main() {
int i = 1;
while (i <= 10) {
printf("%d ", i);
i++;
}
printf("\n");
return 0;
}
2.2 do-while循环
do-while循环先执行一次code块, 然 after in 条件 for 真时重复执行:
#include <stdio.h>
int main() {
int i = 1;
do {
printf("%d ", i);
i++;
} while (i <= 10);
printf("\n");
return 0;
}
注意: do-while循环至 few 会执行一次code块, 而while循环可能一次都不执行 (such as果条件一开始就 for fake) .
2.3 for循环
for循环 is 最常用 循环语句, 它将初始化, 条件判断 and iteration语句放 in 一起:
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
printf("%d ", i);
}
printf("\n");
return 0;
}
2.3.1 for循环 变种
// many 个variable for循环
for (int i = 0, j = 10; i < j; i++, j--) {
printf("i = %d, j = %d\n", i, j);
}
// 空循环体
for (int i = 0; i < 10; printf("%d ", i++));
// 无限循环
for (;;) {
printf("这 is a 无限循环!\n");
// 需要usingbreak语句跳出循环
}
2.4 循环嵌套
循环可以嵌套using, 即一个循环 in 部package含另一个循环:
#include <stdio.h>
int main() {
int i, j;
// 打印九九乘法表
for (i = 1; i <= 9; i++) {
for (j = 1; j <= i; j++) {
printf("%d × %d = %d\t", j, i, i * j);
}
printf("\n");
}
return 0;
}
3. 跳转语句
3.1 break语句
break语句用于跳出循环 or switch语句:
#include <stdio.h>
int main() {
int i;
// usingbreak跳出循环
for (i = 1; i <= 10; i++) {
if (i == 5) {
break; // 当ietc.于5时跳出循环
}
printf("%d ", i);
}
printf("\n循环结束!\n");
return 0;
}
3.2 continue语句
continue语句用于跳过当 before 循环 剩余部分, 直接开始 under 一次循环:
#include <stdio.h>
int main() {
int i;
// usingcontinue跳过偶数
for (i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // 跳过偶数
}
printf("%d ", i);
}
printf("\n");
return 0;
}
3.3 goto语句
goto语句用于无条件跳转 to 程序in 指定tag处:
#include <stdio.h>
int main() {
int i = 1;
loop:
if (i <= 10) {
printf("%d ", i);
i++;
goto loop; // 跳转 to looptag处
}
printf("\n");
return 0;
}
注意: goto语句 easy 使程序 流程变得混乱, 一般不推荐using, 只 has in 特殊circumstances under (such as from many 层循环in跳出) 才考虑using.
4. 综合application
4.1 猜number游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int number, guess, attempts = 0;
// 生成1-100之间 随机数
srand(time(NULL));
number = rand() % 100 + 1;
printf("欢迎来 to 猜number游戏!\n");
printf("我想了一个1-100之间 number, 你 has 10次机会猜. \n");
do {
printf("请输入你 猜测: ");
scanf("%d", &guess);
attempts++;
if (guess > number) {
printf("太 big 了!\n");
} else if (guess < number) {
printf("太 small 了!\n");
} else {
printf("恭喜你猜 for 了!你用了%d次机会. \n", attempts);
break;
}
if (attempts >= 10) {
printf("很遗憾, 你没 has in 10次机会 in 猜 for . \n");
printf("正确 number is : %d\n", number);
break;
}
printf("你还 has %d次机会. \n", 10 - attempts);
} while (1);
return 0;
}
4.2 质数判断
#include <stdio.h>
int main() {
int number, i, is_prime = 1;
printf("请输入一个正整数: ");
scanf("%d", &number);
if (number <= 1) {
is_prime = 0;
} else {
for (i = 2; i * i <= number; i++) {
if (number % i == 0) {
is_prime = 0;
break;
}
}
}
if (is_prime) {
printf("%d is 质数. \n", number);
} else {
printf("%d不 is 质数. \n", number);
}
return 0;
}
实践case: 斐波那契数列
writing一个C程序, 输出斐波那契数列 before n项.
requirementsanalysis
- 提示user输入要输出 项数n
- using循环计算并输出斐波那契数列 before n项
- 斐波那契数列 定义: F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2) (n≥3)
referencecode
#include <stdio.h>
int main() {
int n, i;
long long a = 1, b = 1, next;
printf("请输入要输出 斐波那契数列项数: ");
scanf("%d", &n);
if (n <= 0) {
printf("请输入正整数!\n");
return 1;
}
printf("斐波那契数列 before %d项: \n", n);
for (i = 1; i <= n; i++) {
if (i == 1 || i == 2) {
printf("%lld ", a);
} else {
next = a + b;
printf("%lld ", next);
a = b;
b = next;
}
}
printf("\n");
return 0;
}
run结果
请输入要输出 斐波那契数列项数: 10 斐波那契数列 before 10项: 1 1 2 3 5 8 13 21 34 55
互动练习
练习1: writing一个C程序, 输出100以 in 所 has 偶数.
练习2: writing一个C程序, 计算1 to 100 and .
练习3: writing一个C程序, 打印一个由*组成 直角三角形.
例such as, 当输入5时, 输出:
* ** *** **** *****
练习4: writing一个C程序, 判断一个年份 is 否 for 闰年.
闰年 判断条件: 能被4整除但不能被100整除, or 者能被400整除.