當前位置:首頁 » 編程語言 » c語言管理系統心得分析
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言管理系統心得分析

發布時間: 2022-10-21 08:40:50

c語言實訓心得

通過這次C語言實訓,提高了我掌握和利用C語言進行程設計的能力, 而且進一步理解和運用結構化程設計的思想和方法。初步掌握了開發一個小型實用系統的基本方法。學會了調試一個較長程序的基本方法。學會了利用流程圖或N-S圖表示演算法。掌握了書寫程設計開發文檔的能力.為以後的實訓打下堅實的基礎。

Ⅱ C語言實訓心得

源程序:

#include "stdio.h" /*I/O函數*/

#include "stdlib.h" /*其它說明*/

#include "string.h" /*字元串函數*/

#include "conio.h" /*屏幕操作函數*/

#include "mem.h" /*內存操作函數*/

#include "ctype.h" /*字元操作函數*/

#include "alloc.h" /*動態地址分配函數*/

#include "dos.h"

#define N 4 /*定義常數*/

typedef struct z1 /*定義數據結構*/

{

char no[12];

char name[20];

int score[N];

float sum;

float average;

int order;

struct z1 *next;

}STUDENT;

/*以下是函數原型*/

STUDENT *init(); /*初始化函數*/

STUDENT *create(); /*創建鏈表*/

STUDENT *delete(STUDENT *h); /*刪除記錄*/

void print(STUDENT *h); /* 顯示所有記錄*/

void lookup(STUDENT *h); /*查找*/

void save(STUDENT *h); /*保存*/

STUDENT *load(); /*讀入記錄*/

void computer(STUDENT *h); /*計算總分和均分*/

STUDENT *Modify(STUDENT *h); /*修改記錄*/

void append(); /*追加記錄*/

STUDENT *sort(STUDENT *h); /*按總分排序*/

STUDENT *index(STUDENT *h); /*按學號排序*/

int menu_select(); /*菜單函數*/

/******主函數開始*******/

main()

{

int i;

STUDENT *head; /*鏈表定義頭指針*/

printf("\n\n\n\n\n\n\n\n\n");

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

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

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

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

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

printf("\n");

printf("\n");

printf("\n");

sleep(2);

head=init(); /*初始化鏈表*/

clrscr(); /*清屏*/

for(;;) /*無限循環*/

{

switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/

{ /*值不同,執行的函數不同,break 不能省略*/

case 0:head=init();break; /*執行初始化*/

case 1:head=create();break; /*創建鏈表*/

case 2:print(head);break; /*顯示全部記錄*/

case 3:head=delete(head);break; /*刪除記錄*/

case 4:lookup(head);break; /*按名字查找記錄*/

case 5:save(head);break; /*保存文件*/

case 6:head=load(); break; /*讀文件*/

case 7:computer(head);break; /*計算總分和均分*/

case 8:head=Modify(head); break; /*修改記錄,一般會插在表尾*/

case 9:head=sort(head);break; /*按部分排序*/

case 10:append();break; /*追加記錄*/

case 11:head=index(head);break; /*按學號排序*/

case 12: exit(0); /*如菜單返回值為14程序結束*/

}

}

}

/*菜單函數,返回值為整數*/

menu_select()

{

char *menu[]={"***************MENU***************", /*定義菜單字元串數組*/

" 00. init list", /*初始化*/

" 01. Enter list", /*輸入記錄*/

" 02. print list ", /*顯示單鏈表中所有記錄*/

" 03. Delete a record from list", /*從表中刪除記錄*/

" 04. Search record on name", /*按照姓名查找記錄*/

" 05. Save the file", /*將單鏈表中記錄保存到文件中*/

" 06. Load the file", /*從文件中讀入記錄*/

" 07. compute the score", /*計算所有學生的總分和均分*/

" 08. Modify an information ", /*修改某學號的信息*/

" 09. sort to make new file", /*排序*/

" 10. append record to file", /*追加記錄到文件中*/

" 11. index on nomber", /*按學號排序*/

" 12. Quit"}; /*退出*/

char s[3]; /*以字元形式保存選擇號*/

int c,i; /*定義整形變數*/

gotoxy(1,1); /*移動游標*/

textcolor(YELLOW); /*設置文本顯示顏色為黃色*/

textbackground(BLUE); /*設置背景顏色為藍色*/

gotoxy(10,2); /*移動游標*/

putch(0xc9); /*輸出左上角邊框┏*/

for(i=1;i<44;i++)

putch(0xcd); /*輸出上邊框水平線*/

putch(0xbb); /*輸出右上角邊框 ┓*/

for(i=3;i<20;i++)

{

gotoxy(10,i);putch(0xba); /*輸出左垂直線*/

gotoxy(54,i);putch(0xba);

} /*輸出右垂直線*/

gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/

for(i=1;i<44;i++)

putch(0xcd); /*輸出下邊框水平線*/

putch(0xbc); /*輸出右下角邊框┛*/

window(11,3,53,19); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/

clrscr(); /*清屏*/

for(i=0;i<16;i++) /*輸出主菜單數組*/

{

gotoxy(10,i+1);

cprintf("%s",menu[i]);

}

textbackground(BLACK); /*設置背景顏色為黑色*/

window(1,1,80,25); /*恢復原窗口大小*/

gotoxy(10,21); /*移動游標*/

do{printf("\n make by wenwei");<br><br> printf("\n Enter you choice(0~13):"); /*在菜單窗口外顯示提示信息*/<br><br> scanf("%s",s); /*輸入選擇項*/<br><br> c=atoi(s); /*將輸入的字元串轉化為整形數*/<br><br> }while(c<0||c>14); /*選擇項不在0~14之間重輸*/

return c; /*返回選擇項,主程序根據該數調用相應的函數*/

}

STUDENT *init()

{ clrscr();

return NULL;

}

/*創建鏈表*/

STUDENT *create()

{

int i; int s;

STUDENT *h=NULL,*info; /* STUDENT指向結構體的指針*/

clrscr();

for(;;)

{

info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/

if(!info) /*如果指針info為空*/

{

printf("\nout of memory"); /*輸出內存溢出*/

return NULL; /*返回空指針*/

}

inputs("enter no:",info->no,11); /*輸入學號並校驗*/

if(info->no[0]=='@') { clrscr();break; } /*如果學號首字元為@則結束輸入,清屏後返回*/

inputs("enter name:",info->name,15); /*輸入姓名,並進行校驗*/

printf("please input %d score \n",N); /*提示開始輸入成績*/

s=0; /*計算每個學生的總分,初值為0*/

for(i=0;i<N;i++) /*N門課程循環N次*/

{

do{

printf("score%d:",i+1); /*提示輸入第幾門課程*/

scanf("%d",&info->score[i]); /*輸入成績*/

if(info->score[i]>100||info->score[i]<0) /*確保成績在0~100之間*/

printf("bad data,repeat input\n"); /*出錯提示信息*/

}while(info->score[i]>100||info->score[i]<0);

s=s+info->score[i]; /*累加各門課程成績*/

}

info->sum=s; /*將總分保存*/

info->average=(float)s/N; /*求出平均值*/

info->order=0; /*未排序前此值為0*/

info->next=h; /*將頭結點做為新輸入結點的後繼結點*/

h=info; /*新輸入結點為新的頭結點*/

clrscr();

}

return(h); /*返回頭指針*/

}

/*輸入字元串,並進行長度驗證*/

inputs(char *prompt, char *s, int count)

{

char p[255];

do{

printf(prompt); /*顯示提示信息*/

scanf("%s",p); /*輸入字元串*/

if(strlen(p)>count)printf("\n too long! \n"); /*進行長度校驗,超過count值重輸入*/

}while(strlen(p)>count);

strcpy(s,p); /*將輸入的字元串拷貝到字元串s中*/

}

/*輸出鏈表中結點信息*/

void print(STUDENT *h)

