解题思路:
定义 一个结构体->构造一个动态数组->输入->排序->输出
注意事项:
1、比较字符串需要用到strcmp(str1,str2);
2、这个题的输入并不是一次,而是需要多组数据输入;
参考代码(自定义函数):
# include <stdio.h> # include <malloc.h> # include <string.h> //里面有strcmp(str1, str2);函数 //定义一个结构体类型 struct Student { char name[101]; int score; int age; }; void sort(struct Student * pArr, int N); //排序函数 int main() { int i; int N; struct Student * pArr; while(scanf("%d", &N)!=EOF) { //分配内存 pArr = (struct Student *)malloc(sizeof(struct Student)*N); //输入 for( i=0; i<N; i++) scanf("%s %d %d", pArr[i].name, &pArr[i].age, &pArr[i].score); //排序 sort(pArr, N); //输出 for( i=0; i<N; i++) printf("%s %d %d\n", pArr[i].name, pArr[i].age, pArr[i].score); } return 0; } //排序函数 void sort(struct Student * pArr, int N) { int i, j; struct Student t; //冒泡排序 for (i=0; i<N; i++) { for (j=i+1; j<N; j++) { if (pArr[j].score < pArr[i].score) { t = pArr[j]; pArr[j] = pArr[i]; pArr[i] = t; } else if (pArr[j].score == pArr[i].score && strcmp(pArr[i].name, pArr[j].name)>0) { t = pArr[j]; pArr[j] = pArr[i]; pArr[i] = t; } else if (pArr[j].score == pArr[i].score && pArr[j].age < pArr[i].age && strcmp(pArr[j].name, pArr[i].name)==0) { t = pArr[j]; pArr[j] = pArr[i]; pArr[i] = t; } } } }
参考代码:
# include <stdio.h> # include <string.h> //里面有strcmp(str1, str2);函数 struct Student { char name[101]; int score; int age; }S[2000], t; //s[2000]里面的数字大一点 int main() { int N; int i, j; while(scanf("%d", &N)!=EOF) { //输入 for(i=0; i<N; i++) { scanf("%s %d %d", S[i].name, &S[i].age, &S[i].score); } //按成绩排序 for (i=0; i<N; i++) { for (j=i+1; j<N; j++) { if (S[j].score < S[i].score) { t = S[j]; S[j] = S[i]; S[i] = t; } else if (S[j].score == S[i].score && strcmp(S[i].name, S[j].name)>0) { t = S[j]; S[j] = S[i]; S[i] = t; } else if (S[j].score == S[i].score && S[j].age < S[i].age && strcmp(S[j].name, S[i].name)==0) { t = S[j]; S[j] = S[i]; S[i] = t; } } } //输出 for(i=0; i<N; i++) printf("%s %d %d\n", S[i].name, S[i].age, S[i].score); } return 0; }
我是一个小垃圾,这题我做了很久,错了很多次。
0.0分
5 人评分
if(node[i].na==node[j].na&&node[i].num==node[j].num&&node[i].age>node[j].age){ swap(&node[i],&node[j]); } } } for(int i=0;i<n;i++){ printf("%s %d %d\n",node[i].name,node[i].age,node[i].num); } } } }
#include <stdio.h> struct date{ char name[101]; int age; int num; char na; }node[1001]; void swap(struct date *p,struct date *q){ struct date temp; temp=*p; *p=*q; *q=temp; } int main(){ int n; while(scanf("%d",&n)!=EOF){ if(n<=1000&&n>0){ for(int i=0;i<n;i++){ scanf("%s %d %d",&node[i].name,&node[i].age,&node[i].num); node[i].na=node[i].name[0]; } for(int i=0;i<n-1;i++){ for(int j=i+1;j<n;j++){ if(node[i].num>node[j].num){ swap(&node[i],&node[j]); } if(node[i].na>node[j].na&&node[i].num==node[j].num){ swap(&node[i],&node[j]); }
点我有惊喜!你懂得!浏览:2248 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:664 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1091 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:583 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:541 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:600 |
A+B for Input-Output Practice (V) (C语言代码)浏览:497 |
GC的苦恼 (C语言代码)浏览:672 |
数组输出 (C语言代码)浏览:749 |
整除问题 (C语言代码)浏览:594 |