第一篇:C語言用指針和鏈表讀寫文件
#include
#include
#include
#include
#define MAXLEN_OF_KEYWORD 50
#define MAXLEN_OF_KEYWORDTYPE 30
char i,ch[5];
struct KeyWordBox
{
char Name[MAXLEN_OF_KEYWORD];
intId;
char Type[MAXLEN_OF_KEYWORDTYPE];//該單詞的類型struct KeyWordBox *next;//指針
};
void write();
void read();
void main()
{
write();
read();
}
void write()
{
char *FileName=“FileName.txt”;
KeyWordBox transport;
memset(&transport,0,sizeof(struct KeyWordBox));
FILE *out=NULL;
FILE *test=NULL;
test=fopen(FileName,“a”);
if(test==NULL)
{
out=fopen(FileName,“w”);
printf(“ 1 continue,0 exitn”);
i=getchar();
while(i=='1')
{
printf(“請輸入關(guān)鍵字n”);
scanf(“%s”,transport.Name);
printf(“請輸入IDn”);
scanf(“%d”,&transport.Id);
printf(“請輸入Typen”);
scanf(“%s”,transport.Type);
fwrite(&transport,sizeof(struct KeyWordBox),1,out);
printf(“ 1 continue,0 exitn”);
scanf(“%c”,&i);
}
fclose(out);
}
else
{
out=fopen(FileName,“a”);
printf(“ 1 continue,0 exitn”);
scanf(“%c”,&ch);
//i=getchar();
//while(i=='1')
while(strcmp(ch,“1”)==0)
{
printf(“請輸入關(guān)鍵字n”);
scanf(“%s”,transport.Name);
printf(“請輸入IDn”);
scanf(“%d”,&transport.Id);
printf(“請輸入Typen”);
scanf(“%s”,transport.Type);
fwrite(&transport,sizeof(KeyWordBox),1,out);
printf(“ 1 continue,0 exit.n”);
scanf(“%s”,ch);
}
fclose(out);
}
}
void read()
{
char *FileName=“FileName.txt”;
KeyWordBox *Head=NULL,*q=NULL;
KeyWordBox *Body=NULL;
KeyWordBox *p=NULL;
FILE *in=NULL;
in=fopen(FileName,“r”);
if(in==NULL)
{
printf(“can't open the file!n”);
exit(0);
}
else
{
Head=(struct KeyWordBox*)malloc(sizeof(struct KeyWordBox));Head->next =NULL;
}}q=Head;while(!feof(in)){Body=(struct KeyWordBox*)malloc(sizeof(struct KeyWordBox));Body->next=NULL;fread(Body,sizeof(struct KeyWordBox),1,in);if(feof(in)){q->next=NULL;break;}q->next=Body;q=Body;printf(“%st%dt%sn”,Body->Name,Body->Id,Body->Type);} fclose(in);p=Head->next;while(p!=NULL){printf(“%st%dt%sn”,p->Name,p->Id,p->Type);p=p->next;}
第二篇:C語言指針實習(xí)
實習(xí)七:指針實習(xí)
一、實習(xí)目的
姓名:尹思智
學(xué)號:2012014413
完成日期:2013年4月
1.由鍵盤輸入10個整數(shù),將它們從小到大排序 2.將10個字符串(設(shè)其長度小于30)排序。
3.找出二維數(shù)組(設(shè)4行5列)中的最大數(shù)及其位置。
4.從鍵盤輸入一串字符,從下標(biāo)為m的字符開始,取出n個字符(m和n從鍵盤輸入),形成一個新字符串 5.實現(xiàn)字符串的拷貝
6.編寫一程序,將一個字符串反序存放。
二、實習(xí)步驟
1.由鍵盤輸入10個整數(shù),將它們從小到大排序 #include scanf(“%d”,p);for(i=0;i<10;i++)for(p=a;p if(*p>*(p+1)) { t=*p; *p=*(p+1); *(p+1)=t;} for(p=a;p printf(“%d ”,*p);} 2、將10個字符串(設(shè)其長度小于30)排序 #include str[i]=cty[i];printf(“輸入十個字符串:n”);for(i=0;i<10;i++) gets(cty[i]);for(i=0;i<9;i++){ k=i; for(j=i+1;j<10;j++) if(strcmp(str[k],str[j])>0) k=j; temp=str[k]; str[k]=str[i]; str[i]=temp;} printf(“排序后:n”);for(i=0;i<10;i++) printf(“%sn”,str[i]);} 2.將10個字符串(設(shè)其長度小于30)排序。 3.找出二維數(shù)組(設(shè)4行5列)中的最大數(shù)及其位置。 4.從鍵盤輸入一串字符,從下標(biāo)為m的字符開始,取出n個字符(m和n從鍵盤輸入),形成一個新字符串 5.實現(xiàn)字符串的拷貝 6.編寫一程序,將一個字符串反序存放。 三、實習(xí)總結(jié) 學(xué)號:__________ 姓名:__________ 班級:__________ 日期:__________ 指導(dǎo)教師:__________ 成績:__________ 實驗五 指針 一、實驗?zāi)康?、掌握指針的概念、會定義和使用指針變量 2、掌握指向數(shù)組的指針變量 3、掌握字符串指針的使用 二、實驗內(nèi)容 1、輸入3個字符串,按由小到大的順序輸出。(習(xí)題10.2) 2、寫一函數(shù),求一個字符串的長度。在main函數(shù)中輸入字符串,并輸出其長度。(習(xí)題10.6) 3、完善程序,要求使用函數(shù)功能:將一個數(shù)字字符串轉(zhuǎn)換成一個整數(shù)(不得調(diào)用C語言提供的將字符串轉(zhuǎn)換為整數(shù)的函數(shù))。例如,若輸入字符串“-1234”,則函數(shù)把它轉(zhuǎn)換為整數(shù)值-1234。 #include #include long fun(char *p) { 填寫程序 } void main() { char s[6]; long n; printf(“Enter a string:n”); gets(s); n=fun(s); printf(“%ldn”,n); } 一、三、實驗步驟與過程 第一┆范文網(wǎng)004km.cn整理該文章,版權(quán)歸原作者、原出處所有...四、程序調(diào)試記錄 C語言鏈表的概念 在*中采用了動態(tài)分配的辦法為一個結(jié)構(gòu)分配內(nèi)存空間。每一次分配一塊空間可用來存放一個學(xué)生的數(shù)據(jù),我們可稱之為一個結(jié)點。有多少個學(xué)生就應(yīng)該申請分配多少塊內(nèi)存空間,也就是說要建立多少個結(jié)點。當(dāng)然用結(jié)構(gòu)數(shù)組也可以完成上述工作,但如果預(yù)先不能準(zhǔn)確把握學(xué)生人數(shù),也現(xiàn)金網(wǎng)96y.org就無法確定數(shù)組大小。而且當(dāng)學(xué)生留級、退學(xué)之后也不能把該元素占用的空間從數(shù)組中釋放出來。 用動態(tài)存儲的方法可以很好地解決這些問題。有一個學(xué)生就分配一個結(jié)點,無須預(yù)先確定學(xué)生的準(zhǔn)確人數(shù),某學(xué)生退學(xué),可刪去該結(jié)點,并釋放該結(jié)點占用的存儲空間。從而節(jié)約了寶貴的內(nèi)存資源。另一方面,用數(shù)組的方法必須占用一塊連續(xù)的內(nèi)存區(qū)域。而使用動態(tài)分配時,每個結(jié)點之間可以是不連續(xù)的(結(jié)點內(nèi)是連續(xù)的)。結(jié)點之間的聯(lián)系可以用指針實現(xiàn)。即在結(jié)點結(jié)構(gòu)中定義一個成員項用來存放下一結(jié)點的首地址,這個用于存放地址的成員,常把它稱為指針域。 可在第一個結(jié)點的指針域內(nèi)存入第二個結(jié)點的首地址,在第二個結(jié)點的指針域內(nèi)又存放第三個結(jié)點的首地址,如此串連下去直到最后一個結(jié)點。最后一個結(jié)點因無后續(xù)結(jié)點連接,其指針域可賦為0。這樣一種連接方式,在數(shù)據(jù)結(jié)構(gòu)中稱為鏈表。 下圖為最一簡單鏈表的示意圖。 圖中,第0個結(jié)點稱為頭結(jié)點,它存放有第一個結(jié)點的首地址,它沒有數(shù)據(jù),只是一個指針變量。以下的每個結(jié)點都分為兩個域,一個是數(shù)據(jù)域,存放各種實際的數(shù)據(jù),如學(xué)號num,姓名name,性別sex和成績score等。另一個域為指針域,存放下一結(jié)點的首地址。鏈表中的每一個結(jié)點都是同一種結(jié)構(gòu)類型。 例如,一個存放學(xué)生學(xué)號和成績的結(jié)點應(yīng)為以下結(jié)構(gòu): struct stu{ int num; int score; struct stu *next; } 前兩個成員項博彩娛樂棋牌q07i5.org組成數(shù)據(jù)域,后一個成員項next構(gòu)成指針域,它是一個指向stu類型結(jié)構(gòu)的指針變量。 鏈表的基本操作對鏈表的主要操作有以下幾種: 建立鏈表; 結(jié)構(gòu)的查找與輸出; 插入一個結(jié)點; 刪除一個結(jié)點。 C語言函數(shù)指針變量 在C語言中,一個函數(shù)總是占用一段連續(xù)的內(nèi)存區(qū),而函數(shù)名就是該函數(shù)所占內(nèi)存區(qū)的首地址。我們可以把函數(shù)的這個首地址(或稱入口地址)賦予一個指針變量,使該指針變量指向該函數(shù)。然后通過指針變量就可以找到并調(diào)用這個函數(shù)。我們把這種指向函數(shù)的指針變量稱為函數(shù)指針變量。 函數(shù)指針變量定義的一般形式為: 類型說明符(*指針變量名)();其中類型說明符表示現(xiàn)金網(wǎng)96y.org被指函數(shù)的返回值的類型。(* 指針變量名)表示*后面的變量是定義的指針變量。最后的空括號表示指針變量所指的是一個函數(shù)。例如: int(*pf)(); 表示pf是一個指向函數(shù)入口的指針變量,該函數(shù)的返回值(函數(shù)值)是整型。 本例用來說明用指針形式實現(xiàn)對函數(shù)調(diào)用的方法。 int max(int a,int b){ if(ab)return a; else return b; } main(){ int max(int a,int b); int(*pmax)(); int x,y,z; pmax=max; printf(input two numbers:n); scanf(%d%d,x,y); z=(*pmax)(x,y); printf(maxmum=%d,z); } 從上述程序可以看出用,函數(shù)指針變量形式調(diào)用函數(shù)的步驟如下: 先定義函數(shù)指針變量,如后一程序中第9行 int(*pmax)();定義 pmax為函數(shù)指針變量。 把被調(diào)函數(shù)的入口地址(函數(shù)名)賦予該函數(shù)指針變量,如程序中第11行 pmax=max; 用函數(shù)指針變量形式調(diào)用函數(shù),如程序第14行 z=(*pmax)(x,y); 調(diào)用函數(shù)的一般形式為:(*指針變量名)(實參表) 使用函數(shù)指針變量還應(yīng)注意以下兩點: 函數(shù)指針變量不能進行算術(shù)運算,這是與數(shù)組指針變量不同的。數(shù)組指針變量加減一個整數(shù)可使指針移動指向后面或前面的數(shù)組元素,而博彩娛樂棋牌q07i5.org函數(shù)指針的移動是毫無意義的。 函數(shù)調(diào)用中(*指針變量名)的兩邊的括號不可少,其中的*不應(yīng)該理解為求值運算,在此處它只是一種表示符號。第三篇:C語言實驗報告《指針》
第四篇:C語言鏈表的概念
第五篇:C語言函數(shù)指針變量