{

int i=0; /* 統計記錄條數*/

STUDENT *p; /*移動指針*/

clrscr(); /*清屏*/

p=h; /*初值為頭指針*/

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

printf("|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

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

while(p!=NULL) /*只要p不是尾結點,就輸出記錄*/

{

i++;

printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order);

p=p->next;

}

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

getch(); /*輸入任一鍵返回主菜單*/

clrscr(); /*清屏*/

}

/*刪除記錄*/

STUDENT *delete(STUDENT *h)

{

STUDENT *p,*q; /*p為查找到要刪除的結點指針,q為其前驅指針*/

char s[12]; /*存放學號*/

char *pass="wenwei28";

char a[20],b=NULL;

int i=0;

clrscr();

printf("Input your password:");

while((i<20)&&(b!='\r'))

{ b=getch(); /*無回顯輸入*/

if(b==8)

{ if(i>0)

{a[--i]=NULL;<br><br> putchar(8); /*退格鍵*/<br><br> putchar(' '); /*以空格代替*/<br><br> putchar(8);<br><br> }

else putchar(7); /*沒有任何字元的退格,響鈴警告*/

}

else if(b!='\r')

{ a[i++]=b; /*只要不是退格和回車就接受*/

putchar('*');

}

else

{a[i]=NULL; break; /*密碼輸入完了,記得加個NULL到後面*/<br><br> }

}

if(strcmp(a,pass)!=0)

{clrscr();<br><br> printf("Password is mistake Tow seconds to return!");<br><br> sleep(2);clrscr();return h;<br><br>}

else {printf("Password is OK! Welcome to come!"); sleep(3);<br><br>}

clrscr(); /*清屏*/

printf("please deleted no\n"); /*顯示提示信息*/

scanf("%s",s); /*輸入要刪除記錄的學號*/

q=p=h; /*給q和p賦初值頭指針*/

while(strcmp(p->no,s)&&p!=NULL) /*當記錄的學號不是要找的,或指針不為空時*/

{

q=p; /*將p指針值賦給q作為p的前驅指針*/

p=p->next; /*將p指針指向下一條記錄*/

}

if(p==NULL) /*如果p為空,說明鏈表中沒有該結點*/

{ printf("\nlist no %s student\n",s);sleep(2);clrscr();return h;}

else /*p不為空,顯示找到的記錄信息*/

{

printf("*********************************have found********************************\n");

printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");

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

printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\n", p->no,

p->name,p->score[0],p->score[1],p->score[ q=p; /*保存當前結點的指針,作為下一結點的前驅*/

p=p->next; /*指針後移,新讀入數據鏈到當前表尾*/

}

q->next=NULL; /*最後一個結點的後繼指針為空*/

fclose(fp); /*關閉文件*/

printf("---You have success read data from file!!!---\n");

getch(); /*按任意鍵返回主菜單*/

clrscr();

return h; /*返回頭指針*/

}

/*成績統計*/

void computer(STUDENT *h)

{

STUDENT *p,*t,*q; /*定義移動指針*/

float saverage[N]={0}; /*均分初值為0*/

int i;

clrscr();

for (i=0;i<N;i++)

{ int n=0,j=0; /*保存記錄條數初值為0*/

long s=0; /*總分初值為0*/

p=h; /*從頭指針開始*/

while(p!=NULL) /*當p不為空時處理*/

{

s+=p->score[i]; /*累加總分*/

j++; /*統計記錄條數*/

p=p->next; /*指針後移*/
h; /*返回頭指針 就知道這么多了,我不太懂咯~~~~心得就不來寫了,自己寫哈!~!~!

Ⅲ C語言心得體會

課程設計是培養學生綜合運用所學知識,發現,提出,分析和解決實際問題,鍛煉實踐能力的重要環節,是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發展的日新日異,單片機已經成為當今計算機應用中空前活躍的領域, 在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握單片機的開發技術是十分重要的。
回顧起此次單片機課程設計,至今我仍感慨頗多,的確,從選題到定稿,從理論到實踐,在整整兩星期的日子裡,可以說得是苦多於甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說三極體PNP管腳不懂怎麼放置,不懂分得二極體的正負極,對單片機匯編語言掌握得不好……通過這次課程設計之後,一定把以前所學過的知識重新溫故。
這次課程設計終於順利完成了,在設計中遇到了很多編程問題,最後在梁強老師的辛勤指導下,終於游逆而解。同時,在梁強老師的身上我學得到很多實用的知識,在次我表示感謝!同時,對給過我幫助的所有同學和各位指導老師再次表示忠心的感謝!

Ⅳ c語言實訓心得3000字

你可以這樣寫:
下面是我的實訓心得:

一、明確學習目的
學習編程對大多數IT業人員來說都是非常有用的。學編程,做一名編程人員,從個人角度講,可以解決在軟體使用中所遇到的問題,改進現有軟體,可以為自己找到一份理想的工作添加重要得砝碼,有利於在求職道路上謀得一個好的職位;從國家的角度,可以為中國的軟體產業做出應有的貢獻,一名優秀的程序員永遠是被爭奪的對象。學習編程還能鍛煉思維,使我們的邏輯思維更加嚴密;能夠不斷享受到創新的樂趣,將一直有機會走在高科技的前沿,因為程序設計本身是一種創造性的工作。知識經濟時代給我們帶來了無限的機會,要想真正掌握計算機技術,並在IT行業里干出一番事業來,有所作為,具有一定的編程能力是一個基本條件和要求。

二、打好基礎
學編程要具備一定的基礎,總結之有以下幾方面:
1、數學基礎 從計算機發展和應用的歷史來看計算機的數學模型和體系結構等都是有數學家提出的,最早的計算機也是為數值計算而設計的。因此,要學好計算機就要有一定的數學基礎,出學者有高中水平就差不多了。
2、邏輯思維能力的培養學程序設計要有一定的邏輯思維能力,「邏思力」的培養要長時間的實踐鍛煉。要想成為一名優秀的程序員,最重要的是掌握編程思想。要做到這一點必須在反復的實踐、觀察、分析、比較、總結中逐漸地積累。因此在學習編程過程中,我們不必等到什麼都完全明白了才去動手實踐,只要明白了大概,就要敢於自己動手去體驗。誰都有第一次。有些問題只有通過實踐後才能明白,也只有實踐才能把老師和書上的知識變成自己的,高手都是這樣成材的。

三、注意理解一些重要概念
一本程序設計的書看到的無非就是變數、函數、條件語句、循環語句等概念,但要真正能進行編程應用,需要深入理解這些概念,在理解的基礎上應用,不要只簡單地學習語法、結構,而要吃透針這些語法、結構的應用例子,做到舉一反三,觸類旁通。

四、掌握編程思想
學習一門語言或開發工具,語法結構、功能調用是次要的,最主要是學習它的思想。關鍵是學一種思想,有了思想,那麼我們就可以觸類旁通。

五、多實踐、多交流
掌握編程思想必須在編程實際工作中去實踐和體會。編程起步階段要經常自己動手設計程序,具體設計時不要拘泥於固定的思維方式,遇到問題要多想幾種解決的方案。這就要多交流,各人的思維方式不同、角度各異,各有高招,通過交流可不斷吸收別人的長處,豐富編程實踐,幫助自己提高水平。親自動手進行程序設計是創造性思維應用的體現,也是培養邏輯思維的好方法。

六、養成良好的編程習慣
編程入門不難,但入門後不斷學習是十分重要的,相對來說較為漫長。在此期間要注意養成一些良好的編程習慣。編程風格的好壞很大程度影響程序質量。良好的編程風格可以使程序結構清晰合理,且使程序代碼便於維護。如代碼的縮進編排、變數命令規則的一致性、代碼的注釋等。

七、上網學編程
在網上可以學到很多不同的編程思想、方法、經驗和技巧,有大量的工具和作品及相關的輔導材料供下載。

八、加強計算機理論知識的再學習
學編程是符合「理論→實踐→再理論→再實踐」的一個認識過程。一開始要具有一定的計算機理論基礎知識,包括編程所需的數學基礎知識,具備了入門的條件,就可以開始編程的實踐,從實踐中可以發現問題需要加強計算機理論知識的再學習。程序人人皆可編,但當你發現編到一定程度很難再提高的時候,就要回頭來學習一些計算機科學和數學基礎理論。學過之後,很多以前遇到的問題都會迎刃而解,使人有豁然開朗之感。因此在學習編程的過程中要不斷地針對應用中的困惑和問題深入學習數據結構、演算法、計算機原理、編譯原理、操作系統原理、軟體工程等計算機科學的理論基礎和數理邏輯、代數系統、圖論、離散數學等數學理論基礎知識。這樣經過不斷的學習,再努力地實踐,編程水平一定會不斷提高到一個新高度。

Ⅳ 學習C語言心得

學習C語言,我自己認為我還學得不錯,但是其實比起THQ來說那又算什麼喲!但是我並沒有灰心,還是堅持於自己的執著...
其實學習任何東西都要有一種堅持不懈精神;其次,要對他培養出一種興趣愛好.(興趣是最大的老師)
我就是先了解它是個什麼,在了解它能做什麼,能做出什麼好的什麼...(這樣可以鉤起一種好奇的心理)
樓上那位說得對,這些東西要多寫代碼,也就是要多實踐.
還有,我建議多到書店裡去看看相關的書籍(因為我就經常新華書店看書,一看就是幾個小時.)

Ⅵ C語言實訓心得

在初學C語言的一個學期後,我們進行了C語言實訓階段,嘗試自己編寫一個比較復雜的程序系統。在為期兩周的時間中,我們同組的同學共同的感受是:C語言實訓和平時上課所接觸的程序是有很大不同的,所經受的考驗和克服的困難是平時所無法比擬的。好在同組的搭檔們精誠合作,分工明確,有問題共同解決,攻克了C語言實訓的復雜程序。在這里,我作為其中的參與者,自然感觸良多。

剛開始接觸到C的時候,我已經學過一些有關VB的內容,這個在演算法和思維上稍微有點幫助。回想本學期的學習,首先,最基本的,是C的數據格式,讓我們知道整數,浮點數以及字元常量在C中的運用。然後,在學會了數據轉化,以及熟練的可以對各種數據處理之後,我開始進行有關數據結構,像數組,結構體等的學習,因為有的東西從現有的知識來看都是非常簡單的,還沒有聯繫到指針等等一些復雜的概念。可是,僅僅學會這些是遠遠不夠的,C語言中,還有很多更加經典、重要、實用的知識。

說說函數。雖說很多程序語言都有函數這一內容,但我覺得C語言的函數是最有魅力的了。學習函數的方法是比較簡單的,只有兩個字「牢記」,即:牢記函數的功能,牢記函數的用途以及如何輸入輸出。函數從本質上講是一段通用程序,用它可以幫助我們節約很多編程的時間,學習C語言的「高人」都說,一個聰明的編程者在編寫程序前往往總是先找自己所編寫的程序中有多少是可以用函數來代替的。比如,大家可以作一個比較字元串的實驗,用C語言中的strcmp()函數只要一句話,而自己編寫的話,30句都很難實現,可想而知函數的實用和快捷。在我們C語言實訓的代碼中,函數更是得到了充分的應用,可以說,實訓題目的復雜代碼,就是用無數個函數的調用和嵌套積累出來的。

要注意的是,有的同學剛剛開始的時候,都是被一些大的程序激勵的,所以當開始的時候看到繁瑣的數據轉化和簡單的演算法,都覺得很無聊,都想自己做幾個自己滿意的程序來看看,雖然這種想法很好,但是,我們說,沒有基礎,純粹是搬照一些現成設計方法,是不足取的。要知道,程序設計講究的是個人的思維的,假如剛開始就被一些現成的思想束縛住,以後就會覺得很無趣。
我們知道,指針其實是C語言的靈魂,許多的數據結構在我們學到這里之前都可以說是精通了。所以我們的任務就是,讓數據結構在指針中運行。當然,剛剛開始接觸到這些新的東西,是一件非常痛苦的事情,所以我們一定要用非常形象的思維去看待指針,不能太固化。所以,新的東西,比如結構體在指針中的表現方法,數組及多維數組在結構體中的運用,都一點一點的加了進來,同時豐滿了我們對原來C的數據機構,數據表示的理解。當我們完成了這三步的學習,我們已經可以自豪的說,我們的基礎都扎實了,可以進一步的學習有關演算法,設計概念等等深層次的東西了。
但是,指針,結構體,這些太抽象的東西,在學習C語言的時候我們就有點「似懂非懂」,可是在眼下的C語言實訓中,像這么重要的C語言知識,一定要達到能熟練掌握,實際運用的程度。在實訓的大程序中,結構體在指針中的表現方法,數組及在結構體中的運用等具體的技術環節,都得到了體現,不會指針,我們的工作是沒法展開的。所以,在實訓期間,大家在鞏固基本知識的基礎上,逐塊攻克實訓課題,克服了困難,自信心得到了提高。

最後,談談我們組的程序軟體。商店商品管理系統,是一個比較利於應用,解決實際問題,方便實際管理的程序。設計代碼比較復雜,結構比較嚴謹。在程序編寫的1周左右的時間里,組員們遇到了上述的困難,包括程序設計構思,甚至是指針等某些知識點的欠缺,導致的工作中出現的困難。但是,當大家一起團結協作,解決了這些困難之後,發現自己也可以編寫復雜的、應用性的程序了,更發現自己對C語言這門學科的興趣也提高了。

當然,我們編寫的商店商品管理系統,還存在很多疏漏和不合理之處。比如,程序復雜冗長,如果時間充裕,我們將在不改變程序運行結果的基礎上,簡化程序,使每一句更加精闢,總體上更加簡化。另外,在程序的外觀上,我們由於時間問題,沒有做更多的修飾,運行起來顯得比較死板、枯燥乏味。如果增添一些色彩和其他效果,我們的程序也許會更加完美。

以上就是我的C語言實訓個人總結

Ⅶ C語言學完後的心得體會

1.編程模型

所有計算機均由兩種元素組成:代碼和數據.精確的說,有些程序是圍繞著"什麼正在發生"而編寫,有些則是圍繞"誰正在受影響"而編寫的.

第一種編程方式叫做"面向過程的模型",按這種模型編寫的程序以一系列的線性步驟(代碼)為特徵,可被理解為作用於數據的代碼.如 C 等過程化語言.

第二種編程方式叫做"面向對象的模型",按這種模型編寫的程序圍繞著程序的數據(對象)和針對該對象而嚴格定義的介面來組織程序,它的特點是數據控制代碼的訪問.通過把控制權轉移到數據上,面向對象的模型在組織方式上有:抽象,封裝,繼承和多態的好處.

2.抽象

面向對象程序設計的基本要素是抽象,程序員通過抽象來管理復雜性.

管理抽象的有效方法是使用層次式的分類特性,這種方法允許用戶根據物理含義分解一個復雜的系統,把它劃分成更容易管理的塊.例如,一個計算機系統是一個獨立的對象.而在計算機系統內部由幾個子系統組成:顯示器,鍵盤,硬碟驅動器,DVD-ROM,軟盤,音響等,這些子系統每個又由專門的部件組成.關鍵是需要使用層次抽象來管理計算機系統(或其他任何復雜系統)的復雜性.

面向對象程序設計的本質:這些抽象的對象可以被看作具體的實體,這些實體對用來告訴我們作什麼的消息進行響應.

/* (我的理解)

*計算機是一個實體,我要輸入字元,顯示器顯示出來,那麼

*計算機(對象).輸入(鍵盤屬性).顯示(顯示方法)

*使用分層來引用,操作.而不用管計算機內部如何處理.

*只要有計算機對象,它就能響應我的操作,而我敲鍵盤,

*計算機對象就把這個消息傳給屏幕,屏幕顯示.

*/

計算機對象包含了它所有的屬性,以及操作,這就是面向對象程序設計的三大原則之一:封裝.

3.封裝

封裝是一種把代碼和代碼所操作的數據捆綁在一起,使這兩者不受外界干擾和誤用的機制.封裝可被理解為一種用做保護的包裝器,以防止代碼和數據被包裝器外部所定義的其他代碼任意訪問.對包裝器內部代碼與數據的訪問通過一個明確定義的介面來控制.封裝代碼的好處是每個人都知道怎樣訪問代碼,進而無需考慮實現細節就能直接使用它,同時不用擔心不可預料的副作用.

在JAVA中,最基本的封裝單元是類,一個類定義著將由一組對象所共享的行為(數據和代碼).一個類的每個對象均包含它所定義的結構與行為,這些對象就好象是一個模子鑄造出來的.所以對象也叫做類的實例.

在定義一個類時,需要指定構成該類的代碼與數據.特別是,類所定義的對象叫做成員變數或實例變數.操作數據的代碼叫做成員方法.方法定義怎樣使用成員變數,這意味著類的行為和介面要由操作實例數據的方法來定義.

由於類的用途是封裝復雜性,所以類的內部有隱藏實現復雜性的機制.所以JAVA中提供了私有和公有的訪問模式,類的公有介面代表外部的用戶應該知道或可以知道的每件東西.私有的方法數據只能通過該類的成員代碼來訪問.這就可以確保不會發生不希望的事情.

4.繼承

繼承是指一個對象從另一個對象中獲得屬性的過程.是面向對象程序設計的三大原則之二,它支持按層次分類的概念.例如,波斯貓是貓的一種,貓又是哺乳動物的一種,哺乳動物又是動物的一種.如果不使用層次的概念,每個對象需要明確定義各自的全部特徵.通過層次分類方式,一個對象只需要在它的類中定義是它成為唯一的 各個屬性,然後從父類中繼承它的通用屬性.因此,正是由於繼承機制,才使得一個對象可以成為一個通用類的一個特定實例.一個深度繼承的子類將繼承它在類層次中的每個祖先的所有屬性.

繼承與封裝可以互相作用.如果一個給定的類封裝了某些屬性,它的任何子類將會含有同樣得屬性,另加各個子類所有得屬性.這是面向對象程序在復雜性上呈線性而非幾何增長的一個重要概念.新的子類繼承其所有祖先的所有屬性.子類和系統中的其他代碼不會產生無法預料的交互作用.

5.多態

多態是指一個方法只能有一個名稱,但可以有許多形態,也就是程序中可以定義多個同名的方法,用"一個介面,多個方法"來描述.可以通過方法的參數和類型引用.

6.封裝,繼承,多態的組合使用

在由封裝,繼承,多態所組成的環境中,程序員可以編寫出比面向過程模型更健壯,更具擴展性的程序.經過仔細設計的類層次結構是重用代碼的基礎.封裝能讓程序員不必修改公有介面的代碼即可實現程序的移植.多態能使程序員開發出簡潔,易懂,易修改的代碼.例如:汽車

從繼承的角度看,駕駛員都依靠繼承性來駕駛不同類型(子類)的汽車,無論這輛車是轎車還是卡車,是賓士牌還是菲亞特牌,駕駛員都能找到方向盤,手剎,換檔器.經過一段時間駕駛後,都能知道手動檔與自動檔之間的差別,因為他們實際上都知道這兩者的共同超類:傳動裝置.

從封裝的角度看,駕駛員總是看到封裝好的特性.剎車隱藏了許多復雜性,其外觀如此簡單,用腳就能操作它.發動機,手剎,輪胎大小的實現對與剎車類的定義沒有影響.

從多態的角度看,剎車系統有正鎖反鎖之分,駕駛員只用腳踩剎車停車,同樣的介面可以用來控制若干種不同的實現(正鎖或反鎖).

這樣各個獨立的構件才被轉換為汽車這個對象的.同樣,通過使用面向對象的設計原則,程序員可以把一個復雜程序的各個構件組合在一起,形成一個一致,健壯,可維護的程序

Ⅷ 請教學習c語言的心得

C語言學習心得

前言

指針,一直被認為是C語言中的精華。只有掌握了指針,你才能說你學會了C語言。
相當初,我是把指針這一章足足看了三遍才算是「學了這一章」下面的文字是阿容
寫的,對我學習C語言的指針幫助很大。好東西不敢獨享,今天把它貼出來,希望
大家也會有所幫助。

第一章。指針的概念

指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。

要搞清一個指針需要搞清指針的四方面的內容:指針的類型,指針所指向的
類型,指針的值或者叫指針所指向的內存區,還有指針本身所佔據的內存區。讓
我們分別說明。
先聲明幾個指針放著做例子:
例一:
(1)int *ptr;
(2)char *ptr;
(3)int **ptr;
(4)int (*ptr)[3];
(5)int *(*ptr)[4];
如果看不懂後幾個例子的話,請參閱我前段時間貼出的文章<<如何理解c和c
++的復雜類型聲明>>。

1。 指針的類型。
從語法的角度看,你只要把指針聲明語句里的指針名字去掉,剩下的部分就
是這個指針的類型。這是指針本身所具有的類型。讓我們看看例一中各個指針的
類型:
(1)int *ptr; //指針的類型是int *
(2)char *ptr; //指針的類型是char *
(3)int **ptr; //指針的類型是 int **
(4)int (*ptr)[3]; //指針的類型是 int(*)[3]
(5)int *(*ptr)[4]; //指針的類型是 int *(*)[4]
怎麼樣?找出指針的類型的方法是不是很簡單?

2。指針所指向的類型。
當你通過指針來訪問指針所指向的內存區時,指針所指向的類型決定了編譯
器將把那片內存區里的內容當做什麼來看待。
從語法上看,你只須把指針聲明語句中的指針名字和名字左邊的指針聲明符
*去掉,剩下的就是指針所指向的類型。例如:
(1)int *ptr; //指針所指向的類型是int
(2)char *ptr; //指針所指向的的類型是char
(3)int **ptr; //指針所指向的的類型是 int *
(4)int (*ptr)[3]; //指針所指向的的類型是 int()[3]
(5)int *(*ptr)[4]; //指針所指向的的類型是 int *()[4]
在指針的算術運算中,指針所指向的類型有很大的作用。
指針的類型(即指針本身的類型)和指針所指向的類型是兩個概念。當你對C越
來越熟悉時,你會發現,把與指針攪和在一起的「類型」這個概念分成「指針的
類型」和「指針所指向的類型」兩個概念,是精通指針的關鍵點之一。我看了不
少書,發現有些寫得差的書中,就把指針的這兩個概念攪在一起了,所以看起書
來前後矛盾,越看越糊塗。

3。 指針的值,或者叫指針所指向的內存區或地址。
指針的值是指針本身存儲的數值,這個值將被編譯器當作一個地址,而不是
一個一般的數值。在32位程序里,所有類型的指針的值都是一個32位整數,因為
32位程序里內存地址全都是32位長。
指針所指向的內存區就是從指針的值所代表的那個內存地址開始,長度為si
zeof(指針所指向的類型)的一片內存區。以後,我們說一個指針的值是XX,就相
當於說該指針指向了以XX為首地址的一片內存區域;我們說一個指針指向了某塊
內存區域,就相當於說該指針的值是這塊內存區域的首地址。
指針所指向的內存區和指針所指向的類型是兩個完全不同的概念。在例一中
,指針所指向的類型已經有了,但由於指針還未初始化,所以它所指向的內存區
是不存在的,或者說是無意義的。
以後,每遇到一個指針,都應該問問:這個指針的類型是什麼?指針指向的
類型是什麼?該指針指向了哪裡?
4。 指針本身所佔據的內存區。
指針本身佔了多大的內存?你只要用函數sizeof(指針的類型)測一下就知道
了。在32位平台里,指針本身占據了4個位元組的長度。
指針本身占據的內存這個概念在判斷一個指針表達式是否是左值時很有

============================

7月11日

c語言心得一

2.數據輸出

c語言不提供輸入輸出語句,輸入輸出操作是由c的庫函數完成。但要包含頭文件stdio.h。
putchar( ) 向終端輸出一個字元
printf( )的格式字元:
① d格式符 用來輸出十進制整數
%d 按整型數據的實際長度輸出
%md 使輸出長度為m,如果數據長度小於m,則左補空格,如果大於m,則輸出實際長度
%ld 輸出長整型數據
② o格式符 以八進制形式輸出整數
③ x格式符 以十六進制形式輸出整數
④ u格式符 用來輸出unsigned型數據,以十進制形式輸出
⑤ c格式符 用來輸出一個字元
⑥ s格式符 輸出一個字元串
%s 輸出實際長度字元串
%ms 輸出的串佔m列,如果串長度小於m,左補空格,如果大於m,實際輸出
%-ms輸出的串佔m列,如果串長度小於m,右補空格,
%m.ns 輸出佔m列,但只取字元串中左端n個字元並靠右對齊
%-m.ns m、n含義同上,靠左對齊,如果n>m,則m自動取n值
⑦ f格式符 以小數形式輸出實數
%f 整數部分全部輸出,小數部分輸出6位
%m.nf 輸出數據共佔m列,其中有n位小數。如果數值長度小於m,左補空格
%-m.nf 同上,右補空格
⑧ e格式符 以指數形式輸出實數
%e 系統指定6位小數,5位指數(e+002 )
⑨ g格式符 輸出實數,根據數值大小,自動選f格式或e格式

3.數據輸入

getchar( ) 從終端輸入一個字元
scanf( 格式控制,地址列表) 標准C scanf中不使用%u,對於unsigned型數據,以%d或%o或%x輸入。%後的*,用來跳過它相應的數據。輸入數據時不能規定精度如scanf( "%7.2f", &a );是不合法的。

部分字元串處理函數
puts(字元數組) 將一個字元串輸出到終端。
gets(字元數組) 從終端輸入一個字元串到字元數組,並且得到一個函數值,為該字元數組的首地址
strcat(字元數組1,字元數組2) 連接兩個字元數組中的字元串,數組1必須足夠大。
Strcpy(字元數組1,字元串2) 將字元串2拷貝到字元數組1中。
Strcmp(字元串1,字元串2) 比較字元串,相等返回0,字元串1>字元串2,返回正數,小於返回負數。
Strlen(字元數組) 求字元串長度。
Strlwr( 字元串) 將字元串中的大寫字母轉換成小寫
Strupr( 字元串) 將字元串中的小寫字母轉換成大寫
以上是一些比較常用的字元串處理函數。

動態存儲變數與靜態存儲變數

從變數值存在的時間(生存期)角度來分,可分為靜態存儲變數和動態存儲變數。靜態存儲指在程序運行期間給變數分配固定的存儲空間,動態存儲指程序運行期間根據需要動態的給變數分配存儲空間。
C語言中,變數的存儲方法分為兩大類:靜態存儲類和動態存儲類,具體包括:自動的(auto),靜態的(static),寄存器的(register),外部的(extern)。
1) 局部變數的存儲方式
函數中的局部變數如不作專門說明,都之auto的,即動態存儲的,auto可以省略。局部變數也可以定義為static的,這時它在函數內值是不變的。靜態局部變數如不賦初值,編譯時系統自動賦值為0,動態局部變數如不賦初值,則它的值是個不確定的值。C規定,只有在定義全局變數和局部靜態變數時才能對數組賦初值。為提高執行效率,c允許將局部變數值放在寄存器中,這種變數叫register變數,要用register說明。但只有局部動態變數和形式參數可以作為register變數,其它不行。
2) 全局變數的存儲方式
全局變數在函數外部定義,編譯時分配在靜態存儲區,可以在程序中各個函數所引用。多個文件的情況如何引用全局變數呢?假如在一個文件定義全局變數,在別的文件引用,就要在此文件中用extern對全局變數說明,但如果全局變數定義時用static的話,此全局變數就只能在本文件中引用了,而不能被其它文件引用。
3) 存儲類別小結
從作用域角度分,有局部變數和全局變數
局部變數:自動變數,即動態局部變數(離開函數,值就消失)
靜態局部變數(離開函數,值仍保留)
寄存器變數(離開函數,值就消失)
(形參可定義為自動變數和寄存器變數)
全局變數:靜態全局變數(只限本文件引用)
全局變數(允許其它文件引用)
從存在的時間分,有靜態存儲和動態存儲
動態存儲:自動變數(本函數內有效)
寄存器變數(本函數內有效)
形參
靜態存儲:靜態局部變數(函數內有效)
靜態全局變數(本文件內有效)
全局變數(其它文件可引用)
從變數值存放的位置分
靜態存儲區:靜態局部變數
靜態全局變數
全局變數
動態存儲區:自動變數和形參
寄存器內:寄存器變數

7. 內部函數和外部函數

內部函數:只能被本文件中的其它函數調用,定義時前加static,內部函數又稱靜態函數。
外部函數:可以被其它文件調用,定義時前加extern,如果省略,則隱含為外部函數,在需要調用此函數的文件中,一般要用extern說明。

c編譯系統在對程序進行通常的編譯之前,先進行預處理。c提供的預處理功能主要有以下三種:1)宏定義 2)文件包含 3)條件編譯

