C语言-005

1. 阶乘计算

需求

用户输入整数n,程序计算并输出n!

变量说明

  • int n:存储用户输入的整数
  • int fact:存储阶乘计算结果,初始值为 1
  • int 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);
}

关键特性

  1. 循环次数由初始值、条件、步进共同决定
  2. for(i=0; i < n; i++)的循环次数为n,循环结束后i的值为n
  3. for 循环的三个表达式均可省略,for(;条件;)等价于while(条件)

3. break 与 continue

功能区别

  • break:直接跳出当前所在的循环,循环终止
  • continue:跳过本轮循环剩余的语句,直接进入下一轮循环判断

执行流程

  1. 初始化循环变量
  2. 判断循环条件,条件为False则退出循环
  3. 条件为True则执行循环体
  4. 循环体中遇到break直接退出;遇到continue则跳过后续语句,执行步进操作
  5. 执行步进操作,回到条件判断步骤

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:枚举法

算法思路
  1. 找出两个数ab中的较小值min
  2. 从 1 到min枚举整数i,判断i能否同时整除ab
  3. 记录最大的满足条件的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:辗转相除法

算法思路
  1. 如果b等于 0,计算结束,a就是最大公约数
  2. 否则,计算a除以b的余数r,令a = bb = r
  3. 回到第一步
核心逻辑

通过不断取余缩小数值范围,高效求得最大公约数

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值