
🔥个人主页: K 旺仔小馒头
🍉学习方向: C/C++方向学习者
📖个人专栏:《C语言》《数据结构与算法》《C++知识分享》《C语言实战编程》
⭐️人生格言:"何时葡萄先熟透,你要静候再静候"

前言:
欢迎来到C语言实战编程的学习之旅!本文精心挑选了三个经典C语言编程题目,涵盖动态内存、日期处理、数学定理实现等场景,每个题目都配有完整代码与细致解析,助力初学者夯实语法基础、提升逻辑思维。
一.打印从1到最大的n位数 【难度:入门】
描述
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
-
用返回一个整数列表来代替打印
-
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),分别代表年、月、日。保证输入的日期是合法的。
输出描述:
输出一个整数,代表输入的日期是这一年的第几天。
解析:
数组定义:arr 数组下标从 1 开始,arr[1] 对应1月的天数,arr[2] 对应2月的天数,这样更方便根据月份直接索引。
闰年判断与处理:通过条件 (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) 判断是否为闰年,若是闰年,就将 arr[2](2月)的值改为 29 。
天数累加:使用循环累加从1月到 month - 1 月的天数,然后再加上当月的 day 天,得到输入日期是当年的第几天。
输出结果:最后使用 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) 。
输出描述:
在一行上输出一个字符串,用于描述这个数列中的元素从小到大相加的形式。元素与元素之间用加号连接。
解析:
核心逻辑分两步:
复用规律,通过 start = n*(n-1)+1 确定起始奇数(连续奇数公差为2,第i个奇数为 odd = start + 2*i );
简化输出,循环中仅在非首次(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;
}
附加知识点:
- sprintf 函数


与printf用法类似,sprintf是格式化字符串但是不用于打印而是放到一个str中
- strcat 函数
strcat
是 C 语言标准库**<string.h>
** 中的字符串拼接函数,用于将一个字符串追加到另一个字符串的末尾。
结语:
希望这三个C语言题目及解析能为你带来收获。从基础语法到实际应用,每一次代码实践都是成长的阶梯。若你在编程路上还有其他疑惑,不妨继续探索,编程的乐趣与进步正藏在每一次思考和调试中。
