導航:首頁 > 源碼編譯 > 同學錄c語言編譯的難點

同學錄c語言編譯的難點

發布時間:2022-05-07 12:40:35

❶ 用C語言編通訊錄,編譯時出現兩個問題,望大神幫助一下

typedef contact Con { 需要改成 typedef struct Con {
typedef contact Node { 需要改成 typedef struct Node {

❷ c語言同學錄程序設計遇到困難,這個程序能運行但是有些功能實現不了,程序幾百行不能完全打出來,求指教

同學錄 當然鏈表做方便,還沒試過用數組做,代碼你不貼出來,大家也不能幫你

❸ c語言 同學錄程序設計 我現在只能簡單的輸入信息什麼的,求大神幫幫忙QAQ

我說三個注意點,第一,除數不能為零,第二,題目沒有要求多實例,第三,輸入第一個數(K)如果是大於20的你的數組縱向會越界。一個建議,輸入時候已經可以判斷,無需數組存儲可以直接判定,

❹ C語言鏈表建立同學錄問題!

這個問題很簡單的,
pnext=(CM
*)malloc(sizeof(CM));
p->next=pnext;
printf("請輸入第%d個同學的學號:\n",i);
scanf("%s",p->num);
printf("請輸入第%d個同學的姓名:\n",i);
scanf("%s",p->Name);
printf("請輸入第%d個同學的電話:\n",i);
scanf("%s",p->Tel);
pnext->next=NULL;
p=pnext;
}
這里應該用pnext而不能用p,用p就改變了首節點,肯定要出錯了!

❺ 求一份c語言同學錄程序設計報告書

《程序設計基礎》課程實驗報告
實驗名稱 實驗序號
學 號 姓 名 班 級
實驗日期 指導教師 成 績
一、實驗目的和要求
1.
2.
3.
二、實驗預習內容
1.
2.
3.
三、實驗項目摘要
1.

2.

3.
四、實驗結果與分析
1.

2.

3.

實驗報告編寫說明:

1. 實驗名稱和實驗編號:填寫以教師給出的實驗內容為准;
2. 班級:填寫學生所在的自然班號;
3. 實驗目的和要求、實驗項目摘要:填寫以教師給出的實驗內容為准;
4. 實驗預習內容:填寫學生實驗前所做的准備情況(包括資料查閱和上機預習);
5. 實驗結果與分析:填寫實驗結果完成情況、所編制的C語言程序、實驗中所遇問題及解決方法(或體會);
6. 成績:由指導教師填寫,採用中文五級制。
7. 報告的文件名:學號+姓名+(實驗號)如:0510211101張三(1)

註:* 實驗報告填寫時,注意輸入信息的字體格式(宋體、五號),如果用復制應採用選擇性粘貼的 「無格式文本」方法完成;

❻ C語言同學錄問題,我的同學錄運行老出現問題,幫我看下,最後一個修改模塊幫寫下

用鏈表寫了一個簡單的程序
可以添加,刪除。。按照學號查找。。

#include<string.h>
#define NULL 0
#define TYPE struct xinxi
#define LEN sizeof(struct xinxi)

struct xinxi /*定義一個名為「xinxi」的結構型,共含5個成員*/
{
int xuehao; /*學號*/
char xingming[6]; /*姓名*/
char xingbie; /*性別*/
int nianling; /*年齡*/
float chengji[5]; /*5科成績*/
char mima[10]; /*密碼口令*/
struct xinxi *next; /*指針*/
};

TYPE *creat(int n)
{
struct xinxi *head,*pf,*pb;
int i;
for(i=0;i<n;i++)
{
pb=(TYPE *)malloc(LEN);
printf("\n輸入學號:");
scanf("%d",&pb->xuehao);
printf("\n輸入姓名:");
scanf("%s",&pb->xingming);
printf("\n輸入年齡:");
scanf("%d",&pb->nianling);
printf("\n輸入性別,用『f』『m』表示:");
scanf("%c",&pb->xingbie);
if(i==0)
pf=head=pb;
else
pf->next=pb;
pb->next=NULL;
pf=pb;
}
return(head);
}

TYPE * delete(TYPE *head,int xuehao)
{
TYPE *pf,*pb;
if(head==NULL) /*如為空表, 輸出提示信息*/
{
printf("\n沒有信息!\n");
goto end;
}
pb=head;
while (pb->xuehao!=xuehao&&pb->next!=NULL) /*當不是要刪除的結點,而且也不是最後一個結點時,繼續循環*/
{
pf=pb;
pb=pb->next; /*pf指向當前結點,pb指向下一結點*/
}
if(pb->xuehao==xuehao)
{
if(pb==head) /*如找到被刪結點,且為第一結點,則使head指向第二個結點*/
head=pb->next;
else
pf->next=pb->next; /*否則使pf所指結點的指針指向下一結點*/
free(pb);
printf("找到信息,已刪除!\n");
}
else
printf("沒找到信息!\n");
end:
return head;
}

TYPE * insert(TYPE * head,TYPE * pi)
{
TYPE *pb ,*pf;
pb=head;
if(head==NULL) /*空表插入*/
{
head=pi;
pi->next=NULL;
}
else
{
while((pi->xuehao>pb->xuehao)&&(pb->next!=NULL)) /*找插入位置*/
{
pf=pb;
pb=pb->next;
}
if(pi->xuehao<=pb->xuehao)
{
if(head==pb)
head=pi; /*在第一結點之前插入*/
else
pf->next=pi; /*在其它位置插入*/
pi->next=pb;
}
else
{
pb->next=pi; /*在表末插入*/
pi->next=NULL;
}
}
return head;
}

void print(TYPE * head)
{
printf("學號\t\t姓名\t\t年齡\t\t性別\n");
while(head!=NULL)
{
printf("%d\t\t%s\t\t%\t\t%c\n",head->xuehao,head->xingming,head->nianling,head->xingbie);
head=head->next;
}
}

main()
{
TYPE *head,*pnum;
int n,xuehao;
printf("輸入人員數: ");
scanf("%d",&n);
head=creat(n);
print(head);
printf("輸入要刪除人的學號: ");
scanf("%d",&xuehao);
head=delete(head,xuehao);
print(head);
printf("輸入要加入的數據: ");
pnum=(TYPE *)malloc(LEN);
printf("\n輸入學號:");
scanf("%d",&pnum->xuehao);
printf("\n輸入姓名:");
scanf("%s",&pnum->xingming);
printf("\n輸入年齡:");
scanf("%d",&pnum->nianling);
printf("\n輸入性別,用『f』『m』表示:");
scanf("%c",&pb->xingbie);
head=insert(head,pnum);
print(head);
}

❼ 用純C語言編寫個同學錄

#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*標准庫函數*/
#include "string.h"/*字元串函數*/
#include "ctype.h" /*字元操作函數*/
#define M 50 /*定義常數表示記錄數*/

typedef struct /*定義數據結構*/
{
char num[16];/*序號*/
char name[15]; /*姓名*/
char city[10]; /*戶籍*/
char tel[15]; /*電話*/
}addr;

/******以下是函數原型*******/
int enter(addr t[]); /*輸入記錄*/
void list(addr t[],int n); /*顯示記錄*/
void search(addr t[],int n); /*按姓名查找顯示記錄*/
int delete(addr t[],int n); /*刪除記錄*/
int add(addr t[],int n); /*插入記錄*/
void save(addr t[],int n); /*記錄保存為文件*/
int load(addr t[]); /*從文件中讀記錄*/
void display(addr t[]); /*按序號查找顯示記錄*/
void sort(addr t[],int n); /*按姓名排序*/
void qseek(addr t[],int n); /*快速查找記錄*/
void (); /*文件復制*/
void print(addr temp); /*顯示單條記錄*/
int find(addr t[],int n,char *s) ; /*查找函數*/
int menu_select(); /*主菜單函數*/

/******主函數開始*******/
main()
{
int i;
addr adr[M]; /*定義結構體數組*/
int length; /*保存記錄長度*/
clrscr(); /*清屏*/
for(;;)/*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{
case 0:length=enter(adr);break;/*輸入記錄*/
case 1:list(adr,length);break; /*顯示全部記錄*/
case 2:search(adr,length);break; /*查找記錄*/
case 3:length=delete(adr,length);break; /*刪除記錄*/
case 4:length=add(adr,length); break; /*插入記錄*/
case 5:save(adr,length);break; /*保存文件*/
case 6:length=load(adr); break; /*讀文件*/
case 7:display(adr);break; /*按序號顯示記錄*/
case 8:sort(adr,length);break; /*按姓名排序*/
case 9:qseek(adr,length);break; /*快速查找記錄*/
case 10:();break; /*復制文件*/
case 11:exit(0); /*如返回值為11則程序結束*/
}
}
}

/*菜單函數,函數返回值為整數,代表所選的菜單項*/
menu_select()
{
char s[80];
int c;
gotoxy(1,25);/*將游標定為在第25行,第1列*/
printf("press any key enter menu......\n");/*提示壓任意鍵繼續*/
getch(); /*讀入任意字元*/
clrscr(); /*清屏*/
gotoxy(1,1);
printf("********************MENU*********************\n\n");
printf(" 0. Enter record\n");
printf(" 1. List the file\n");
printf(" 2. Search record on name\n");
printf(" 3. Delete a record\n");
printf(" 4. add record \n");
printf(" 5. Save the file\n");
printf(" 6. Load the file\n");
printf(" 7. display record on order\n");
printf(" 8. sort to make new file\n");
printf(" 9. Quick seek record\n");
printf(" 10. the file to new file\n");
printf(" 11. Quit\n");
printf("***********************************************\n");
do{
printf("\n Enter you choice(0~11):"); /*提示輸入選項*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整型數*/
}while(c<0||c>11); /*選擇項不在0~11之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}

/***輸入記錄,形參為結構體數組,函數值返回類型為整型表示記錄長度*/
int enter(addr t[])
{
int i,n;
char *s;
clrscr(); /*清屏*/
printf("\nplease input num \n"); /*提示信息*/
scanf("%d",&n); /*輸入記錄數*/
printf("please input record \n"); /*提示輸入記錄*/
printf("num name city telphone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
{
scanf("%s%s%s%s",t[i].num,t[i].name,t[i].city,t[i].tel); /*輸入記錄*/
printf("----------------------------------------------\n");
}
return n; /*返回記錄條數*/
}

/*顯示記錄,參數為記錄數組和記錄條數*/
void list(addr t[],int n)
{
int i;
clrscr();
printf("\n\n*******************addr******************\n");
printf("num name city telphone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%-16s%-15s%-10s%-15s\n",t[i].num,t[i].name,t[i].city,t[i].tel);
if((i+1)%10==0) /*判斷輸出是否達到10條記錄*/
{
printf("Press any key continue...\n"); /*提示信息*/
getch(); /*壓任意鍵繼續*/
}
printf("************************end********************\n");
}

/*查找記錄*/
void search(addr t[],int n)
{
char s[20]; /*保存待查找姓名字元串*/
int i; /*保存查找到結點的序號*/
clrscr(); /*清屏*/
printf("please search name\n");
scanf("%s",s); /*輸入待查找姓名*/
i=find(t,n,s); /*調用find函數,得到一個整數*/
if(i>n-1) /*如果整數i值大於n-1,說明沒找到*/
printf("not found\n");
else
print(t[i]); /*找到,調用顯示函數顯示記錄*/

}

/*顯示指定的一條記錄*/
void print(addr temp)
{
clrscr();
printf("\n\n********************************************\n");
printf("num name city telphone\n");
printf("------------------------------------------------\n");
printf("%-16s%-15s%-10s%-15s\n",temp.num,temp.name,temp.city,temp.tel);
printf("**********************end***********************\n");
}

/*查找函數,參數為記錄數組和記錄條數以及姓名s */
int find(addr t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)/*從第一條記錄開始,直到最後一條*/
{
if(strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/
return i; /*相等,則返回該記錄的下標號,程序提前結結束*/

}
return i; /*返回i值*/
}

/*刪除函數,參數為記錄數組和記錄條數*/
int delete(addr t[],int n)
{
char s[20]; /*要刪除記錄的姓名*/
int ch=0;
int i,j;
printf("please deleted name\n"); /*提示信息*/
scanf("%s",s);/*輸入姓名*/
i=find(t,n,s); /*調用find函數*/
if(i>n-1) /*如果i>n-1超過了數組的長度*/
printf("no found not deleted\n"); /*顯示沒找到要刪除的記錄*/
else
{
print(t[i]); /*調用輸出函數顯示該條記錄信息*/
printf("Are you sure delete it(1/0)\n"); /*確認是否要刪除*/
scanf("%d",&ch); /*輸入一個整數0或1*/
if(ch==1) /*如果確認刪除整數為1*/
{
for(j=i+1;j<n;j++) /*刪除該記錄,實際後續記錄前移*/
{
strcpy(t[j-1].num,t[j].num);
strcpy(t[j-1].name,t[j].name); /*將後一條記錄的姓名拷貝到前一條*/
strcpy(t[j-1].city,t[j].city); /*將後一條記錄的戶籍拷貝到前一條*/
strcpy(t[j-1].tel,t[j].tel); /*將後一條記錄的電話拷貝到前一條*/
}
n--; /*記錄數減1*/
}
}
return n; /*返回記錄數*/
}

/*插入記錄函數,參數為結構體數組和記錄數*/
int add(addr t[],int n)/*插入函數,參數為結構體數組和記錄數*/
{
addr temp; /*新插入記錄信息*/
int i,j;
char s[20]; /*確定插入在哪個記錄之前*/
printf("please input record\n");
printf("************************************************\n");
printf("num name city telphone\n");
printf("--------------------------------------------------\n");
scanf("%s%s%s%s",temp.num,temp.name,temp.city,temp.tel); /*輸入插入信息*/
printf("------------------------------------------------\n");
printf("please input locate name \n");
scanf("%s",s); /*輸入插入位置的姓名*/
i=find(t,n,s); /*調用find,確定插入位置*/
for(j=n-1;j>=i;j--) /*從最後一個結點開始向後移動一條*/
{
strcpy(t[j+1].num,t[j].num); /*當前記錄的序號拷貝到後一條*/
strcpy(t[j+1].name,t[j].name); /*當前記錄的姓名拷貝到後一條*/
strcpy(t[j+1].city,t[j].city); /*當前記錄的戶籍拷貝到後一條*/
strcpy(t[j+1].tel,t[j].tel); /*當前記錄的電話拷貝到後一條*/
}
strcpy(t[i].num,temp.num); /*將新插入記錄的序號拷貝到第i個位置*/
strcpy(t[i].name,temp.name); /*將新插入記錄的姓名拷貝到第i個位置*/
strcpy(t[i].city,temp.city); /*將新插入記錄的戶籍拷貝到第i個位置*/
strcpy(t[i].tel,temp.tel); /*將新插入記錄的電話拷貝到第i個位置*/
n++; /*記錄數加1*/
return n; /*返回記錄數*/
}

/*保存函數,參數為結構體數組和記錄數*/
void save(addr t[],int n)
{
int i;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","wb"))==NULL) /*打開文件,並判斷打開是否正常*/
{
printf("can not open file\n");/*沒打開*/
exit(1); /*退出*/
}
printf("\nSaving file\n"); /*輸出提示信息*/
fprintf(fp,"%d",n); /*將記錄數寫入文件*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
for(i=0;i<n;i++)
{
fprintf(fp,"%-16s%-15s%-10s%-15s",t[i].num,t[i].name,t[i].city,t[i].tel);/*格式寫入記錄*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
}
fclose(fp);/*關閉文件*/
printf("****save success***\n"); /*顯示保存成功*/
}

/*讀入函數,參數為結構體數組*/
int load(addr t[])
{
int i,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL)/*打開文件*/
{
printf("can not open file\n"); /*不能打開*/
exit(1); /*退出*/
}
fscanf(fp,"%d",&n); /*讀入記錄數*/
for(i=0;i<n;i++)
fscanf(fp,"%16s%15s%10%15s",t[i].num,t[i].name,t[i].city,t[i].tel); /*按格式讀入記錄*/
fclose(fp); /*關閉文件*/
printf("You have success read data from file!!!\n"); /*顯示保存成功*/
return n; /*返回記錄數*/
}

/*按序號顯示記錄函數*/
void display(addr t[])
{
int id,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL) /*打開文件*/
{
printf("can not open file\n"); /*不能打開文件*/
exit(1); /*退出*/
}
printf("Enter order number...\n"); /*顯示信息*/
scanf("%d",&id); /*輸入序號*/
fscanf(fp,"%d",&n); /*從文件讀入記錄數*/
if(id>=0&&id<n) /*判斷序號是否在記錄范圍內*/
{
fseek(fp,(id-1)*sizeof(addr),1); /*移動文件指針到該記錄位置*/
print(t[id]); /*調用輸出函數顯示該記錄*/
printf("\r\n");
}
else
printf("no %d number record!!!\n ",id); /*如果序號不合理顯示信息*/
fclose(fp); /*關閉文件*/
}

/*排序函數,參數為結構體數組和記錄數*/
void sort(addr t[],int n)
{
int i,j,flag;
addr temp; /*臨時變數做交換數據用*/
for(i=0;i<n;i++)
{
flag=0; /*設標志判斷是否發生過交換*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].name,t[j+1].name))>0) /*比較大小*/
{
flag=1;
strcpy(temp.name,t[j].num); /*交換記錄*/
strcpy(temp.name,t[j].name);
strcpy(temp.city,t[j].city);
strcpy(temp.tel,t[j].tel);
strcpy(t[j].num,t[j+1].num);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].city,t[j+1].city);
strcpy(t[j].tel,t[j+1].tel);
strcpy(t[j+1].num,temp.num);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].city,temp.city);
strcpy(t[j+1].tel,temp.tel);
}
if(flag==0)break; /*如果標志為0,說明沒有發生過交換循環結束*/
}
printf("sort sucess!!!\n"); /*顯示排序成功*/
}