1. 宏定義

不帶參數的宏定義
用一個指定的標識符來代表一個字元串,形式:#define 標識符 字元串
幾點說明:
1) 宏名一般用大寫
2) 宏定義不作語法檢查,只有在編譯被宏展開後的源程序時才會報錯
3) 宏定義不是c語句,不在行末加分號
4) 宏名有效范圍為定義到本源文件結束
5) 可以用#undef命令終止宏定義的作用域
6) 在宏定義時,可以引用已定義的宏名

帶參數的宏定義
定義形式:#define 宏名(參數表) 字元串
這和函數有些類似,但他們是不同的:
1) 函數調用時,先求實參表達式值,再代入形參,而宏只是簡單替換,並不求值
2) 函數調用是在程序運行時分配內存的,而宏展開時並不分配內存,也沒有返回值的概念
3) 對函數中的實參和形參都要定義類型,而且要求一致,宏名無類型,其參數也沒有類型。
4) 函數只有一個返回值,而宏可以得到幾個結果
5) 宏替換不佔運行時間,只佔編譯時間,而函數調用占運行時間

2. 文件包含處理

#include "文件1" 就是將文件1的全部內容復制插入到#include位置,作為一個源文件進行編譯。
在#include命令中,文件名可以用" "也可以用< >,假如現在file1.c中包含file2.h文件," "表示系統先在file1.c所在目錄中找file2.h,如果找不到,再按系統指定的標准方式檢索目錄,< >表示系統直接按指定的標准方式檢索目錄。所以用" "保險一點。

