最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言之?dāng)?shù)據(jù)結(jié)構(gòu)中的數(shù)組解讀

 更新時(shí)間:2025年09月21日 15:38:40   作者:字節(jié)跳動(dòng)的小碼農(nóng)  
文章系統(tǒng)講解了數(shù)組的初始化、遍歷、加法運(yùn)算、外部變量運(yùn)算、元素刪除、最值求解、排序及數(shù)學(xué)統(tǒng)計(jì)方法(如平均值、加權(quán)平均、標(biāo)準(zhǔn)差),并附有計(jì)算示例與注意事項(xiàng),適用于編程學(xué)習(xí)和數(shù)據(jù)處理場(chǎng)景

一、如何初始化數(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.使用另一個(gè)數(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.使用下標(biāo)遍歷一維數(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.如何使用下標(biāo)遍歷二維數(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ù)元素加起來(lái)

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ù)的元素加起來(lái)

double ArryAdd(double arry[];int stary ;int end;int flag)
{
    int i = stary;
    double = sum;
    if (flag==0) // 計(jì)算數(shù)組中偶數(shù)位置的和
    {
        if(start%2==0)
            i=start;
        else
            i=start+1;
        for(;i<end;i++)
            sum+=arry[i];
    }
    if (flag==1) // 計(jì)算數(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ù)的元素分別加起來(lái)

double ArryAdd(double arry[];int end;int flag)
{
    int i = 0;
    double = sum;
    if (flag==0) //計(jì)算偶數(shù)位置的和
    {
        if(start%2==0)
            for(;i<end;i++)
                sum+=arry[i];
    }
    if (flag==1) //計(jì)算奇數(shù)位置的和
    {
        if(start%2!=0)
           for(;i<end;i++)
                sum+=arry[i];
    }
    return sum;
}

四、執(zhí)行包含外部變量的運(yùn)算

1.將一個(gè)元素乘以(加上,減去,除以)數(shù)組的每一個(gè)元素

//將一個(gè)元素乘以(加上,減去,除以)數(shù)組的每一個(gè)元素
void multiplyelements(int arry[],int size,int number)
{
    for(i=0;i<size;i++)
        arry[i]*=number;//'+=','-=','/='
}

2.平方數(shù)組中的每個(gè)元素

void SquareArrayElemnts(int arry[],int size,int number)
{
    for(int i=0;i<size;i++)
        arry[i]=pow(arry[i],2);
}

注:

1.pow()是 C 語(yǔ)言標(biāo)準(zhǔn)庫(kù)<math.h>中的函數(shù),用于計(jì)算一個(gè)數(shù)的冪次方

2.需包含<math.h>頭文件。

五、刪除數(shù)組中的元素

1.按數(shù)據(jù)項(xiàng)刪除

void delete_item(int arry[],int size,int x)
{
    int flag=0;
    for(int i=0;i<size;i++)
        if(arry[i]==x) //在arry[]中尋找要?jiǎng)h除的元素x
        {
            flag=1;
            break;
        }
        if(flag==1)   
        {
            for(int k=i;k<size;k++)
                arry[i]=arry[i+1];
        }
        else
            printf("這個(gè)數(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;  // 用于交換指針的臨時(shí)變量
    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;
            }
        }
    }
    // 打印排序結(jié)果
    for (int i = 0; i < size; i++) {
        printf("%s\n", array[i]);
    }
}

int main() {
    // 初始化多個(gè)字符串(確保數(shù)量與size一致)
    char* array[] = { "bdekwr", "apple", "orange", "cat", "dog" };
    AlpaSort(array, 5);  // 傳入正確的size
    return 0;
}

注:

(1)strcmp逐字符比較兩個(gè)字符串str1str2,直到遇到不相等的字符或字符串結(jié)束符\0。比較基于字符的 ASCII 值。

(2)返回值含義

返回值 < 0:str1的第一個(gè)不匹配字符的 ASCII 值小于str2的對(duì)應(yīng)字符。

返回值 = 0:兩個(gè)字符串完全相同。

返回值 > 0:str1的第一個(gè)不匹配字符的 ASCII 值大于str2的對(duì)應(yīng)字符。

2.判斷字符串是否是回文字符串

回文字符串是指正讀和反讀都相同的字符串。例如,"madam"、"racecar"、"level" 都是回文字符串??兆址騿蝹€(gè)字符的字符串也被視為回文。

int ExcludeSpecialString(char arry[], int size) 
{
    // 創(chuàng)建一個(gè)臨時(shí)數(shù)組用于存儲(chǔ)過(guò)濾后的字符
    char Copy_arry[size];
    int k = 0;

    // 定義枚舉類型表示是否為回文字符串
    enum {NOT_palindrome, palindrome};
    
    // 遍歷輸入字符串
    for (int i = 0; i < strlen(arry); i++)
    {
        // 檢查當(dāng)前字符是否為字母(大小寫(xiě))
        if ((arry[i] >= 'a' && arry[i] <= 'z') || (arry[i] >= 'A' && arry[i] <= 'Z'))
        {
            // 將字母字符存入臨時(shí)數(shù)組
            Copy_arry[k] = arry[i];
            k++;
        }
    }
    
    // 在字符串末尾添加終止符
    Copy_arry[k] = '\0';
    
    // 比較字符串與其反轉(zhuǎn)后的字符串(不區(qū)分大小寫(xiě))
    if (strcmpi(Copy_arry, strrev(Copy_arry)) == 0)
        return palindrome;  // 是回文字符串
    else
        return NOT_palindrome;  // 不是回文字符串
}

注意:如果用的是Visual Studio 2022編譯環(huán)境strrev()函數(shù)需改為_(kāi)streev()否則會(huì)報(bào)錯(cuò)

九、數(shù)組中的數(shù)學(xué)

1.讓數(shù)組元素唯一

int Find(int array[], int start, int end, int whatToFind)
{
    // 定義枚舉類型表示查找結(jié)果:未找到(NOT_Find)和找到(Find)
    enum{NOT_Find,Find};
    int search_result = NOT_Find;  // 初始化查找結(jié)果為未找到
    
    // 遍歷數(shù)組從start到end的范圍
    for (int i = start; i <= end; i++)
        // 如果當(dāng)前元素等于要查找的值
        if (array[i] == whatToFind)
        {
            search_result = Find;  // 更新查找結(jié)果為找到
            break;  // 提前退出循環(huán)
        }
    return search_result;  // 返回查找結(jié)果
}

void Distanct(int arry[], int size)
{
    // 第一個(gè)元素在之前沒(méi)有出現(xiàn)過(guò),肯定是唯一的,直接輸出
    printf("%d\n", arry[0]);
    
    // 從第二個(gè)元素開(kāi)始遍歷數(shù)組
    for (int i = 1; i < size; i++) {
        // 調(diào)用Find函數(shù)檢查當(dāng)前元素是否在之前的子數(shù)組中出現(xiàn)過(guò)
        if (! Find(arry, 0, i -1, arry[i]))
            // 如果未出現(xiàn)過(guò),輸出該元素
            printf("%d\n", arry[i]);
    }
}

int main() {
    // 定義一個(gè)測(cè)試數(shù)組
    int a[] = {1,2,3,4,2,3,4,5,6,7,8,9,4,8,9};
    // 計(jì)算數(shù)組大小
    int size = sizeof(a) / sizeof(a[0]);
    // 調(diào)用Distanct函數(shù)輸出所有不重復(fù)的元素
    Distanct(a,size);
    return 0;
}

2.計(jì)算數(shù)組元素的平均值

double Mean(int array[], int size) {
    // 初始化平均值為0
    double avg = 0;
    
    // 遍歷數(shù)組中的每個(gè)元素
    for (int i = 0; i < size; i++)
        // 將當(dāng)前元素轉(zhuǎn)換為double類型后除以數(shù)組大小,并累加到avg中
        avg += (double)array[i] / (double)size;
    
    // 返回計(jì)算得到的平均值
    return avg;
}

3. 計(jì)算一組整數(shù)的加權(quán)平均值

加權(quán)平均值:加權(quán)平均值是一種考慮數(shù)據(jù)點(diǎn)不同重要程度的平均計(jì)算方法。

要計(jì)算一組整數(shù)的加權(quán)平均值,核心是先計(jì)算 “數(shù)值 × 對(duì)應(yīng)權(quán)重” 的總和(加權(quán)和),再計(jì)算所有權(quán)重的總和(權(quán)重和),最終通過(guò)加權(quán)平均值 = 加權(quán)和 ÷ 權(quán)重和得到結(jié)果。

示例

假設(shè)學(xué)生的成績(jī)和學(xué)分如下:

  • 數(shù)學(xué):成績(jī) 90,學(xué)分 4
  • 英語(yǔ):成績(jī) 85,學(xué)分 3
  • 物理:成績(jī) 78,學(xué)分 2

計(jì)算加權(quán)平均成績(jī):

  1. 加權(quán)和計(jì)算:90×4 + 85×3 + 78×2 = 360 + 255 + 156 = 771(代碼中weightedSum結(jié)果為 771.0)。
  2. 權(quán)重和計(jì)算:4 + 3 + 2 = 9(代碼中weightSum結(jié)果為 9)。
  3. 加權(quán)平均值:771 ÷ 9 ≈ 85.67(代碼中result結(jié)果為 85.67,保留 2 位小數(shù))。

應(yīng)用場(chǎng)景

教育領(lǐng)域:計(jì)算加權(quán)平均分(如 GPA)。

金融領(lǐng)域:計(jì)算投資組合的加權(quán)平均收益率。

數(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.計(jì)算已排序數(shù)組元素的中值

// 計(jì)算浮點(diǎn)數(shù)數(shù)組的中位數(shù)
float median(float array[], int size)
{
    int n = 0;
    n = size / 2; // 計(jì)算中間位置的索引
    
    // 如果數(shù)組長(zhǎng)度為奇數(shù),直接返回中間元素
    if (size % 2 != 0)
        return array[n];
    // 如果數(shù)組長(zhǎng)度為偶數(shù),返回中間兩個(gè)元素的平均值
    else
        return (array[n - 1] + array[n]) / 2;
}

5.找出數(shù)組元素的眾數(shù)

// 函數(shù):計(jì)算數(shù)組中特定元素出現(xiàn)的次數(shù)
// 參數(shù):a[] - 目標(biāo)數(shù)組,size - 數(shù)組大小,x - 要統(tǒng)計(jì)的元素
// 返回值:元素x在數(shù)組中出現(xiàn)的次數(shù)
int count(int a[], int size, int x) {
    int frequency = 0; // 初始化計(jì)數(shù)器
    for (int i = 0; i < size; i++) // 遍歷數(shù)組
    {
        if (a[i] == x) // 如果當(dāng)前元素等于目標(biāo)元素
            frequency++; // 計(jì)數(shù)器加1
    }
    return frequency; // 返回統(tǒng)計(jì)結(jié)果
}

// 函數(shù):找出數(shù)組中的眾數(shù)(出現(xiàn)次數(shù)最多的元素)
// 參數(shù):a[] - 目標(biāo)數(shù)組,size - 數(shù)組大小
// 返回值:數(shù)組中的眾數(shù)
int Mode(int a[], int size)
{
    int temp = a[0]; // 初始化臨時(shí)變量為數(shù)組第一個(gè)元素
    for (int i = 0; i < size; i++) // 遍歷數(shù)組
    {
        // 比較當(dāng)前元素和下一個(gè)元素的出現(xiàn)頻率
        if (count(a, size, a[i]) < count(a, size, a[i + 1]))
            temp = a[i + 1]; // 如果下一個(gè)元素出現(xiàn)更頻繁,更新臨時(shí)變量
    }
    return temp; // 返回眾數(shù)
}

6.計(jì)算數(shù)組的標(biāo)準(zhǔn)差

標(biāo)準(zhǔn)差是用來(lái)衡量一組數(shù)據(jù)離散程度的統(tǒng)計(jì)量 —— 它能反映數(shù)據(jù)相對(duì)于平均值的 “分散” 情況:標(biāo)準(zhǔn)差越小,數(shù)據(jù)越集中在平均值附近;標(biāo)準(zhǔn)差越大,數(shù)據(jù)的波動(dòng)范圍越廣。

一、標(biāo)準(zhǔn)差的核心概念與計(jì)算公式

標(biāo)準(zhǔn)差分為總體標(biāo)準(zhǔn)差(針對(duì)全部數(shù)據(jù),如整個(gè)班級(jí)的成績(jī))和樣本標(biāo)準(zhǔn)差(針對(duì)部分?jǐn)?shù)據(jù),如從班級(jí)中抽取 10 人的成績(jī)作為樣本),兩者計(jì)算邏輯相似,僅分母有差異。