/*快速查找,參數為結構體數組和記錄數*/
void qseek(addr t[],int n)
{
char s[20];
int l,r,m;
printf("\nPlease sort before qseek!\n"); /*提示確認在查找之前,記錄是否已排序*/
printf("please enter name for qseek\n"); /*提示輸入*/
scanf("%s",s); /*輸入待查找的姓名*/
l=0;r=n-1; /*設置左邊界與右邊界的初值*/
while(l<=r) /*當左邊界<=右邊界時*/
{
m=(l+r)/2; /*計算中間位置*/
if(strcmp(t[m].name,s)==0) /*與中間結點姓名欄位做比較判是否相等*/
{
print(t[m]); /*如果相等,則調用print函數顯示記錄信息*/
return ; /*返回*/
}
if(strcmp(t[m].name,s)<0) /*如果中間結點小*/
l=m+1; /*修改左邊界*/
else
r=m-1; /*否則,中間結點大,修改右邊界*/
}
if(l>r) /*如果左邊界大於右邊界時*/
printf("not found\n"); /*顯示沒找到*/
}

/*復制文件*/
void ()
{
char outfile[20]; /*目標文件名*/
int i,n;
addr temp[M]; /*定義臨時變數*/
FILE *sfp,*tfp; /*定義指向文件的指針*/
clrscr();/*清屏*/
if((sfp=fopen("record.txt","rb"))==NULL) /*打開記錄文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*打開目標文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
fscanf(sfp,"%d",&n); /*讀出文件記錄數*/
fprintf(tfp,"%d",n);/*寫入目標文件數*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
for(i=0;i<n;i++)
{
fscanf(sfp,"%15s%15s%10s%15s\n",temp[i].num,temp[i].name,temp[i].city,temp[i].tel); /*讀入記錄*/
fprintf(tfp,"%-15s%-20s%-30s%-10s\n",temp[i].num,temp[i].name, temp[i].city,temp[i].tel); /*寫入記錄*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示復製成功*/
}

