日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

C语言程序设计第三节课作业

發(fā)布時(shí)間:2025/3/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言程序设计第三节课作业 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1?指針是一個(gè)存儲(chǔ)計(jì)算機(jī)內(nèi)存地址的變量。從指針指向的內(nèi)存讀取數(shù)據(jù)稱作指針的取值。指針可以指向某些具體類型的變量地址,例如intlongdouble。指針也可以是void類型、NULL指針和未初始化指針。

根據(jù)出現(xiàn)的位置不同,操作符?*?既可以用來(lái)聲明一個(gè)指針變量,也可以用作指針的取值。當(dāng)用在聲明一個(gè)變量時(shí),*表示這里聲明了一個(gè)指針。其它情況用到*表示指針的取值。

? 鏈表由一系列不必在內(nèi)存中相連的結(jié)構(gòu)組成。每一個(gè)結(jié)構(gòu)均含有表元素和指向包含該元素后繼元的結(jié)構(gòu)指針。我們稱之為next指針。最后一個(gè)單元的next指針指向NULL;該值由C定義并且不能與其它指針混淆。ANSI C規(guī)定NULL為零。

?指針

? 指針是一個(gè)存儲(chǔ)計(jì)算機(jī)內(nèi)存地址的變量。從指針指向的內(nèi)存讀取數(shù)據(jù)稱作指針的取值。指針可以指向某些具體類型的變量地址,例如int、long和double。指針也可以是void類型、NULL指針和未初始化指針。

我們?cè)谑褂胏語(yǔ)言進(jìn)行編寫程序的時(shí)候,就一定會(huì)使用上指針,指針的操作是編寫程序的一個(gè)點(diǎn)。如何更好的使用指針,將是我們進(jìn)行更好的書寫程序的關(guān)鍵。我認(rèn)為弄清楚下面幾個(gè)要點(diǎn),可以更好的理解指針:

(1):指針是一個(gè)地址,指向的是個(gè)類型

(2):指針指向的是地址,地址指向的是內(nèi)容

(3):指針的指針,是面對(duì)于指針的變量

? 鏈表

?鏈表我的理解要包含以下特征:(1).由n個(gè)節(jié)點(diǎn)離散分配;(2).每個(gè)節(jié)點(diǎn)通過(guò)指針連接(3)每一個(gè)節(jié)點(diǎn)由一個(gè)前驅(qū)節(jié)點(diǎn)和一個(gè)后驅(qū)節(jié)點(diǎn)(4).首節(jié)點(diǎn)沒(méi)有前驅(qū)節(jié)點(diǎn),尾節(jié)點(diǎn)沒(méi)有后驅(qū)節(jié)點(diǎn);

? 滿足上面的4條,我們就稱為鏈表;鏈表既然由很多個(gè)節(jié)點(diǎn),那節(jié)點(diǎn)又由什么組成?節(jié)點(diǎn)由兩個(gè)部分組成,一是數(shù)據(jù)域,用來(lái)存放有效數(shù)據(jù);二是指針域,用來(lái)指向下一個(gè)節(jié)點(diǎn);下面用C語(yǔ)言來(lái)構(gòu)建鏈表數(shù)據(jù)結(jié)構(gòu),首先應(yīng)該構(gòu)造出節(jié)點(diǎn),然后再把所有的節(jié)點(diǎn)連起來(lái),就構(gòu)成了鏈表;

例如:

#include<stdio.h>

int main()

{

? ?int*ptr; ? // 聲明一個(gè)int指針

? ?int val =1; ?// 聲明一個(gè)int值

? ?ptr =&val; ?// 為指針?lè)峙湟粋€(gè)int值的引用

? ?int deref =*ptr; ?// 對(duì)指針進(jìn)行取值,打印存儲(chǔ)在指針地址中的內(nèi)容

? printf("deref地址=%ld,值=%d\n",ptr, deref);

? ?第2行,我們通過(guò)*操作符聲明了一個(gè)int指針。接著我們聲明了一個(gè)int變量并賦值為1。然后我們用int變量的地址初始化我們的int指針。接下來(lái)對(duì)int指針取值,用變量的內(nèi)存地址初始化int指針。最終,我們打印輸出變量值,內(nèi)容為1。

? ?第6行的&val是一個(gè)引用。在val變量聲明并初始化內(nèi)存之后,通過(guò)在變量名之前使用地址操作符&我們可以直接引用變量的內(nèi)存地址。

? ?第8行,我們?cè)僖淮问褂?操作符來(lái)對(duì)該指針取值,可直接獲得指針指向的內(nèi)存地址中的數(shù)據(jù)。由于指針聲明的類型是int,所以取到的值是指針指向的內(nèi)存地址存儲(chǔ)的int值。