3. 條件編譯

條件編譯指不對整個程序都編譯,而是編譯滿足條件的那部分。條件編譯有以下幾種形式:
1)#ifdef 標識符
程序段1
#else
程序段2
#endif
它的作用:當標識符在前面已經被定義過(一般用#define),則對程序段1編譯,否則對程序段2編譯。
2)#ifndef 標識符
程序段1
#else
程序段2
#endif
它的作用和#ifdef相反,當標識符沒被定義過,對程序段1編譯,否則對程序段2編譯。
3)#if 表達式
程序段1
#else
程序段2
#endif
它的作用:當表達式值為真(非0)時,對程序段1編譯,否則對程序段2編譯。

http://spaces.msn.com/lxj5816778/Blog/cns!1pmxrkmy9J0DF4J21zFuHFzQ!134.entry

Ⅸ c語言實驗報告心得

c語言實驗心得:
1、只有頻繁用到或對運算速度要求很高的變數才放到data區內,如for循環中的計數值。
2、其他不頻繁調用到和對運算速度要求不高的變數都放到xdata區。
3、常量放到code區,如字型檔、修正系數。
4、邏輯標志變數可以定義到bdata中。
在51系列晶元中有16個位元組位定址區bdata,其中可以定義8*16=128個邏輯變數。這樣可以大大降低內存佔用空間。定義方法是: bdata bit LedState;但位類型不能用在數組和結構體中。
5、data區內最好放局部變數。
因為局部變數的空間是可以覆蓋的(某個函數的局部變數空間在退出該函數是就釋放,由別的函數的局部變數覆蓋),可以提高內存利用率。當然靜態局部變數除外,其內存使用方式與全局變數相同;
6、確保程序中沒有未調用的函數。
在Keil C里遇到未調用函數,編譯器就將其認為可能是中斷函數。函數里用的局部變數的空間是不釋放,也就是同全局變數一樣處理。這一點Keil做得很愚蠢,但也沒辦法。
7、如果想節省data空間就必須用large模式。
將未定義內存位置的變數全放到xdata區。當然最好對所有變數都要指定內存類型。
8、使用指針時,要指定指針指向的內存類型。
在C51中未定義指向內存類型的通用指針佔用3個位元組;而指定指向data區的指針只佔1個位元組;指定指向xdata區的指針佔2個位元組。如指針p是指向data區,則應定義為: char data *p;。還可指定指針本身的存放內存類型,如:char data * xdata p;。其含義是指針p指向data區變數,而其本身存放在xdata區。

