目录
前言:
开新专栏了,讲解100道基础语法编程题
用c语言讲解
目的是复习c语言中的基础语法,为单片机中的c语言代码分析做铺垫
专栏链接:
1、题目展示:
2、问题分析:
首先是这个多项式
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...
不好直接总结规律成关于n的式子
所以不考虑使用函数
然后我们来一起看一下最优解法
先展示最终代码
然后一步一步分析
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int m;
while (scanf("%d", &m) == 1) {
for (int i = 0;i < m;i++) {
int n;
scanf("%d", &n);
double sum = 0.0;
int sign = 1;
for (int j = 1;j <= n;++j) {
sum = sum + (1.0 * sign) / j;
sign = sign * -1;
}
printf("%.2lf\n", sum);
}
}
return 0;
}
1、代码1、2、3、18、19行是老生常谈的代码框架
2、第4行定义整型m,代表测试实例的个数,为第5行输入m做准备
3、第5行循环输入,只要满足输入一个整数,就执行while语句大括号内的代码
4、第6行举个例子:
比如当m=2时,代表要进行两次多项式求和,需要再输入两个整数
所以构建一个循环,执行m次,让我们可以输入m个整数
5、第7行,定义每次输入的数n与第8行配合
6、下面重中之重就是对每一次输入的n进行多项式求和的操作
首先是第9行,定义一个浮点型变量sum代表多项式的和,因为最终多项式的和有可能是小数,且题目要求保留2为小数
第10行定义整型sign=1,因为本题多项式存在符号变化,所以sign用来每次循环结束调整符号
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...
11行for循环执行n次,用于求和,下面我们来演示一下
for (int j = 1;j <= n;++j) {
sum = sum + (1.0 * sign) / j;
sign = sign * -1;
}
假设n=3
第一次
sum=0+(1.0*1)/1=1
sign=1*-1=-1
第二次
sum=1+(1.0*-1)/2=1-1/2
sign=-1*-1=1
第三次
sum=1-1/2+(1.0*1)/3=1-1/2+1/3
以此达到题目的要求
最后第15行,注意输出sum的位置,
是在第6行的for循环内的
比如m=2时,
代表第6行的for循环要执行两次
每一次都要完成输入一个数,多项式求和,然后输出的操作
所以sum的输出 与 输入一个数,多项式求和这两步是并列的
3、最终代码展示:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int m;
while (scanf("%d", &m) == 1) {
for (int i = 0;i < m;i++) {
int n;
scanf("%d", &n);
double sum = 0.0;
int sign = 1;
for (int j = 1;j <= n;++j) {
sum = sum + (1.0 * sign) / j;
sign = sign * -1;
}
printf("%.2lf\n", sum);
}
}
return 0;
}