阵列变数(2)
15.7 数字统计
- 请使用者输入10个整数后,输出最大与平均值
13 23 78 77 37 30 40 50 83 99
Max: 99
Avg: 53
Process returned 0 (0x0) execution time : 36.634 s
Press any key to continue.
// 三个参数都狗在一起 #include <stdio.h> int main() { int i, n, max, avg, sum = 0; for (i = 1; i <= 10; i++) { scanf("%d", &n); // 读数字 if (i == 1 || n > max) { max = n; // 把第一个数赋值给max,比较合理,如果max直接等于0,那就没有考虑负数的情况 } sum += n; // sum每次加数 } avg = sum / 10; printf("Max: %d\n", max); printf("Avg: %d\n", avg); return 0; } // 各参数依次分开 #include <stdio.h> int main() { int i, n[10], avg; for (i = 1; i <= 10; i++) { scanf("%d", &n[i-1]);// 数组是从0开始的 } int max = n[0]; // 把max是为第一个数 for (i = 1; i < 10; i++) { if (n[i] > max) { max = n[i]; } } int sum = n[0]; for (i = 1; i < 10; i++) { sum += n[i]; } avg = sum / 10; printf("Max: %d\n", max); printf("Avg: %d\n", avg); return 0; } // 使用函式来做 #include <stdio.h> #include <stdlib.h> int max10(int n[10]); int avg10(int n[10]); void main() { int i, n[10]; for (i =1; i <= 10; i++) { scanf("%d", &n[i-1]); } printf("Max: %d\n", max10(n)); printf("Avg: %d\n", avg10(n)); return 0; } int max10(int n[10]){ int i, max; for (i = 1; i <= 10; i++) { if (i == 1 || n[i-1] > max) { max = n[i-1]; } } return max; } int avg10(int n[10]) { int i, sum=0; for (i = 1; i <= 10; i++) { sum += n[i-1]; } return sum /10; }
16 产生不重复乱数的练习
- 随机产生一组由10个1到10之间的数字所组成的序列,序列里面没有重复的数字
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(0)); int i, j, n[10]; for (i = 1; i <= 10; i++) { do { n[i-1] = rand() % 10 + 1;// rand()是产生乱数的函式,rand() % 10 产生1到9,然后再加1;就是1到10了 for (j = 1; j <= i; j++) { if (n[i-1] == n[j-1]) { break; } } }while (j != i); // j=i表示这个值没有被用过,j!=表示这个值被用过了,没有自然的结束,被break了。 printf(" %d", n[i -1]); } printf("\n"); return 0; } 2 10 8 6 5 4 7 3 1 9 Process returned 0 (0x0) execution time : 7.412 s Press any key to continue.
16.1 用建表法产生不重复的乱数
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(0)); int i, n, counter[10] = {10};// 统计1到10有没有被使用过,计数,为1次表示只用一次没有重复 for (i = 1; i <= 10; i++) { do { n = rand() % 10 + 1;// rand()是产生乱数的函式,rand() % 10 产生1到9,然后再加1;就是1到10了 } while (counter[n-1] != 0);// printf(" %d", n); counter[n-1]++; } printf("\n"); return 0; } 5 2 3 8 10 4 7 6 9
16.2 用交换法产生不重复的乱数
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(0)); int i,n[10]; for (i = 1; i <= 10; i++) { n[i-1] = i; } for (i = 1; i <= 10; i++) { int j = rand() % (11-i) + i; int t = n[i-1]; // i与j交换 n[i-1] =n[j-1]; n[j-1] = t; printf(" %d", n[i-1]); } printf("\n"); return 0; } 9 7 10 4 1 6 5 3 8 2 Process returned 0 (0x0) execution time : 2.027 s Press any key to continue. 1 5 6 3 9 8 7 2 4 10 Process returned 0 (0x0) execution time : 1.686 s Press any key to continue. // 每次输出都不一样
17 阵列的排序问题
阵列排序好以后有如下好处:
最大、最小值,中位数,众数,查某一个数(二分)。
17.3 冒泡排序法::
#include <stdio.h> int main() { int i, j, v[5]; for (i = 0; i < 5; i++) { scanf("%d", &v[i]); }// 用回圈读数 for (i = 0; i < 5; i++) // 比较的轮数 { for (j = 0; j < 5 - i; j++) //开始一轮一轮地比数字 { if (v[j] > v[j + 1]) { int temp = v[j]; v[j] = v[j + 1]; v[j + 1] = temp; } } } for (i = 0; i < 5; i++) { printf("%d ", v[i]); } return 0; } 12 13 44 10 9 9 10 12 13 44 Process returned 0 (0x0) execution time : 7.250 s Press any key to continue.
18.2 阵列的阵列
18.3 用二维阵列表示九宫格
#include <stdio.h> int main() { int v[3][3], i, j, k = 1; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { v[i][j] = k; k++; printf("%d", v[i][j]); } printf("\n");// 这语句很重要,没有这个就是一排,v[1][2]=6 } printf("%d",v[1][2]); return 0; } 123 456 789 6 Process returned 1 (0x1) execution time : 4.901 s Press any key to continue.
18.4 用一维阵列表示九宫格
#include <stdio.h> int main() { int v[9]; int i; for (i = 0; i < 9; i++) { // 0~8 v[i] = i + 1; // 1~9 } for (i = 0; i < 9; i++) { printf("%d ", v[i]); if (i % 3 == 2) { //换行的条件 printf("\n"); } } } 1 2 3 4 5 6 7 8 9 Process returned 10 (0xA) execution time : 17.671 s Press any key to continue.
18.5 随机生成九宫格(随机产生是重点)
// 二维产生随机九宫格 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(0)); int v[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i, j, k = 0; // k从0开始的时候为(9-k)+k,k从1开始时为(10-k)+k for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { int r = rand() % (9-k) + k;// rand()%10表示将产生的随机数对10求余,结果为余数,整体表示产生0到9的随机数 int m = r / 3; int n = r % 3; // 求所在的行列 int t = v[i][j]; v[i][j] = v[m][n]; v[m][n] = t; k ++; } } for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("%d ", v[i][j]); } printf("\n"); } return 0; } 6 8 2 7 1 4 9 3 5 Process returned 0 (0x0) execution time : 11.846 s Press any key to continue. // 一维产生随机九宫格 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(0)); int v[9] = {1,2,3,4,5,6,7,8,9}; int i; for (i = 0; i < 9; i++) { int m = rand() % (9-i) + i; int t = v[i]; v[i] = v[m]; v[m] = t; } for (i = 0; i < 9; i++) { printf("%d ", v[i]); if (i % 3 == 2) { printf("\n"); } } return 0; } 5 7 9 6 1 3 8 4 2 Process returned 0 (0x0) execution time : 11.088 s Press any key to continue