1. 計(jì)算步驟(通用)

無(wú)論總體還是樣本,計(jì)算都需 3 步:

  1. 計(jì)算平均值:所有數(shù)據(jù)的總和除以數(shù)據(jù)個(gè)數(shù);

  2. 計(jì)算偏差平方和:每個(gè)數(shù)據(jù)與平均值的差值(偏差)的平方,再將所有平方值相加;

  3. 計(jì)算方差與標(biāo)準(zhǔn)差:方差是 “偏差平方和” 除以數(shù)據(jù)個(gè)數(shù)(總體)或 “數(shù)據(jù)個(gè)數(shù) - 1”(樣本),標(biāo)準(zhǔn)差是方差的平方根(還原為原數(shù)據(jù)的量級(jí))。

2.假設(shè)一組數(shù)據(jù):學(xué)生成績(jī)[85, 90, 78, 92, 88],計(jì)算總體標(biāo)準(zhǔn)差。

步驟 1:計(jì)算平均值μ

總和 =85+90+78+92+88=433數(shù)據(jù)個(gè)數(shù)N=5平均值μ=433÷5=86.6

步驟 2:計(jì)算偏差平方和

逐個(gè)計(jì)算 “數(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:計(jì)算方差與標(biāo)準(zhǔn)差

方差σ2=119.2÷5=23.84

標(biāo)準(zhǔn)差σ≈4.88

// 計(jì)算數(shù)組平均值
double Mean(double array[], int size)
{
    // 處理空數(shù)組情況,避免除以0
    if (size <= 0) {
        printf("錯(cuò)誤:數(shù)組大小不能為0或負(fù)數(shù)\n");
        return 0.0;
    }
    
    double sum = 0;
    for (int i = 0; i < size; i++)
    {
        sum += array[i];
    }
    return sum / size;
}

// 計(jì)算數(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;
}

