XJTU_ 西安交通大学2020大学计算机作业-第十二周

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}, 
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值