C语言编写一个程序:输入一位正整数n,计算1-1/(n+1)的值保留五位小数末尾四舍五入并输出
时间: 2023-04-06 13:02:28 浏览: 170
可以回答这个问题。以下是C语言编写的程序:
#include <stdio.h>
#include <math.h>
int main()
{
int n;
double sum = 1.0;
printf("请输入一个正整数n:");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
sum -= 1.0 / (double)i;
}
printf("1-1/(n+1)的值为:%.5f\n", round(sum * 100000) / 100000.0);
return 0;
}
注意:程序中使用了math.h库中的round函数来进行四舍五入操作。
相关问题
检查并修改c语言程序:给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。 输出格式: 在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。 输入样例: 3 Programming in C 21.5 Programming in VB 18.5 Programming in Delphi 25.0 输出样例: 25.00, Programming in Delphi 18.50, Programming in VB。#include<stdio.h> struct book { char name[30]; double pace[10]; }; int main() { int n,i,j,k; struct book np[10]; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%s \n",&np[i].name); scanf("%lf \n",&np[i].pace); } int max=np[0].pace,min=np[0].pace; for(j=0;j<n;j++) { if(max < np[j].pace) max=np[j].pace; } int m=j; for(k=0;k<n;k++) { if(min > np[k].pace) min=np[k].pace; } int x=k; printf("%.2lf,%s",max,np[m].name); printf("%.2lf,%s",min,np[x].name); }
这份代码存在一些问题,主要有以下几点:
1. 结构体中定价应该是 double 类型而不是 double 数组类型。
2. 在第一个 for 循环中,书名和价格的输入格式不正确,应该去掉末尾的空格和换行符。
3. 在第二个 for 循环中,变量 m 和 x 的赋值不正确,应该在找到最大值和最小值时记录下标 j 和 k。
4. 输出格式不正确,应该在两个输出语句之间加上一个空格。
5. 在最后一个输出语句中,应该使用 %s 格式符输出书名。
修改后的代码如下所示:
```
#include <stdio.h>
struct book {
char name[30];
double price;
};
int main() {
int n, i, j, k;
struct book books[10];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s", books[i].name);
scanf("%lf", &books[i].price);
}
double max = books[0].price, min = books[0].price;
int max_index = 0, min_index = 0;
for (j = 1; j < n; j++) {
if (books[j].price > max) {
max = books[j].price;
max_index = j;
}
if (books[j].price < min) {
min = books[j].price;
min_index = j;
}
}
printf("%.2lf, %s ", max, books[max_index].name);
printf("%.2lf, %s", min, books[min_index].name);
return 0;
}
```
阅读全文