自学内容网 自学内容网

C:一些题目

 

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);
else
printf("%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;
}

结果展示:


原文地址:https://blog.csdn.net/2401_85010100/article/details/140575957

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!