9 C语言的基础练习

1. 平均数

c 复制代码
#include <stdio.h>

int main()
{

    int a,b;
    printf("请输入两个整数,空格隔开: ");

    scanf("%d %d",&a,&b);

    //除以2.0,避免整数整除
    double avg = (a+b) / 2.0;
    printf("平均值: %f\n",avg);
    return 0;
}
c 复制代码
D:\cproject\cmake-build-debug\high.exe
璇疯緭鍏ヤ袱涓暣鏁帮紝绌烘牸闅斿紑:4 5
 骞冲潎鍊? 4.500000

自定义 N 个数字求平均

c 复制代码
#include <stdio.h>

int main()
{
    int n;
    int num;
    double sum = 0;

    printf("请输入要计算几个数字: ");
    scanf("%d",&n);

    for (int i = 0; i < n; ++i) {
        printf("第%d个数字: ",i+1);
        scanf("%d",&num);
        sum += num;
    }

    double avg =  sum / n;
    printf("avg= %.2f\n ", avg);
    return 0;
}
c 复制代码
D:\cproject\cmake-build-debug\high.exe
璇疯緭鍏ヨ璁$畻鍑犱釜鏁板瓧:5
 绗?涓暟瀛?1
 绗?涓暟瀛?2
 绗?涓暟瀛?3
 绗?涓暟瀛?4
 绗?涓暟瀛?5
 avg= 3.00

持续输入,输入负数结束

c 复制代码
#include <stdio.h>
int main(void)
{
    int val;
    double sum = 0;
    int count = 0;

    printf("不断输入整数,输入负数结束计算:\n");
    while(1)
    {
        scanf("%d", &val);
        if(val < 0)
            break;
        sum += val;
        count++;
    }

    if(count == 0)
    {
        printf("未输入有效数据\n");
    }
    else
    {
        printf("平均值=%.2f", sum / count);
    }
    return 0;
}

知识点

c 复制代码
/2.0 不能写成 /2:int/int 是整数除法丢小数;除以浮点自动提升为浮点运算
总和变量建议用 double,防止累加溢出
%.2f 保留 2 位小数输出,日常展示更美观

2. 整数求逆

思路

c 复制代码
循环:每次 %10 拿到个位 → *10拼到新数 → /10砍掉原个位
c 复制代码
#include <stdio.h>

int main(void)
{
    int num;
    int rev = 0;

    printf("请输入一个正整数:");
    scanf("%d", &num);

    while(num != 0)
    {
        int tmp = num % 10;      // 取出最后一位
        rev = rev * 10 + tmp;    // 拼接
        num = num / 10;          // 去掉最后一位
    }

    printf("逆序结果:%d\n", rev);
    return 0;
}
c 复制代码
输入:1234 → 4321
输入:7890 → 987

拓展:支持负数

c 复制代码
#include <stdio.h>
int main(void)
{
    int n, rev=0;
    printf("输入整数:");
    scanf("%d",&n);

    int flag = 1;
    if(n < 0)
    {
        flag = -1;
        n = -n;
    }

    while(n)
    {
        rev = rev*10 + n%10;
        n /= 10;
    }
    rev *= flag;

    printf("逆置:%d",rev);
    return 0;
}

3. 循环计算和

c 复制代码
#include <stdio.h>
int main()
{
    int num;
    int sum = 0;

    printf("不断输入整数,输入0停止,自动求和:\n");
    while (1)
    {
        scanf("%d", &num);
        if (num == 0)
        {
            break;   // 遇到0跳出循环
        }
        sum += num; // 累加
    }

    printf("累加总和 = %d\n", sum);
    return 0;
}
c 复制代码
#include <stdio.h>
int main()
{
    int n, sum = 0;
    printf("请输入上限n:");
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        sum += i;
    }
    printf("1~%d总和:%d", n, sum);
    return 0;
}

4. 前N项求和

c 复制代码
#include <stdio.h>
int main()
{
    int N, sum = 0;
    printf("请输入N:");
    scanf("%d", &N);

    for(int i = 1; i <= N; i++)
    {
        sum = sum + i;
    }
    printf("1~%d累加和 = %d\n", N, sum);
    return 0;
}
c 复制代码
#include <stdio.h>
int main()
{
    int N, sum = 0, i = 1;
    printf("请输入N:");
    scanf("%d", &N);
    while(i <= N)
    {
        sum += i;
        i++;
    }
    printf("和=%d",sum);
    return 0;
}

5. 最大公约数

5.1 辗转相除法(欧几里得算法,推荐)
c 复制代码
#include <stdio.h>
int main()
{
    int a,b,temp;
    printf("输入两个整数:");
    scanf("%d%d",&a,&b);

    while(b != 0)
    {
        temp = a % b;
        a = b;
        b = temp;
    }
    printf("最大公约数:%d",a);
    return 0;
}
c 复制代码
示例:
输入 24 18
循环:
a=24,b=18 → temp=6,a=18,b=6
a=18,b=6 → temp=0,a=6,b=0 退出,结果6
5.2 暴力从两数较小值往下枚举
c 复制代码
#include <stdio.h>
int main()
{
    int a,b,i;
    scanf("%d%d",&a,&b);
    // 取较小值
    int min = a < b ? a : b;
    for(i = min; i >= 1; i--)
    {
        if(a%i==0 && b%i==0)
        {
            printf("最大公约数:%d",i);
            break;
        }
    }
    return 0;
}
相关推荐
Navigator_Z20 分钟前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
是隼人42 分钟前
buuctf-pwn picoctf_2018_shellcode(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
潜创微科技1 小时前
IT6520:USB-C 转 MIPI 高集成控制器,DP 1.4a 转 MIPI 单芯片搞定 4K120 显示
c语言·开发语言·低延迟·掌机·联阳
wzdark1 小时前
多维数组在算法设计中的存储映射问题4
算法
Escalating_xu1 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
傲世仙尊1 小时前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++
cvby2 小时前
C++11
开发语言·c++
Phil3232 小时前
多智能体不是越多越好:Google《Towards a Science of Scaling Agent Systems》论文深度解读
算法
6Hzlia2 小时前
【Classic 150 刷题计划】 LeetCode 26. 删除有序数组中的重复项 | C++ 快慢双指针经典模板
c++·算法·leetcode
白色的北极熊2 小时前
字符转 ASCII 码
c语言