//题目34:对10个数进行排序 #include<stdio.h> #include<stdlib.h> //分析:使用冒泡排序 void main(){ int arr[10] = { 9, 2, 4, 7, 5, 71, 45, 46, 7, 8 }; //定义临时变量 int temp = 0; //冒泡排序 双循环 for (int i = 0; i < 10; i++) { for (int j = i+1; j <10; j++) { if (arr[j-1]>arr[j]) { temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; } } } for (int i = 0; i < 10; i++) { printf("%d--", arr[i]); } system("pause"); }
//题目35:求一个3*3矩阵对角线元素之和 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //分析:就是一个二维数组,求a[0][0]+a[1][1]+a[2][2]的和, void main(){ int arr[3][3] = { 0 }; //二维数组的遍历需要使用双for循环 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { scanf("%d", &arr[i][j]); } } int sun = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { //对角线上的元素满足i=j if (i==j) { sun += arr[i][j]; } printf("%5d",arr[i][j]); } printf(" "); } printf(" 求一个3*3矩阵对角线元素之和是%d",sun); system("pause"); }
//题目36:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //分析:for循环,遍历每个数,设定数组从大到小,一个个与输入的数进行比较,插入对应的空中 //这里需要用到动态分配内存,因为数组的元素是固定的不可以随意插入 void main(){ int *p = (int *)calloc(sizeof(int), 10); printf("原来的数组 "); //为这个数组赋值 for (int i = 0; i < 10; i++) { *(p + i) = i*2; printf("%5d", *(p + i)); } printf(" "); //已经排好序的数组已经准备好了 int num = 0; printf("请输入要插入的数字 "); scanf("%d",&num); //再次用realloc函数分配内存 //新的大小可大可小(但是要注意,如果新的大小小于原内存大小,可能会导致数据丢失,慎用!) int *p1 = realloc(p, sizeof(int)*11); //给最后一个元素赋值0 *(p1 + 10) = 0; int temp = 0; //从前往后排序,存在着逻辑上的不方便。因为就算我找到了位置,后面的所有元素都要向后移动一位 //那么有可能需要再写一个循环,来移动数组元素的位置 /*for (int i = 0; i < 11; i++) { if (*(p1+i)>num) { } }*/ //我决定从后往前排序,因为最后面一个位置本来就是空着的 for (int i = 9; i>=0; i--) { if (*(p1 + i)<num) { *(p1 + i + 1) = num; //换完位置后退出循环 break; } else{ //将指针内的数据向后移动一位,此时p1+i这个位置已经空出来了 *(p1 + i + 1) = *(p1 + i); } } printf(" 新排序的数组 "); for (int i = 0; i < 11; i++) { printf("%5d",*(p1+i)); } //释放堆内存 free(p1); system("pause"); }