? ?這里可以把指針、引用和值的關(guān)系類比為信封、郵箱地址和房子。一個(gè)指針就好像是一個(gè)信封,我們可以在上面填寫郵寄地址。一個(gè)引用(地址)就像是一個(gè)郵件地址,它是實(shí)際的地址。取值就像是地址對(duì)應(yīng)的房子。我們可以把信封上的地址擦掉,寫上另外一個(gè)我們想要的地址,但這個(gè)行為對(duì)房子沒(méi)有任何影響。

2?

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"conio.h"

#define PAGE 3

#define MAX 1000

#define N 5

int k=0;

??/*結(jié)構(gòu)體類型*/

typedef struct ?

{ ??int num;/*學(xué)號(hào)*/

????char name[20];/*姓名*/

char sex[5];/*性別*/

int age;/*年齡*/

char studentclass[20];/*班級(jí)*/

int score;/*成績(jī)*/

}STUDENTS;

?

int read_file(STUDENTS stu[])

{FILE *fp;

????int i=0;

if((fp=fopen("stu.txt","rt"))==NULL)

{printf("\n\n*****庫(kù)存文件不存在!請(qǐng)創(chuàng)");

?return 0;

}

while(feof(fp)!=1)

????{

fread(&stu[i],sizeof(STUDENTS),1,fp);

if(stu[i].num==0)

break;

else

i++;

}

fclose(fp);

return i;

}

void save_file(STUDENTS stu[],int sum)

{FILE*fp;

?int i;

?if((fp=fopen("stu.txt","wb"))==NULL)

?{printf("寫文件錯(cuò)誤!\n");

??return;

?}

???for(i=0;i<sum;i++)

???if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)

???printf("寫文件錯(cuò)誤!\n");

???fclose(fp);

}

?

?

/*創(chuàng)建學(xué)生信息*/

int input(STUDENTS stu[])

{ ?int i,x;

???for(i=0;i<1000;i++)

???{

????system("cls"); ?

????printf("\n\n ????????????????錄入學(xué)生信息 ?(最多%d個(gè))\n",MAX);

????printf(" ??????????????----------------------------\n");

???

????????printf("\n ????????????????????第%d個(gè)學(xué)生",k+1);

????printf("\n?請(qǐng)輸入學(xué)生的學(xué)號(hào):");

????????scanf("%d",&stu[k].num);

????????printf("\n?請(qǐng)輸入學(xué)生的姓名:");

????????scanf("%s",stu[k].name);

??printf("\n?請(qǐng)輸入學(xué)生的性別:");

????????scanf("%s",stu[k].sex);

????????printf("\n?請(qǐng)輸入學(xué)生的年齡:"); ??

????????scanf("%d",&stu[k].age); ?

????????printf("\n?請(qǐng)輸入學(xué)生的班級(jí):");

????????scanf("%s",stu[k].studentclass); ???????

????????printf("\n?請(qǐng)輸入學(xué)生的成績(jī):");

????????scanf("%d",&stu[k++].score);

????????printf("\n?請(qǐng)按1鍵返回菜單或按0鍵繼續(xù)創(chuàng)建");

scanf("%d",&x);

if(x)

??break;

???}

??????

???????return k;

}

?

?

/*刪除學(xué)生信息*/

void deletel(STUDENTS stu[])

??{ system("cls");

???char Stuname2[20];

???int i,j;

???printf("請(qǐng)輸入學(xué)生姓名:");

???scanf("%s",Stuname2);

???printf("\n");

???for(i=0;i<k;i++)

???if(strcmp(stu[i].name,Stuname2)==0) ??

?????for(j=0;j<20;j++)

???????stu[i].name[j]=stu[i+1].name[j];

???k--;


??

???printf("刪除成功\n");

???printf("按任意鍵加回車返回主菜單!");

???scanf("%d",&i);

???getchar();

}