// 計(jì)算總體標(biāo)準(zhǔn)差
double StandardDeviation(double a[], int size) {
    // 處理無(wú)效輸入
    if (size <= 0) {
        printf("錯(cuò)誤:數(shù)組大小不能為0或負(fù)數(shù)\n");
        return 0.0;
    }
    
    double b[100];
    double mean = Mean(a, size);
    
    // 計(jì)算每個(gè)元素與平均值的差的平方
    for (int i = 0; i < size; i++)
    {
        double diff = a[i] - mean;
        b[i] = pow(diff, 2);
    }
    
    // 計(jì)算方差的平方根(標(biāo)準(zhǔn)差)
    return sqrt(Add(b, 0, size - 1) / size);
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)的統(tǒng)計(jì)素?cái)?shù)并求和代碼分享

    C語(yǔ)言實(shí)現(xiàn)的統(tǒng)計(jì)素?cái)?shù)并求和代碼分享

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)的統(tǒng)計(jì)素?cái)?shù)并求和代碼分享,來(lái)自PAT平臺(tái)(浙江大學(xué)計(jì)算機(jī)程序設(shè)計(jì)能力考試系統(tǒng))的一個(gè)題目,需要的朋友可以參考下
    2014-08-08
  • C++11的functional模塊介紹和使用案例

    C++11的functional模塊介紹和使用案例

    functional模塊是C++ 11提供了一組函數(shù)對(duì)象和算法,用于增強(qiáng)C++的函數(shù)式編程能力,本文主要介紹了C++11的functional模塊介紹和使用案例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • C++中的cout、cerr、clog使用及說(shuō)明

    C++中的cout、cerr、clog使用及說(shuō)明

    C++中cout、cerr、clog均為輸出流對(duì)象,區(qū)別在于緩沖機(jī)制:cout有緩沖,用于常規(guī)輸出;cerr無(wú)緩沖,立即顯示錯(cuò)誤信息;clog有緩沖,適合日志記錄,選擇時(shí)需根據(jù)場(chǎng)景,注意性能和線程安全問(wèn)題
    2025-09-09
  • C語(yǔ)言實(shí)現(xiàn)制作通訊錄(新手推薦)

    C語(yǔ)言實(shí)現(xiàn)制作通訊錄(新手推薦)

    本文推薦給C語(yǔ)言學(xué)習(xí)到結(jié)構(gòu)體的新手們,供其練習(xí)。這篇文章主要是利用C語(yǔ)言制作一個(gè)簡(jiǎn)單的通訊錄功能,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-09-09
  • C++類繼承之子類調(diào)用父類的構(gòu)造函數(shù)的實(shí)例詳解

    C++類繼承之子類調(diào)用父類的構(gòu)造函數(shù)的實(shí)例詳解

    這篇文章主要介紹了C++類繼承之子類調(diào)用父類的構(gòu)造函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能夠掌握C++類繼承的相關(guān)知識(shí),需要的朋友可以參考下
    2017-09-09
  • C++遍歷磁盤(pán)驅(qū)動(dòng)器的示例代碼

    C++遍歷磁盤(pán)驅(qū)動(dòng)器的示例代碼

    這篇文章主要介紹了C++遍歷磁盤(pán)驅(qū)動(dòng)器的示例代碼,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2021-01-01
  • 淺談C語(yǔ)言宏替換與宏定義高級(jí)用法

    淺談C語(yǔ)言宏替換與宏定義高級(jí)用法

    本文詳細(xì)介紹了C語(yǔ)言中的宏替換與宏定義高級(jí)用法,包括預(yù)處理核心原理、宏定義的無(wú)參數(shù)和帶參數(shù)宏、宏的陷阱與優(yōu)化、內(nèi)置宏、條件編譯以及預(yù)處理實(shí)例,感興趣的可以了解一下
    2025-12-12
  • C++對(duì)數(shù)組的引用實(shí)例分析

    C++對(duì)數(shù)組的引用實(shí)例分析

    這篇文章主要介紹了C++對(duì)數(shù)組的引用實(shí)例分析,需要的朋友可以參考下
    2014-08-08
  • Qt使用Json的項(xiàng)目實(shí)踐

    Qt使用Json的項(xiàng)目實(shí)踐

    JSON是一種對(duì)源自Javascript的對(duì)象數(shù)據(jù)進(jìn)行編碼的格式,但現(xiàn)在被廣泛用作互聯(lián)網(wǎng)上的數(shù)據(jù)交換格式,本文主要介紹了Qt使用Json的項(xiàng)目實(shí)踐,詳細(xì)的介紹了主要使用的類以及Json實(shí)戰(zhàn),感興趣的可以了解一下
    2023-09-09
  • C++中Qt的安裝與配置步驟詳解

    C++中Qt的安裝與配置步驟詳解

    Qt是一種C++編程框架,用于構(gòu)建圖形用戶界面(GUI)應(yīng)用程序和嵌入式系統(tǒng),無(wú)論是初學(xué)者還是經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,Qt都為構(gòu)建高質(zhì)量、可維護(hù)的應(yīng)用程序提供了豐富的工具和支持,本文主要給大家介紹了C++中Qt的安裝與配置步驟,需要的朋友可以參考下
    2023-12-12

最新評(píng)論

蒙城县| 盐山县| 桐梓县| 兴化市| 新密市| 贵阳市| 鲜城| 漳平市| 长武县| 韩城市| 塔城市| 咸阳市| 翁源县| 无为县| 德惠市| 赤城县| 德江县| 京山县| 沈阳市| 肃宁县| 泸州市| 凤庆县| 金寨县| 桃园县| 叶城县| 海丰县| 大同县| 安康市| 锦州市| 眉山市| 乌兰浩特市| 昌图县| 北海市| 溧水县| 息烽县| 黄浦区| 遵义市| 二连浩特市| 格尔木市| 新安县| 和顺县|