以前沒搞過C51,大學時代跟單片機老師的時候也是搗鼓下匯編,現在重新搞單片機,因為手頭資料不多,找到一些C51的程序,發現裡面有這些關鍵字,不甚明了,沒辦法只好找了下,發現如下描述:

從數據存儲類型來說,8051系列有片內、片外程序存儲器,片內、片外數據存儲器,片內程序存儲器還分直接定址區和間接定址類型,分別對應code、data、xdata、idata以及根據51系列特點而設定的pdata類型,使用不同的存儲器,將使程序執行效率不同,在編寫C51程序時,最好指定變數的存儲類型,這樣將有利於提高程序執行效率(此問題將在後面專門講述)。與ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各種不同的模式對應不同的實際硬體系統,也將有不同的編譯結果。

在51系列中data,idata,xdata,pdata的區別

data:固定指前面0x00-0x7f的128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。

idata:固定指前面0x00-0xff的256個RAM,其中前128和data的128完全相同,只是因為訪問的方式不同。idata是用類似C中的指針方式訪問的。匯編中的語句為:mox ACC,@Rx.(不重要的補充:c中idata做指針式的訪問效果很好)

xdata:外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。

pdata:外部擴展RAM的低256個位元組,地址出現在A0-A7的上時讀寫,用movx ACC,@Rx讀寫。這個比較特殊,而且C51好象有對此BUG,建議少用。但也有他的優點,具體用法屬於中級問題,這里不提。