提供參考,需要適當修改你所需的內容。在此說明一下,c語言這樣的綜合實驗是很鍛煉的。能讓你的知識再復習一遍。最好是自己寫了。呵呵~

❽ C語言編譯的問題

1、fatal error C1010: unexpected end of file while looking for precompiled header directive。

尋找預編譯頭文件路徑時遇到了不該遇到的文件尾。(一般是沒有#include "stdafx.h")

2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory

不能打開包含文件「R…….h」:沒有這樣的文件或目錄。

3、error C2011: 'C……': 'class' type redefinition

類「C……」重定義。

4、error C2018: unknown character '0xa3'

不認識的字元'0xa3'。(一般是漢字或中文標點符號)

5、error C2057: expected constant expression

希望是常量表達式。(一般出現在switch語句的case分支中)

6、error C2065: 'IDD_MYDIALOG' : undeclared identifier

「IDD_MYDIALOG」:未聲明過的標識符。

7、error C2082: redefinition of formal parameter 'bReset'

函數參數「bReset」在函數體中重定義。

8、error C2143: syntax error: missing ':' before '{'

句法錯誤:「{」前缺少「;」。

9、error C2146: syntax error : missing ';' before identifier 'dc'

句法錯誤:在「dc」前丟了「;」。

10、error C2196: case value '69' already used

值69已經用過。(一般出現在switch語句的case分支中)

11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'

成員函數「OnTimer」沒有在「CHelloView」中聲明。

12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'

重載的函數「void reset(int)」在類「B」中找不到。

13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention

類B對類A中同名函數f1的重載僅根據返回值或調用約定上的區別。

14、error C2660: 'SetTimer' : function does not take 2 parameters

「SetTimer」函數不傳遞2個參數。

15、warning C4035: 'f……': no return value

「f……」的return語句沒有返回值。

16、warning C4553: '= =' : operator has no effect; did you intend '='?

沒有效果的運算符「= =」;是否改為「=」?

17、warning C4700: local variable 'bReset' used without having been initialized

局部變數「bReset」沒有初始化就使用。

18、error C4716: 'CMyApp::InitInstance' : must return a value

「CMyApp::InitInstance」函數必須返回一個值。

19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing

連接錯誤:不能打開P1.exe文件,以改寫內容。(一般是P1.Exe還在運行,未關閉)

20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C……::~C……(void)"

連接時發現沒有實現的外部符號(變數、函數等)。

function call missing argument list 調用函數的時候沒有給參數。

member function definition looks like a ctor, but name does not match enclosing class 成員函數聲明了但沒有使用

unexpected end of file while looking for precompiled header directive 在尋找預編譯頭文件時文件意外結束,編譯不正常終止可能造成這種情況
希望對你能有所幫助。

❾ 關於C語言編譯階段的一些問題

呵呵,找一本好書吧。我不能完全給你寫清楚,"sting.h"的拼寫已經有人說了。
簡單地說,要理解幾種文件:
A:源文件:例如匯編(asm)、c語言、cpp
B:目標文件
C:庫文件(lib)
D:可執行文件

A經過編譯器得到B,若干個B可以經過庫管理程序得到C,C也可以通過庫管理程序得到B(提取)
若干個B通過鏈接器可以得到D,但是比如strcmp是出現在C中的,但實際上鏈接器會到C中提取出strcmp所在的B,然後將這個B放入到你的D中。整過過程是一個求閉包的過程,具體參見《Linker and Loader》。

最後說說.h,其實.h本身並不是必要的,但是它可以減少人們的錯誤,減少重復的代碼。
比如printf,你完全可以不include<stdio.h>,你就自己寫上一行:
int printf(...);
然後你後面就是直接使用就好了,但是這樣會有很多缺陷,這些缺陷可能只有你深刻地理解C語言本身的缺陷後才能明白,不多說了。

❿ 求用簡單一點的c語言編寫同學錄

#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*標准庫函數*/
#include "string.h"/*字元串函數*/
#include "ctype.h" /*字元操作函數*/
#define M 50 /*定義常數表示記錄數*/

typedef struct /*定義數據結構*/
{
char num[16];/*序號*/
char name[15]; /*姓名*/
char city[10]; /*戶籍*/
char tel[15]; /*電話*/
}addr;

/******以下是函數原型*******/
int enter(addr t[]); /*輸入記錄*/
void list(addr t[],int n); /*顯示記錄*/
void search(addr t[],int n); /*按姓名查找顯示記錄*/
int delete(addr t[],int n); /*刪除記錄*/
int add(addr t[],int n); /*插入記錄*/
void save(addr t[],int n); /*記錄保存為文件*/
int load(addr t[]); /*從文件中讀記錄*/
void display(addr t[]); /*按序號查找顯示記錄*/
void sort(addr t[],int n); /*按姓名排序*/
void qseek(addr t[],int n); /*快速查找記錄*/
void (); /*文件復制*/
void print(addr temp); /*顯示單條記錄*/
int find(addr t[],int n,char *s) ; /*查找函數*/
int menu_select(); /*主菜單函數*/

/******主函數開始*******/
main()
{
int i;
addr adr[M]; /*定義結構體數組*/
int length; /*保存記錄長度*/
clrscr(); /*清屏*/
for(;;)/*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{
case 0:length=enter(adr);break;/*輸入記錄*/
case 1:list(adr,length);break; /*顯示全部記錄*/
case 2:search(adr,length);break; /*查找記錄*/
case 3:length=delete(adr,length);break; /*刪除記錄*/
case 4:length=add(adr,length); break; /*插入記錄*/
case 5:save(adr,length);break; /*保存文件*/
case 6:length=load(adr); break; /*讀文件*/
case 7:display(adr);break; /*按序號顯示記錄*/
case 8:sort(adr,length);break; /*按姓名排序*/
case 9:qseek(adr,length);break; /*快速查找記錄*/
case 10:();break; /*復制文件*/
case 11:exit(0); /*如返回值為11則程序結束*/
}
}
}

