1. 阶乘计算
需求
用户输入整数n,程序计算并输出n!。
变量说明
int n:存储用户输入的整数int fact:存储阶乘计算结果,初始值为 1int i:循环计数器,用于从 1 递增到n
代码示例(while 循环)
c
运行
int n;
scanf("%d", &n);
int fact = 1;
int i = 1;
while (i <= n) {
fact *= i;
i++;
}
printf("%d!=%d\n", n, fact);
小套路
求积类程序的结果变量,初始化值应为1;求和类程序的结果变量,初始化值应为0。
2. for 循环
基本概念
for 循环是计数循环,结构包含初始化计数器、设置循环条件、定义计数器步进方式。
语法格式
c
运行
for(初始动作; 条件; 每轮的动作) {
循环体
}
示例 1:基础计数
c
运行
// 输出 0 1 2 3 4
for (int i = 0; i < 5; i++) {
printf("%d ", i);
}
示例 2:反向计数
c
运行
// 对于一开始的count=10,当count>0时重复循环体,每轮结束后count--
for (int count = 10; count > 0; count--) {
printf("%d ", count);
}
关键特性
- 循环次数由初始值、条件、步进共同决定
for(i=0; i < n; i++)的循环次数为n,循环结束后i的值为n- for 循环的三个表达式均可省略,
for(;条件;)等价于while(条件)
3. break 与 continue
功能区别
- break:直接跳出当前所在的循环,循环终止
- continue:跳过本轮循环剩余的语句,直接进入下一轮循环判断
执行流程
- 初始化循环变量
- 判断循环条件,条件为
False则退出循环 - 条件为
True则执行循环体 - 循环体中遇到
break直接退出;遇到continue则跳过后续语句,执行步进操作 - 执行步进操作,回到条件判断步骤
4. 接力 break 示例(硬币组合问题)
需求
输入金额x元,计算用 1 角、2 角、5 角硬币组成该金额的组合方式。
代码示例
c
运行
int x;
int one, two, five;
int exit = 0;
scanf("%d", &x);
for (one = 1; one < x * 10; one++) {
for (two = 1; two < x * 10 / 2; two++) {
for (five = 1; five < x * 10 / 5; five++) {
if (one + two * 2 + five * 5 == x * 10) {
printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", one, two, five, x);
exit = 1;
break;
}
}
if (exit == 1) break;
}
if (exit == 1) break;
}
5. 分式求和
需求
计算 f(n)=1+21+31+...+n1 的值。
代码示例
c
运行
int n;
int i;
double ret = 0.0;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
ret += 1.0 / i;
}
printf("%f\n", ret);
6. 正序分解整数
需求
输入一个非负整数,正序输出它的每一位数字。
示例
输入:13425 → 输出:1 3 4 2 5
7. 最大公约数(GCD)
方法 1:枚举法
算法思路
- 找出两个数
a和b中的较小值min - 从 1 到
min枚举整数i,判断i能否同时整除a和b - 记录最大的满足条件的
i,即为最大公约数
代码示例
c
运行
int a, b;
scanf("%d%d", &a, &b);
int min;
if (a < b) {
min = a;
} else {
min = b;
}
int ret = 0;
int i;
for (i = 1; i <= min; i++) {
if (a % i == 0 && b % i == 0) {
ret = i;
}
}
printf("%d和%d的最大公约数是%d.\n", a, b, ret);
方法 2:辗转相除法
算法思路
- 如果
b等于 0,计算结束,a就是最大公约数 - 否则,计算
a除以b的余数r,令a = b,b = r - 回到第一步
核心逻辑
通过不断取余缩小数值范围,高效求得最大公约数
8. 素数
定义
只能被 1 和自身整除的数,不包括 1。
示例
2, 3, 5, 7, 11, 13, 17, 19...
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int fact = 1;
int i = 1;
for (i=1; i<=n; i++){
fact *= i;
}
printf("%d!=%d\n", n, fact);
return 0;
}
725

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



