【代码的暴力美学】-- C语言基础编程题_1


🔥个人主页: K 旺仔小馒头

🍉学习方向: C/C++方向学习者

📖个人专栏:《C语言》《数据结构与算法》《C++知识分享》《C语言实战编程》

⭐️人生格言:‌"何时葡萄先熟透,你要静候再静候"



前言:

欢迎来到C语言实战编程的学习之旅!本文精心挑选了三个经典C语言编程题目,涵盖动态内存、日期处理、数学定理实现等场景,每个题目都配有完整代码与细致解析,助力初学者夯实语法基础、提升逻辑思维。


一.打印从1到最大的n位数 【难度:入门】

描述

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

  1. 用返回一个整数列表来代替打印

  2. n 为正整数,0 < n <= 5

解析:

这里首先要清楚n位数中最大的数字,实际上就是 10^n - 1 。

这个清楚后动态申请空间,将数值填入就可以了,需要注意的是数组下标从0开始,而数值从1开始。

知识点:

pow函数:是一种用于执行幂运算的函数

cpp 复制代码
#include <math.h>
int* printNumbers(int n, int* returnSize) {
    *returnSize = pow(10, n) - 1;//确定最大的数字
    int* arr = (int*)malloc(sizeof(int)*(*returnSize));//申请足够大小的空间
    for(int i = 0;i < *returnSize;i++)
    {
        arr[i] = i+1;//下标从0开始,而数值从1开始
    }
    return arr;
}

二. 计算日期到天数转换【难度:简单】

描述

每一年中都有 12 个月份。其中,1,3,5,7,8,10,12 月每个月有 31 天;4,6,9,11 月每个月有 30 天;而对于 2 月,++闰年++ 时有 29 天,平年时有 28 天。

现在,对应输入的日期,计算这是这一年的第几天。

一个年份是++闰年++ 当且仅当它满足下列两种情况其中的一种:

∙ 这个年份是 4 的整数倍,但不是 100 的整数倍;

∙ 这个年份是 400 的整数倍。

输入描述:

在一行上输入三个整数 𝑎,𝑏,𝑐(1900≦𝑎≦2200),分别代表年、月、日。保证输入的日期是合法的。

输出描述:

输出一个整数,代表输入的日期是这一年的第几天。

解析:

  1. 数组定义:arr 数组下标从 1 开始,arr[1] 对应1月的天数,arr[2] 对应2月的天数,这样更方便根据月份直接索引。

  2. 闰年判断与处理:通过条件 (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) 判断是否为闰年,若是闰年,就将 arr[2](2月)的值改为 29 。

  3. 天数累加:使用循环累加从1月到 month - 1 月的天数,然后再加上当月的 day 天,得到输入日期是当年的第几天。

  4. 输出结果:最后使用 printf 输出计算得到的天数。

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

int main() {
    int year,month,day;
    scanf("%d %d %d",&year,&month,&day);
    //数组下标从1开始对应月份,arr[0]无意义,arr[1]对应1月天数,以此类推
    int arr[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int dayOfYear = 0;

    //判断是否为闰年,若是则将2月天数改为29
    if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
    {
        arr[2] = 29;
    }

    //累加前month - 1个月的天数
    for(int i = 1;i < month;i++)
    {
        dayOfYear += arr[i];
    }
    //加上当月的天数
    dayOfYear += day;
    
    printf("%d\n",dayOfYear);
    return 0;
}

三. 尼科彻斯定理【难度:简单】

描述

尼科彻斯定理,又称为斐波那契数列定理,指的是对于任意正整数 𝑛,存在一个由连续奇数组成的数列,使得该数列的和等于 𝑛 的立方。

例如:

∙ 对于 𝑛=1,数列 {1} 的和为 1^3 = 1;

∙ 对于 𝑛=2,数列 {3,5} 的和为 2^3 = 3+5;

∙ 对于 𝑛=3,数列 {7,9,11} 的和为 3^3 = 7+9+11;

∙ 对于 𝑛=4,数列 {13,15,17,19} 的和为 4^3 = 13+15+17+19。

现在,给定一个正整数 𝑛,请输出这个数列中的元素从小到大相加的形式。

如果有多个这样的序列,请输出长度为 𝑛 的那个。

输入描述:

输入一个整数 𝑛(1≦𝑛≦100) 。

输出描述:

在一行上输出一个字符串,用于描述这个数列中的元素从小到大相加的形式。元素与元素之间用加号连接。

解析:

核心逻辑分两步:

  1. 复用规律,通过 start = n*(n-1)+1 确定起始奇数(连续奇数公差为2,第i个奇数为 odd = start + 2*i );

  2. 简化输出,循环中仅在非首次(i>0)时先印"+",再印当前奇数,避免格式错误,最后补换行。

知识点:

在等差数列的通项公式中, a_n 指的是等差数列的第 n 项(也称为第 n 项的数值)。

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

int main() {
    int n = 0;
    scanf("%d",&n);
    int start = n * (n - 1) + 1;
    for(int i = 0; i < n; i++)
    {
        int odd = start + 2 * i;
        if(i > 0)
        {
            printf("+");
        }
        printf("%d",odd);
    }
    printf("\n");

    return 0;
}

附加知识点:

  1. sprintf 函数

与printf用法类似,sprintf是格式化字符串但是不用于打印而是放到一个str中

  1. strcat 函数

strcat 是 C 语言标准库**<string.h>** 中的字符串拼接函数,用于将一个字符串追加到另一个字符串的末尾。


结语:

希望这三个C语言题目及解析能为你带来收获。从基础语法到实际应用,每一次代码实践都是成长的阶梯。若你在编程路上还有其他疑惑,不妨继续探索,编程的乐趣与进步正藏在每一次思考和调试中。

相关推荐
XCOSnTh2 小时前
XCOSnTh单片机的串口
c语言·单片机·嵌入式硬件·算法·xcosnth
长安——归故李4 小时前
【PLC程序学习】
java·c语言·javascript·c++·python·学习·php
高山有多高5 小时前
C语言实战项目:贪吃蛇(2)
c语言·开发语言·数据结构·c++·算法·游戏·游戏设计
jianqiang.xue7 小时前
ESP32-S3入门第七天:UART串口通信与设备交互
c语言·单片机·嵌入式硬件·mcu·物联网·51单片机
早日退休!!!7 小时前
C 内存布局
c语言·开发语言
路弥行至9 小时前
C语言入门教程 | 第四讲:深入理解数制与码制,掌握基本数据类型的奥秘
服务器·c语言·开发语言·经验分享·笔记·其他·入门教程
GilgameshJSS9 小时前
STM32H743-ARM例程11-PWM
c语言·arm开发·stm32·嵌入式硬件·学习
Imxyk10 小时前
Codeforces Round 1052 (Div. 2) C. Wrong Binary Searchong Binary Search
c语言·c++·算法
yanqiaofanhua14 小时前
C语言自学--数据在内存中的存储
c语言·开发语言