检查并修改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); }
时间: 2024-03-23 12:41:26 浏览: 87
这份代码存在一些问题,主要有以下几点:
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;
}
```
阅读全文