第一篇: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(“請輸入關鍵字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(“請輸入關鍵字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語言指針實習
實習七:指針實習
一、實習目的
姓名:尹思智
學號:2012014413
完成日期:2013年4月
1.由鍵盤輸入10個整數,將它們從小到大排序 2.將10個字符串(設其長度小于30)排序。
3.找出二維數組(設4行5列)中的最大數及其位置。
4.從鍵盤輸入一串字符,從下標為m的字符開始,取出n個字符(m和n從鍵盤輸入),形成一個新字符串 5.實現字符串的拷貝
6.編寫一程序,將一個字符串反序存放。
二、實習步驟
1.由鍵盤輸入10個整數,將它們從小到大排序 #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個字符串(設其長度小于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個字符串(設其長度小于30)排序。 3.找出二維數組(設4行5列)中的最大數及其位置。 4.從鍵盤輸入一串字符,從下標為m的字符開始,取出n個字符(m和n從鍵盤輸入),形成一個新字符串 5.實現字符串的拷貝 6.編寫一程序,將一個字符串反序存放。 三、實習總結 學號:__________ 姓名:__________ 班級:__________ 日期:__________ 指導教師:__________ 成績:__________ 實驗五 指針 一、實驗目的1、掌握指針的概念、會定義和使用指針變量 2、掌握指向數組的指針變量 3、掌握字符串指針的使用 二、實驗內容 1、輸入3個字符串,按由小到大的順序輸出。(習題10.2) 2、寫一函數,求一個字符串的長度。在main函數中輸入字符串,并輸出其長度。(習題10.6) 3、完善程序,要求使用函數功能:將一個數字字符串轉換成一個整數(不得調用C語言提供的將字符串轉換為整數的函數)。例如,若輸入字符串“-1234”,則函數把它轉換為整數值-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); } 一、三、實驗步驟與過程 第一┆范文網www.tmdps.cn整理該文章,版權歸原作者、原出處所有...四、程序調試記錄 C語言鏈表的概念 在*中采用了動態分配的辦法為一個結構分配內存空間。每一次分配一塊空間可用來存放一個學生的數據,我們可稱之為一個結點。有多少個學生就應該申請分配多少塊內存空間,也就是說要建立多少個結點。當然用結構數組也可以完成上述工作,但如果預先不能準確把握學生人數,也現金網96y.org就無法確定數組大小。而且當學生留級、退學之后也不能把該元素占用的空間從數組中釋放出來。 用動態存儲的方法可以很好地解決這些問題。有一個學生就分配一個結點,無須預先確定學生的準確人數,某學生退學,可刪去該結點,并釋放該結點占用的存儲空間。從而節約了寶貴的內存資源。另一方面,用數組的方法必須占用一塊連續的內存區域。而使用動態分配時,每個結點之間可以是不連續的(結點內是連續的)。結點之間的聯系可以用指針實現。即在結點結構中定義一個成員項用來存放下一結點的首地址,這個用于存放地址的成員,常把它稱為指針域。 可在第一個結點的指針域內存入第二個結點的首地址,在第二個結點的指針域內又存放第三個結點的首地址,如此串連下去直到最后一個結點。最后一個結點因無后續結點連接,其指針域可賦為0。這樣一種連接方式,在數據結構中稱為鏈表。 下圖為最一簡單鏈表的示意圖。 圖中,第0個結點稱為頭結點,它存放有第一個結點的首地址,它沒有數據,只是一個指針變量。以下的每個結點都分為兩個域,一個是數據域,存放各種實際的數據,如學號num,姓名name,性別sex和成績score等。另一個域為指針域,存放下一結點的首地址。鏈表中的每一個結點都是同一種結構類型。 例如,一個存放學生學號和成績的結點應為以下結構: struct stu{ int num; int score; struct stu *next; } 前兩個成員項博彩娛樂棋牌q07i5.org組成數據域,后一個成員項next構成指針域,它是一個指向stu類型結構的指針變量。 鏈表的基本操作對鏈表的主要操作有以下幾種: 建立鏈表; 結構的查找與輸出; 插入一個結點; 刪除一個結點。 C語言函數指針變量 在C語言中,一個函數總是占用一段連續的內存區,而函數名就是該函數所占內存區的首地址。我們可以把函數的這個首地址(或稱入口地址)賦予一個指針變量,使該指針變量指向該函數。然后通過指針變量就可以找到并調用這個函數。我們把這種指向函數的指針變量稱為函數指針變量。 函數指針變量定義的一般形式為: 類型說明符(*指針變量名)();其中類型說明符表示現金網96y.org被指函數的返回值的類型。(* 指針變量名)表示*后面的變量是定義的指針變量。最后的空括號表示指針變量所指的是一個函數。例如: int(*pf)(); 表示pf是一個指向函數入口的指針變量,該函數的返回值(函數值)是整型。 本例用來說明用指針形式實現對函數調用的方法。 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); } 從上述程序可以看出用,函數指針變量形式調用函數的步驟如下: 先定義函數指針變量,如后一程序中第9行 int(*pmax)();定義 pmax為函數指針變量。 把被調函數的入口地址(函數名)賦予該函數指針變量,如程序中第11行 pmax=max; 用函數指針變量形式調用函數,如程序第14行 z=(*pmax)(x,y); 調用函數的一般形式為:(*指針變量名)(實參表) 使用函數指針變量還應注意以下兩點: 函數指針變量不能進行算術運算,這是與數組指針變量不同的。數組指針變量加減一個整數可使指針移動指向后面或前面的數組元素,而博彩娛樂棋牌q07i5.org函數指針的移動是毫無意義的。 函數調用中(*指針變量名)的兩邊的括號不可少,其中的*不應該理解為求值運算,在此處它只是一種表示符號。第三篇:C語言實驗報告《指針》
第四篇:C語言鏈表的概念
第五篇:C語言函數指針變量