欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

指針與鏈表-創(chuàng)新互聯(lián)

指針與數(shù)組

創(chuàng)新互聯(lián)是專業(yè)的彭陽網(wǎng)站建設(shè)公司,彭陽接單;提供成都做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行彭陽網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

指針通常指向一片儲存空間,而開辟的儲存空間地址為指針的量;數(shù)組開辟的是一段連續(xù)的內(nèi)存空間,而指針則是單一特定內(nèi)存地址,因此兩者不可互相轉(zhuǎn)換。數(shù)組變量可以賦值給指針(即將數(shù)組第一個變量的地址賦予指針)。

動態(tài)內(nèi)存分配與靜態(tài)內(nèi)存分配

(1)動態(tài)內(nèi)存分配

根據(jù)程序的需要開辟空間,不需要預(yù)先分配,智能自動,可以根據(jù)需要增大或減小.

(2)靜態(tài)內(nèi)存分配

 即預(yù)先分配好儲存空間,缺點(diǎn)顯而易見,需要預(yù)先知道數(shù)據(jù)的大小,修改數(shù)據(jù)的時候需要更改已經(jīng)分配好的儲存空間,浪費(fèi)內(nèi)存等。

(3)函數(shù)

void free(void *p)

3.單鏈表

next指針:指向前一個數(shù)據(jù)的地址的指針

鏈表中的數(shù)據(jù)是以結(jié)點(diǎn)來表示的,每個結(jié)點(diǎn)的構(gòu)成:元素(數(shù)據(jù)元素的映象) + 指針(指示后繼元素存儲位置),元素就是存儲數(shù)據(jù)的存儲單元,指針就是連接每個結(jié)點(diǎn)的地址數(shù)據(jù)。

頭指針head和終端結(jié)點(diǎn)指針域的表示

單鏈表中每個結(jié)點(diǎn)的存儲地址是存放在其前趨結(jié)點(diǎn)next域中,而開始結(jié)點(diǎn)無前趨,故應(yīng)設(shè)頭指針head指向開始結(jié)點(diǎn)。

需要注意的是鏈表由頭指針唯一確定,單鏈表可以用頭指針的名字來命名。

終端結(jié)點(diǎn)無后繼,故終端結(jié)點(diǎn)的指針域?yàn)榭?,即NULL。

指針與鏈表學(xué)生信息管理程序代碼:

#include

#include

#include

#include

typedef struct Node Node;

//定義成績信息節(jié)點(diǎn)

//分別為語文、數(shù)學(xué)、英語和總成績;

struct Score

{

    int chinese,math,english,sum;

};

//定義學(xué)生信息節(jié)點(diǎn)

//分別為姓名、班級、學(xué)號、成績和指向下一個節(jié)點(diǎn)的指針

//定義了4個全局變量,頭節(jié)點(diǎn),和臨時節(jié)點(diǎn)變量;

struct Node

{

    char name[20],classs[20],number[20];

    struct Score score;

    struct Node* next;

}*head,*u,*p,*q;

  //定義多個學(xué)生的學(xué)生個數(shù)及各科平均成績優(yōu)秀率及格率;

int n,C,M,E,Cj,Cy,Mj,My,Ej,Ey;

char num[20];

//進(jìn)入菜單函數(shù)

void Welcome()

{

    printf("\t\t      # # # # # # # # # # # # # # # # #\n");

    printf("\t\t      #   歡迎您使用學(xué)生成績管理系統(tǒng) #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      #         1.讀取文件           #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      #         2.保存文件           #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      #         3.添加學(xué)生成績       #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      #         4.修改學(xué)生成績       #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      #         5.刪除學(xué)生成績       #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      #         6.查詢個人成績       #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      #         7.查詢本班成績       #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      #         8.查詢?nèi)3煽?      #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      #         9.退出管理系統(tǒng)       #\n");

    printf("\t\t      #                              #\n");

    printf("\t\t      # # # # # # # # # # # # # # # # #\n\n");

    printf("\t\t       請輸入指令:(1-9) ");

}

//構(gòu)造節(jié)點(diǎn)函數(shù)

Node* new_node(Node* uu)

{

    uu = (Node*)malloc(sizeof(Node));

    uu->next = NULL;

    return uu;

}

//添加學(xué)生信息

void Add()

