XJTU_ 西安交通大学2020大学计算机作业-第十二周
XJTU_ 西安交通大学2020大学计算机作业-第十二周
注:所有题所有用例均已通过。
俺又更新了,还是求点星星👇
文章没上传到github,反正没人点星星:https://github.com/nobodyXX/XJTU_C_homework/blob/main/week7,如果这篇文章带给你了帮助或者灵感,欢迎给我点个星星,谢谢!!!
有老师把答案发在了github上,终于不用看咱这辣鸡的代码了https://github.com/AndrewChui/CHomeWork
第一题
编写一个程序,读入n个用户姓名和电话号码,按姓名的字典顺序排列后,输出用户的姓名和电话号码,n从键盘输入。
样例输入:
3
zhang 12345678
wang 23456789
liu 34567890
样例输出:
liu 34567890
wang 23456789
zhang 12345678
#include<stdio.h>
#include<string.h>
int main() {
char list[26][30];
int n;
scanf("%d\n", &n);//千万记得有换行符
for (int i = 0; i < n; i++) gets(list[i]);
for (int i=0;i<n;i++)
for (int j = 0; j < n-1-i; j++) {
if (strcmp(list[j], list[j + 1])>0) {
strcpy(list[25], list[j]);
strcpy(list[j], list[j+1]);
strcpy(list[j+1], list[25]);
}
}
for (int i = 0; i < n; i++)
(i == n - 1) ? printf("%s", list[i]) : printf("%s\n", list[i]);
return 0;
}
第二题
有n名学生,每个学生的数据包括学号、姓名、三门课的成绩。可以从键盘输入n个学生的数据,按总成绩从小到大排序,打印包含学号、姓名、三门课成绩和总成绩的成绩单。(测试时,数据从键盘输入。)
输入:第1行为整数n,后面n行表示n个人的信息,包括学号、姓名、和三门课的成绩,每行的数据间用空格隔开。
输出:n行,表示n个人的信息,包括学号、姓名、三门课的成绩和总成绩,数据间一个空格,末尾无空格。
样例输入:
2
2004002 lisi 60 80 70
2004003 wangwu 85 92 87
样例输出:
2004002 lisi 60 80 70 210
2004003 wangwu 85 92 87 264
int main() {
struct Student
{
char id[10];
char name[20];
int a[3];
int sum;
} stu[101];
int n;
scanf("%d\n", &n);//记得有换行符
/*
for (int i = 0; i < n; i++) {
if(i==n-1)//最后一行没有空格!
scanf("%s %s %d %d %d", stu[i].id, stu[i].name, &stu[i].a[0], &stu[i].a[1], &stu[i].a[2]);
else
scanf("%s %s %d %d %d\n", stu[i].id, stu[i].name, &stu[i].a[0], &stu[i].a[1], &stu[i].a[2]);
stu[i].sum = stu[i].a[0] + stu[i].a[1] + stu[i].a[2];
}
*/
//上面注释掉的代码是错误示范,输入不用考虑换行符,谢谢评论区好心人提醒。写成这样就行
for (int i = 0; i < n; i++)
scanf("%s %s %d %d %d", stu[i].id, stu[i].name, &stu[i].a[0], &stu[i].a[1], &stu[i].a[2]);
for (int i=0;i<n;i++)
for (int j = 0; j < n - i - 1; j++) {
if (stu[j].sum > stu[j + 1].sum) {
stu[100] = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = stu[100];
}
}
for (int i = 0; i < n; i++) {
if(i==n-1)
printf("%s %s %d %d %d %d", stu[i].id, stu[i].name, stu[i].a[0], stu[i].a[1], stu[i].a[2], stu[i].sum);
else
printf("%s %s %d %d %d %d\n", stu[i].id, stu[i].name, stu[i].a[0], stu[i].a[1], stu[i].a[2], stu[i].sum);
}
return 0;
}
第三题
"输入一个字符串(其长度不超过81),分别统计其中26个英文字母出现的次数(不区分大、小写字母),并按字母出现次数从高到低排序,若次数相同,按字母顺序排列。字母输出格式举例,例如:A-3,表示字母A出现3次,C-0表示字母C没有出现。
输入:
第一行为输入,占一行
输出:
第二行为输出,占一行。按照字母输出格式从高到低输出,各字母输出之间用一个空格字符分隔。
样例:
123abcAABXxwvUu+
A-3 B-2 U-2 X-2 C-1 V-1 W-1 D-0 E-0 F-0 G-0 H-0
样例输入:
ABCDEFGHIJKLMNOPQTSTUVWXYZ
样例输出:
T-2 A-1 B-1 C-1 D-1 E-1 F-1 G-1 H-1 I-1 J-1 K-1 L-1 M-1 N-1 O-1 P-1 Q-1 S-1 U-1 V-1 W-1 X-1 Y-1 Z-1 R-0
int main() {
char a[200];
int max=0, dir[26][2] = {
{
'A',0}, {
'B',0}, {
'C',0}, {
'D',0}, {
'E',0}, {
'F',0},
{
'G',0}, {
'H',0}, {
'I',0}, {
'J',0}, {
'K',0}, {
'L',0},
{
'M',0}, {
'N',0}, {
'O',0}, {
'P',0}, {
'Q',0}, {
'R',0},
{
'S',0}, {
'T',0}, {
'U',0}, {
'V',0}, {
'W',0},