?

/*打印學(xué)生信息*/ ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

void output(STUDENTS stu[])

{ ?system("cls");

???int i;

???for(i=0;i<k;i++) ?

?????printf("學(xué)號(hào):%d,姓名:%s,性別:%s,年齡:%d,班級(jí):%s,成績(jī): %d\n",stu[i].num,stu[i].name,

??stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

???printf("按任意鍵加回車返回主菜單!");

???scanf("%d",&i);

???getchar();

}

?

/*查詢學(xué)生信息*/

void inquire(STUDENTS stu[])

??{ int i;

????int num;

????system("cls");

????printf(" ????\n\n請(qǐng)輸入您要查找的學(xué)生的學(xué)號(hào)");

????scanf("%d",&num);

????for(i=0;i<k;i++)

??????if(num==stu[i].num)

?????????printf("\n\n\n學(xué)號(hào):%d,姓名:%s,性別:%s,年齡:%d,班級(jí):%s,成績(jī): %d\n",stu[i].num,stu[i].name,

?stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

????printf("按任意鍵加回車返回主菜單!");

scanf("%d",&i);

????getchar();

??}

?

?

/*修改學(xué)生信息*/

void change(STUDENTS stu[])

??{ ?int num,i,choice;

?????system("cls");

?printf("\n\n\n ?????請(qǐng)輸入您要修改的學(xué)生的學(xué)號(hào)");

?????scanf("%d",&num);

?????for(i=0;i<k;i++)

?????{ if(num==stu[i].num)

?????????printf("\n學(xué)號(hào):%d,姓名:%s,性別:%s,年齡:%d,班級(jí):%s,成績(jī): %d\n",stu[i].num,stu[i].name,

?stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

?

?????printf("\n\n\n ????********請(qǐng)輸入您想要修改的數(shù)據(jù)********\n\n");

?????printf(" ???????????????1.?學(xué)號(hào)\n\n");

?????printf(" ???????????????2.?姓名\n\n");

?printf(" ???????????????3.?性別\n\n");

?????printf(" ???????????????4.?年齡\n\n");

?????printf(" ???????????????5.?班級(jí)\n\n");

?????printf(" ???????????????6.?成績(jī)\n\n");

?????printf(" ????????????????請(qǐng)選擇(1-6:");

??scanf("%d",&choice);

??switch(choice)

??{case 1:{

???????printf("\n ??請(qǐng)輸入你改的新學(xué)號(hào)");

???????????scanf("%d",&stu[i].num);

???break;

???}

???case 2:{

???????printf("\n ??請(qǐng)輸入你改的新姓名");

???????????scanf("%s",stu[i].name);

???break;

??}

???case 3:{

???????printf("\n ??請(qǐng)輸入你改的新性別");

???????????scanf("%s",stu[i].sex);

???break;

??}

???case 4:{

???????printf("\n ??請(qǐng)輸入你改的新年齡");

???????????scanf("%d",&stu[i].age);

???break;

??}

???case 5:{

???????printf("\n ??請(qǐng)輸入你改的新班級(jí)");

???????????scanf("%s",stu[i].studentclass);

???break;

??}

???case 6:{

???????printf("\n ??請(qǐng)輸入你改的新成績(jī)");

???????????scanf("%d",&stu[i].score);

???break;

??}

??}

?

???printf("學(xué)號(hào):%d,姓名:%s,性別:%s,年齡:%d,班級(jí):%s,成績(jī): %d\n",stu[i].num,stu[i].name,

?stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].score);

???????printf("按任意鍵加回車返回主菜單!");

???scanf("%d",&i);

???break;

?}

}

?

?

/*學(xué)生成績(jī)信息排名*/

void sort(STUDENTS stu[])

??{ ?int i,j,n=1,x;

?????system("cls");

?????int t;

??????for(i=0;i<k-1;i++)

for(j=i+1;j<k;j++)

if(stu[i].score<stu[j].score)

{ t=stu[i].score;

??stu[i].score=stu[j].score;

??stu[j].score=t;

??????????????t=stu[i].num;

??stu[i].num=stu[j].num;

??stu[j].num=t;

?

}

?????for(i=0;i<k;i++)

printf("排名 ???學(xué)號(hào) ???成績(jī)\n %d ??????%d ??????%d\n",n++,stu[i].num,stu[i].score);

?????printf("按任意鍵加回車返回主菜單!");

?scanf("%d",&x);

?????getchar();

??}

?

void pagedis()

{

???printf(" \n\n\n ??????????????????**********************************\n");

???printf(" ??????????????????* ???????????????????????????????*\n");

???printf(" ??????????????????* ???????????????????????????????*\n");

???printf(" ??????????????????* ???????????????????????????????*\n");

???printf(" ??????????????????* ????歡迎進(jìn)入學(xué)生信息管理系統(tǒng) ??*\n");

???printf(" ??????????????????* ???????????????????????????????*\n");

???printf(" ??????????????????* ???????????????????????????????*\n");

???printf(" ??????????????????* ???????????????????????????????*\n");

???printf(" ??????????????????**********************************\n");

???

}

void check()

{

???char userName[5];/*用戶名*/

???char userPWD[5];/*密碼*/

???int i,sum;

???system("color 4E");

???for(i = 1; i < 4; i++)

???{

??????/*用戶名和密碼均為abcde;*/

????printf(" ??用戶名和密碼均為abcde\n\n");

????????printf("\n ??????請(qǐng)輸入您的用戶名:");

????????gets(userName);

????????

????????printf("\n ??????請(qǐng)輸入您的密碼:");

????????gets(userPWD);

????????

????????if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))/*驗(yàn)證用戶名和密碼*/

????????{

????????????printf("用戶名和密碼正確,顯示主菜單");

????????????return;

????????}

????????else

????????{

????????????if (i < 3)

????????????{

????????????????printf("用戶名或密碼錯(cuò)誤,提示用戶重新輸入");

????????????????printf("用戶名或密碼錯(cuò)誤,請(qǐng)重新輸入!");

????????????}

????????????else

????????????{

????????????????printf("連續(xù)3次輸錯(cuò)用戶名或密碼,退出系統(tǒng)。");

????????????????printf("您已連續(xù)3次將用戶名或密碼輸錯(cuò),系統(tǒng)將退出!");

????????????????exit(1);

????????????}

????????}

???}

}

