17.结构体_B【郝斌C语言入门学习】
1.冒泡排序
1 # include <stdio.h> 2 void sort(int * , int );//排序函数声明 3 int main(void) 4 { 5 int a[6] = {10, 2, 8, -8, 11, 0}; 6 int i = 0; 7 sort(a, 6); 8 for (i=0; i<6; ++i) 9 { 10 printf("%d ", a[i]); 11 } 12 printf("\n"); 13 return 0; 14 } 15 // 定义冒泡排序 16 void sort(int * pArr, int len) 17 { 18 int i, j, t; 19 for (i=0; i<len-1; ++i) 20 { 21 for (j=0; j< len-i-1; ++j) 22 { 23 if (*(pArr + j) > *(pArr+j+1)) 24 { 25 t = *(pArr + j); 26 *(pArr + j) = *(pArr+j+1); 27 *(pArr+j+1) = t; 28 } 29 } 30 } 31 }
2.动态构造存放学生信息的结构体数组
预备知识:字符数组的输入和输出
1 # include <stdio.h> 2 int main(void) 3 { 4 char str[] = {}; 5 printf("请输入字符串:\n"); 6 scanf("%s", str); 7 str[0] = '*'; 8 printf("%s", str); 9 //字符数组用用%s格式说明符输出的时候,传递的参数字符数组名 10 //字符数组名就是字符数组第一个元素的地址 11 //printf需要知道字符串的开始位置,以便能够逐个字符地读取并输出字符串,直到遇到空字符'\0'。 12 return 0; 13 }
例题1;动态构造一个数组,存放学生的信息,然后按分数排序
1 # include <stdio.h> 2 # include <malloc.h> 3 struct Student 4 { 5 char name[100]; 6 int age; 7 float score; 8 }; 9 int main(void) 10 { 11 int len; 12 struct Student * pArr; 13 int i, j; 14 struct Student t; 15 //动态构造一位数组 16 printf("请输入学生的个数是:"); 17 printf("len = "); 18 scanf("%d", &len); 19 pArr = (struct Student *)malloc(len * sizeof(struct Student)); 20 //输入 21 for (i=0; i<len; ++i) 22 { 23 printf("请输入第%d个学生的信息:\n", i+1); 24 printf("name = "); 25 scanf("%s", pArr[i].name); 26 //name时数组名,本身就已经时数组首元素的地址,所以pArr[i].name不能改成&pArr[i].name 27 printf("age = "); 28 scanf("%d", &pArr[i].age); 29 printf("score = "); 30 scanf("%f", &pArr[i].score); 31 } 32 //按学生成绩升序排序,冒泡算法 33 for (i=0; i<len-1; ++i) 34 { 35 for (j=0; j<len-i-1; ++j) 36 { 37 if (pArr[j].score>pArr[j+1].score) 38 { 39 t = pArr[j]; 40 pArr[j] = pArr[j+1]; 41 pArr[j+1] = t; 42 } 43 } 44 } 45 printf("\n\n学生的信息:\n"); 46 //输出 47 for (i=0; i<len; ++i) 48 { 49 printf("请输出第%d个学生的信息:\n", i+1); 50 printf("name = %s\n", pArr[i].name); 51 printf("age = %d\n", pArr[i].age); 52 printf("score = %f\n", pArr[i].score); 53 printf("\n"); 54 } 55 return 0; 56 }
例题1;动态构造一个数组,存放学生的信息,然后按分数排序(用函数调用实现)

浙公网安备 33010602011771号