检查并修改c语言程序代码:输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。 输入格式: 输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。 输出格式: 按照年龄从大到小输出朋友的信息,格式同输出。 输入样例: 3 zhang 19850403 13912345678 wang 19821020 +86-0571-88018448 qian 19840619 13609876543 输出样例: wang 19821020 +86-0571-88018448 qian 19840619 13609876543 zhang 19850403 13912345678。#include<stdio.h> struct xinxi { char name[30]; int birthday; int number; }; int main() { struct xinxi xin[10]; int n,i,sum[20],k[20]; scanf("%d\n",&n); for(i=0;i<n;i++) { scanf("%s %d %d",xin[i].name,xin[i].birthday,xin[i].number); sum[i]=xin[i]/10000; k[i]=(xin[i]/10000)%100; } int max=sum[0]; for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(max<sum[i]) max=sum[i]; } } }
时间: 2024-03-17 21:46:22 浏览: 66
这段程序有一些语法错误和逻辑问题,具体修改如下:
1. 结构体中的电话号码应该用字符串存储,而不是整数。生日也应该用字符串存储,方便后续的比较和排序。
2. 输入时读取生日和电话号码时应该使用字符串格式化输入,而不是整数格式化输入。
3. 比较年龄大小时应该使用生日中的年份进行比较,而不是整个日期。
4. 排序时应该使用冒泡排序或快速排序等算法,而不是简单的比较。
修改后的程序如下:
```c
#include <stdio.h>
#include <string.h>
struct xinxi {
char name[30];
char birthday[9];
char number[18];
};
int main() {
struct xinxi xin[10];
int n, i, j;
int year[10];
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%s %s %s", xin[i].name, xin[i].birthday, xin[i].number);
year[i] = atoi(xin[i].birthday) / 10000;
}
// 冒泡排序
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (year[j] < year[j+1]) {
int tmp = year[j];
year[j] = year[j+1];
year[j+1] = tmp;
struct xinxi tmp_xin = xin[j];
xin[j] = xin[j+1];
xin[j+1] = tmp_xin;
}
}
}
// 输出结果
for (i = 0; i < n; i++) {
printf("%s %s %s\n", xin[i].name, xin[i].birthday, xin[i].number);
}
return 0;
}
```
阅读全文