三、有關單片機ALE引腳的問題

"單片機不訪問外部鎖存器時ALE端有正脈沖信號輸出,此頻率約為時鍾振盪頻率的1/6.每當訪問

外部數據存儲器是,在兩個機器周期中ALE只出現一次,即丟失一個ALE脈沖."這句話是不是有毛

病.我覺得按這種說法,應該丟失3個ALE脈沖才對,我一直想不通是怎麼回事,希望大蝦們幫幫我.

小弟感激涕零.

答:

其他所有指令每6個機器周期發出一個ALE,而MOVX指令佔用12個機器周期只發出一個ALE

四、如何將一個INT型數據轉換成2個CHAR型數據?

經keil優化後,char1=int1/256,char2=int1%256或char1=int1>>8,char2=int1&0x00ff效率是一樣的。

五、在KEIL C51上模擬完了,怎樣生成HEX文件去燒寫??

右鍵點項目中Target 1,選第二個,在OUTPUT中選中CREAT HEX

六、typedef 和 #define 有何不同??

typedef 和 #define 有何不同》》》 如

typedef unsigned char UCHAR ;

#define unsigned char UCHAR ;

typedef命名一個新的數據類型,但實際上這個新的數據類型是已經存在的,只不過是定義了

一個新的名字.

#define只是一個標號的定義.

你舉的例子兩者沒有區別,但是#define還可以這樣用

#define MAX 100

#define FUN(x) 100-(x)

#define LABEL

等等,這些情況下是不能用typedef定義的

七、請問如何設定KELC51的模擬工作頻(時鍾)

用右鍵點擊左邊的的target 1,然後在xtal一欄輸入

八、不同模塊怎樣共享sbit變數,extern不行?

把SBIT定義單獨放到一個.H中,每個模塊都包含這個.h文件

九、C51中對於Px.x的訪問必須自己定義嗎?

是的。

如sbit P17 = 0x97;即可定義對P1.7的訪問

十、SWITCH( )語句中表達式不可以是位變數對嗎?

可以用位變數:

#include

#include

void main()

{

bit flag;

flag=0;

switch(flag)

{

case '0':{printf("0\n");break;}

case '1':{printf("1\n");break;}

default:break;

}

}

bit 變數只有兩種狀態,if 語句足夠啦,!!!

十一、const常數聲明占不佔內存???

const 只是用來定義「常量」,所佔用空間與你的定義有關,如:

const code cstStr[] = {"abc"};

佔用代碼空間;而如:

const char data cstStr[] = {"abc"};

當然佔用內存空間。

另外,#define 之定義似乎不佔用空間。

十二、philips的單片機P89C51RD+的擴展RAM在C51中如何使用?

試一試將auxr.1清0,然後在c語言中直接聲明xdata類型的變數

十三、BUG of Keil C51

程序中用如下語句:

const unsigned char strArr[] = {"數學"};

結果發現strArr[] 內容為 {0xCA,0xD1,0xA7},真奇怪!

凡是有0xfd,則會通通不見了,所以只能手工輸入內碼了,例如 uchar strArr[]=

{0xCA,0xfd,0xd1,0xa7}(用Ultraedit會很方便)。

十四、Keil C51中如何實現代碼優化?

菜單Project下Option for target "Simulator"的C51.

看到Code optimization了嗎?

十五、請教c的!和 ~ 符號有甚區別??

!是邏輯取反,~是按位取反。

十六、c51編程,讀埠,還要不要先輸出1?

我怎麼看到有的要,有的不要,請高手給講講,到底咋回事?謝了

要輸出1的,除非你能保證之前已經是1,而中間沒有輸出過其他值。

十七、當定時器1(T1)用於產生波特率時,P3^5還是否可以用作正常的I/O口呢?

p3.5完全可以當普通的io使用

十八、C51中 INT 轉換為 2個CHAR?

各位高手:

C51中 INT 轉換為 CHAR 如何轉換諸如:

X = LOW(Z);

Y = HIGH(Z);

答:

x=(char)z;

y=(char)(z>>8);

十九、如果我想使2EH的第7位置1的話,用位操作可以嗎?

現在對位操作指令我一些不太明白請各位多多指教:

如 SETB 07H 表示的是20H.7置1,對嗎?(我在一本書上是這么看到的)

那麼如果我想使2EH的第7位置1的話,象我舉的這個例子怎麼表示呢?謝謝!

SETB 77H

setb (2eh-20h)*8+7

20h-2fh每位元組有8個可位操作(00h-7fh),其它RAM不可位直接操作

二十、char *addr=0xc000 和char xdata *addr=0xc000有何區別?

char *addr=0xc000;

char xdata *addr=0xc000;

除了在內存中佔用的位元組不同外,還有別的區別嗎?

char *addr=0xc000; 是通用定義,指針變數 addr 可指向任何內存空間的值;

char xdata *addr=0xc000; 指定該指針變數只能指向 xdata 中的值;

後一種定義中該指針變數(addr)將少佔用一個存儲位元組。

uchar xdata *addr=0xc000;指針指向外ram;

如果:data uchar xdata *addr=0xc000;指針指向外ram但指針本身存在於內ram(data)



以此類推可以idata uchar xdata *addr=0xc000;pdata uchar xdata *addr=0xc000;

data uchar idata *addr=0xa0;.........

二十一、while(p1_0)的執行時間?

假設,P1_0為單片機P1口的第一腳,請問,

while(P1_0)

{

P1_0=0;

}

while(!P1_0)

{

P1_0=1;

}

以上代碼,在KEIL C中,需要多長時間,執行完。能具體說明while(P1_0)的執行時間嗎?

模擬運行看看就知道了,

我模擬了試了一下,約14個周期

二十二、怎樣編寫C51的watchdog程序?

各位大蝦,我用KEIL C51 編寫了一個帶外部開門狗的程序,可程序無法運行起來,經過查

找,發現程序在經過C51編譯後,在MAIN()函數的前部增加了一端初始化程序,等到進入

主程序設置開門狗時,開門狗已經時間到,將我的程序復位了,請問我怎樣才能修改這一端

初始花程序,使他一運行,就設置開門狗?

可以在startup.a51中加入看門狗刷新指令,當然用匯編,然後重新編譯startup.a51

,將他和你的程序連接即可。新的startup.a51會自動代替系統默認的啟動模塊。

二十三、keil C51 怎樣把修改的startup.a51 加到工程文件中

直接加入即可

注意不要改動?STACK,?C_START,?C_STARTUP等符號。startup.a51直接加入項目,不用修改也可。可在內面自己修改匯編的一些限制或堆棧指針。

二十四、關於波特率的設置

我在設定串口波特率時發現一個問題:在晶體震盪器為11.0592MHz時,若設9600BPS的話,

TH1=0XFD,TL1=0XFD,而要設19200BPS的話,TH1、TL1有否變化,如果沒變,為什麼?

如果變了,又為什麼?(因為我看書上倆個是一樣的),希望大家點撥。

答:

當電源控制寄存器(PCON)第BIT7(SMOD)為1時波特率加倍。

TH1和TL1的值不變.

二十五、如何在C中聲明保留這部分RAM區不被C使用?

我不知道在C源程序中怎麼控制這個,但在匯編程序中加入下面一段就行:

DSEG AT 20H

AA: DS 10

這樣C51就不會佔用20H--29H了

或者在c51里這樣定義:

uchar data asm_buff[10] _at_ 0x20;

二十六、問浮點運算問題

我在用C51時發現它對傳遞浮點參數的個數有限制,請問:

1)參數是以全局變數的形式傳遞的,請問以全局變數的形式傳遞的參數也有限制嗎?

2)這種傳遞浮點參數的限制有多少呢?

3)float*float的結果是float類型還是double類型?能否直接賦值給float類型的變數?

答:

由於KEIL C51的參數傳遞是通過R0-R7來傳遞的,所以會有限制。

不過KEIL提供了一個編譯參數,可以支持更多參數的傳遞。具體

的內容見KEIL的PDF文檔。

我建議你把多個要傳遞的參數定義到指針或結構體中去,傳遞參

數通過指針或結構進行,這樣好一些。

第3個問題回答是YES,你自己試試不就知道了。

二十七、如何在某一個地址定義ram

用_at_ 命令,這樣可以定位靈活一點的地址

uchar xdata dis_buff[16] _at_ 0x6020 ;//定位RAM

將dis_buff[16]定位在0x6020開始的16個位元組

二十八、keil c中,用什麼函數可以得到奇偶校驗位?

例如32位數據,將四個位元組相互異或後檢查P即可,若耽心P被改變,可用內嵌匯編。

#include

unsigned char parity(unsigned char x){

x^=x;

if(P)return(1);

else return(0);

}

unsigned char parity2(unsigned int x){

#pragma asm

mov a,r7

xrl ar6,a

#pragma endasm

if(P)return(1);

else return(0);

}

Ⅹ c語言程序設計心得

C語言程序設計課程是高等院校計算機專業基礎課程之一,其教學效果直接影響學生在計算機方面的應用。C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。那麼要如何寫關於c語言程序設計心得呢?本文是c語言程序設計的心得,僅供參考。


c語言程序設計心得一

在這為期半個月的時間內,通過我們小組各成員之間的相互討論和合作,我們完成了學生信息管理系統的程序設計,更值得高興的是我們的程序得到了大家的喜愛,在每次的簡報中都得到了較好的成績。

雖然在上個學期中,我們已經學習了《C 語言程序設計》這門課,但是我所學的知識最多也就是在做作業的時候才會用到,平時沒有什麼練習的機會,這次的課程設計是我第一次通過自己構思,和同學討論並且不斷查閱資料來設計一項程序。這次設計,不僅鞏固了我以前所學的知識,還讓我對c語言有了更深一步的了解,掌握了更多的技巧和技能。

C語言是計算機程序設計的重要理論基礎,在我們以後的學習和工作中都有著十分重要的地位。要學好這種語言,僅僅學習課本上的知識是不夠的,還要經常自己動手,有較強的實踐能力。只有多動手,經常編寫程序,才能發現我們學習上的漏洞和自己的不足,並在實踐中解決這些問題,不斷提高自己轉化知識的能力。

在我們小組有解決不了的問題時,我們會主動查閱相關的資料,或向其他同學詢問,這不僅豐富了我們的知識,還增進了我們同學之間的友誼。為了增大信息的安全性,需要用文件來存儲信息,由於我們在上課時不注重對文件的運用,所以在這方面有較大的困難。我先將書本認認真真地看了一遍,又做了一下課後習題來驗證和增進自己的理解,終於,經過我們的不懈努力,我們小組的程序有了突破,成功地實現了用文件來保存並查看學生的信息。

這次設計中,我的收獲還有就是學會了用流程圖來表達自己的想法,並根據流程圖來逐步實現程序的功能。開始的時候,我畫流程圖很是困難,需要一個多小時才能清楚的根據自己的想法畫出圖來,後來畫多了,就更加了解它的功能,十分得心應手,能夠比較快而准確的畫出來。

在這次課程設計中,我們首先對系統的整體功能進行了構思,然後用結構化分析 方法 進行分析,將整個系統清楚的劃分為幾個模塊,再根據每個模塊的功能編寫代碼。而且盡可能的將模塊細分,最後在進行函數的調用。我們在函數的編寫過程中,我們不僅用到了for循環、while循環和switch語句,還用到了函數之間的調用(包括遞歸調用)。由於我們是分工編寫代碼,最後需要將每個人的代碼放到一起進行調試。因為我們每個人寫的函數的思想不都一樣,所以在調試的過程中也遇到了困難,但經過我們耐心的修改,終於功夫不負有心人,我們成功了!

在參考書上,我們不僅參考了曾經學過的高敬陽主編的《c語言程序設計》,還找到了由譚浩強主編的第三版《c語言》進行參考。

當然,我們的程序還有一些不完善的地方,比如說,當輸入的數據不符合我們定義的數據的格式的時候,程序會出現一些錯誤,有時會出現主菜單的死循環;在一次程序運行中,只能行使一種許可權,要想再行使另一種許可權,就只能退出程序,然後再運行程序。

三周的小學期即將結束,時間雖短,但是我收獲了很多。最後,謝謝老師和同學們的指導,更要感謝我們小組成員之間的合作與交流。

c語言程序設計心得二

通過本次教師發展在線的C語程培訓中,我受益匪淺,幾位教授的精彩演講,讓我找到了自己的不足和日後教學中的改革方向和內容。同時,也讓我感覺到了,有今天各位教授的良好教學效果,這其中包含了他們的艱辛、背後的大量付出和無私奉獻。

