C語言之數(shù)據(jù)結構中的數(shù)組解讀
一、如何初始化數(shù)組
1.聲明數(shù)組
int codes[10]={1,2,3,4,5,6,7,8,9,0};
int codes[10];
2.使用循環(huán)
int code[10];
for (int i=0;i<10;i++)
code[i]=i;3.使用另一個數(shù)組的值
char code[]={"a","b","c"};
char copy_code[4];
for(int i=0;i<4;i++)
copy_code[i]=code[i];
4.使用特殊值
int code[2]; code[1]=2;
二、遍歷數(shù)組
1.使用下標遍歷一維數(shù)組
int codes[6]={1,2,3,4,5,6};
for(int i=0;i<6;i++)
print("%d",codes[i]);2.如何使用指針遍歷一維數(shù)組
int codes[6]={1,2,3,5,6,7};
for (int i=0;i<7;i++)
printf("%d",*(codes+i)));3.如何使用下標遍歷二維數(shù)組
int codes[2][2]={{1,2},{3,4}};
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
printf("%d",codes[i][j]);4.如何使用指針遍歷二維數(shù)組
int codes[2][2]={{1,2},{3,4}};
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
printf("%d",*(*(codes+i)+j));三、數(shù)組中的加法
1.將指定范圍內(nèi)的數(shù)據(jù)元素加起來
int Add(int arry[],int start,int end)
{
int sum=0;
for(int i = start;i < end;i++)
sum+=arry[i];
return sum;
}2.將數(shù)組中偶數(shù)位置和奇數(shù)的元素加起來
double ArryAdd(double arry[];int stary ;int end;int flag)
{
int i = stary;
double = sum;
if (flag==0) // 計算數(shù)組中偶數(shù)位置的和
{
if(start%2==0)
i=start;
else
i=start+1;
for(;i<end;i++)
sum+=arry[i];
}
if (flag==1) // 計算數(shù)組中奇數(shù)位置的和
{
if(start%2!=0)
i=start;
else
i=start+1;
for(;i<end;i++)
sum+=arry[i];
}
return sum;
}3.將數(shù)組中偶數(shù)和奇數(shù)的元素分別加起來
double ArryAdd(double arry[];int end;int flag)
{
int i = 0;
double = sum;
if (flag==0) //計算偶數(shù)位置的和
{
if(start%2==0)
for(;i<end;i++)
sum+=arry[i];
}
if (flag==1) //計算奇數(shù)位置的和
{
if(start%2!=0)
for(;i<end;i++)
sum+=arry[i];
}
return sum;
}四、執(zhí)行包含外部變量的運算
1.將一個元素乘以(加上,減去,除以)數(shù)組的每一個元素
//將一個元素乘以(加上,減去,除以)數(shù)組的每一個元素
void multiplyelements(int arry[],int size,int number)
{
for(i=0;i<size;i++)
arry[i]*=number;//'+=','-=','/='
}2.平方數(shù)組中的每個元素
void SquareArrayElemnts(int arry[],int size,int number)
{
for(int i=0;i<size;i++)
arry[i]=pow(arry[i],2);
}注:
1.pow()是 C 語言標準庫<math.h>中的函數(shù),用于計算一個數(shù)的冪次方
2.需包含<math.h>頭文件。
五、刪除數(shù)組中的元素
1.按數(shù)據(jù)項刪除
void delete_item(int arry[],int size,int x)
{
int flag=0;
for(int i=0;i<size;i++)
if(arry[i]==x) //在arry[]中尋找要刪除的元素x
{
flag=1;
break;
}
if(flag==1)
{
for(int k=i;k<size;k++)
arry[i]=arry[i+1];
}
else
printf("這個數(shù)據(jù)不存在");
}
2.按位置刪除
void delete_location(char arry[],int delete_element)
{
for(int i=delete_element;i<strlen(arry)-1;i++)
array[i]=array[i+1];
}六、數(shù)組中的最值
1.求數(shù)組中的最大值
int FindMaxNumber(int arry[],int size)
{
int max = arry[0];
for(int i=0;i < size;i++)
if (arry[i] >= max)
max = arry[i];
return max;
}2.求數(shù)組中的最小值
int FindMinNumber(int arry[],int size)
{
int min = arry[0];
for( int i=0; i < size; i++)
if (arry[i] <= min)
min = arry[i];
return min;
}八、數(shù)組中的排序
1.按字母排序
void AlpaSort(char *array[], int size) {
char *temp; // 用于交換指針的臨時變量
for (int j = 0; j < size - 1; j++) {
for (int i = 0; i < size - j - 1; i++) {
if (strcmp(array[i], array[i + 1]) > 0) {
// 直接交換指針
temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
// 打印排序結果
for (int i = 0; i < size; i++) {
printf("%s\n", array[i]);
}
}
int main() {
// 初始化多個字符串(確保數(shù)量與size一致)
char* array[] = { "bdekwr", "apple", "orange", "cat", "dog" };
AlpaSort(array, 5); // 傳入正確的size
return 0;
}注:
(1)strcmp逐字符比較兩個字符串str1和str2,直到遇到不相等的字符或字符串結束符\0。比較基于字符的 ASCII 值。
(2)返回值含義
返回值 < 0:str1的第一個不匹配字符的 ASCII 值小于str2的對應字符。
返回值 = 0:兩個字符串完全相同。
返回值 > 0:str1的第一個不匹配字符的 ASCII 值大于str2的對應字符。
2.判斷字符串是否是回文字符串
回文字符串是指正讀和反讀都相同的字符串。例如,"madam"、"racecar"、"level" 都是回文字符串??兆址騿蝹€字符的字符串也被視為回文。
int ExcludeSpecialString(char arry[], int size)
{
// 創(chuàng)建一個臨時數(shù)組用于存儲過濾后的字符
char Copy_arry[size];
int k = 0;
// 定義枚舉類型表示是否為回文字符串
enum {NOT_palindrome, palindrome};
// 遍歷輸入字符串
for (int i = 0; i < strlen(arry); i++)
{
// 檢查當前字符是否為字母(大小寫)
if ((arry[i] >= 'a' && arry[i] <= 'z') || (arry[i] >= 'A' && arry[i] <= 'Z'))
{
// 將字母字符存入臨時數(shù)組
Copy_arry[k] = arry[i];
k++;
}
}
// 在字符串末尾添加終止符
Copy_arry[k] = '\0';
// 比較字符串與其反轉后的字符串(不區(qū)分大小寫)
if (strcmpi(Copy_arry, strrev(Copy_arry)) == 0)
return palindrome; // 是回文字符串
else
return NOT_palindrome; // 不是回文字符串
}
注意:如果用的是Visual Studio 2022編譯環(huán)境strrev()函數(shù)需改為_streev()否則會報錯
九、數(shù)組中的數(shù)學
1.讓數(shù)組元素唯一
int Find(int array[], int start, int end, int whatToFind)
{
// 定義枚舉類型表示查找結果:未找到(NOT_Find)和找到(Find)
enum{NOT_Find,Find};
int search_result = NOT_Find; // 初始化查找結果為未找到
// 遍歷數(shù)組從start到end的范圍
for (int i = start; i <= end; i++)
// 如果當前元素等于要查找的值
if (array[i] == whatToFind)
{
search_result = Find; // 更新查找結果為找到
break; // 提前退出循環(huán)
}
return search_result; // 返回查找結果
}
void Distanct(int arry[], int size)
{
// 第一個元素在之前沒有出現(xiàn)過,肯定是唯一的,直接輸出
printf("%d\n", arry[0]);
// 從第二個元素開始遍歷數(shù)組
for (int i = 1; i < size; i++) {
// 調(diào)用Find函數(shù)檢查當前元素是否在之前的子數(shù)組中出現(xiàn)過
if (! Find(arry, 0, i -1, arry[i]))
// 如果未出現(xiàn)過,輸出該元素
printf("%d\n", arry[i]);
}
}
int main() {
// 定義一個測試數(shù)組
int a[] = {1,2,3,4,2,3,4,5,6,7,8,9,4,8,9};
// 計算數(shù)組大小
int size = sizeof(a) / sizeof(a[0]);
// 調(diào)用Distanct函數(shù)輸出所有不重復的元素
Distanct(a,size);
return 0;
}
2.計算數(shù)組元素的平均值
double Mean(int array[], int size) {
// 初始化平均值為0
double avg = 0;
// 遍歷數(shù)組中的每個元素
for (int i = 0; i < size; i++)
// 將當前元素轉換為double類型后除以數(shù)組大小,并累加到avg中
avg += (double)array[i] / (double)size;
// 返回計算得到的平均值
return avg;
}
3. 計算一組整數(shù)的加權平均值
加權平均值:加權平均值是一種考慮數(shù)據(jù)點不同重要程度的平均計算方法。
要計算一組整數(shù)的加權平均值,核心是先計算 “數(shù)值 × 對應權重” 的總和(加權和),再計算所有權重的總和(權重和),最終通過加權平均值 = 加權和 ÷ 權重和得到結果。
示例
假設學生的成績和學分如下:
- 數(shù)學:成績 90,學分 4
- 英語:成績 85,學分 3
- 物理:成績 78,學分 2
計算加權平均成績:
- 加權和計算:
90×4 + 85×3 + 78×2 = 360 + 255 + 156 = 771(代碼中weightedSum結果為 771.0)。 - 權重和計算:
4 + 3 + 2 = 9(代碼中weightSum結果為 9)。 - 加權平均值:
771 ÷ 9 ≈ 85.67(代碼中result結果為 85.67,保留 2 位小數(shù))。
應用場景
教育領域:計算加權平均分(如 GPA)。
金融領域:計算投資組合的加權平均收益率。
數(shù)據(jù)分析:處理不同重要性的樣本數(shù)據(jù)。
double WMean(double array[], double weights[], int size)
{
double Msum = 0;
double Wsum = 0;
for (int i = 0; i < size; i++) {
Msum += array[i] * weights[i];
Wsum += weights[i];
}
return Msum / Wsum;
}4.計算已排序數(shù)組元素的中值
// 計算浮點數(shù)數(shù)組的中位數(shù)
float median(float array[], int size)
{
int n = 0;
n = size / 2; // 計算中間位置的索引
// 如果數(shù)組長度為奇數(shù),直接返回中間元素
if (size % 2 != 0)
return array[n];
// 如果數(shù)組長度為偶數(shù),返回中間兩個元素的平均值
else
return (array[n - 1] + array[n]) / 2;
}
5.找出數(shù)組元素的眾數(shù)
// 函數(shù):計算數(shù)組中特定元素出現(xiàn)的次數(shù)
// 參數(shù):a[] - 目標數(shù)組,size - 數(shù)組大小,x - 要統(tǒng)計的元素
// 返回值:元素x在數(shù)組中出現(xiàn)的次數(shù)
int count(int a[], int size, int x) {
int frequency = 0; // 初始化計數(shù)器
for (int i = 0; i < size; i++) // 遍歷數(shù)組
{
if (a[i] == x) // 如果當前元素等于目標元素
frequency++; // 計數(shù)器加1
}
return frequency; // 返回統(tǒng)計結果
}
// 函數(shù):找出數(shù)組中的眾數(shù)(出現(xiàn)次數(shù)最多的元素)
// 參數(shù):a[] - 目標數(shù)組,size - 數(shù)組大小
// 返回值:數(shù)組中的眾數(shù)
int Mode(int a[], int size)
{
int temp = a[0]; // 初始化臨時變量為數(shù)組第一個元素
for (int i = 0; i < size; i++) // 遍歷數(shù)組
{
// 比較當前元素和下一個元素的出現(xiàn)頻率
if (count(a, size, a[i]) < count(a, size, a[i + 1]))
temp = a[i + 1]; // 如果下一個元素出現(xiàn)更頻繁,更新臨時變量
}
return temp; // 返回眾數(shù)
}
6.計算數(shù)組的標準差
標準差是用來衡量一組數(shù)據(jù)離散程度的統(tǒng)計量 —— 它能反映數(shù)據(jù)相對于平均值的 “分散” 情況:標準差越小,數(shù)據(jù)越集中在平均值附近;標準差越大,數(shù)據(jù)的波動范圍越廣。
一、標準差的核心概念與計算公式
標準差分為總體標準差(針對全部數(shù)據(jù),如整個班級的成績)和樣本標準差(針對部分數(shù)據(jù),如從班級中抽取 10 人的成績作為樣本),兩者計算邏輯相似,僅分母有差異。
1. 計算步驟(通用)
無論總體還是樣本,計算都需 3 步:
計算平均值:所有數(shù)據(jù)的總和除以數(shù)據(jù)個數(shù);
計算偏差平方和:每個數(shù)據(jù)與平均值的差值(偏差)的平方,再將所有平方值相加;
計算方差與標準差:方差是 “偏差平方和” 除以數(shù)據(jù)個數(shù)(總體)或 “數(shù)據(jù)個數(shù) - 1”(樣本),標準差是方差的平方根(還原為原數(shù)據(jù)的量級)。
2.假設一組數(shù)據(jù):學生成績[85, 90, 78, 92, 88],計算總體標準差。
步驟 1:計算平均值μ
總和 =85+90+78+92+88=433數(shù)據(jù)個數(shù)N=5平均值μ=433÷5=86.6
步驟 2:計算偏差平方和
逐個計算 “數(shù)據(jù) - 平均值” 的平方,再求和:
(85−86.6)2=(−1.6)2=2.56
(90−86.6)2=3.42=11.56
(78−86.6)2=(−8.6)2=73.96
(92−86.6)2=5.42=29.16
(88−86.6)2=1.42=1.96
偏差平方和 =2.56+11.56+73.96+29.16+1.96=119.2
步驟 3:計算方差與標準差
方差σ2=119.2÷5=23.84
標準差σ≈4.88
// 計算數(shù)組平均值
double Mean(double array[], int size)
{
// 處理空數(shù)組情況,避免除以0
if (size <= 0) {
printf("錯誤:數(shù)組大小不能為0或負數(shù)\n");
return 0.0;
}
double sum = 0;
for (int i = 0; i < size; i++)
{
sum += array[i];
}
return sum / size;
}
// 計算數(shù)組指定范圍內(nèi)元素的和(包含start和finish)
double Add(double array[], int start, int finish)
{
double sum = 0;
// 循環(huán)條件,確保包含finish索引的元素
for (int i = start; i <= finish; i++)
sum += array[i];
return sum;
}
// 計算總體標準差
double StandardDeviation(double a[], int size) {
// 處理無效輸入
if (size <= 0) {
printf("錯誤:數(shù)組大小不能為0或負數(shù)\n");
return 0.0;
}
double b[100];
double mean = Mean(a, size);
// 計算每個元素與平均值的差的平方
for (int i = 0; i < size; i++)
{
double diff = a[i] - mean;
b[i] = pow(diff, 2);
}
// 計算方差的平方根(標準差)
return sqrt(Add(b, 0, size - 1) / size);
}總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Opencv下載和導入Visual studio2022的實現(xiàn)步驟
本文主要介紹了Opencv下載和導入Visual studio2022的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05
關于數(shù)組做函數(shù)參數(shù)的問題集合匯總
本文是對關于數(shù)組做函數(shù)參數(shù)的問題進行了詳細的匯總,需要的朋友可以過來參考下。希望對大家有所幫助2013-10-10