{

//新建一個節(jié)點(diǎn);

    u = new_node(u);

    printf("\n請輸入您要加入的學(xué)生的信息:\n");

    printf("\n姓名: ");

    scanf("%s",u->name);

    printf("\n班級: ");

    scanf("%s",u->classs);

    printf("\n學(xué)號: ");

    scanf("%s",u->number);

    printf("\n語文、數(shù)學(xué)、英語成績: ");

    scanf("%d%d%d",&u->score.chinese,&u->score.math,&u->score.english);

//計(jì)算總成績;

    u->score.sum = u->score.chinese + u->score.math + u->score.english;

//采用頭插法將新節(jié)點(diǎn)的尾指針指向第二個節(jié)點(diǎn)(掰開)

    u->next = head->next;

//將新節(jié)點(diǎn)放在頭節(jié)點(diǎn)后面;

    head->next = u;

    printf("\n--->添加成功!\n");

}

//根據(jù)學(xué)號修改信息

//和查找函數(shù)一樣,依次從第二個節(jié)點(diǎn)開始遍歷,如果找到這更新

void Mod()

{

    n = 0;

    printf("\n請輸入您要修改的學(xué)號: ");

    scanf("%s",num);

    for(u = head; u != NULL;u = u->next)

    {

        if(strcmp(u->number,num) == 0)

        {

            n = 1;

            printf("\n請輸入新的語文、數(shù)學(xué)、英語成績: ");

            scanf("%d%d%d",&u->score.chinese,&u->score.math,&u->score.english);

            u->score.sum = u->score.chinese + u->score.math + u->score.english;

            printf("\n--->修改成功!\n");

            break;

        }

    }

    if(!n)

        printf("\n--->沒有這個學(xué)生的信息!\n");

}

//根據(jù)學(xué)號刪除學(xué)生信息,

//從頭節(jié)點(diǎn)開始遍歷,如果找到這刪除此節(jié)點(diǎn);

void Del()

{

    n = 0;

    printf("\n請輸入您要刪除的學(xué)生的學(xué)號: ");

    scanf("%s",num);

    for(u = head; u != NULL;u = u->next)

    {

        if(strcmp(u->number,num) == 0)

        {

            n = 1;

            p->next = u->next;

            free(u);

            printf("\n--->刪除成功!\n");

            break;

        }

        p = u;

    }

    if(!n)

        printf("\n--->沒有這個學(xué)生的信息!\n");

}

void Sort()

