1.分数求和
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
#include <stdio.h>int main(){double sum = 0.0; // 使用 double 类型来存储结果,以处理可能的小数部分int sign = 1; // 符号标志,初始为 1 表示正数for (int i = 1; i <= 100; i++) // 循环得到 1 ~ 100
{ sum += sign * (1.0 / i); // 将当前项加到总和中,通过 sign 控制正负sign *= -1; // 每次循环后改变符号,实现正负交替}printf("结果为: %lf\n", sum); // 输出计算结果return 0;
}
代码分析:
- double sum = 0.0;:使用双精度浮点数
sum
来存储累加的结果,因为计算过程中可能会产生小数。 - int sign = 1;:定义一个整数
sign
作为符号标志,初始为1
表示正项。 - for (int i = 1; i <= 100; i++) :使用循环得到从
1
到100
的每个数。 - sum += sign * (1.0 / i); :计算当前项的值,通过乘以
sign
来决定是加还是减,然后累加到sum
中。 - sign *= -1; :在每次循环后改变符号,使得下一项的符号与当前项相反。
- printf("结果为: %lf\n", sum); :以双精度浮点数的格式输出最终的计算结果。
本题使用双精度浮点数的原因
1:精度问题:这个计算中涉及到分数的运算,结果可能不是整数,而是带有小数部分。使用整数类型(如 int
)无法准确表示小数部分,会导致精度丢失。而双精度浮点数能够提供更高的精度,可以更准确地表示计算结果。
例如,计算 1/3
用整数类型会得到 0
,但实际上应该是约 0.3333...
,使用 double
类型可以更接近真实值。
2:避免舍入误差:随着计算的进行,由于整数除法会直接截断小数部分,可能会导致累积的舍入误差越来越大。使用浮点数可以在一定程度上减少这种误差的影响,使得最终结果更接近数学上的准确值。
3:通用性:在实际的科学计算和数学运算中,很多情况下结果都是带有小数的。使用浮点数类型可以使代码更具通用性,能够处理更广泛的数值范围和精度要求。
2.比大小(整数)
代码展示:
#include<stdio.h>
int main()
{int a = 0;int b = 0;printf("输入两个数");scanf("%d %d", &a, &b);if (a > b)printf("%d %d", a );else{if (a == b)printf("%d = %d", a , b);elseprintf("%d < %d", a , b);}return 0;
}
3.打印1~100之间所有3的倍数的数字
题目思路:
1 .需要生成1~100个数,我们可以使用 for 循环 for(i = 1;i <= 100; i++)
2. 3 的倍数一定能被3整除,因此 i % 3== 0,该表达式成立,则 i 一定是 3 的倍数
代码展示:
#include<stdio.h>
int main()
{int i = 0;//初始化for (i = 1; i <= 100; i++)//生成1~100之间的数{if (i % 3 == 0)//判断是不是 3 的倍数printf("%d\n", i);}return 0;
}
4.三角形的判断
思路解析:
1:通过scanf
函数得到三角形三条边的长度,用 a、b、c三个变量表示。
2:使用 if条件判断语句 来检查这三条边能否构成一个三角形。构成三角形的条件是任意两边之和大于第三边,所以使用(a + b > c) && (a + c > b) && (b + c > a) 这个条件来判断。
3:如果能构成三角形,再进一步判断三角形的类型:
如果三条边都相等,a == b && a == c 即则是等边三角形。
如果有两条边相等,即 (a == b) && (b != c)) || ((a == c) && (c != b)) || ((b == c) && (c != a)则是等腰三角形。
如果三条边都不相等,则是一般三角形。
4:如果不能构成三角形,输出相应的提示信息。
代码展示:
#include<stdio.h>
int main()
{ //初始化int a = 0;int b = 0;int c = 0;printf("请输入三边长:");scanf("%d %d %d", &a, &b, &c);//输入值if ((a + b > c) && (a + c > b) && (b + c > a))//判断是否构成三角形{if (a == b && a == c)//三边相等{printf("等边三角形");}else{if (((a == b) && (b != c)) || ((a == c) && (c != b)) || ((b == c) && (c != a)))//两边相等{printf("等腰三角形");}else{printf("普通三角形");}}}else//无法构成三角形{printf("无法构成三角形,请重新尝试");}return 0;
}
5.打印乘法口诀表
思路解析:
1. 我们需要使用两个嵌套的循环来实现。我们可以使用两个for循环。外层for循环控制行数,从 1 到 9 。 对于每一行,内层for循环控制列数,列数从 1 到当前的行数。
2. 在内层循环中,计算当前行和列对应的乘法结果,并将其打印出来。 可以使用`printf`函数来输出乘法表达式和结果,例如:printf("%d * %d = %d\t", i, j, i * j); ,其中 i 表示行,j 表示列。
3. 为了使输出的乘法口诀表更美观,在每一行乘法运算结束后,进行换行操作。 可以在内层循环结束后,使用 printf("\n"); 来换行。
通过以上步骤,就可以逐步打印出 9*9 乘法口诀表。这样的思路可以清晰地处理每一行和每一列的乘法运算,并以整齐的格式输出结果。
代码展示:
#include <stdio.h>
int main()
{int i = 0;//行变量for (i = 1; i <= 9; i++){int j = 0;//列变量for (j = 1; j <= i; j++){printf("%d * %d= %2d ", i, j, i * j);}printf("\n");}return 0;
}
结果展示: