目录
第一题:实现大衍数列的打印
第二题:生成所有由1、2、3、4组成的互不相同且无重复数字的三位数,并计算总数
第三题:整数加法计算器
第四题:实现一个范围累加和函数
第五题:编写一个函数计算整数的阶乘
第一题:实现大衍数列的打印
描述:
大衍数列是中国古代文献中记载的一种数列,主要用于解释中国传统文化中的太极衍生原理。该数列遵循特定的规律生成,其中偶数项是序号平方的一半,奇数项是序号平方减1后再除以2。
要求:
编写一个程序,实现大衍数列的生成,并打印出前100项。
输入:
无
输出:
打印出大衍数列的前100项,每个数字占一行。
示例:
输出应为:
0
2
4
8
12
18
...
(此处省略后续项,直至打印出前100项)
提示:
- 你可以使用循环结构来生成数列的每一项。
- 根据大衍数列的规律,偶数项和奇数项的计算方式不同,你需要在循环中判断当前序号的奇偶性,然后分别进行计算。
- 记得初始化变量,并在每次循环结束后将序号加1,直到打印出前100项为止。
代码实现:
#include <stdio.h>
int main()
{
/*
题目:中国古代文献中,曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。
它的前几项是:0、2、4、8、12、18、24、32、40、50 …
其规律是:对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。
请据此编写代码实现打印大衍数列的前100项。
程序分析:使用循环迭代变量 i,从1到100。在每次迭代中,如果 i 是偶数,
则打印 i 的平方除以2;如果 i 是奇数,则打印 i 的平方减1再除以2。
*/
for (int i = 1; i <= 100; i++) // 循环从1到100
{
if (i % 2 == 0) // 如果i是偶数
{
printf("偶数:%d", i * i / 2); // 打印i的平方除以2的结果,并标记为“偶数”
}
else // 如果i是奇数
{
printf("奇数:%d", (i * i - 1) / 2); // 打印i的平方减1后除以2的结果,并标记为“奇数”
}
}
return 0;
}
运行结果:
第二题:生成所有由1、2、3、4组成的互不相同且无重复数字的三位数,并计算总数
描述:
给定四个数字1、2、3、4,我们需要生成所有可能的三位数,这些三位数需要满足以下条件:
- 每一位上的数字都不能重复。
- 三位数是一个完整的数字,不能拆分。
要求:
编写一个程序,生成所有满足条件的三位数,并计算它们的总数。每个生成的三位数应单独输出,并且总数应在程序最后输出。
输出:
输出所有满足条件的三位数,每个数字占一行。最后输出总数。
示例:
输出应为:
123
124
132
134
142
143
213
214
...
(此处省略后续项)
总数:24
提示:
- 你可以使用嵌套循环来遍历所有可能的组合。
- 在每个循环中,检查当前数字是否已经被使用过,如果是,则跳过该组合。
- 对于每个有效的组合,将其转换为整数并输出。
- 使用一个计数器来记录有效组合的总数,并在程序最后输出。
代码实现:
#include <stdio.h>
int main()
{
/*
题目:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?分别都是多少?
程序分析:可填在百位、十位、个位的数字都是 1、2、3、4,
组成所有的排列后再去掉不满足条件的排列。
*/
// 记录总数
int sum = 0;
// 第一层循环,i从1遍历到4
for (int i = 1; i < 5; i++)
{
// 第二层循环,j从1遍历到4
for (int j = 1; j < 5; j++)
{
// 第三层循环,k从1遍历到4
for (int k = 1; k < 5; k++)
{
// 判断i、j、k这三个数是否都不相同
if (i != j && i != k && j != k)
{
// 如果都不相同,则打印这三个数
printf("%d %d %d\n", i, j, k);
sum ++ ;
}
}
}
}
printf("总数为:%d\n", sum);
return 0;
}
运行结果:
第三题:整数加法计算器
描述:
编写一个程序,要求用户输入两个整数,然后计算并输出它们的和。输出的格式应为“xx + xx = xx”,其中“xx”代表用户输入的整数和它们的和。
要求:
- 程序应首先提示用户输入第一个整数。
- 读取用户的输入,并将其转换为整数类型。
- 程序应再次提示用户输入第二个整数。
- 同样读取用户的输入,并转换为整数类型。
- 计算两个整数的和。
- 按照“xx + xx = xx”的格式输出结果,其中“xx”为实际输入的整数和它们的和。
示例:
假设用户输入的第一个整数是5,第二个整数是3,则程序的输出应为:
5 + 3 = 8
提示:
- 可以使用Python的
input()
函数来获取用户的输入,并通过int()
函数将其转换为整数。 - 使用字符串格式化或拼接来构建输出格式。
代码实现:
#include <stdio.h>
int main()
{
// 编写一个程序,要求用户输入两个整数,然后输出它们的和,输出格式为:xx + xx = xx
// 0. 定义变量保存数字
int num_1;
int num_2;
// 1. 用户输入第一个数
printf("请输入第一个数:");
scanf("%d", &num_1);
// 2. 用户输入第二个数
printf("请输入第二个数:");
scanf("%d", &num_2);
// 3. 计算两个数字的和
int sum = num_1 + num_2;
// 4. 打印
printf("%d + %d = %d\n", num_1, num_2, sum);
return 0;
}
运行结果:
第四题:实现一个范围累加和函数
描述:编写一个函数,接受2个int参数作为参数,计算第一个参数~第二个参数范围的累加和,并返回累加的结果。
要求:
- 编写
scope
函数,实现累加和的计算逻辑。 - 在
main
函数中调用scope
函数,并打印出累加和的结果。 - 测试
scope
函数在不同输入参数下的正确性,包括start小于end、start大于end以及start等于end的情况。
示例:
调用scope(1, 6)
时,计算1到6的累加和,结果为1+2+3+4+5+6=21。
调用scope(5, 1)
时,计算5到1的累加和,由于5大于1,所以实际上是计算1到5的累加和,结果为15。
调用scope(4, 4)
时,由于num1
等于num2
,直接返回两数之和,即4+4=8。
提示:
- 在
scope
函数中,根据start和end的大小关系,使用循环遍历范围内的整数并累加。 - 考虑到循环中使用的变量
sum
需要在循环之外进行初始化,并初始化为0,以避免未定义行为。 - 在
main
函数中,调用scope
函数并打印结果时,可以使用printf
函数进行输出。
代码实现:
#include <stdio.h>
// 编写一个函数,接受2个int参数作为参数,计算第一个参数~第二个参数范围的累加和,并返回累加的结果
int scope(int start, int end)
{
// 1. 定义一个变量接收结果
int sum = 0;
// 2. start 比 end 小
if (start < end)
{
for (int i = start; i <= end; i++)
{
sum += i;
}
}
// 3. end 比 start 大
else if (start > end)
{
for (int i = end; i <= start; i++)
{
sum += i;
}
}
else
{
// 4. 两数相等
sum = start+ end;
}
return sum;
}
int main()
{
// 调用
printf("结果为:%d\n", scope(1, 6));
printf("结果为:%d\n", scope(5, 1));
printf("结果为:%d\n", scope(4, 4));
return 0;
}
运行结果:
第五题:编写一个函数计算整数的阶乘
描述:
编写一个函数,该函数接受一个整数作为参数,并计算该整数的阶乘值。阶乘表示一个整数与所有小于它的正整数的乘积。例如,5的阶乘(记作5!)是5 * 4 * 3 * 2 * 1 = 120。
要求:
- 函数应接收一个整数作为参数。
- 函数应计算该整数的阶乘值。
- 如果输入的整数为负数或零,函数应返回错误信息或适当处理,因为负数和非零整数的阶乘在数学上没有定义。
- 函数应返回计算得到的阶乘值。
示例:
假设函数名为calculate_factorial
,调用calculate_factorial(5)
应返回120。
调用calculate_factorial(0)
或calculate_factorial(-3)
应返回错误信息或适当处理,因为0和负数的阶乘没有定义。
提示:
方式一(循环):
- 可以使用循环结构来逐步计算阶乘值。从1开始,逐步乘以比当前数小的每个整数,直到达到输入的整数。
- 在计算阶乘时,要注意处理输入为0或负数的情况,以避免计算错误或无限循环。
方式二(递归):
- 递归函数的基本思想是将大问题分解为小问题,然后逐步解决小问题,直到达到基本情况(即递归终止条件)。
- 在计算阶乘的递归函数中,基本情况是当输入的整数为1时,返回1(因为1的阶乘是1)。
- 对于其他大于1的整数,递归函数可以调用自身来计算n-1的阶乘,然后将结果乘以n。
- 需要注意递归函数的调用栈深度,避免因为输入过大的整数而导致栈溢出。
代码实现:
方式一(循环):
#include <stdio.h>
// 编写一个函数,接受一个整数作为参数,计算并返回它的阶乘值
int calculate_factorial(int num)
{
// 校验;
if (num <= 0)
{
return 0;
}
// 定义变量保存结果 初始化为 1
int result = 1;
for (int i = num; i >= 1; i--)
{
result *= i;
}
return result;
}
int main()
{
int result = calculate_factorial(5);
// int result = calculate_factorial(0); // 失败示例代码
if (result == 0)
{
printf("%s\n", "0和负数的阶乘没有定义");
}
else
{
printf("%d\n", result);
}
return 0;
}
方式二(递归):
int calculate_factorial(int num)
{
// 校验;
if (num <= 0)
{
return 0;
}
/*
5阶乘值:5*4*3*2*1
n阶乘值:n*(n-1)*(n-2)……2*1
*/
if (num == 1)
{
return 1;
}
// num * stage(num - 1)
return num * calculate_factorial(num - 1);
}
int main()
{
int result = calculate_factorial(5);
// int result = calculate_factorial(-3);
if (result == 0)
{
printf("%s\n", "0和负数的阶乘没有定义");
}
else
{
printf("%d\n", result);
}
return 0;
}
运行结果:
成功:
失败: