第一篇:校園歌手大賽2C語言程序
#include
float a[N][M],t,b[N],b2[N];//隨即產(chǎn)生150個(gè)數(shù)
srand((unsigned)time(NULL));
for(i=0;i<15;i++)
for(j=0;j<10;j++)
(a[i][j]=(float)(8+2*(double)rand()/RAND_MAX));
for(i=0;i<15;i++)//將產(chǎn)生的數(shù)輸出出來
{ for(j=0;j<10;j++)
printf(“%5.2ft”,a[i][j]);
printf(“n”);
}
for(i=0;i<15;i++)//求每位選手的總成績(jī)
{ b[i]=0;
for(j=0;j<10;j++)
{b[i]+=a[i][j];
b2[i]=b[i];
}
}
for(i=0;i<15;i++)
printf(“第%d號(hào)選手的總成績(jī)是%fn”,i+1,b[i]);
printf(“n”);
for(i=0;i<14;i++)//給每位選手排序
for(j=i+1;j<15;j++)
if(b[i]
{t=b[i];b[i]=b[j];b[j]=t;}
for(i=0;i<15;i++)//分別找出冠軍,亞軍,季軍是幾號(hào)
if(b2[i]==b[0])
printf(“本屆校園歌手大賽的冠軍是%d號(hào),是%fn”,i+1,b[0]);
該選手的成績(jī)
for(i=0;i<15;i++)
if(b2[i]==b[1])
printf(“本屆校園歌手大賽的亞軍是%d號(hào),該選手的成績(jī)是%fn”,i+1,b[1]);
for(i=0;i<15;i++)
if(b2[i]==b[2])
printf(“本屆校園歌手大賽的季軍是%d號(hào),該選手的成績(jī)是%fn”,i+1,b[2]);
}
第二篇:c語言實(shí)習(xí)程序
#include
course_name(int i)/*把科目變成數(shù)字函數(shù)*/ { switch(i)
{
case 1:printf(“英語 ”);
break;
case 2:printf(“數(shù)學(xué)”);
break;
case 3:printf(“C語言”);
break;
case 4:printf(“Java”);
break;
case 5:printf(“法律”);
break;
case 6:printf(“音樂”);
break;
case 7:printf(“語文”);
break;
case 8:printf(“體育”);
break;
case 9:printf(“英語”);
break;
case 10:printf(“美術(shù)”);
break;
} }
print2(int m)/*輸出學(xué)生考試科目函數(shù)*/ { int i,j;
printf(“學(xué)生考試科目:nnn”);
for(i=1;i<=m;i++)
{printf(“
【%d】”,i);
course_name(i);
}
printf(“nn”);}
stu_zhongfen(int(*p2)[100],int n,int m)/*計(jì)算學(xué)生總分函數(shù)*/ {
int sum,i,j;
for(i=0;i { sum=0; for(j=0;j sum=sum+*(*(p2+i)+j); *(*(p2+i)+m)=sum; } } input(long *p1,int(*p2)[100],int n,int m)/*輸入學(xué)號(hào)、以及各科成績(jī)函數(shù)*/ { int i,j; for(i=0;i { printf(“n請(qǐng)輸入第%d個(gè)學(xué)生的學(xué)號(hào):”,i+1); scanf(“%ld”,p1+i); for(j=0;j { printf(“n請(qǐng)輸入第%d門課程的成績(jī):”,j+1); scanf(“%d”,*(p2+i)+j); } } printf(“......輸入完畢!n”); } chaxun(long *p1,int(*p2)[100],int n,int m)/*查詢學(xué)生各科成績(jī)、總分、班排名(按總分)函數(shù)*/ { long xuehao; int counter=1,j=0,i,k; while(1) { printf(“n請(qǐng)輸入要查詢的學(xué)生的學(xué)號(hào):”); scanf(“%ld”,&xuehao); for(i=0;i { if(*(p1+i)==xuehao) break; } if(i>=n)printf(“該學(xué)號(hào)不存在!請(qǐng)從新輸入!n”); else break; } stu_zhongfen(p2,n,m); while(j { if(j!=i) { if(*(*(p2+j)+m)>*(*(p2+i)+m)) counter++; j++; } else j++; } printf(“<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”); printf(“n 您要查詢的學(xué)生信息如下:n”); printf(“n”); printf(“ 課程名 分?jǐn)?shù)n”); for(j=0;j { printf(“ ”); course_name(j+1); printf(“ %4dn”,*(*(p2+i)+j)); } printf(“n 總分為:%3dn”,*(*(p2+i)+m)); printf(“ 班級(jí)排名為:%3dn”,counter); printf(“<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”); } stu_average(long *p1,int(*p2)[100],int n,int m)/*計(jì)算每個(gè)學(xué)生的平均分*/ { int i,j,k; float average[100]; stu_zhongfen(p2,n,m); for(i=0;i average[i]=*(*(p2+i)+m)/(float)m; printf(“n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>”); printf(“n每個(gè)學(xué)生的平均分如下n”); printf(“ 學(xué)號(hào) 平均分n”); for(i=0;i printf(“ %4ld %fn”,*(p1+i),average[i]); printf(“n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”); } score_jiangxu(int(*p2)[100],int n,int m)/*把每個(gè)學(xué)生按平均分高到低排名函數(shù)*/ { int i,j,k,temp,a[100],z; float average[100]; stu_zhongfen(p2,n,m); printf(“n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”); for(i=0;i { a[i]=*(*(p2+i)+m); average[i]=*(*(p2+i)+m)/(float)m; } for(i=0;i { for(k=1;k if(a[i] { temp=a[i]; a[i]=a[k]; a[k]=temp; } } printf(“排名 平均分n”); for(i=0;i printf(“(%d) %fn”,i+1,average[i]); printf(“<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>n”); } print1()/*提示函數(shù)*/ { system(“cls”);/*清屏*/ printf(“1.查詢學(xué)生各科成績(jī)、總分、班排名(按總分)n”); printf(“2.計(jì)算每個(gè)學(xué)生的平均分 n”); printf(“3.把每個(gè)學(xué)生按平均分高到低排名n”); printf(“請(qǐng)選擇:”);} main(){ int m,n,i; long *p1,num[100]; int(*p2)[100],score[100][100]; printf(“n請(qǐng)輸入學(xué)生總數(shù):”); scanf(“%d”,&n); printf(“n請(qǐng)輸入課程總數(shù):”); scanf(“%d”,&m); p1=num; p2=score; printf(“n ★★現(xiàn)在請(qǐng)輸入學(xué)號(hào)和成績(jī)★★n”); print2(m); input(p1,p2,n,m); print1(); scanf(“%d”,&i); if(i<0||i>3) printf(“.....輸入錯(cuò)誤!....”); else switch(i) { case 1: chaxun(p1,p2,n,m);break; case 2: stu_average(p1,p2,n,m);break; case 3: score_jiangxu(p2,n,m);break; } } #include //定義學(xué)生結(jié)構(gòu)體,st數(shù)組。 int score[5];float jqave;int rank;}st[27]; struct kecheng { int num;char kcname[20]; //定義課程結(jié)構(gòu)體,course數(shù)組.float xuefen;float biaozhuncha;int youxiu;int lianghao;int zhongdeng;int jige;int bujige; }course[5]; void readdata1(){ int i,j; char str1[100]; FILE *f1; f1=fopen(“c:xinji110213.txt”,“r”); fgets(str1,100,f1);// printf(“%-s”,str1); for(i=0;i<27;i++) { fscanf(f1,“%d%s”,&st[i].num,st[i].name); // printf(“%-4d%-10s”,st[i].num,st[i].name); for(j=0;j<5;j++) { fscanf(f1,“%d”,&st[i].score[j]);// printf(“%-9d”,st[i].score[j]);} // printf(“n”);} fclose(f1);} void readdata2(){ int k; char str2[100]; FILE *f2; f2=fopen(“c:xj02kc.txt”,“r”); fgets(str2,100,f2);// puts(str2); for(k=0;k<5;k++) { fscanf(f2,“%d%s%f”,&course[k].num,course[k].kcname,&course[k].xuefen); // printf(“%-8d%-10s%2.1fn”,course[k].num,course[k].kcname,course[k].xuefen); } fclose(f2);} void jqave(){ int i,j;float s=0,sum=0;for(i=0;i<27;i++) { for(j=0;j<5;j++) { s+=course[j].xuefen; sum+=st[i].score[j]*course[j].xuefen; } st[i].jqave =sum/s; } } void ranking() { int i,j; for(i=0;i<27;i++){ st[i].rank=1; for(j=0;j<27;j++) if(st[i].jqave st[i].rank=st[i].rank+1;} } void paiminghoudechengji(){ int i,j;FILE *fp;fp=fopen(“c:MC110213.txt”,“w”);printf(“ 名次 學(xué)號(hào) 姓名 數(shù)學(xué)分析 高等代數(shù) C語言 大學(xué)物理 大學(xué)藝術(shù) 加權(quán)平均分 n”);fprintf(fp,“ 名次 學(xué)號(hào) 姓名 數(shù)學(xué)分析 高等代數(shù) C語言 大學(xué)物理 大學(xué)藝術(shù) 加權(quán)平均分 n”); for(i=0;i<27;i++) { printf(“%3d%5d%8s”,st[i].rank,st[i].num,st[i].name); fprintf(fp,“%3d%5d%8s”,st[i].rank,st[i].num,st[i].name); for(j=0;j<5;j++) { printf(“%10d”,st[i].score[j]); fprintf(fp,“%10d”,st[i].score[j]); } printf(“%12.2fn”,st[i].jqave); fprintf(fp,“%12.2fn”,st[i].jqave);} fclose(fp);} void xiechengji(){ int j;FILE *fp;fp=fopen(“c:xj1110213.txt”,“w”);fprintf(fp,“ 編號(hào) 課程名稱 課程學(xué)分 標(biāo)準(zhǔn)差 優(yōu)秀 良好 中等 及格 不及格 n”);printf(“ 編號(hào) 課程名稱 課程學(xué)分 標(biāo)準(zhǔn)差 優(yōu)秀 良好 中等 及格 不及格 n”);for(j=0;j<5;j++) { printf(“%3d%15s%10.2f”,course[j].num,course[j].kcname,course[j].xuefen);fprintf(fp,“%3d%15s%10.2f”,course[j].num,course[j].kcname,course[j].xuefen); printf(“%10.1f%8d%8d%8d%8d%6dn”,course[j].biaozhuncha,course[j].youxiu,course[j].lianghao,course[j].zhongdeng,course[j].jige,course[j].bujige); fprintf(fp,“%10.1f%8d%8d%8d%8d%6dn”,course[j].biaozhuncha,course[j].youxiu,course[j].lianghao,course[j].zhongdeng,course[j].jige,course[j].bujige); } fclose(fp);} void pingjunfen(){ int i,j; for(j=0;j<5;j++) { float zongfen=0,pingjunfen=0; for(i=0;i<27;i++) zongfen+=st[i].score[j]; pingjunfen=zongfen/27; } } void biaozhuncha(){ int i,j; for(j=0;j<5;j++){ float zongfen=0,pingjunfen=0,x=0; for(i=0;i<27;i++) zongfen+=st[i].score[j]; pingjunfen=zongfen/27; for(i=0;i<27;i++) x+=(st[i].score[j]-pingjunfen)*(st[i].score[j]-pingjunfen); course[j].biaozhuncha=(float)sqrt((x/27)); } } void count(){ int i,j; for(i=0;i<5;i++) { course[i].youxiu=0,course[i].lianghao=0,course[i].zhongdeng=0,course[i].jige=0,course[i].bujige=0; for(j=0;j<27;j++) { if(st[j].score[i]<60) course[i].bujige++; else if(st[j].score[i]<=69) course[i].jige++; else if(st[j].score[i]<=79) course[i].zhongdeng++; else if(st[j].score[i]<=89) course[i].lianghao++; else course[i].youxiu++; } } } void chengjitiao(){ int i,j;FILE *fp;fp=fopen(“c:cjt110213.txt”,“w”);do { printf(“請(qǐng)輸入你要查詢的編號(hào) 退出請(qǐng)按零”); scanf(“%d”,&i); fprintf(fp,“ 編號(hào) 姓名 數(shù)學(xué)分析 高等代數(shù) C語言 大學(xué)物理 大學(xué)藝術(shù) 加權(quán)平均分 名次n”);printf(“ 編號(hào) 姓名 數(shù)學(xué)分析 高等代數(shù) C語言 大學(xué)物理 大學(xué)藝術(shù) 加權(quán)平均分 名次n”);if(i>=0&&i<=26)fprintf(fp,“%3d%10s”,st[i-1].num,st[i-1].name); printf(“%3d%10s”,st[i-1].num,st[i-1].name);for(j=0;j<5;j++){ printf(“%9d”,st[i-1].score[j]); fprintf(fp,“%9d”,st[i-1].score[j]);} printf(“%12.2f%8dn”,st[i-1].jqave,st[i-1].rank);fprintf(fp,“%12.2f%8dn”,st[i-1].jqave,st[i-1].rank);fclose(fp);} while(i>0&&i<28); } void bujigexueshengmingdan(){ int i,j; printf(“不及格學(xué)生名單如下:n”);printf(“ 學(xué)號(hào) 姓名 不及格課程 分?jǐn)?shù) n”);for(i=0;i<27;i++){ for(j=0;j<5;j++) if(st[i].score[j]<60) {printf(“%3d%12s”,st[i].num,st[i].name); printf(“%15s%8dn”,course[j].kcname,st[i].score[j]); // printf(“ 平均分”); // printf(“%10.2f 名次%8dn”,st[i].jqave,st[i].rank); } } } void youdeng(){ int i,k;printf(“ 優(yōu)等生名單如下n”);printf(“編號(hào) 姓名 數(shù)學(xué)分析 高等代數(shù) C語言 大學(xué)物理 大學(xué)藝術(shù) 加權(quán)平均分 名次n”);for(i=0;i<27;i++){ // for(j=0;j<5;j++) if(st[i].jqave>=90||st[i].rank<=3) { printf(“%2d%10s”,st[i].num,st[i].name); for(k=0;k<5;k++) printf(“%9d”,st[i].score[k]); printf(“%10.2f%8dn”,st[i].jqave,st[i].rank); } else; } } void caidan() { loop: printf(“ &&簡(jiǎn)易教學(xué)管理系統(tǒng)&&n”); printf(“press 1 for 排名后的成績(jī)表 !n”); printf(“press 2 for 各科成績(jī)情況!n”); printf(“press 3 for 成績(jī)條!n”); printf(“press 4 for 不及格學(xué)生名單!n”); printf(“press 5 for 優(yōu)等生名單!n”); printf(“press 0 for 退出n”); int t; scanf(“%d”,&t); switch(t) { case 1: paiminghoudechengji();break; case 2: xiechengji();break; case 3: chengjitiao();break; case 4: bujigexueshengmingdan();break; case 5: youdeng();break; case 0: exit(0); } goto loop; } void main(){ readdata1(); readdata2(); jqave(); ranking(); pingjunfen(); biaozhuncha();count(); caidan();} 提高C語言程序運(yùn)行穩(wěn)定性的方法 一、前言 由于C語言的靈活性,用C語言開發(fā)出來的程序容易造成內(nèi)存泄漏、運(yùn)行異常、運(yùn)行結(jié)果不可預(yù)期等程序質(zhì)量問題,在用C語言開發(fā)程序的過程中,必須高度重視程序質(zhì)量問題,應(yīng)當(dāng)把提高程序穩(wěn)定性的方法加入到項(xiàng)目管理和開發(fā)過程中,最大限度地提高程序的穩(wěn)定性,保證項(xiàng)目的成功開發(fā)。在這里總結(jié)多年來的C語言開發(fā)經(jīng)驗(yàn),拿出來共享以期在這方面能夠得到更多的指教。 二、影響程序穩(wěn)定性的因素 1、內(nèi)存泄漏。造成內(nèi)存泄漏的原因有: 1)、程序有多個(gè)出口,但不能保證在每一個(gè)出口能夠完全釋放掉所有的動(dòng)態(tài)內(nèi)存,如函數(shù)內(nèi)有多個(gè)“return”,但沒有在每一個(gè)“return”前釋放掉在原已申請(qǐng)但必須釋放的動(dòng)態(tài)內(nèi)存; 2)、對(duì)于“struct”數(shù)據(jù)結(jié)構(gòu),沒有完全釋放掉每一個(gè)指向動(dòng)態(tài)內(nèi)存的指針,如只釋放指向“struct”數(shù)據(jù)結(jié)構(gòu)指針沒有釋放“struct”體內(nèi)的指針或某些指針被漏釋放; 3)、對(duì)于用動(dòng)態(tài)內(nèi)存建立的鏈表在釋放時(shí)沒有一個(gè)一個(gè)結(jié)點(diǎn)去釋放; 4)、一段動(dòng)態(tài)內(nèi)存空間原來只被一個(gè)指針引用,但在這個(gè)指針引用另外一段內(nèi)存空間的時(shí)候,該段內(nèi)存沒有被釋放; 5)、對(duì)于在函數(shù)內(nèi)申請(qǐng)但必須在函數(shù)外釋放的動(dòng)態(tài)內(nèi)存,在對(duì)該內(nèi)存使用后忽略該動(dòng)態(tài)內(nèi)存的釋放; 6)、用戶強(qiáng)行退出程序,程序在退出前不能完全釋放掉所有的動(dòng)態(tài)內(nèi)存; 7)、程序運(yùn)行過程中發(fā)生了異常導(dǎo)致動(dòng)態(tài)內(nèi)存未被釋放。 2、程序運(yùn)行發(fā)生異常。造成異常產(chǎn)生的原因有: 1)、釋放指針時(shí)該指針為空或是一個(gè)已被釋放但釋放后未被置空的指針; 2)、對(duì)于C庫中的函數(shù),如字符串操作函數(shù),在調(diào)用該類函數(shù)時(shí)實(shí)參為空指針或者改指針沒有指向可用的內(nèi)存地址空間或者所指向的內(nèi)存空間大小不足以用來實(shí)現(xiàn)當(dāng)前的字符串操作; 3)、對(duì)于指向一個(gè)“struct”數(shù)據(jù)結(jié)構(gòu)的指針,當(dāng)指針為空時(shí)使用“struct”的分體數(shù)據(jù); 4)、數(shù)組或指針發(fā)生越界操作; 5)、指針指向一個(gè)已被釋放但釋放后未被置空的指針,如一個(gè)全局變量的指針,在一個(gè)地方被釋放后,但指針值未被置空,這時(shí)在另一個(gè)地方引用該指針的值時(shí)會(huì)發(fā)生異常; 6)、更改定義為常量的值; 7)、動(dòng)態(tài)申請(qǐng)完一個(gè)內(nèi)存后,未檢查是否申請(qǐng)成功就調(diào)用了該指針; 8)、對(duì)于一塊連續(xù)的內(nèi)存塊和“struct”數(shù)據(jù)結(jié)構(gòu)在第一次使用時(shí)沒有做初始化操作。 9)、在用非ASCII(如中文字符、Unicode)編碼時(shí),若使用char*來申請(qǐng)空間,在用C庫中的字符串操作函數(shù)來操作,會(huì)因無法判斷字符串結(jié)束位置而產(chǎn)生異常。 10)、指針類型強(qiáng)制轉(zhuǎn)換時(shí),當(dāng)強(qiáng)制轉(zhuǎn)換后指針指向的內(nèi)存空間大于原來指針指向的內(nèi)存空間時(shí)可能會(huì)出現(xiàn)異常(取決于堆或棧空間的結(jié)構(gòu)和大?。绨选癐NT12*”強(qiáng)制轉(zhuǎn)換成“INT32*”,應(yīng)當(dāng)盡量避免指針類型的強(qiáng)制轉(zhuǎn)換; 11)、更改了數(shù)據(jù)結(jié)構(gòu),但代碼沒有相應(yīng)更新或整個(gè)工程中相關(guān)文件沒有做相應(yīng)更新; 12)、申請(qǐng)的棧空間或堆空間超出了系統(tǒng)的容量限制; 13)、棧溢出,當(dāng)函數(shù)中定義一個(gè)太大的數(shù)組時(shí)容易造成棧溢出,遞歸調(diào)用太深也容易造成棧舉出; 14)、全局變量使用混亂,造成程序錯(cuò)亂; 16)、內(nèi)存碎片太多,造成內(nèi)存分配失敗而導(dǎo)致程序異常,如建立一個(gè)太長(zhǎng)的鏈表容易造成大量?jī)?nèi)存碎片; 17)、文件操作過于頻繁(特別是寫操作),系統(tǒng)應(yīng)付不過來容易造成程序出現(xiàn)異常,這個(gè)在嵌入式系統(tǒng)中較常見。 三、內(nèi)存泄漏預(yù)防措施 1、在代碼審查時(shí),檢查函數(shù)體內(nèi)的每一個(gè)“return”前是否有沒有釋放必須要釋放的指針; 2、設(shè)計(jì)“struct”數(shù)據(jù)結(jié)構(gòu)時(shí),應(yīng)當(dāng)設(shè)計(jì)相應(yīng)的釋放“struct”指針的函數(shù),并確保所有的“struct”體內(nèi)的指針都被釋放; 3、對(duì)于用動(dòng)態(tài)內(nèi)存建立的鏈表在釋放時(shí)要一個(gè)一個(gè)結(jié)點(diǎn)去釋放, 對(duì)于每一個(gè)鏈表也要有相應(yīng)的鏈表內(nèi)存管理函數(shù),如鏈表的釋放函數(shù); 4、當(dāng)一個(gè)指針變量要指向另一個(gè)動(dòng)態(tài)內(nèi)存地址時(shí)先檢查一下該指針是否有指向另一個(gè)動(dòng)態(tài)內(nèi)存地址,如果有則應(yīng)當(dāng)考慮是否要先釋放掉原先的指向的動(dòng)態(tài)內(nèi)存; 5、在調(diào)用一個(gè)函數(shù)時(shí),對(duì)于函數(shù)的輸出值要確認(rèn)值的內(nèi)存空間是否是在函數(shù)內(nèi)部動(dòng)態(tài)申請(qǐng),如果是則應(yīng)當(dāng)考慮是適當(dāng)?shù)臅r(shí)候把它釋放掉; 6、減少程序的出口的數(shù)目,最好是一個(gè)出口,在出口處理函數(shù)中確保釋放所有的動(dòng)態(tài)內(nèi)存; 7、當(dāng)用戶強(qiáng)行退出時(shí),要考慮在每一個(gè)退出點(diǎn)是否能夠釋放所有的動(dòng)態(tài)內(nèi)存; 8、釋放掉一個(gè)指針?biāo)傅膬?nèi)存空間后,就立即把改指針置為空; 9、少用動(dòng)態(tài)申請(qǐng)內(nèi)存,能用數(shù)組代替的就用數(shù)組的形式; 10、盡量減少全局變量的使用,避免指針指向的混亂; 11、封裝動(dòng)態(tài)內(nèi)存申請(qǐng)和釋放的底層函數(shù),便于檢查內(nèi)存泄漏問題; 12、把內(nèi)存泄漏的檢查方法放進(jìn)設(shè)計(jì)代碼中,便于發(fā)現(xiàn)內(nèi)存泄漏。 四、程序運(yùn)行異常預(yù)防措施 1、在釋放指針前先檢查指針是否為空; 2、當(dāng)把指針作為參數(shù)傳入C庫函數(shù)中的參數(shù)時(shí),先檢查指針是否為空; 3、在函數(shù)體內(nèi),當(dāng)要調(diào)用指針參數(shù)時(shí),先判斷該指針是否為空; 4、當(dāng)要調(diào)用“struct”指針數(shù)據(jù)結(jié)構(gòu)中的分體時(shí)要先判斷該指針是否為空; 5、當(dāng)做指針移動(dòng)操作時(shí)要考慮指針是否會(huì)發(fā)生越界; 6、當(dāng)一個(gè)函數(shù)體內(nèi)可能會(huì)改變參數(shù)中的值時(shí),要避免傳入常量形式的值,在設(shè)計(jì)函數(shù)時(shí)要盡量避免試圖去改變參數(shù)中的值; 7、動(dòng)態(tài)申請(qǐng)完一個(gè)內(nèi)存后要先檢查是否申請(qǐng)成功; 8、對(duì)于一塊連續(xù)的內(nèi)存塊和“struct”數(shù)據(jù)結(jié)構(gòu)在第一次使用時(shí)要做初始化操作,如申請(qǐng)完內(nèi)存后,記得用memset清空內(nèi)存; 9、備案所有的全局變量,考慮全局變量對(duì)程序可能產(chǎn)生的影響,盡量少用全局變量。對(duì)于全局變量的定義最好使用“static”來申明,不讓其它模塊直接訪問該全局變量,并且設(shè)計(jì)好相應(yīng)的操作該全局變量的方法函數(shù),在定義全局變量時(shí)要充分考慮好全局變量的初始化方法和程序結(jié)束時(shí)的處理方法,對(duì)于整個(gè)工程中的全局變量要進(jìn)行登記管理,登記內(nèi)容包括變量名、類型名、定義位置、使用范圍、使用目的、初始化方法、程序結(jié)束時(shí)的處理方法及其它注意事項(xiàng)。 10、在用非ASCII(如中文字符、Unicode)編碼時(shí),要使用unsigned char*來申請(qǐng)空間,并記住申請(qǐng)空間大小,不要用C庫中的字符串操作函數(shù)來操作。 11、記得申請(qǐng)足夠的內(nèi)存,比如,儲(chǔ)存年份應(yīng)該是5個(gè)空間而不是4個(gè),記得保留‘
第三篇:C語言課程設(shè)計(jì)程序
第四篇:C語言程序穩(wěn)定性