#运行时中断
#想求多个人的本息和并排序
#
#
#include<stdio.h>
struct bank
{
char name[20];
int num;
int year;
float score;
};
int main()
{
int i, j;
struct bank dd[5];
struct bank middle;
float G;
printf("请输入年利率(用小数形式表示)");
scanf_s("%.2f", &G);
printf("\n");
for (i = 0; i < 5; i++)
{
printf("请输入人名:");
scanf_s("%s", &dd[i].name);
printf("请输入等额本金:");
scanf_s("%d", &dd[i].num);
printf("请输入存放年份:");
scanf_s("%f", &dd[i].year);
printf("\n");
int A,x;
float sum = 1;
float he,y;
A = dd[i].num;
x = dd[i].year;
y = A * (1 + G);
for (j = 1; j < x + 1; j++)
{
sum = sum * (1 + G);
}
he = y * (sum - 1) / G;
dd[i].score = he;
sum = 1;
he = 0;
}
for (i = 0; i < 4; i++)
{
for (j = i + 1; j < 5; j++)
{
if (dd[i].score < dd[j].score)
{
middle = dd[i];
dd[i] = dd[j];
dd[j] = middle;
}
}
}
for (i = 0; i < 5; i++)
{
printf("\t\t%s\t%0.2f\n", dd[i].name,dd[i].score);
}
return 0;
}
printf("请输入存放年份:");
scanf_s("%f", &dd[i].year);
这里改成 %d
printf("请输入人名:");
scanf_s("%s", &dd[i].name);
这里少了一个参数,是
scanf_s("%s", &dd[i].name, 20);
he += y * (sum - 1) / G; 这里是+=
#include<stdio.h>
struct bank
{
char name[20];
int num;
int year;
float score;
};
int main()
{
int i, j;
struct bank dd[5];
struct bank middle;
float G;
printf("请输入年利率(用小数形式表示): ");
scanf_s("%f", &G);
printf("\n");
for (i = 0; i < 5; i++)
{
printf("请输入人名: ");
scanf_s("%s", dd[i].name, 20);
printf("请输入等额本金: ");
scanf_s("%d", &dd[i].num);
printf("请输入存放年份: ");
scanf_s("%d", &dd[i].year);
printf("\n");
float A, x;
float sum = 1;
float he, y;
A = (float)dd[i].num;
x = (float)dd[i].year;
y = A * (1 + G);
for (j = 1; j < x + 1; j++)
{
sum *= (1 + G);
}
he += y * (sum - 1) / G;
dd[i].score = he;
sum = 1;
he = 0;
}
for (i = 0; i < 4; i++)
{
for (j = i + 1; j < 5; j++)
{
if (dd[i].score < dd[j].score)
{
middle = dd[i];
dd[i] = dd[j];
dd[j] = middle;
}
}
}
for (i = 0; i < 5; i++)
{
printf("\t %s %.2f", dd[i].name, dd[i].score);
}
return 0;
}
第17行scanf_s()里的%.2f改为%f,因为%.2f是错误的,使用%f即可读取浮点数。
第22行&取址符去掉,然后scanf_s输入字符串时,还需要指定字符串长度。
第26行%f改为%d,因为年份是整数。
下面代码在Dev_c++测试,所以scanf_s()改为了scanf(),具体修改可参照下注释。
修改如下:
参考链接:
#include<stdio.h>
struct bank
{
char name[20];
int num;
int year;
float score;
};
int main()
{
int i, j;
struct bank dd[5];
struct bank middle;
float G;
printf("请输入年利率(用小数形式表示)");
// https://baike.baidu.com/item/scanf/10773316
// scanf里面的%.2f是错误,的改为%f即可读取浮点数
scanf("%f", &G);
printf("\n");
for (i = 0; i < 5; i++)
{
printf("请输入人名:");
// https://blog.csdn.net/Lmikic/article/details/77338171
// scanf_s() 读取字符串到字符数组,取址符&需要去掉, 因为dd[i].name已经是一个地址了
// 然后 scanf_s() 读取字符串,还需要第二个参数,指定限制字符串的长度
scanf("%s", dd[i].name);
printf("请输入等额本金:");
// https://www.runoob.com/cprogramming/c-function-scanf.html
// 年份是整数,所以%f改为%d
scanf("%d", &dd[i].num);
printf("请输入存放年份:");
scanf("%d", &dd[i].year);
printf("\n");
int A,x;
float sum = 1;
float he,y;
A = dd[i].num;
x = dd[i].year;
y = A * (1 + G);
for (j = 1; j < x + 1; j++)
{
sum = sum * (1 + G);
}
he = y * (sum - 1) / G;
dd[i].score = he;
sum = 1;
he = 0;
}
for (i = 0; i < 4; i++)
{
for (j = i + 1; j < 5; j++)
{
if (dd[i].score < dd[j].score)
{
middle = dd[i];
dd[i] = dd[j];
dd[j] = middle;
}
}
}
for (i = 0; i < 5; i++)
{
printf("\t\t%s\t%0.2f\n", dd[i].name,dd[i].score);
}
return 0;
}
本文代码较多,建议在实际环境中运行调试。完整可运行代码也可以
阅读原文。推荐阅读:
工作中几乎用不到算法,为何要学算法?
为何优先选用unique_ptr而不是裸指针?
拥抱智能指针,告别内存泄露
为什么执行自己的程序要在前面加./
关注公众号【编程珠玑】,获取更多Linux/C/C++/算法/计算机基础/工具等原创技术文章。后台免费获取经典电子书和视频资源