- 使用循环和条件判断:这是最直观的方法,适合初学者理解。
- 使用数学公式:这种方法更高效,代码更简洁。
使用循环和条件判断(推荐)
这种方法最容易理解,我们遍历从1到n的每一个位置 i,然后判断 i 是奇数还是偶数,从而决定输出的值。

(图片来源网络,侵删)
代码实现
#include <stdio.h>
void printSequence(int n) {
// 循环从 1 到 n
for (int i = 1; i <= n; i++) {
// 判断当前下标 i 是奇数还是偶数
if (i % 2 != 0) {
// 如果是奇数位 (1, 3, 5, ...),输出 i 本身
printf("%d ", i);
} else {
// 如果是偶数位 (2, 4, 6, ...),输出 1
printf("1 ");
}
}
printf("\n"); // 换行,使输出更整洁
}
int main() {
int n;
// 提示用户输入项数
printf("请输入数列的项数 n: ");
scanf("%d", &n);
// 调用函数打印数列
printSequence(n);
return 0;
}
代码解释
#include <stdio.h>:包含标准输入输出库,用于printf和scanf函数。void printSequence(int n):定义一个函数,它接收一个整数n作为参数,表示要打印的数列项数。for (int i = 1; i <= n; i++):这是一个for循环,变量i从1开始,每次循环加1,直到i大于n。i代表当前的位置(项数)。if (i % 2 != 0):这是关键判断。- 是取模运算符,
i % 2计算i除以2的余数。 - 如果余数不为0(
!= 0),说明i是一个奇数。
- 是取模运算符,
printf("%d ", i);:i是奇数,就打印i的值。else { ... }:i不是奇数(那它就是偶数),就执行else里面的代码。printf("1 ");:i是偶数,就打印1。main()函数:程序的主入口,它提示用户输入n的值,然后调用printSequence函数来完成打印任务。
示例运行
请输入数列的项数 n: 7
1 1 3 1 5 1 7
使用数学公式(更高效)
我们可以观察到这个数列的规律,并用一个统一的数学公式来表达:
- 对于第
i项:i是奇数,值为i。i是偶数,值为1。
我们可以利用 C 语言的三目运算符 来简化这个逻辑。
代码实现
#include <stdio.h>
void printSequenceWithFormula(int n) {
for (int i = 1; i <= n; i++) {
// 使用三目运算符 (? :) 来决定输出值
// 条件 (i % 2) ? ... : ...
// i % 2 不为0 (i是奇数),则值为 i
// 否则 (i是偶数),则值为 1
printf("%d ", (i % 2) ? i : 1);
}
printf("\n");
}
int main() {
int n;
printf("请输入数列的项数 n: ");
scanf("%d", &n);
printSequenceWithFormula(n);
return 0;
}
代码解释
核心在于这行代码:
printf("%d ", (i % 2) ? i : 1);
这是一个三目运算符,它的语法是 条件表达式 ? 值1 : 值2。

(图片来源网络,侵删)
条件表达式:i % 2,如果这个表达式结果为真(非0),即i是奇数。值1:i,如果条件为真,整个表达式的结果就是i。值2:1,如果条件为假(0),即i是偶数,整个表达式的结果就是1。
这个方法与方法一功能完全相同,但代码更紧凑,执行效率也更高,因为它避免了 if-else 的分支跳转。
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 循环与条件判断 | 逻辑清晰,易于理解和维护 | 代码稍长,有分支判断 | 算法学习,逻辑复杂的场景 |
| 数学公式 | 代码简洁,执行效率高 | 可读性稍差,需要理解三目运算符 | 简单、有明确规律的数列,追求代码简洁 |
对于这个问题,两种方法都非常好。方法一更适合初学者,而方法二是更专业和高效的写法。
