- 大一c語(yǔ)言程序設(shè)計(jì)心得體會(huì) 推薦度:
- 相關(guān)推薦
C語(yǔ)言程序設(shè)計(jì) (一)
課程設(shè)計(jì)的目的 通過(guò)課程設(shè)計(jì)全面掌握《C語(yǔ)言程序設(shè)計(jì)》關(guān)鍵知識(shí)點(diǎn),掌握C語(yǔ)言中數(shù)組、指針、結(jié)構(gòu)體、文件等方面的基本知識(shí)。
通過(guò)課程設(shè)計(jì)了解并掌握C語(yǔ)言程序設(shè)計(jì)的方法,熟悉C程序設(shè)計(jì)的開(kāi)發(fā)環(huán)境及C程序的調(diào)試過(guò)程。
培養(yǎng)學(xué)生查閱參考資料、手冊(cè)的自學(xué)能力,通過(guò)獨(dú)立思考深入鉆研有關(guān)問(wèn)題,學(xué)會(huì)自己分析、解決問(wèn)題的方法。
課程設(shè)計(jì)的任務(wù)和要求 任務(wù): 編程求出輸入的兩個(gè)正整數(shù)之和,這兩個(gè)正整數(shù)的可能達(dá)到200位。
要求:
輸入:
共有兩行,第一行為第1個(gè)正整數(shù);第二行為第2個(gè)正整數(shù)。
輸出:
2個(gè)正整數(shù)之和。
主要參與成員
姓 名 學(xué) 號(hào) 系 別 班 級(jí) 主要作用(分工)
成果形式 設(shè)計(jì) 軟件 作品 其他:
完成情況及以后的拓展設(shè)想 通過(guò)用C語(yǔ)言編寫(xiě)函數(shù)基本實(shí)現(xiàn)了大整數(shù)相加這個(gè)程序,但該程序仍存在一些不足,還可以加上一些語(yǔ)句使程序具有容錯(cuò)功能,并且可以正確計(jì)算一個(gè)負(fù)數(shù)和一個(gè)正數(shù)相加。
課 程 設(shè) 計(jì) 鑒 定 情 況 表
小組鑒定意見(jiàn)
小組長(zhǎng)簽名:
年 月 日
指導(dǎo)教師意見(jiàn)
教師簽名:
年 月 日
課程設(shè)計(jì)成績(jī) 優(yōu) 良 及格 不及格
教研室意見(jiàn)
年 月 日
備注 《C語(yǔ)言程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告書(shū)
作者:廖 序
課程設(shè)計(jì)概述
課程設(shè)計(jì)名稱(chēng)
大整數(shù)相加
任務(wù)要求:
編程求出輸入的兩個(gè)正整數(shù)之和,這兩個(gè)正整數(shù)的可能達(dá)到200位。
輸入:
共有兩行,第一行為第1個(gè)正整數(shù);第二行為第2個(gè)正整數(shù)。
輸出:
2個(gè)正整數(shù)之和。
開(kāi)發(fā)環(huán)境:
C語(yǔ)言。C語(yǔ)言是目前世界上流行、使用最廣泛的高級(jí)程序設(shè)計(jì)語(yǔ)言。1972年,C語(yǔ)言在美國(guó)貝爾實(shí)驗(yàn)室里問(wèn)世,后來(lái)又被多次改進(jìn),并出現(xiàn)了多種版本。80年代初,美國(guó)國(guó)家標(biāo)準(zhǔn)化協(xié)會(huì)(ANSI),根據(jù)C語(yǔ)言問(wèn)世以來(lái)各種版本對(duì)C語(yǔ)言的發(fā)展和擴(kuò)充,制定了ANSIC標(biāo)準(zhǔn)。
目前,在微機(jī)上廣泛使用的C語(yǔ)言編譯系統(tǒng)有MicrosoftC、Turbo C 、Borland C等。這些C語(yǔ)言版本不僅實(shí)現(xiàn)了ANSIC標(biāo)準(zhǔn),而且在此基礎(chǔ)上各自作了一些擴(kuò)充,使之更加方便、完美。
C語(yǔ)言的特點(diǎn):
C語(yǔ)言是一種結(jié)構(gòu)化語(yǔ)言。它層次清晰,便于按模塊化方式組織程序,易于調(diào)試和維護(hù)。
C語(yǔ)言的表現(xiàn)能力和處理能力極強(qiáng)。它不僅具有豐富的運(yùn)算符和數(shù)據(jù)類(lèi)型,便于實(shí)現(xiàn)各類(lèi)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。它還可以直接訪(fǎng)問(wèn)內(nèi)存的物理地址,進(jìn)行位(bit)一級(jí)的操作。
由于C語(yǔ)言實(shí)現(xiàn)了對(duì)硬件的編程操作,因此C語(yǔ)言集高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的功能于一體。既可用于系統(tǒng)軟件的開(kāi)發(fā),也適合于應(yīng)用軟件的開(kāi)發(fā)。
此外,C語(yǔ)言還具有效率高,可移植性強(qiáng)等特點(diǎn)。因此廣泛地移植到了各類(lèi)各型計(jì)算機(jī)上,從而形成了多種版本的C語(yǔ)言。
參考資料
李錚、葉艷冰、汪德俊,C語(yǔ)言程序設(shè)計(jì)基礎(chǔ)與應(yīng)用,清華大學(xué)出版社,2005
[2]CSDN技術(shù)中心
二、概要設(shè)計(jì)
為了實(shí)現(xiàn)大整數(shù)相加這個(gè)程序,將程序劃分為了三個(gè)模塊:
輸入數(shù)據(jù)。
運(yùn)算。
輸出結(jié)果。
首先定義了子函數(shù)Input()來(lái)存儲(chǔ)用戶(hù)輸入的兩個(gè)加數(shù),為了滿(mǎn)足任意位數(shù)的兩個(gè)大整數(shù)相加,在子函數(shù)Input()中嵌套調(diào)用子函數(shù)Init()使sum數(shù)組里面存放的數(shù)初始化為”0”。
然后定義子函數(shù)Long_Add()使兩個(gè)大整數(shù)作加法運(yùn)算,從后面往前面相加,附帶進(jìn)位。定義子函數(shù)Output()實(shí)現(xiàn)輸出結(jié)果。
最后如下圖所示,在主函數(shù)main中調(diào)用Input(),Long_Add(),Output()三個(gè)子函數(shù)實(shí)現(xiàn)程序。
三、詳細(xì)設(shè)計(jì)
程序的流程圖:
四、調(diào)試過(guò)程
第一次 測(cè)試數(shù)據(jù)a=1234567893456767,b=111111
編譯運(yùn)行后不能輸出結(jié)果,檢查函數(shù)后編譯正確。再次分析,發(fā)現(xiàn)如果直接把a(bǔ),b,sum定義為unsigned int型的話(huà),計(jì)算出來(lái)的和的范圍只能在0~65535之間,否則就會(huì)出現(xiàn)錯(cuò)誤。
嘗試將a,b,sum存放到字符數(shù)組中,從個(gè)位開(kāi)始,一位一位相加。
第二次 測(cè)試數(shù)據(jù)a=1234567893456767,b=111111
編譯運(yùn)行后仍不能輸出結(jié)果。分析原因,在用于輸出的子函數(shù)Output()中,輸出數(shù)組字符數(shù)組sum[]前未確定和的最高非零位。
嘗試加入for(i=0;i<Max;i++)語(yǔ)句來(lái)尋找和的最高非零位,再
if(sum[i] != '0')
break;
次進(jìn)行調(diào)試。
第三次 測(cè)試數(shù)據(jù)a=99999919,b=99
編譯運(yùn)行后發(fā)現(xiàn)計(jì)算出來(lái)結(jié)果不正確。經(jīng)過(guò)分析,函數(shù)中沒(méi)有對(duì)最后
一個(gè)進(jìn)位進(jìn)行處理。
嘗試加入while(carry > 0) 語(yǔ)句,再次進(jìn)行調(diào)試。
{
tempsum = sum[i]-'0'+carry ;
sum[i] = tempsum%10+'0';
carry = tempsum/10;
i--;
}
第四次 測(cè)試數(shù)據(jù)a=99999919,b=99
編譯運(yùn)行后得到正確結(jié)果。
第五次 隨意輸入幾組數(shù)據(jù)進(jìn)行測(cè)試,結(jié)果都是正確的。程序得到實(shí)現(xiàn)。
五、結(jié)論與體會(huì)
通過(guò)不斷的調(diào)試、修改,本課程設(shè)計(jì)最終實(shí)現(xiàn)了200位以?xún)?nèi)的兩個(gè)大整數(shù)相加,但程序還可以進(jìn)一步完善,程序中仍存在一些不足之處,比如缺少容錯(cuò)功能,不能準(zhǔn)確計(jì)算負(fù)整數(shù)加正整數(shù),等等問(wèn)題
雖然C語(yǔ)言程序設(shè)計(jì)在上學(xué)期做為我們的必修課已經(jīng)學(xué)習(xí)過(guò)了,但書(shū)到用時(shí)方恨少,這次課程設(shè)計(jì)的學(xué)習(xí)程序設(shè)計(jì)中暴露出的我自身的問(wèn)題更是非常明顯。
一開(kāi)始看到題目認(rèn)為非常簡(jiǎn)單,直接將兩個(gè)數(shù)都定義為整型。編寫(xiě)程序并運(yùn)行后發(fā)現(xiàn)并不能達(dá)到題目的要求,計(jì)算出來(lái)的和只能小于等于65535,否則就會(huì)出現(xiàn)錯(cuò)誤。分析后,將數(shù)據(jù)作為字符串來(lái)處理,用for循環(huán)語(yǔ)句從存數(shù)的字符數(shù)組中一位一位的取數(shù)出來(lái),按照數(shù)位對(duì)齊,從個(gè)位開(kāi)始,按位相加,逢十進(jìn)一的運(yùn)算規(guī)則進(jìn)行運(yùn)算。最后用字符輸出函數(shù)putchar()輸出計(jì)算出來(lái)的結(jié)果。由于程序偏大且較復(fù)雜,將程序劃分為了輸入數(shù)據(jù)、運(yùn)算、輸出數(shù)據(jù)三個(gè)子程序。數(shù)次編譯調(diào)試后,最終使程序得以實(shí)現(xiàn)。
經(jīng)過(guò)三個(gè)星期的上機(jī)實(shí)踐學(xué)習(xí),使我對(duì)C語(yǔ)言有了更進(jìn)一步的認(rèn)識(shí)和了解,讓我能夠進(jìn)一步的掌握和運(yùn)用C語(yǔ)言來(lái)編寫(xiě)程序。要想學(xué)好C語(yǔ)言要重在實(shí)踐,要通過(guò)不斷的上機(jī)操作才能更好地學(xué)習(xí)它,通過(guò)實(shí)踐,我也發(fā)現(xiàn)我的好多不足之處和薄弱環(huán)節(jié)。
首先,基礎(chǔ)掌握不牢固,對(duì)于C語(yǔ)言中的許多基本語(yǔ)法尚沒(méi)有熟練掌握,在設(shè)計(jì)過(guò)程中仍需請(qǐng)教其它同學(xué),查閱課本,設(shè)計(jì)效率很低。
其次,經(jīng)典算法掌握不牢。在完成作業(yè)的過(guò)程中還需查閱書(shū)籍和借鑒他人。
再次,程序量過(guò)大的時(shí)候,頭緒理不清。雜亂無(wú)章,無(wú)系統(tǒng)性,不便調(diào)試和閱覽,自己也易于出錯(cuò)。
并且對(duì)C語(yǔ)言中經(jīng)常出現(xiàn)的錯(cuò)誤也不了解,通過(guò)實(shí)踐,使我在這幾個(gè)方面的認(rèn)識(shí)有所提高。
通過(guò)實(shí)踐的學(xué)習(xí),我認(rèn)到學(xué)好計(jì)算機(jī)要重視實(shí)踐操作,不僅僅是學(xué)習(xí)C語(yǔ)言,還是其它的語(yǔ)言,以及其它的計(jì)算機(jī)方面的知識(shí)都要重在實(shí)踐,所以后在學(xué)習(xí)過(guò)程中,我會(huì)更加注視實(shí)踐操作,使自己便好地學(xué)好計(jì)算機(jī)。
六、源程序清單
#include <stdio.h>
#include <string.h>
#define Max 1000
char sum[Max+1]; /*和*/
char a[Max],b[Max]; /*兩個(gè)加數(shù)*/
int len1,len2;
void Input(char a[],char b[])
{
int i,len;
void Init(char a[]); /*對(duì)Init()函數(shù)進(jìn)行聲明*/
printf("Please enter two integer:\n");
scanf("%s %s",a,b);
len1=strlen(a);
len2=strlen(b);
Init(sum);
len=strlen(a);
for(i=len-1; i>=0; i--)
sum[Max+i-len] = a[i];
}
void Init(char a[])
{
int i;
for(i=0; i<Max; i++)
a[i] = '0';
return ;
}
void Long_Add(char sum[],char new[])
{
int i,j;
int len;
int tempsum;
int carry = 0; /*進(jìn)位*/
len = strlen(new);
/*從個(gè)位開(kāi)始,按位相加,逢十進(jìn)一*/
for(i=Max-1,j=len-1; i>=0,j>=0; i--,j--)
{
tempsum = sum[i]-'0'+new [j]-'0'+carry;
sum[i] = tempsum%10+'0';
carry = tempsum/10;
}
while(carry > 0) /*處理最后一個(gè)進(jìn)位*/
{
tempsum = sum[i]-'0'+carry ;
sum[i] = tempsum%10+'0';
carry = tempsum/10;
i--;
}
return;
}
void Output(char sum[])
{int i,n;
/*尋找和的最高非零位*/
for(i=0;i<Max;i++)
if(sum[i] != '0')
break;
/*輸出計(jì)算出來(lái)的和*/
n=i;
for(n;n<Max;n++)
putchar(sum[n]);
return ;
}
int main()
{
Input(a,b);
Long_Add(sum,b);
Output(sum);
getch();
return 0;
【C語(yǔ)言程序設(shè)計(jì) (一)】相關(guān)文章:
論獨(dú)立學(xué)院 C語(yǔ)言程序設(shè)計(jì)教學(xué)改革與實(shí)踐03-27
Solaris下PRO*C和OCI程序設(shè)計(jì)分析與比較03-18
c語(yǔ)言畢業(yè)論文開(kāi)題報(bào)告05-03
C語(yǔ)言實(shí)驗(yàn)課教學(xué)探討03-02
試析中職學(xué)校的C語(yǔ)言教學(xué)03-20
分枝結(jié)構(gòu)的程序設(shè)計(jì) (一)03-07
人工智能AI程序設(shè)計(jì)語(yǔ)言簡(jiǎn)介03-18
I2C總線(xiàn)在uClinux操作系統(tǒng)下的驅(qū)動(dòng)程序設(shè)計(jì)11-22