2.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct stu{
char name[16];
int score;
}stu_t, *pstu_t;
void selectionSort(pstu_t, int);
int main(int argc, const char *argv[])
{
const size_t ArSize = 5;
pstu_t p = (pstu_t)malloc(sizeof(stu_t) * ArSize);
printf("Please enter student info:\n");
for(size_t i = 0; i < ArSize; i++){
printf("#%lu:\n", i + 1);
printf("name: ");
gets((p + i)->name);
printf("score: ");
scanf("%d", &(p + i)->score);
getchar();
}
selectionSort(p, ArSize);
for(size_t i = 0; i < ArSize; i++){
printf("#%lu:\n", i + 1);
printf("name: %s, score: %d\n", (p+i)->name, (p+i)->score);
}
free(p);
return 0;
}
void selectionSort(pstu_t p, int n){
for(size_t i = 0; i < n - 1; i++){
size_t min = i;
for(size_t j = i + 1; j < n; j++)
if((p+min)->score > (p+j)->score)
min = j;
if(min != i){
stu_t temp = p[i];
p[i] = p[min];
p[min] = temp;
}
}
}
Please enter student info:
#1:
name: jerry
score: 98
#2:
name: kitty
score: 92
#3:
name: lucy
score: 80
#4:
name: kobe
score: 100
#5:
name: messi
score: 0
#1:
name: messi, score: 0
#2:
name: lucy, score: 80
#3:
name: kitty, score: 92
#4:
name: jerry, score: 98
#5:
name: kobe, score: 100
3.
Student:4+50+3+3(补充)=60;
Teacher:4+50+2(补充)+60=116;
注:50+2+60=112能被min(8, 60)整除
Course:4+50+2(补充)+116=172;
注:50+2+116=168能被min(8, 116)整除
8为64位操作系统对齐量,4为32位操作系统对齐量
成员位于最大对齐成员对齐量与系统对齐量中最小值的整数倍的位置上(相对于第一个成员的末尾开始)