/*菜單函數,函數返回值為整數,代表所選的菜單項*/
menu_select()
{
char s[80];
int c;
gotoxy(1,25);/*將游標定為在第25行,第1列*/
printf("press any key enter menu......\n");/*提示壓任意鍵繼續*/
getch(); /*讀入任意字元*/
clrscr(); /*清屏*/
gotoxy(1,1);
printf("********************MENU*********************\n\n");
printf(" 0. Enter record\n");
printf(" 1. List the file\n");
printf(" 2. Search record on name\n");
printf(" 3. Delete a record\n");
printf(" 4. add record \n");
printf(" 5. Save the file\n");
printf(" 6. Load the file\n");
printf(" 7. display record on order\n");
printf(" 8. sort to make new file\n");
printf(" 9. Quick seek record\n");
printf(" 10. the file to new file\n");
printf(" 11. Quit\n");
printf("***********************************************\n");
do{
printf("\n Enter you choice(0~11):"); /*提示輸入選項*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整型數*/
}while(c<0||c>11); /*選擇項不在0~11之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}

/***輸入記錄,形參為結構體數組,函數值返回類型為整型表示記錄長度*/
int enter(addr t[])
{
int i,n;
char *s;
clrscr(); /*清屏*/
printf("\nplease input num \n"); /*提示信息*/
scanf("%d",&n); /*輸入記錄數*/
printf("please input record \n"); /*提示輸入記錄*/
printf("num name city telphone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
{
scanf("%s%s%s%s",t[i].num,t[i].name,t[i].city,t[i].tel); /*輸入記錄*/
printf("----------------------------------------------\n");
}
return n; /*返回記錄條數*/
}

/*顯示記錄,參數為記錄數組和記錄條數*/
void list(addr t[],int n)
{
int i;
clrscr();
printf("\n\n*******************addr******************\n");
printf("num name city telphone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%-16s%-15s%-10s%-15s\n",t[i].num,t[i].name,t[i].city,t[i].tel);
if((i+1)%10==0) /*判斷輸出是否達到10條記錄*/
{
printf("Press any key continue...\n"); /*提示信息*/
getch(); /*壓任意鍵繼續*/
}
printf("************************end********************\n");
}

/*查找記錄*/
void search(addr t[],int n)
{
char s[20]; /*保存待查找姓名字元串*/
int i; /*保存查找到結點的序號*/
clrscr(); /*清屏*/
printf("please search name\n");
scanf("%s",s); /*輸入待查找姓名*/
i=find(t,n,s); /*調用find函數,得到一個整數*/
if(i>n-1) /*如果整數i值大於n-1,說明沒找到*/
printf("not found\n");
else
print(t[i]); /*找到,調用顯示函數顯示記錄*/

}

/*顯示指定的一條記錄*/
void print(addr temp)
{
clrscr();
printf("\n\n********************************************\n");
printf("num name city telphone\n");
printf("------------------------------------------------\n");
printf("%-16s%-15s%-10s%-15s\n",temp.num,temp.name,temp.city,temp.tel);
printf("**********************end***********************\n");
}

/*查找函數,參數為記錄數組和記錄條數以及姓名s */
int find(addr t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)/*從第一條記錄開始,直到最後一條*/
{
if(strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/
return i; /*相等,則返回該記錄的下標號,程序提前結結束*/

}
return i; /*返回i值*/
}

/*刪除函數,參數為記錄數組和記錄條數*/
int delete(addr t[],int n)
{
char s[20]; /*要刪除記錄的姓名*/
int ch=0;
int i,j;
printf("please deleted name\n"); /*提示信息*/
scanf("%s",s);/*輸入姓名*/
i=find(t,n,s); /*調用find函數*/
if(i>n-1) /*如果i>n-1超過了數組的長度*/
printf("no found not deleted\n"); /*顯示沒找到要刪除的記錄*/
else
{
print(t[i]); /*調用輸出函數顯示該條記錄信息*/
printf("Are you sure delete it(1/0)\n"); /*確認是否要刪除*/
scanf("%d",&ch); /*輸入一個整數0或1*/
if(ch==1) /*如果確認刪除整數為1*/
{
for(j=i+1;j<n;j++) /*刪除該記錄,實際後續記錄前移*/
{
strcpy(t[j-1].num,t[j].num);
strcpy(t[j-1].name,t[j].name); /*將後一條記錄的姓名拷貝到前一條*/
strcpy(t[j-1].city,t[j].city); /*將後一條記錄的戶籍拷貝到前一條*/
strcpy(t[j-1].tel,t[j].tel); /*將後一條記錄的電話拷貝到前一條*/
}
n--; /*記錄數減1*/
}
}
return n; /*返回記錄數*/
}

/*插入記錄函數,參數為結構體數組和記錄數*/
int add(addr t[],int n)/*插入函數,參數為結構體數組和記錄數*/
{
addr temp; /*新插入記錄信息*/
int i,j;
char s[20]; /*確定插入在哪個記錄之前*/
printf("please input record\n");
printf("************************************************\n");
printf("num name city telphone\n");
printf("--------------------------------------------------\n");
scanf("%s%s%s%s",temp.num,temp.name,temp.city,temp.tel); /*輸入插入信息*/
printf("------------------------------------------------\n");
printf("please input locate name \n");
scanf("%s",s); /*輸入插入位置的姓名*/
i=find(t,n,s); /*調用find,確定插入位置*/
for(j=n-1;j>=i;j--) /*從最後一個結點開始向後移動一條*/
{
strcpy(t[j+1].num,t[j].num); /*當前記錄的序號拷貝到後一條*/
strcpy(t[j+1].name,t[j].name); /*當前記錄的姓名拷貝到後一條*/
strcpy(t[j+1].city,t[j].city); /*當前記錄的戶籍拷貝到後一條*/
strcpy(t[j+1].tel,t[j].tel); /*當前記錄的電話拷貝到後一條*/
}
strcpy(t[i].num,temp.num); /*將新插入記錄的序號拷貝到第i個位置*/
strcpy(t[i].name,temp.name); /*將新插入記錄的姓名拷貝到第i個位置*/
strcpy(t[i].city,temp.city); /*將新插入記錄的戶籍拷貝到第i個位置*/
strcpy(t[i].tel,temp.tel); /*將新插入記錄的電話拷貝到第i個位置*/
n++; /*記錄數加1*/
return n; /*返回記錄數*/
}

/*保存函數,參數為結構體數組和記錄數*/
void save(addr t[],int n)
{
int i;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","wb"))==NULL) /*打開文件,並判斷打開是否正常*/
{
printf("can not open file\n");/*沒打開*/
exit(1); /*退出*/
}
printf("\nSaving file\n"); /*輸出提示信息*/
fprintf(fp,"%d",n); /*將記錄數寫入文件*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
for(i=0;i<n;i++)
{
fprintf(fp,"%-16s%-15s%-10s%-15s",t[i].num,t[i].name,t[i].city,t[i].tel);/*格式寫入記錄*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
}
fclose(fp);/*關閉文件*/
printf("****save success***\n"); /*顯示保存成功*/
}

/*讀入函數,參數為結構體數組*/
int load(addr t[])
{
int i,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL)/*打開文件*/
{
printf("can not open file\n"); /*不能打開*/
exit(1); /*退出*/
}
fscanf(fp,"%d",&n); /*讀入記錄數*/
for(i=0;i<n;i++)
fscanf(fp,"%16s%15s%10%15s",t[i].num,t[i].name,t[i].city,t[i].tel); /*按格式讀入記錄*/
fclose(fp); /*關閉文件*/
printf("You have success read data from file!!!\n"); /*顯示保存成功*/
return n; /*返回記錄數*/
}

/*按序號顯示記錄函數*/
void display(addr t[])
{
int id,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL) /*打開文件*/
{
printf("can not open file\n"); /*不能打開文件*/
exit(1); /*退出*/
}
printf("Enter order number...\n"); /*顯示信息*/
scanf("%d",&id); /*輸入序號*/
fscanf(fp,"%d",&n); /*從文件讀入記錄數*/
if(id>=0&&id<n) /*判斷序號是否在記錄范圍內*/
{
fseek(fp,(id-1)*sizeof(addr),1); /*移動文件指針到該記錄位置*/
print(t[id]); /*調用輸出函數顯示該記錄*/
printf("\r\n");
}
else
printf("no %d number record!!!\n ",id); /*如果序號不合理顯示信息*/
fclose(fp); /*關閉文件*/
}