void menu()

{

??STUDENTS stu[20];

??int choice,k,sum;

??sum=read_file(stu);

??if(sum==0)

???{ ?printf("首先錄入基本庫(kù)存信息!按回車后進(jìn)入*****\n");

??????getch();

??sum=input(stu);

???}

??

??do

??{ ?system("cls"); ?

?????printf("\n\n\n ??????????????********學(xué)生信息管理系統(tǒng)********\n\n");

?????printf(" ?????????????????????1.?創(chuàng)建學(xué)生信息\n\n");

?????printf(" ?????????????????????2.?打印學(xué)生信息\n\n");

?printf(" ?????????????????????3.?查詢學(xué)生信息\n\n");

?????printf(" ?????????????????????4.?修改學(xué)生信息\n\n");

?????printf(" ?????????????????????5.?刪除學(xué)生信息\n\n");

?????printf(" ?????????????????????6.?學(xué)生成績(jī)信息排名\n\n");

?????printf(" ?????????????????????0.?退出系統(tǒng)\n\n");

?????printf(" ??????????????????????請(qǐng)選擇(0-6:");

?????scanf("%d",&choice);

????switch(choice)

????{

??????case 1: k=input(stu); break;/*創(chuàng)建學(xué)生信息*/

??????case 2: output( stu) ; break;/*打印學(xué)生信息*/

??????case 3: inquire(stu); break;/*查詢學(xué)生信息*/

??????case 4: change(stu); break;/*修改學(xué)生信息*/

??????case 5: deletel(stu); break;/*刪除學(xué)生信息*/

??????case 6: sort(stu); break;/*學(xué)生成績(jī)信息排名*/

??????case 0: break;

????}

??}while(choice!=0);

??save_file(stu,sum);

}

int main()

{ ?

???

??

??int i,sum;

??pagedis();

??check();

??menu(); ??

??

}

}



轉(zhuǎn)載于:https://blog.51cto.com/11649559/1789602

總結(jié)

以上是生活随笔為你收集整理的C语言程序设计第三节课作业的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。