1. 程式人生 > >陣列(隨機生成一維陣列),二維陣列的概念和題目設計(利用二維陣列 :任意給定分數去計算科目和人均平均分)

陣列(隨機生成一維陣列),二維陣列的概念和題目設計(利用二維陣列 :任意給定分數去計算科目和人均平均分)


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     }