/*排序函數,參數為結構體數組和記錄數*/
void sort(addr t[],int n)
{
int i,j,flag;
addr temp; /*臨時變數做交換數據用*/
for(i=0;i<n;i++)
{
flag=0; /*設標志判斷是否發生過交換*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].name,t[j+1].name))>0) /*比較大小*/
{
flag=1;
strcpy(temp.name,t[j].num); /*交換記錄*/
strcpy(temp.name,t[j].name);
strcpy(temp.city,t[j].city);
strcpy(temp.tel,t[j].tel);
strcpy(t[j].num,t[j+1].num);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].city,t[j+1].city);
strcpy(t[j].tel,t[j+1].tel);
strcpy(t[j+1].num,temp.num);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].city,temp.city);
strcpy(t[j+1].tel,temp.tel);
}
if(flag==0)break; /*如果標志為0,說明沒有發生過交換循環結束*/
}
printf("sort sucess!!!\n"); /*顯示排序成功*/
}

/*快速查找,參數為結構體數組和記錄數*/
void qseek(addr t[],int n)
{
char s[20];
int l,r,m;
printf("\nPlease sort before qseek!\n"); /*提示確認在查找之前,記錄是否已排序*/
printf("please enter name for qseek\n"); /*提示輸入*/
scanf("%s",s); /*輸入待查找的姓名*/
l=0;r=n-1; /*設置左邊界與右邊界的初值*/
while(l<=r) /*當左邊界<=右邊界時*/
{
m=(l+r)/2; /*計算中間位置*/
if(strcmp(t[m].name,s)==0) /*與中間結點姓名欄位做比較判是否相等*/
{
print(t[m]); /*如果相等,則調用print函數顯示記錄信息*/
return ; /*返回*/
}
if(strcmp(t[m].name,s)<0) /*如果中間結點小*/
l=m+1; /*修改左邊界*/
else
r=m-1; /*否則,中間結點大,修改右邊界*/
}
if(l>r) /*如果左邊界大於右邊界時*/
printf("not found\n"); /*顯示沒找到*/
}

