#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n); // 输入行数
char name[100][100];
int score[100];
for (int i = 0; i < n; i++) {
scanf("%s %d", name[i], &score[i]); // 输入人名和分数
}
// 冒泡排序,按照分数从高到低排列
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (score[j] < score[j+1]) {
int tmpScore = score[j];
char tmpName[100];
strcpy(tmpName, name[j]);
score[j] = score[j+1];
strcpy(name[j], name[j+1]);
score[j+1] = tmpScore;
strcpy(name[j+1], tmpName);
}
}
}
// 输出人名和对应的分数
for (int i = 0; i < n; i++) {
printf("%s %d\n", name[i], score[i]);
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: 要了解单片机,就要追溯到上世纪早期在没有大规模集成电路技术的时代,计算机的设计原理,那时的计算机CPU、随机存储器RAM、只读存储器ROM、各种外设I/O和中断系统ROM等这些都是分离在电路板的各个角落里。直到20世纪70年代左右,随着科学技术的不断发展,利用大规模集成电路技术把CPU和数据存储器(RAM)、程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成一个最小的计算机系统,这个就是单片机。
那么跟单片机先比较嵌入式有哪些不同的地方呢?单片机产品和嵌入式产品都是电子产品,整个SOC都以CPU作为核心内嵌各种存储器,都有一些外围硬件作为辅助,也都是通过软件控制硬件。在功能上有很多的相似之处。但是在SOC性能上有非常巨大的差别,例如在内存方面,嵌入式系统的SOC明显比单片机大很多。现在将单片机与嵌入式系统SOC内存资源进行比较(顺便与PC机SOC进行比较):
1、一般单片机系统中内存需求小,而且希望开发尽肯能的简单,因单片机SOC内嵌小容量的SRAM加小容量的NorFlash。
2、嵌入式系统内存需求大,因为大容量的Norflash相对较贵,因此嵌入式SOC一般采NANDFlash+Dram+Sram+少量Srom。
3、一般PC机都是:小容量的NorFLash+大容量的硬盘(类似于Nandflash)+大容量的Dram。
可见在硬件上三者之间就存在较大的差别。
嵌入式系统和单片机系统在CPU方面也是有一定差异:是否有MMU(分页内存管理单元,它是一种负责处理CPU的内存访问请求的计算机硬件),当然操作系统方面两者也具有一定差异,单片机系统因为内存资源较少的缘故,因此在操作系统移植方面一般只能跑一些简单的RTOS,像51单片机这样的简单SOC甚至连一些轻量级的RTOS都跑不了,哪怕能跑也没人会用它去跑操作系统(有朋友跟我说能跑,他跑过,纯粹是自己在玩呢,是不是),而嵌入式系统就比较牛了,一般在嵌入式系统中都会跑Linux、Android操作系统。(一般分需不需要比较友好的人机交互界面,不需要的一般都是跑LINUX,像平板、手机一般都是跑的Android,当然Android是基于Linux内核的,这个大家也要了解一下)最后,单片机与嵌入式在应用领域也是有较大差异的,单片机一般应用在操作简单的智能家电(如智能台灯),嵌入式一般运用领域较广(例如工业领域、汽车、航空航天等等都需要嵌入式)。这也是我们学习嵌入式的原因所在。
针对问题的解答:
首先,如果没有学生个数的字符串数组和分数如何输入是不清楚,我们可以假设这个字符串数组是通过某种方式获取到的。例如,通过一个文件读取,或者是通过键盘输入。
接着,对于成绩排序,我们可以采用快速排序算法或者归并排序算法进行排序。以快速排序为例,具体步骤如下:
下面给出代码实现:
# 交换函数
def swap(arr, score, i, j):
arr[i], arr[j] = arr[j], arr[i]
score[i], score[j] = score[j], score[i]
# 快速排序函数
def quick_sort(arr, score, l, r):
if l >= r:
return
pivot = score[r] # 以最后一个分数为基准值
i, j = l, l
while j < r:
if score[j] < pivot:
swap(arr, score, i, j)
i += 1
j += 1
swap(arr, score, i, r) # 将基准值放到正确的位置上
quick_sort(arr, score, l, i - 1) # 对左半部分递归快排
quick_sort(arr, score, i + 1, r) # 对右半部分递归快排
# 示例数据
arr = ['Tom', 'Jerry', 'Alice', 'Bob']
score = [85, 72, 90, 78]
# 调用快速排序函数,对分数进行排序
quick_sort(arr, score, 0, len(score) - 1)
# 输出排序结果,即按分数从小到大排列的学生名字
for i in range(len(score)):
print(arr[i])
以上代码的输出结果为:
Jerry
Bob
Tom
Alice
其中,最终输出的结果为按照分数从小到大排列的学生名字。这里只是一个简单的示例,实际上还需要根据具体情况进行调整和完善。