|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
输入共11行,前10行每行是一个学生的姓名,最后一行是10个用空格分开的整数表示对应的10个学生成绩。(姓名大小不超过20个字符)
输出姓名按字典序排列后的学生姓名和成绩,共10行,每个学生的姓名和成绩占一行,姓名和成绩间用逗号分开。 为什么运行崩溃
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char name[10][10],names[10];
- int score[10],scores;
- int i,j;
- for(i=0;i<10;i++)
- {
- scanf("%s\n",name[i]);
- }
- for(i=0;i<10;i++)
- {
- scanf("%d",&score[i]);
- }
- for(i=0;i<10;i++)
- {
- for(j=0;j<10-i-1;j++)
- {
- if(strcmp(name[j],name[j+1])>0)
- {
- strcpy(names,name[j]);
- strcpy(name[j],name[j+1]);
- strcpy(name[j+1],names);
- scores=score[j];
- score[j]=score[j+1];
- score[j+1]=scores;
- }
- }
- }
- for(i=0;i<10;i++)
- {
- printf("%s,%d\n",name[i],score[i]);
- }
- return 0;
- }
复制代码
如果你只能使用`#include`和`#include`两个头文件,并且不能使用结构体,可以使用以下代码来实现你的需求:
- #include <stdio.h>
- #include <string.h>
- int main() {
- char names[10][21]; // 10个学生的姓名,每个姓名最长为20个字符
- int scores[10]; // 对应的10个学生成绩
- // 输入学生姓名和成绩
- printf("请输入10个学生的姓名和成绩:\n");
- for (int i = 0; i < 10; i++) {
- scanf("%s %d", names[i], &scores[i]);
- }
- // 使用冒泡排序按照姓名进行排序
- for (int i = 0; i < 9; i++) {
- for (int j = 0; j < 9 - i; j++) {
- if (strcmp(names[j], names[j + 1]) > 0) {
- // 交换学生姓名
- char temp[21];
- strcpy(temp, names[j]);
- strcpy(names[j], names[j + 1]);
- strcpy(names[j + 1], temp);
- // 交换学生成绩
- int tempScore = scores[j];
- scores[j] = scores[j + 1];
- scores[j + 1] = tempScore;
- }
- }
- }
- // 输出排序后的学生姓名和成绩
- printf("姓名按字典序排列后的学生姓名和成绩:\n");
- for (int i = 0; i < 10; i++) {
- printf("%s,%d\n", names[i], scores[i]);
- }
- return 0;
- }
复制代码
这段代码使用了一个二维字符数组`names`来保存学生的姓名,长度为10(10个学生),每个姓名的最大长度为20。同时,使用一个一维整数数组`scores`来保存学生成绩。在输入学生姓名和成绩后,通过冒泡排序按照姓名进行字典序排序。最后,输出排序后的学生姓名和成绩。请注意,这种方法是比较简单的排序方法,如果数据量较大,建议使用更高效的排序算法。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
|
|