/*復制文件*/
void ()
{
char outfile[20]; /*目標文件名*/
int i,n;
addr temp[M]; /*定義臨時變數*/
FILE *sfp,*tfp; /*定義指向文件的指針*/
clrscr();/*清屏*/
if((sfp=fopen("record.txt","rb"))==NULL) /*打開記錄文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*打開目標文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
fscanf(sfp,"%d",&n); /*讀出文件記錄數*/
fprintf(tfp,"%d",n);/*寫入目標文件數*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
for(i=0;i<n;i++)
{
fscanf(sfp,"%15s%15s%10s%15s\n",temp[i].num,temp[i].name,temp[i].city,temp[i].tel); /*讀入記錄*/
fprintf(tfp,"%-15s%-20s%-30s%-10s\n",temp[i].num,temp[i].name, temp[i].city,temp[i].tel); /*寫入記錄*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示復製成功*/
}

閱讀全文

與同學錄c語言編譯的難點相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:581
python員工信息登記表 瀏覽:377
高中美術pdf 瀏覽:161
java實現排列 瀏覽:513
javavector的用法 瀏覽:982
osi實現加密的三層 瀏覽:233
大眾寶來原廠中控如何安裝app 瀏覽:916
linux內核根文件系統 瀏覽:243
3d的命令面板不見了 瀏覽:526
武漢理工大學伺服器ip地址 瀏覽:149
亞馬遜雲伺服器登錄 瀏覽:525
安卓手機如何進行文件處理 瀏覽:71
mysql執行系統命令 瀏覽:930
php支持curlhttps 瀏覽:143
新預演算法責任 瀏覽:444
伺服器如何處理5萬人同時在線 瀏覽:251
哈夫曼編碼數據壓縮 瀏覽:428
鎖定伺服器是什麼意思 瀏覽:385
場景檢測演算法 瀏覽:617
解壓手機軟體觸屏 瀏覽:352