我是一直從事C類語言的教學工作,對C語言的教學已有5年教齡,在這幾年的教學過程中,我們也一直在尋找好的 教學方法 和新的教學理念。通過本次學習,我 總結 要教好《C語言程序設計》這門課,最基本要把握好以下幾個方面:

(一)要重視實踐環節,上機調試成績非常重要。

學習一門語言,就是要按照它的語法來編程。要編程,當然就要上機操作來驗證你程序的正確性。所以上機非常重要,通過執行你所寫的程序,完成你所寫程序的目標,最終達到你的目的。而且通過執行程序,你會發現程序中的錯誤,從而使你了解你所學知識中的不足,同時,要學會根據編譯時提示的錯誤來改正程序中發生的錯誤,以便下次不會再犯同樣的錯誤。

(二)基本語法學習雖然枯草乏味,但是它相當於高樓大廈的一磚一瓦,一定要下硬功夫讓學生掌握熟練。

C語言的語法部分。這部分內容是學好C語言的基礎,只有學好了這些語法,才會寫程序,看程序。所以對一個初學者來說,這部分內容是非常重要的,所以要扎實地熟悉每一個語法,並能根據這些語法來編程。

(三)學習要抓住重點,難點部分要多講、多學、多練。

通過這次學習使得我對C語言的重點,難點,以及易出錯的地方把握的更精準了。當然,這只是針對我個人而言。在C語言學習過程,重點就是數組,指針,以及結構體了。難點也是它們了,不過數組和結構體還是挺簡單,所以在此主要就指針方面談談自己的看法。

下面談談通過這次學習,結合我們學校的教學情況,打算對該課程的教學進行如下幾個方面的改革:

(一)理論教學內容的組織

C語言的重點知識包括:結構化程序設計方法、流程圖的組織、三種程序設計結構、三種基本數據類型和三種自定義數據類型;難點包括:結構程序設計方法、演算法的分析、流程圖的組織與設計、函數、指針等。

根據知識內容和每年的新學時安排,我們將理論教學內容分為授課內容和自學內容兩 大模塊。

(1)授課內容

C語言的授課內容分為兩階段:①基礎准備階段 這部分內容確保學生「實用、夠用」,主要包括三種基本數據類型(只要求掌握常用的int,float,char);三種常用運算符及其表達式(賦值、算術、邏輯(包括關系));三種程序設計結構(順序、選擇、循環)。②實訓項目驅動階段 這部分內容主要是「實訓實戰」,主要包括數組、函數、指針和結構體。通過第一階段的學習,學生已經具備了一些程序設計的基礎知識,在這一階段將通過一個實訓項目的完成來熟悉主要內容,同時鞏固第一階段的成果。

(2)自學內容

課本中的內容上課沒重點介紹或者說就是沒提到的,劃為自學內容。但這些內容,我們並不是在課堂要求學生回去自學:要求過高,規矩過多,這樣效果不佳。而是讓學生在實驗中發現問題後,帶著問題去學習,去找答案。

例:整型 我們只介紹int基本類型,當學生想計算n!時,學生測試5!=120時,他可能會去測試20!、50!,這時,存放階乘的變數Factorial再定義為int,結果就是0了,這時問題就來了,他就會去尋找正確的處理方法(long int)。

(二)實驗教學的安排與設計

教學改革方案確定後,我們對本課程實驗教學上從多方面進行了教學更新。我們考慮到學生處於了解計算機語言及編程的初級階段,有許多最基礎的內容有待掌握,所以本課程的實驗教學不太適合完全以項目開發的形式進行,注重的是加強模塊化實訓。

(1)上好第一節實驗課

我們常說「上好第一節課」,那麼第一節實驗節的重要性也不言而喻。這節課對培養學生的學習興趣、增強學生的學習信心、鍛煉學生的自主學習等多方面影響很大。

第一次實驗項目是&mdash;熟悉Turbo C的運行環境,主要是掌握一些在TC中的一些鍵盤操作方式。一般是教師給學生提供程序代碼(三個),但我們在學生不知情的情況下,給學生兩個有語法錯誤的和一個正確的程序。這樣,當學生運行正確的程序時,知道計算機可以幫我們處理問題,原來程序就是這樣寫的;當學生運行錯誤的程序,首先他會詫異(老師給的程序原來是錯的),於是要求他們自己修改,尤其是有時一個致命錯誤導致的10多個errors,被學生修改後,沒有了errors或所剩無幾,這時學生表現的很興奮、很有成就感,從而加強了本課程的學習興趣和信心。

(2)分兩階段進行

實驗內容與理論教學內容相互應,在基礎准備階段,這方面教學方法上主要是加強操練。通過各種大小程序、多重訓練和一個問題的多種解法來加強語法知識點的掌握和訓練,開闊學生編程的思路,掌握編程基礎。同時,在這過程中我們嚴格把關,讓學生課後認真准備,每次進實驗室時,應有寫好的完整代碼,上機調試,發現問題同時解決問題,要求認真完成實驗內容,並在課後書寫實驗 報告 。鼓勵學生多寫程序,要加強實踐環節,首先要從量上有個劃分。在實訓項目驅動階段。本階段實訓項目的設計非常重要,原則是既要使學生有切入點能夠動手又要使各章的內容之間有聯系點。

(三)案例教學法

C語言的教學,教師一般受傳統應試 教育 的影響,狠抓理論考試,忽略了程序設計能力的培養,把授課重點放在程序設計語言的基本語法的講授和掌握上,所選的編程實例大多用於語法規則的驗證和說明,僅從程序設計語言的使用這個單一的角度進行教學,而使得大多數學生在學完本課程後,「吃不透、用不活」,表現為學生在程序調試時,對程序中出現的邏輯錯誤經常不知所措,在開發較大的應用程序時,不知道如何入手。

採用案例教學法,以程序設計為主線,以編程應用為驅動,通過案例和問題引出教材內容,重點講解程序設計的思想和方法,穿插講解相關的語言知識。使教學效果既有深度又有廣度,學生實際動手能力大為增強。

以上是我個人結合我院C語言程序設計的教學情況,自己總結了幾點看法和一些改革 措施 ,拿出來和大家一起分享,請大家多提寶貴意見。通過這次學習,我將會靈活運用幾位教授的教學 經驗 ,根據我院的教學對象,調整一些上課方法和措施,望能更好的提高教學質量。

c語言程序設計心得三

通過此次C語言程序設計實踐,本人實在是獲益不淺!C語言是上個學期開的課程,所以這個學期並沒怎麼看過,當要開始設計的時候,還真不知從哪下手!結果,第一次的上機,我傻坐著不知道該做什麼,後來就寫了幾個預處理命令。回去以後,我想,這樣不行,這樣下去還得了!我就重新復習了一遍我們上個學期學習的內容,發覺自已有許多都遺忘了!特別是有文件的操作,幾乎是一遍空白!溫習過後,開始做題!

一開始做題,也是有點模糊,在指導老師的指導下,我們慢慢的進入狀態,我們做的是一個通訊錄,內容包括很多。運用的函數也是非常的復雜,我們一組有七個人,我分工合作,首先我一起完成了結構題,然後我們一人各負責一個函數程序的設計,經過幾星期的努力,我們完成了大半個程序,但是總是有很多錯誤出現,有好多是些小問題,這都是我們粗心大意造成的,所以設計程序一定要仔細,不容一點的馬虎。當然也有大問題,關於文件的操作,是我們最大的問題,不過,我們做好後,經過老師的講解和改錯,我們也懂得設計和運用了。同時,也讓我知道了,合作的力量,如果是孤軍奮戰的話,我也不能在規定時間內完成,當然,也多虧老師的指導。

這次設計,讓我重新掌握了C語言,而且還得到了用C語言解決實際問題的寶貴經驗!

↓↓↓點擊下一頁還有更多精彩的C語言編程 學習心得 ↓↓↓