1 //数组间的关系arr[]中的数字为几,[]内就有几个数
2 //{ }内的数是从0开始,如需要打印应从0开数
3 如{2,6,9,8,7}打印arr[4]就是7
4 #include <stdio.h>
5 #include <stdlib.h>
6 int main()
7 {
8 int arr[] = { 1,2,3,4,8};
9
10 printf("%d\n", arr[3]);
11
12 system("pause");
13 return 0;
14 }
随机生成数组:
1 #define _CRT_SECURE_NO_WARNINGS
2 #include<stdlib.h>/*用到了srand函数,所以要有这个头文件*/
3 #include<stdio.h>
4
5 #define MAX 15
6
7 int main()
8 {
9 int number[MAX] = { 0 };
10 int i;
11 unsigned int seed;
12 printf("手动输入随机数种子:\n");
13 scanf("%d", &seed);/*手动输入种子*/
14 srand(seed);
15 printf("产生随机数如下:\n");
16 for (i = 0; i < MAX; i++){
17 number[i] = rand() % 100;/*产生100以内的随机整数*/
18 printf("%d\t", number[i]);
19
20 }
21 printf("\n");
22 system("pause");
23 return 0;
24 }
程序开头宏定义max常量为15,接下来又定义了一个内涵15个数字的数组,循环15次,
用 number[i] = rand() % 100;/*产生100以内的随机整数*/ 随机产生15个整数
运行结果:随着输入数字的不同,结果也不同,输入数字一样,结果也一样。
二维数组的定义
二维数组定义的一般形式是:
类型说明符 数组名[常量表达式1][常量表达式2]
其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。例如:
1 int a[3][4];
说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有3×4个,即:
a[0][0], a[0][1], a[0][2], a[0][3]
a[1][0], a[1][1], a[1][2], a[1][3]
a[2][0], a[2][1], a[2][2], a[2][3]
二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。
在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。
二维数组元素的引用
二维数组的元素也称为双下标变量,其表示的形式为:
数组名[下标][下标]
其中下标应为整型常量或整型表达式。例如:
a[3][4]
表示a数组三行四列的元素。
下标变量和数组说明在形式中有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度,即可取下标的最大值;而数组元素中的下标是该元素在数组中的位置标识。前者只能是常量,后者可以是常量,变量或表达式。
一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。
| 张 | 王 | 李 | 赵 | 周 |
数学(分数) | 96 | 60 | 68 | 99 | 76 |
C语言(分数) | 85 | 62 | 85 | 97 | 45 |
语文(分数) | 70 | 90 | 78 | 85 | 66 |
下面我自己设计了一个根据用户选择 :计算每位学生3门课的平均成绩 或者 计算每门课5个人的平均成绩
1 #include <stdio.h>
2 int main(){
3 int i, j, z, x, average = 0, sum = 0, a[3][5], b[5][3], subject[3], person[5],chooice=0;
4
5 printf("请输入您要选择的成绩计算方式\n 1(各个科目平均分),2(每个人的平均分)");
6 scanf_s("%d", &chooice);
7 if (chooice == 1){
8 printf("请按照科目输入成绩\n");
9 for (i = 0; i < 3; i++){
10 for (j = 0; j < 5; j++){
11 scanf_s("%d", &a[i][j]);
12 sum = sum + a[i][j];
13 }
14 subject[i] = sum / 5;
15 sum = 0;
16 }
17 printf("math:%d\nc languag:%d\nChinese:%d\n", subject[0], subject[1], subject[2]);
18
19 }
20 else if (chooice == 2){
21 printf("请按照姓名输入成绩\n");
22 for (z = 0; z < 5; z++){
23 for (x = 0; x < 3; x++){
24 scanf_s("%d", &b[z][x]);
25 average = average + b[z][x];
26 }
27 person[z] = average / 3;
28 average = 0;
29 }
30
31 printf("张:%d\n 王:%d\n 李:%d\n 赵:%d\n 周:%d\n", person[0], person[1], person[2], person[3], person[4]);
32
33 }
34 else
35
36 printf("输入错误,只能输入(1或者2)\n\n");
37
38
39 }