{

    int i,j;

//記錄學(xué)生總數(shù);

    n = 0;

    for(u = head->next; u != NULL;u = u->next)

        n++;

//采用冒泡法對各個節(jié)點(diǎn)按班級升序和總成績降序排列

    for(i=1;i<=n;i++)

    {

        u = head;

        for(j=0;j

        {

            p = u->next;

            q = p->next;

            if(strcmp(p->classs,q->classs) > 0 || strcmp(p->classs,q->classs) == 0 && p->score.sum < q->score.sum)

            {

                u->next = q;

                p->next = q->next;

                q->next = p;

            }

            u = u->next;

        }

    }

}

//按學(xué)號查找某一學(xué)生成績;

void Que_One()

{

//標(biāo)志變量,記錄是否查找成功;

    n = 0;

    printf("\n請輸入您要查詢的學(xué)生的學(xué)號: ");

    scanf("%s",num);

//從第二個節(jié)點(diǎn)開始遍歷,直到最后一個節(jié)點(diǎn)為止;

    for(u = head->next; u != NULL;u = u->next)

    {

//如果當(dāng)前節(jié)點(diǎn)學(xué)號與要查找學(xué)號一致這輸出此學(xué)生信息;

        if(strcmp(u->number,num) == 0)

        {

            n = 1;

            printf("\n");

            puts("班級       姓名          語文  數(shù)學(xué)  英語 總成績");

            printf("%-11s%-15s",u->classs,u->name);

            printf("%-6d%-6d%-6d%-6d\n",u->score.chinese,u->score.math,u->score.english,u->score.sum);

            break;

        }

    }

    if(!n)

        printf("\n--->沒有這個學(xué)生的信息!\n");

}

void Analyze_Sco(Node *uu)

{

//對查找到的節(jié)點(diǎn)進(jìn)行求各科平均成績

//求優(yōu)秀率及格率;

    C += uu->score.chinese;

    M += uu->score.math;

    E += uu->score.english;

    if(uu->score.chinese >= 60)

        Cj++;

    if(uu->score.chinese >= 90)

        Cy++;

    if(uu->score.math >= 60)

        Mj++;

    if(uu->score.math >= 90)

        My++;

    if(uu->score.english >= 60)

        Ej++;

    if(uu->score.english >= 90)

        Ey++;

}

//打印各科平均成績及格率優(yōu)秀率

void Print_Sco()

{

    printf("語文平均成績: %-6.2f, 及格率: %%%-6.2f , 優(yōu)秀率: %%%-6.2f.\n\n",(float)C/n,(float)100*Cj/n,(float)100*Cy/n);

    printf("數(shù)學(xué)平均成績: %-6.2f, 及格率: %%%-6.2f , 優(yōu)秀率: %%%-6.2f.\n\n",(float)M/n,(float)100*Mj/n,(float)100*My/n);

    printf("英語平均成績: %-6.2f, 及格率: %%%-6.2f , 優(yōu)秀率: %%%-6.2f.\n\n",(float)E/n,(float)100*Ej/n,(float)100*Ey/n);

}

//查找某一班級所以學(xué)生的信息;

void Que_Cla()

{

//對鏈表節(jié)點(diǎn)排序;

    Sort();

    n = C = M = E = Cj = Cy = Mj = My = Ej = Ey = 0;

    printf("\n請輸入您要查詢的班級: ");

    scanf("%s",num);

    printf("\n");

    for(u = head->next; u != NULL;u = u->next)

    {

//不是該班的學(xué)生則跳過;

        if(strcmp(u->classs,num))

            continue;

//如果是第一個學(xué)生則打印頭信息

        if(!n)

            puts("學(xué)號       姓名          語文  數(shù)學(xué)  英語 總成績");

        n++;

        printf("%-11s%-15s",u->number,u->name);

        printf("%-6d%-6d%-6d%-d\n",u->score.chinese,u->score.math,u->score.english,u->score.sum);

        Analyze_Sco(u);

    }

    if(!n)

    {

        printf("沒有這個班級的學(xué)生信息!\n");

        return ;

    }

//打印該班級學(xué)生的各個成績的特征值;

    printf("\n該班共有學(xué)生 %d 人.\n\n",n);

    Print_Sco();

}

//打印全校所以學(xué)生的信息

//具體情況同打印班級學(xué)生信息;

void Que_All()

{

    Sort();

    n = C = M = E = Cj = Cy = Mj = My = Ej = Ey = 0;

    printf("\n");

    if(head->next == NULL)

    {

        printf("--->沒有學(xué)生信息!\n");

        return ;

    }

    puts("班級        學(xué)號        姓名          語文  數(shù)學(xué)  英語 總成績");

    for(u = head->next; u != NULL;u = u->next)

    {

        n++;

        printf("%-12s%-12s%-15s",u->classs,u->number,u->name);

        printf("%-6d%-6d%-6d%-d\n",u->score.chinese,u->score.math,u->score.english,u->score.sum);

        Analyze_Sco(u);

    }

    printf("\n全校共有學(xué)生 %d 人.\n\n",n);

    Print_Sco();

}

//保存文件;

void Save()

{

    char c;

    printf("\n確認(rèn)保存?(Y/N): ");

    scanf("%*c%c",&c);

    if(c == 'N')

        return ;

    FILE *fp;

    if((fp=fopen("C:\\data.txt","w"))==NULL)

    {

        printf("\n--->無法打開文件\n");

        return ;

    }

//寫入數(shù)據(jù)表頭信息;

    fputs("班級       學(xué)號       姓名          語文  數(shù)學(xué)  英語 總成績",fp);

    if(head->next != NULL)

        fputs("\n",fp);

//從頭節(jié)點(diǎn)開始依次寫入文件;

    for(u = head->next; u != NULL;u = u->next)

    {

        fprintf(fp,"%-11s%-11s%-15s",u->classs,u->number,u->name);

        fprintf(fp,"%-6d%-6d%-6d%-d",u->score.chinese,u->score.math,u->score.english,u->score.sum);

        if(u->next != NULL)

            fprintf(fp,"\n");

    }

    fclose(fp);

    printf("\n--->成績成功存入C:\\\\data.txt中\(zhòng)n");

}

//讀取文件;

void Open()

{

    printf("\n請把數(shù)據(jù)放到目錄C:\\\\data.txt中,按任意鍵確認(rèn).\n");

    getch();

    FILE *fp;

//從c盤根目錄下讀取文件;

    if((fp=fopen("C:\\data.txt","r"))==NULL)

    {

        printf("\n--->沒有找到文件!\n");

        return ;

    }

    char tmp[100];

//讀取65個菜單頭字符存入tem字符數(shù)組中;

    fgets(tmp,66,fp);

//讀到文件結(jié)尾處跳出循環(huán);

    while(!feof(fp))

    {

        u = new_node(u);

        fscanf(fp,"%s%s%s",u->classs,u->number,u->name);

        fscanf(fp,"%d%d%d%d",&u->score.chinese,&u->score.math,&u->score.english,&u->score.sum);

//頭插法建立鏈表;

        u->next = head->next;

        head->next = u;

    }

    printf("\n--->成績讀入成功!\n");

    fclose(fp);

}

//退出程序

void Exi()

{

    char c;

    printf("\n確定退出?(Y/N): ");

    scanf("%*c%c",&c);

    if(c == 'N')

        return ;

//打印結(jié)束語;

    system("cls");

    printf("\n\n");

    printf("\t\t\t     %c %c %c %c %c %c %c %c %c\n",4,4,4,4,4,4,4,4,4);

    printf("\t\t\t     %c 謝謝使用 %c\n",4,4);

    printf("\t\t\t     %c %c %c %c %c %c %c %c %c\n",4,4,4,4,4,4,4,4,4);

    printf("\t\t\t                          Thank you!\n\n\n");

    exit(0);

}

int main()

{

//存儲指令的變量

    int orz;

//設(shè)置系統(tǒng)文本顏色

    system("color 0B");

//新建一個學(xué)生信息頭節(jié)點(diǎn);

    head = new_node(head);

    while(1)

    {

//顯示菜單、

        Welcome();

//接收用戶命令、

        scanf("%d",&orz);

//調(diào)用系統(tǒng)函數(shù)清屏;

        system("cls");

        switch(orz)

        {

//根據(jù)指令進(jìn)入相應(yīng)菜單選項(xiàng)

            case 1:Open();break;

            case 2:Save();break;

            case 3:Add();break;

            case 4:Mod();break;

            case 5:Del();break;

            case 6:Que_One();break;

            case 7:Que_Cla();break;

            case 8:Que_All();break;

            case 9:Exi();break;

            default :printf("\n--->無效的指令!\n");

        }

        printf("\n");

//執(zhí)行系統(tǒng)函數(shù)

        system("pause");

        system("cls");

    }

    return 0;

}

這個學(xué)生信息管理系統(tǒng)通過使用指針以及鏈表完成了學(xué)生信息管理系統(tǒng),實(shí)現(xiàn)了讀取文件、保存文件、添加學(xué)生成績、修改學(xué)生成績、刪除學(xué)生成績、查詢個人成績、查詢本班成績、查詢?nèi)3煽?、退出管理系統(tǒng)等多個功能。我個人認(rèn)為指針是C語言中比較難的部分,我還要更具體的學(xué)習(xí)才能掌握。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享題目:指針與鏈表-創(chuàng)新互聯(lián)
文章地址:http://aaarwkj.com/article26/cdpdcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航外貿(mào)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化軟件開發(fā)、手機(jī)網(wǎng)站建設(shè)動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
亚洲熟女av一区少妇| 国产精品一区二区三区日本| 国产毛片精品一区内射| 国产精品国产亚洲精品看不| 亚洲成人久久久av一区| 亚洲精品国产av一区| 日韩精品中文字幕欧美乱| 色综合久久婷婷色综合网| 亚洲一区二区三区精品乱码| 毛片成人18毛片免费看| 在线观看国产激情免费视频| 中文字幕人成乱码在线| 久久精品熟女亚洲av色| 日韩成人精品一区欧美成人| 日本亚洲美丽少妇天堂| 欧美日韩福利视频在线| 国产我和子的乱视频亲生| 亚洲欧美日韩午夜在线| 99热这里只有精品56| 亚洲最大av免费在线看| 久久裸体国语精品国产91| 久久精品亚洲欧美激情| 亚洲国际天堂av在线| 日韩精品一区二区三区电影在线播放| 久久久久精品国产亚洲av影院| 日韩高清精品视频在线| 国产精品 亚洲精品| 久久久偷拍美女撒尿尿| 一区二区三区艳情播放| av成人资源一区久久| 日本不卡高清视频在线播放| 粉嫩av蜜臀一区二区三区| 91老熟女露脸大合集| 久久精品欧美日韩视频| 视频二区国产欧美日韩| 超碰97精品在线观看| 一本色桃子精品久久中文字幕| 国产福利成人一区二区| 亚洲欧美中文字幕乱码| 中文字幕亚洲精品乱码在线| 亚洲淫婷婷久久一区二区|