2020年1月21日C語言陣列學習
一、陣列
1.陣列的定義
陣列是一個變數,由資料型別相同的的一組元素組成
| 變數 | 記憶體中的一塊空間 |
|---|---|
| 陣列 | 記憶體中一串連續的空間 |
2.資料的結構和基本要素
| 識別符號 | 陣列的名稱,用于區分不同的陣列 |
|---|---|
| 陣列元素 | 向陣列中存放的資料 |
| 元素下標 | 對陣列元素進行編號 |
| 元素型別 | 陣列元素的資料型別 |
陣列中只有一個名稱,即識別符號(用來表示陣列的變數名)
元素下標標明了元素在陣列中的位置,從0開始
陣列中的每個元素都可以通過下標來訪問
陣列長度固定不變,避免陣列越界
二、一維陣列
語法:datatype arrayName[size]
1.初始化一維陣列
(1)//正確:后面的元素個數與宣告一致
int years[3]={2012,2013,2014}
(2)//正確:后面一個元素未初始化,默認值為0
int years[3]={2012,2013}
(3)//正確:元素個數為2
int years[]={2012,2013,2014}
(4)//錯誤:未知元素個數
int years[]={}
2.一維陣列的動態賦值
#include <stdio.h>
#define N 5//宏定義,在程式中N只能等于5
void main()
{
//動態錄入
double score[N];
int i;//回圈變數
for (i = 0; i < N; i++) {
printf("請輸入第%d位同學的成績:",i+1);//i從0開始
scanf("%lf",&score[i]);
}
//列印陣列元素
for (i = 0; i < N; i++) {
printf("第%d位同學的成績是:%.2lf\n",i+1,score[i]);
}
}
3.一個數列:8,4,2,1,23,344,12
(1)回圈輸出佇列的值
(2)求數列中所有數值的和及平均值
(3)猜數游戲:從鍵盤中任意輸入一個資料,判斷數列中是否包含次數
#include <stdio.h>
void main()
{
int i;//回圈變數
int sum;//定義和
double avg;//定義均值
int search;//定義需要查找的數字
//一個數列:8,4,2,1,23,344,12
int nums[7]={8,4,2,1,23,344,12};
//回圈輸出佇列的值
printf("該數列的值為:\n");
for(i = 0; i < 7; i++){
printf("%d\t",nums[i]);
}
//求數列中所有數值的和及平均值
for(i = 0; i < 7; i++){
sum += nums[i];
}
avg = sum / 7.0;
printf("\n該數列的和為:%d,均值為:%.2lf",sum,avg);
//猜數游戲:從鍵盤中任意輸入一個資料,判斷數列中是否包含次數
printf("\n請輸入要查找的數字:");
scanf("%d",&search);
for (i = 0; i < 7; i++) {
if(search ==nums [i])
{
printf("找到了相同的元素!");
break;
}
}
if(i == 7){
printf("沒有這個數哦!");
}
}
4.回圈輸入5個整型數字,進行降序排列后輸出結果(冒泡排序)(重點)
冒泡排序的基礎原理:遍歷和交換
(1)需要比較多輪(陣列長度 - 1)輪
(2)每一輪比較的次數比上一輪 - 1次;第一輪比較(陣列長度 - 1)次
#include <stdio.h>
#define N 5
void main()
{
int i, j;//定義回圈變數
int temp; //用于交換的臨時變數
int nums[N] = {16, 25, 9, 90, 23};
//外層回圈控制輪數
for (i = 0; i < N - 1; i++)
{
//內層回圈控制每輪的比較次數
for (j = 0; j < N - 1; j++)
{
if(nums[j] < nums[j + 1])
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
printf("排序之后的順序為:\n");
for (i = 0; i < N ; i++) {
printf("%d\t",nums[i]);
}
}
拓展:初始無序,逆序輸出
第一個元素與最后一個元素交換;第二個元素與倒數第二個元素交換......
for (i = 0; i < N ; i++)
{
temp = nums[j];
nums[j] = nums[N - i - 1];
nums[N - i - 1] = temp;
}
5.陣列元素的洗掉和插入

洗掉的邏輯:
- 查找要洗掉數字的下標
- 從下標開始,后面一個覆寫前面一個數字
- 陣列的總長度-1
#include <stdio.h>
#define N 5 //常量的值不能改變,因此采用變數方式count
void main()
{
int count = 5;//表示陣列元素的個數
double powers[] = {42322, 45771, 40907, 41234, 40767};
double deletePower;//用戶要洗掉的戰力值
int deleteIndex = -1;//要洗掉戰力值的下標,給一個不可能的初值,為了判斷是否找到
double insertPower;//插入的戰力值
int i;//回圈變數
printf("請輸入要洗掉的戰力值:");
scanf("%lf",&deletePower);
for(i = 0; i < count; i++)
{
if(deletePower == powers[i])
{
deleteIndex = i;//記錄下當前的下標
break;//找到了要洗掉的戰力值,直接跳出回圈
}
}
//根據判斷是否找到,執行后續的操作
if(-1 == deleteIndex)
{
printf("很遺憾,沒有找到該戰力值!\n");
} else{
for(i = deleteIndex; i < count - 1; i++)
{
powers[i] = powers[i + 1];
}
count--;//陣列總長度-1
}
printf("洗掉后的結果為:\n");
for(i = 0; i < count; i++)
{
printf("%0.lf\t",powers[i]);
}
//洗掉之后進行插入
printf("請輸入要插入的值:\n");
scanf("%lf",&insertPower);
powers[count] = insertPower;
//插入操作完畢后陣列總長度要+1
count++;
printf("插入后的結果為:\n");
for(i = 0; i < count; i++)
{
printf("%0.lf\t",powers[i]);
}
//想讓戰力值有序操作可以進行冒泡排序
}
三、二維陣列
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/45013.html
標籤:C
上一篇:第七章 1.輸入輸出與模板
下一篇:約瑟夫問題
