第一篇:搶答器~C51~帶程序
前 言
在電視和學(xué)校中我們會(huì)經(jīng)常看到一些智力搶答的節(jié)目,如果要是讓搶答者用舉手等方法,主持人很容易誤判,會(huì)造成搶答的不公平,比賽中為了準(zhǔn)確、公正、直觀地判斷出第一搶答者,所設(shè)計(jì)的搶答器通常由數(shù)碼顯示、燈光、音響等多種手段指示出第一搶答者。為了使這種不公平不發(fā)生,只有靠電子產(chǎn)品的高準(zhǔn)確性來保障搶答的公平性。
功能分為基本功能和擴(kuò)展功能,基本功能是能夠?qū)崿F(xiàn)搶答器的功能,擴(kuò)展功能進(jìn)一步豐富了搶答器的功能,更佳人性化。
基本功能可以有同時(shí)供8名選手比賽,分別用8個(gè)按鈕S0 ~ S7表示;設(shè)置一個(gè)系統(tǒng)復(fù)位按鈕和搶答控制按鈕,這組開關(guān)由主持人控制;搶答器具有鎖存與顯示功能。即選手按動(dòng)按鈕,揚(yáng)聲器發(fā)出聲響提示,鎖存相應(yīng)的選手號(hào)碼并且通過數(shù)碼管顯示。選手搶答實(shí)行優(yōu)先鎖存,優(yōu)先搶答選手的編號(hào)一直保持到主持人將系統(tǒng)清除為止。
擴(kuò)展功能有搶答器具有定時(shí)搶答功能,且搶答的時(shí)間由主持人設(shè)定(如30秒)。當(dāng)主持人按下啟動(dòng)鍵后,定時(shí)器進(jìn)行倒計(jì)時(shí);參賽選手在設(shè)定的時(shí)間內(nèi)進(jìn)行搶答,搶答有效,定時(shí)器停止工作,顯示器上顯示選手的編號(hào)和搶答的時(shí)間,并保持到主持人將系統(tǒng)清除為止。如果定時(shí)時(shí)間已到,無人搶答,本次搶答無效,系統(tǒng)報(bào)警并禁止搶答,定時(shí)顯示器上顯示00。
此設(shè)計(jì)可以用三種方法實(shí)現(xiàn):數(shù)字電路,單片機(jī),PLC。其中PLC方案與單片機(jī)方案原理相似,但成本太高,故不采用此方案,在此不另作比較。主要在數(shù)字電路和單片機(jī)兩個(gè)方案中選擇。
AT89C52 是美國ATMEL 公司生產(chǎn)的低電壓,高性能CMOS 8 位單片機(jī),片內(nèi)含8k bytes 的可反復(fù)擦寫的Flash 只讀程序存儲(chǔ)器和256 bytes 的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL 公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),與標(biāo)準(zhǔn)MCS-51 指令系統(tǒng)及8052產(chǎn)品引腳兼容,片內(nèi)置通用8 位中央處理器(CPU)和Flash 存儲(chǔ)單元,功能強(qiáng)大AT89C52 單片機(jī)適合于許多較為復(fù)雜控制應(yīng)用場合。
基于單片機(jī)的八路搶答器是針對(duì)目前的搶答器市場而設(shè)計(jì)的,其高度的準(zhǔn)確性,低廉的成本,是絕對(duì)有競爭優(yōu)勢,其市場前景巨大。通過本課題的訓(xùn)練,不僅可以研制出一套八路搶答器,還可以使我們通過對(duì)單片機(jī)電路的設(shè)計(jì)與編程,達(dá)到理論與實(shí)踐相結(jié)合的目的,強(qiáng)化我們四年中的學(xué)習(xí)知識(shí),能提高解決實(shí)際問題的能力。
第一章 設(shè)計(jì)的依據(jù)
1.1 課題的提出
在電視和學(xué)校中我們會(huì)經(jīng)常看到一些智力搶答的節(jié)目,如果要是讓搶答者用舉手等方法,主持人很容易誤判,會(huì)造成搶答的不公平,比賽中為了準(zhǔn)確、公正、直觀地判斷出第一搶答者,所設(shè)計(jì)的搶答器通常由數(shù)碼顯示、燈光、音響等多種手段指示出第一搶答者。為了使這種不公平不發(fā)生,只有靠電子產(chǎn)品的高準(zhǔn)確性來保障搶答的公平性。
1.2 實(shí)現(xiàn)的系統(tǒng)功能簡介
功能分為基本功能和擴(kuò)展功能,基本功能是能夠?qū)崿F(xiàn)搶答器的功能,擴(kuò)展功能進(jìn)一步豐富了搶答器的功能,更佳人性化。
1.基本功能:
(1)同時(shí)供8名選手比賽,分別用8個(gè)按鈕S0 ~ S7表示。
(2)設(shè)置一個(gè)系統(tǒng)復(fù)位按鈕和搶答控制按鈕,這組開關(guān)由主持人控制。(3)搶答器具有鎖存與顯示功能。即選手按動(dòng)按鈕,揚(yáng)聲器發(fā)出聲響提示,鎖存相應(yīng)的選手號(hào)碼并且通過數(shù)碼管顯示。選手搶答實(shí)行優(yōu)先鎖存,優(yōu)先搶答選手的編號(hào)一直保持到主持人將系統(tǒng)清除為止。
2.擴(kuò)展功能:
(1)搶答器具有定時(shí)搶答功能,且搶答的時(shí)間由主持人設(shè)定(如30秒)。當(dāng)主持人按下啟動(dòng)鍵后,定時(shí)器進(jìn)行倒計(jì)時(shí)。
(2)參賽選手在設(shè)定的時(shí)間內(nèi)進(jìn)行搶答,搶答有效,定時(shí)器停止工作,顯示器上顯示選手的編號(hào)和搶答的時(shí)間,并保持到主持人將系統(tǒng)清除為止。如果定時(shí)時(shí)間已到,無人搶答,本次搶答無效,系統(tǒng)報(bào)警并禁止搶答,定時(shí)顯示器上顯示00。
第二章 總體方案確定
2.1 方案論證
此設(shè)計(jì)可以用三種方法實(shí)現(xiàn):數(shù)字電路,單片機(jī),PLC。其中PLC方案與單片機(jī)方案原理相似,但成本太高,故不采用此方案,在此不另作比較。2.1.1數(shù)字電路總體方案
如下圖所示為數(shù)字電路總體方框圖。其工作原理為:接通電源后,主持人將開關(guān)撥到“清除”狀態(tài),搶答器處于禁止?fàn)顟B(tài),編號(hào)顯示器滅燈,定時(shí)器顯示設(shè)定時(shí)間;主持人將開關(guān)置“開始”狀態(tài),宣布“開始”搶答器工作。定時(shí)器倒計(jì)時(shí),揚(yáng)聲器給出聲響提示。選手在定時(shí)時(shí)間內(nèi)搶答時(shí),搶答器完成:優(yōu)先判斷、編號(hào)鎖存、編號(hào)顯示、揚(yáng)聲器提示。當(dāng)一輪搶答之后,定時(shí)器停止、禁止二次搶答、定時(shí)器顯示剩余時(shí)間。如果再次搶答必須由主持人再次操作“清除”和“開始”狀態(tài)開關(guān)。
圖2.1.1 數(shù)字電路方案
2.1.2 MCS-51方案
該方案主要由 搶答、聲音警示、燈光指示和計(jì)時(shí)電路組成,借助較少的外圍元件完成搶答的整個(gè)過程。系統(tǒng)框圖如下圖所示。
圖2.1.2 單片機(jī)方案
2.2 方案確定
通過三個(gè)方案比較,單片機(jī)控制的設(shè)計(jì)方案外圍的元件也很少,成本比較低,制作簡單,實(shí)現(xiàn)的功能靈活。由于是單片機(jī)控制,對(duì)搶答器隊(duì)參賽選手的動(dòng)作的先后有很強(qiáng)的分辨力,即使先后只相差幾毫秒,搶答器也能分辨出來,搶答器直接顯示動(dòng)作選手的編號(hào)和答題時(shí)間,并保持到主持人清零為止。所以我選擇采用單片機(jī)控制的方案來完成搶答器電路。
第三章 硬件設(shè)計(jì)
3.1 整體電路設(shè)計(jì)
整個(gè)系統(tǒng)可以分為五部分:搶答電路,主持人控制按鈕,單片機(jī)最小系統(tǒng),顯示電路,蜂鳴器。如下圖所示
圖3.1 整體電路
3.2 復(fù)位電路設(shè)計(jì)
復(fù)位電路采用經(jīng)典的51系列單片機(jī)的復(fù)位方法:上電復(fù)位和開關(guān)復(fù)位。通電后,給電容充電,在此過程中,單片機(jī)復(fù)位;運(yùn)行時(shí),按下復(fù)位按鈕,RST端口變?yōu)楦唠娖剑M(jìn)行復(fù)位。復(fù)位電路和晶振電路如下:
圖3.2 復(fù)位電路和晶振電路 3.3 顯示電路的設(shè)計(jì)
顯示電路和揚(yáng)聲器電路如下圖所示:
圖3.3.1 顯示電路 圖3.3.2 揚(yáng)聲器電路
3.4 控制電路實(shí)現(xiàn)
主持人的按鍵有四個(gè),分別是:開始、復(fù)位、加
1、減1。按鍵一般按下的過程中有抖動(dòng),需要消抖處理,本設(shè)計(jì)中采用了并聯(lián)電容處理,實(shí)際調(diào)試過程中證明效果很好,故軟件不需要再次做消抖處理。
圖3.4.1 選手按鍵電路 圖3.4.2 主持人控制電路
3.5 硬件電路設(shè)計(jì)小結(jié)
經(jīng)過幾十個(gè)晝夜奮戰(zhàn),硬件電路終于調(diào)試成功,想想開始的時(shí)候什么都不確定,第一次焊接好了之后,到處都是問題,到現(xiàn)在的穩(wěn)定運(yùn)行,真的有一種莫大的滿足感。特別是消抖這一塊,一直是我們?cè)O(shè)計(jì)不穩(wěn)定運(yùn)行的主因,在指導(dǎo)老師的悉心指導(dǎo)下,在院系領(lǐng)導(dǎo)的關(guān)懷下,我們的問題也一一迎刃而解。
第四章 軟件設(shè)計(jì)
4.1 總體設(shè)計(jì)
第五章 電路調(diào)試
5.1硬件調(diào)試
基本電路板檢查: 根據(jù)前面的研究完成各個(gè)電路模塊的原理設(shè)計(jì)并生成PCB圖,制作電路板,進(jìn)行實(shí)驗(yàn)調(diào)試。
(1)檢查印制板的印制線是否有斷路,是否有毛刺,是否與其它線或是焊盤粘連,焊盤是否有脫落,過孔是否有未金屬化現(xiàn)象等等。
(2)先用萬用表復(fù)核目測中認(rèn)為可疑的連接或是接點(diǎn),檢查它們的通短狀態(tài)是否與設(shè)計(jì)規(guī)定相符。再檢查各種電源線與地線之間是否有短路現(xiàn)象,如有再仔細(xì)檢查出并排除。短路現(xiàn)象一定要在器件安裝及加電前檢查出。
(3)路接通電源后,用手摸一下芯片是否發(fā)熱,如果發(fā)熱,立即關(guān)掉電源,稍后再進(jìn)行再次檢測;如果沒有發(fā)熱,再測試芯片的VCC端電壓是否達(dá)到設(shè)計(jì)要求,接地端是否都接地。
主控模塊調(diào)試: 在本次設(shè)計(jì)中,主控模塊是非常重要的部分,它不僅是本次設(shè)計(jì)的核心,同時(shí)在后面的8255A顯示也是起關(guān)鍵的作用。在本次硬件調(diào)試中也遇到了問題,接上電源的時(shí)候,數(shù)碼管不亮,沒有任何顯示,于是我做了如下的工作:(1)檢查電源是否通電,發(fā)現(xiàn)指示燈亮著;(2)編程使P1為低電平,檢查到P1輸出為低;(3)檢查P0口未接上拉電阻,接上數(shù)碼管發(fā)亮了。
由次我深刻的認(rèn)識(shí)到:制作電路板是一個(gè)比較繁瑣的過程,它需要我們時(shí)刻都要用心去做,每個(gè)環(huán)節(jié)都不能忽視,只有這樣才能達(dá)到鍛煉的目的。
5.2軟件調(diào)試
當(dāng)硬件制作完成后,軟件制作也是不可輕視的部分,是實(shí)現(xiàn)電路的功能的關(guān)鍵部分,通過本次畢業(yè)設(shè)計(jì),總結(jié)經(jīng)驗(yàn)如下:
(1)先進(jìn)行人工檢查。寫好程序后,不立刻燒入單片機(jī),先對(duì)紙面上的程序進(jìn)行人工檢查。由于采用C語言編程,所以要特別小心地檢查語法錯(cuò)誤,如括號(hào)不配對(duì),漏寫分號(hào)等,通過仔細(xì)的檢查,發(fā)現(xiàn)并排除這些錯(cuò)誤。
(2)人工檢查無誤后,上機(jī)調(diào)試。在編譯時(shí)給出的語法錯(cuò)誤的信息,根據(jù)提示的信息具體找出程序中錯(cuò)誤之處并改之,從上至下逐一改正。應(yīng)當(dāng)注意的是:有的提示出錯(cuò)行并不是真正出錯(cuò)的行,如果在提示出錯(cuò)的行上找不到錯(cuò)誤的話,則應(yīng)該到上行再找。
(3)當(dāng)確認(rèn)程序無語法錯(cuò)誤和邏輯錯(cuò)誤時(shí),通過直接下載到單片機(jī)來調(diào)試。采用的是自下到上的調(diào)試方法,即單獨(dú)調(diào)好每一個(gè)模塊,然后再連接成一個(gè)完整的系統(tǒng)調(diào)試。
(4)程序燒入單片機(jī)后,觀察各個(gè)部件的工作是否正常,功能是否實(shí)現(xiàn)。如不能正常工作,則繼續(xù)檢查程序中的相應(yīng)模塊,必要時(shí)從上到下重新檢查程序。
總 結(jié)
搶答器豐富了我們的生活,社會(huì)中本來就充滿著競爭。只是沒有很明顯的表現(xiàn)出來,通過運(yùn)用它我們可以很好的證明自己的膽識(shí)和自信,所以做起搶答器來,也很想去了解它,對(duì)于八路搶答器原理說起來很簡單,也沒什么復(fù)雜性,所以看似很簡單,但實(shí)踐中卻發(fā)現(xiàn)不是那么回事,實(shí)際調(diào)試的過程中,一點(diǎn)問題都不能存在,否則它就不運(yùn)行,真正體會(huì)到了什么叫一絲不茍,什么叫鍥而不舍。在以后的工作和學(xué)習(xí)中,我一定會(huì)深刻運(yùn)用這次的心得體會(huì)。
總之,這次實(shí)踐是非常成功的,我們追求的是理論與實(shí)踐并存,這次畢業(yè)設(shè)計(jì)就很好的為大學(xué)生表現(xiàn)自己綜合能力提供有力的平臺(tái)。實(shí)踐中也發(fā)了自己有一點(diǎn)不懂的地方,通過這次實(shí)踐才徹底搞懂,這證明了理論學(xué)習(xí)后還是需要實(shí)踐課程的。
在這個(gè)過程中,通過老師的指導(dǎo)和自己的摸索,學(xué)會(huì)了自己學(xué)習(xí)新知識(shí),查找資料的方法,我想這應(yīng)該是我們大學(xué)中應(yīng)該掌握的方法。
致 謝
本設(shè)計(jì)經(jīng)過一個(gè)學(xué)期的的時(shí)間,到今天終于完成了。在此,向我的指導(dǎo)老師表示最誠摯的謝意。從課題的選擇,前期的準(zhǔn)備工作、方案的制定,系統(tǒng)的開發(fā)與調(diào)試,到論文的撰寫修改定稿都滲透了老師的心血。在這三個(gè)月中,老師以他淵博的學(xué)識(shí)、卓越的才智、嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和求實(shí)創(chuàng)新的工作作風(fēng)以及平易近人的態(tài)度使我受益匪淺,在學(xué)習(xí)中給我很大的啟迪和幫助,對(duì)我的指導(dǎo)更是給我留下了極為深刻的印象。使我在這次畢業(yè)設(shè)計(jì)中學(xué)到了許多知識(shí)。
在整個(gè)課題的研究和設(shè)計(jì)過程中,還得到了其他院系和實(shí)驗(yàn)室的老師們的幫助和支持,在我設(shè)計(jì)時(shí)遇到困難時(shí),他們給予了我不少的幫助和鼓勵(lì),再次表示誠摯的感謝。正是由于他們的幫助,才使這次設(shè)計(jì)能順利的完成。
此外,我還要特別感謝大學(xué)四年里的老師和同學(xué),感謝我們系的全體老師以及所有關(guān)心我,幫助我,鼓勵(lì)我的人,沒有你們的無私幫助,我是很難完成我的畢業(yè)設(shè)計(jì)的,謝謝你們。
參考文獻(xiàn)
[1] 康華光,《電子技術(shù)基礎(chǔ).數(shù)字部分(第四版)》[M],北京:高等教育出版社,2003.
[2] 李廣弟,《單片機(jī)基礎(chǔ)》[M],北京:北航出版社,2001.
[3] 梁超,一款基于單片機(jī)技術(shù)的電子搶答器[J ],機(jī)電工程技術(shù),2005,34(1). [4] 李朝青,單片機(jī)原理及接口技術(shù)[M],北京:北京航空航天大學(xué)出版社,1999. [5] 齊向東,多功能數(shù)字顯示搶答器[J ].黃石高等專科學(xué)院學(xué)報(bào),1996.
附錄
附錄1數(shù)字搶答器原理圖
附錄2 AT89S52芯片主程序
#include
sbit P2_4=P2^4;///加1鍵 sbit P2_5=P2^5;//減1鍵 sbit P2_6=P2^6;//確認(rèn)鍵 sbit P2_7=P2^7;//蜂鳴器
uchar a=20,b=0,c=0;unsigned
int gong=100,yi=100,er=100,san=100,si=100,wu=100,liu=100,qi=100,ba=100;//8組得分變量
uchar disp[]={0,0,0,0};//四個(gè)顯示單元
uchar dispbit[]={0xfe,0xfd,0xfb,0xf7};//數(shù)碼管掃描代碼 uchar dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf};//共陽數(shù)碼管數(shù)字代碼
//------------------------數(shù)碼管顯示子程序
void display(void){ uchar i,j;disp[3]=b;//求得四個(gè)單元值 disp[2]=10;disp[1]=a/10;disp[0]=a%10;for(i=0;i<4;i++)//循環(huán)四次送四個(gè)單元供顯示 { P0=dispcode[disp[i]];P2=dispbit[i];for(j=0;j<255;j++);} } //--------------void display1(void){ uchar i,j;disp[3]=b;disp[2]=gong/100;disp[1]=gong%100/10;disp[0]=gong%100%10;for(i=0;i<4;i++){ P0=dispcode[disp[i]];P2=dispbit[i];for(j=0;j<255;j++);} } //------------中斷定時(shí)50ms子程序 void t0(void)interrupt 1 using 1 { c++;TH0=0x3c;//定時(shí)器0附初值 TL0=0xb0;} //--------------------------void main(void){unsigned int d;//條件判斷,用于第一個(gè)人按到后,后面的人再按不管用.TMOD=0x01;//用定時(shí)器定時(shí)50MS TH0=0x3c;//定時(shí)器0附初值 TL0=0xb0;ET0=1;EA=1;while(1){ P2_7=1;// display();if(c==20)// { c=0;a--;} if(P2_4==0)// { while(P2_4==0);// if(a==99){ a=0;a--;} a++;//} if(P2_5==0)//{ while(P2_5==0);if(a==0)a=100;a--;} if(P2_6==0)//蜂鳴器不響 一秒到,秒減1 加1鍵 松開鍵 定時(shí)加1 減1鍵 確認(rèn)鍵 { while(P2_6==0);TR0=1;} if(a==0)//定時(shí)時(shí)間到報(bào)警一直響 { TR0=0;P2_7=0;} if(tj==1){ while(P2_6==1){ display1();if(P2_4==0){ while(P2_4==0);if(b==1)//加分
{ yi=yi+10;gong=yi;}
if(b==2){er=er+10;gong=er;}
if(b==3){san=san+10;gong=san;}
if(b==4){si=si+10;gong=si;}
if(b==5){wu=wu+10;gong=wu;}
if(b==6){liu=liu+10;gong=liu;}
if(b==7){qi=qi+10;gong=qi;}
if(b==8){ba=ba+10;gong=ba;}
} if(P2_5==0){while(P2_5==0);if(b==1){yi=yi-10;gong=yi;}//減分
if(b==2){er=er-10;gong=er;}
if(b==3){san=san-10;gong=san;}
if(b==4){si=si-10;gong=si;}
if(b==5){wu=wu-10;gong=wu;}
if(b==6){liu=liu-10;gong=liu;}
if(b==7){qi=qi-10;gong=qi;}
if(b==8){ba=ba-10;gong=ba;}
} }while(P2_6==0);tj=0;a=20,b=0;} if(tj==0){ switch(P1&0xff)//程序判斷是哪一組搶答 {case 0xef:b=5;TR0=0;P2_7=0;tj=1;for(d=0;d<10000;d++);gong=wu;break;case 0xdf:b=6;TR0=0;P2_7=0;tj=1;for(d=0;d<10000;d++);gong=liu;break;case 0xbf:b=7;TR0=0;P2_7=0;tj=1;for(d=0;d<10000;d++);gong=qi;break;case 0x7f:b=8;TR0=0;P2_7=0;tj=1;for(d=0;d<10000;d++);gong=ba;break;case 0xfe:b=1;TR0=0;P2_7=0;tj=1;for(d=0;d<10000;d++);gong=yi;break;case 0xfd:b=2;TR0=0;P2_7=0;tj=1;for(d=0;d<10000;d++);gong=er;break;case 0xfb:b=3;TR0=0;P2_7=0;tj=1;for(d=0;d<10000;d++);gong=san;break;case 0xf7:b=4;TR0=0;P2_7=0;tj=1;for(d=0;d<10000;d++);gong=si;break;default: break;} } } }
第二篇:C語言實(shí)驗(yàn)報(bào)告,含遞歸(帶程序)
一、寫一個(gè)函數(shù)intdigit(int n,int k),它返回?cái)?shù)n的從右邊向左的第k個(gè)十進(jìn)數(shù)字位值。例如,函數(shù)調(diào)用digit(1234,2)將返回值3。
二、寫一個(gè)函數(shù)intisprime(intn),當(dāng)n是質(zhì)數(shù)時(shí),函數(shù)返回非零值;當(dāng)n是合數(shù)時(shí),函數(shù)返回零值。
三、寫一個(gè)函數(shù)reverse(chars[]),將字符串s[]中的字符存儲(chǔ)位置顛倒后重新存于s[]中。試分別用遞歸和非遞歸兩種形式編寫。
四、寫一個(gè)主函數(shù)輸入測試數(shù)據(jù)(自己指定),并調(diào)用上述函數(shù),檢查函數(shù)功能的正確性。要求:把預(yù)備知識(shí)、步驟、程序框圖、調(diào)試好的程序及存在的問題寫在下面(不夠可以附頁)。
#include
#include
intdigit(int n,int k);
intisprime(intn);
void reverse(chars[]);//非遞歸實(shí)現(xiàn)
void reverse1(chars[]);//遞歸實(shí)現(xiàn)
int digit(int n,int k)
{
int m1,m2,i;
m1=n;
m2=0;
while(m1!=0)//統(tǒng)計(jì)n數(shù)字的位數(shù)
{
m1=m1/10;
m2=m2+1;
}
if(k<=0||k>m2)return 0;//不能正確截取
m1=n;
for(i=1;i m1=m1/10; m2=m1%10;//取第k位 return m2; } intisprime(intn)//是素?cái)?shù)返回1,是合數(shù)返回0 { int i; if(n<0) n=-n; if(n==1)return 0; for(i=2;i<=n/2;i++) if(n%i==0) break; if(i>n/2) return 1; else return 0; } void reverse(chars[],int len)//非遞歸,字符串倒置 { int i;char ch; for(i=0;i { ch=s[i];s[i]=s[len-1-i];s[len-1-i]=ch; } } voidreverse1(chars[],int m,int n)//遞歸方法實(shí)現(xiàn) { char ch; ch=s[m];s[m]=s[n];s[n]=ch; if(m<=n) reverse1(s,m+1, n-1); } void main() { int n=123456,k=4,len; char str[80]=“abcdefghij”,str1[80],str2[80]; if(digit(n,k)==0) printf(“%d輸入錯(cuò)誤n”,k); else printf(“%d的右邊第%d位是:%dn”,n,k,digit(n,k)); if(isprime(k)==0) printf(“%d是合數(shù)n”,k); else printf(“%d是素?cái)?shù)n”,k); len=strlen(str); printf(“原字符串n”); strcpy(str1,str); puts(str1); reverse(str1,len); printf(“倒置以后的字符串n”); puts(str1); }printf(“原字符串n”);strcpy(str2,str);puts(str2);reverse1(str2,0,len-1);printf(“倒置以后的字符串n”);puts(str2); #include unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,//0~f顯示表 0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};unsigned char code table0[]={0xf1,0xf2,0xf4,0xf8}; //P2口位選 unsigned char code table2[]={0xef,0xdf,0xbf,0x7f}; //P3口送行信號(hào) unsigned char display[]={0,0,0,0};//顯示位 void sw1(); //子函數(shù)申明 void sw2();void sw3();void sw4();void xianshi();void init();unsigned char temp,num2,x,x1,x2,a,count; //變量聲明 int num,num1;unsigned char key;unsigned char i,j;sbit P3_4=P3^4;sbit P3_5=P3^5;sbit P3_6=P3^6;sbit P3_7=P3^7;sbit k1=P1^0; //位申明(時(shí)間加)sbit k2=P1^1; //位申明(時(shí)間減)sbit k3=P1^2; //位申明(開始)sbit k4=P1^3; //位申明(復(fù)位)sbit sp=P1^4; //蜂鳴器 sbit l1=P1^5; //LED顯示 sbit l2=P1^6; //LED顯示 void delay(unsigned char z) //延時(shí)1ms子函數(shù) { unsigned char x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);} void init() //初始化子函數(shù) { a=0;TMOD=0x01; //定時(shí)器T0工作方式設(shè)定 TH0=(65536-10000)/256;//裝初值 TL0=(65536-10000)%256;EA=1; //開定時(shí)器T0 ET0=1; if(k1==0) //判斷時(shí)間加K1是否按下 { delay(5); //延時(shí)躲過抖動(dòng) if(k1==0) //再次確認(rèn)是否按下K1 { num++; //時(shí)間自加1 if(num==99) //如果時(shí)間num=99,清零num { num=0; } num2=num; //將num值賦值給num2 while(k1==0);//等待K1松手 } } if(k2==0) //判斷時(shí)間減K2是否按下 { delay(5); //延時(shí)躲過抖動(dòng) if(k2==0) //再次確認(rèn)是否按下K2 { num--; //時(shí)間自減1 if(num==-1)//如果時(shí)間num=-1,賦值num=99 { num=99; } num2=num;//將num值賦值給num2 while(k2==0);//等待K2松手 } } if(k3==0) //判斷開始按鈕K3是否按下 { delay(5); //延時(shí)躲過抖動(dòng) if(k3==0)//再次確認(rèn)是否按下K3 { x++; //自加1 if(x==2)//假如x=2,清零x { x=0; } } } } void keyboad() //按鍵檢測子函數(shù) { while(1) { P3=0xff; //讀引腳前需寫入高電平 P3_4=0; //置第一行線為低 temp=P3; //P3口信息送入temp中 temp=temp & 0x0f;//屏蔽高四位,保留低四位 if(temp!=0x0f)//判斷:假如列線有不為高的時(shí)候,執(zhí)行if循環(huán)體 { delay(5);//延時(shí)躲過抖動(dòng) temp=P3; temp=temp & 0x0f; if(temp!=0x0f) { temp=P3; temp=temp & 0x0f;//判斷是哪個(gè)鍵按下 switch(temp) { case 0x0e: //第一行第四個(gè)按下 {delay(5);num1=4;l2=0;xianshi();} //第一行第一個(gè)鍵按下 break; case 0x0d: //第一行第三個(gè)按下 {delay(5);num1=3;l2=0;xianshi();} break; case 0x0b: //第一行第二個(gè)按下 {delay(5);num1=2;l2=0;xianshi();} break; case 0x07: //第一行第一個(gè)按下 {delay(5);num1=1;l2=0;xianshi();} break;//第一行第一個(gè)鍵按下 } } } P3=0xff; P3_5=0; temp=P3; temp=temp & 0x0f; if(temp!=0x0f) { delay(5);//延時(shí)躲過抖動(dòng) temp=P3; temp=temp & 0x0f; if(temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: {delay(5);num1=8;l2=0;xianshi();} break; case 0x0d: {delay(5);num1=7;l2=0;xianshi();} break; case 0x0b: {delay(5);num1=6;l2=0;xianshi();} break; case 0x07: {delay(5);num1=5;l2=0;xianshi();} break; } } } P3=0xff; P3_6=0; temp=P3; temp=temp & 0x0f; if(temp!=0x0f) { delay(5);//延時(shí)躲過抖動(dòng) temp=P3; temp=temp & 0x0f; if(temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: {delay(5);num1=12;l2=0;xianshi();} break; case 0x0d: {delay(5);num1=11;l2=0;xianshi();} break; case 0x0b: {delay(5);num1=10;l2=0;xianshi();} break; case 0x07: {delay(5);num1=9;l2=0;xianshi();} break; //第二行第四個(gè)鍵按下//第二行第三個(gè)鍵按下//第二行第二個(gè)鍵按下//第二行第一個(gè)鍵按下//第三行第四個(gè)鍵按下//第三行第三個(gè)鍵按下//第三行第二個(gè)鍵按下//第三行第一個(gè)鍵按下 } } } P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f; if(temp!=0x0f) { delay(5);//延時(shí)躲過抖動(dòng) temp=P3; temp=temp & 0x0f; if(temp!=0x0f) { temp=P3; temp=temp & 0x0f; switch(temp) { case 0x0e: {delay(5);num1=16;l2=0;xianshi();} break; case 0x0d: {delay(5);num1=15;l2=0;xianshi();} break; case 0x0b: {delay(5);num1=14;l2=0;xianshi();} break; case 0x07: {delay(5);num1=13;l2=0;xianshi();} break; } temp=P3; P0=table[key]; } } } } void xianshi(){ TR0=0; //停止定時(shí)計(jì)數(shù) num=0; //倒計(jì)時(shí)num清零 sp=1; //成功搶答,蜂鳴器叫 delay(100); //延時(shí)一段時(shí)間 sp=0; //關(guān)蜂鳴器 //第四行第四個(gè)鍵按下//第四行第三個(gè)鍵按下//第四行第二個(gè)鍵按下//第四行第一個(gè)鍵按下 while(1) { for(a=0;a<4;a++)//顯示部分位選 { delay(5); P2=table0[a]; P0=table[display[a]]; } display[0]=num/10; //倒計(jì)時(shí)顯示0 display[1]=num%10; display[2]=num1/10; //顯示搶答者號(hào) display[3]=num1%10; if(k4==0) //判斷復(fù)位鍵K4是否按下 { num=num2; //num2值賦值給num num1=0; //清零搶答者號(hào)顯示 TR0=1; //啟動(dòng)定時(shí)器TO l1=1; //D1,D2關(guān)閉 l2=1; return; } } } void main() //主函數(shù) { l1=1; //D1,D2關(guān)閉 l2=1; sp=0;//初始化蜂鳴器 x=0; num=num2=30; //賦初值 while(1) { if(x==1) //開始鍵按下 { delay(5); TR0=1; //啟動(dòng)定時(shí) while(1) { keyboad();//調(diào)用按鍵檢測子函數(shù) if(k4==0)//判斷復(fù)位鍵是否按下 { l1=1;//D1,D2關(guān)閉 l2=1; delay(5); num=num2;//倒計(jì)時(shí)時(shí)間30秒賦值給num TR0=1;//啟動(dòng)定時(shí)器T0 } } } else //開始鍵沒有按下 { for(a=0;a<4;a++) //顯示部分位選 { delay(5); P2=table0[a]; P0=table[display[a]]; } display[0]=num/10;//倒計(jì)時(shí)顯示0 display[1]=num%10; display[2]=num1/10; //顯示搶答者號(hào) display[3]=num1%10; init(); //初始化 } } } void time0()interrupt 1 //定時(shí)器T0中斷 { TH0=(65536-10000)/256; //重裝初值 TL0=(65536-10000)%256;count++; //中斷次數(shù)記錄 if(k4==0) //復(fù)位鍵K4檢測 { num=num2; TR0=1; num1=0; return; } for(a=0;a<4;a++) { delay(10); P2=table0[a]; P0=table[display[a]]; } display[0]=num/10; //倒計(jì)時(shí)顯示0 display[1]=num%10; display[2]=num1/10;//顯示搶答者號(hào) display[3]=num1%10; if(count==100) //1秒定時(shí)是否已到 { count=0; //清零記錄 num--; //顯示倒計(jì)時(shí)自減一 if(num<6) //倒計(jì)時(shí)倒數(shù)6秒,D2亮,蜂鳴器報(bào)警 { l1=~l1; sp=1; delay(100); sp=0; if(num==0) //倒計(jì)時(shí)為0,D2亮,蜂鳴器報(bào)警 { l1=0; sp=1;delay(200);sp=0; delay(100); sp=1;delay(200);sp=0; delay(100); sp=1;delay(200);sp=0; } if(num==0) { while(1) { xianshi(); //調(diào)用延時(shí)子函數(shù) if(k4==0)//假如復(fù)位鍵按下 { l1=1; //D1,D2滅 l2=1; num=num2;//30秒倒計(jì)時(shí)賦值給num TR0=1;//啟動(dòng)定時(shí)器T0 return; } } } } } x2++;if(x2==4){ x2=0;} P3=table2[x2]; //分別給行線送低電? 工程學(xué)院 實(shí) 驗(yàn) 報(bào) 告 課 程 名 稱: c程序設(shè)計(jì) 課 程 代 碼: 8234510 學(xué)院(直屬系): 年級(jí)/專業(yè)/班: 2010級(jí)汽電1班 學(xué) 生 姓 名: 學(xué) 號(hào): 31201008030 實(shí)驗(yàn)總成績: 任 課 教 師: 開 課 學(xué) 院: 工程學(xué)院 實(shí)驗(yàn)中心名稱: 交通實(shí)驗(yàn)中心 西華大學(xué)實(shí)驗(yàn)報(bào)告(理工類) 開課學(xué)院及實(shí)驗(yàn)室:汽車學(xué)院機(jī)房(5d-215)實(shí)驗(yàn)時(shí)間: 年 月 日 1、實(shí)驗(yàn)?zāi)康?/p> 2、實(shí)驗(yàn)設(shè)備、儀器及材料 3、實(shí)驗(yàn)內(nèi)容 一般實(shí)驗(yàn): 3.1實(shí)驗(yàn)方案設(shè)計(jì)與選擇(設(shè)計(jì)性、創(chuàng)新性實(shí)驗(yàn)需寫該項(xiàng)內(nèi)容)3.2實(shí)驗(yàn)原理及實(shí)驗(yàn)步驟(實(shí)驗(yàn)工作原理或?qū)嶒?yàn)的主要操作過程)3.3實(shí)驗(yàn)記錄(核心代碼及調(diào)試過程) 注解:理工科實(shí)驗(yàn)需記錄實(shí)驗(yàn)過程中的數(shù)據(jù)、圖表、計(jì)算、現(xiàn)象觀察等,實(shí)驗(yàn)過程中出現(xiàn)的問題; 其它如在計(jì)算機(jī)上進(jìn)行的編程、仿真性或模擬性實(shí)驗(yàn)需記錄程序核心代碼以及程序在調(diào)式過程中出現(xiàn)的問題及解決方法;記錄程序執(zhí)行的結(jié)果。 上機(jī)實(shí)驗(yàn): 3.1上機(jī)實(shí)驗(yàn)的內(nèi)容及要求 3.2算法設(shè)計(jì)思想與算法實(shí)現(xiàn)步驟 3.3程序核心代碼,程序調(diào)試過程中出現(xiàn)的問題及解決方法 3.4 程序運(yùn)行的結(jié)果 4、實(shí)驗(yàn)總結(jié) 4.1實(shí)驗(yàn)結(jié)果分析及問題討論 4.2實(shí)驗(yàn)總結(jié)心得體會(huì) 注解:實(shí)驗(yàn)總結(jié)的內(nèi)容根據(jù)不同學(xué)科和類型實(shí)驗(yàn)要求不一樣,一般理工科類的實(shí)驗(yàn)需要對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,并且對(duì)實(shí)驗(yàn)過程中問題進(jìn)行討論;在計(jì)算機(jī)上進(jìn)行的編程、仿真性或模擬性實(shí)驗(yàn)需要對(duì)上機(jī)實(shí)踐結(jié)果進(jìn)行分析,上機(jī)的心得體會(huì)及改進(jìn)意見。其它實(shí)驗(yàn)應(yīng)總結(jié)實(shí)驗(yàn)過程寫出心得體會(huì)及改進(jìn)意見。 1、實(shí)驗(yàn)?zāi)康?1)熟悉c語言的集成環(huán)境,了解菜單的使用方法。(2)掌握c語言程序上機(jī)的編輯、編譯、連接、運(yùn)行的基本步驟。(3)了解c語言程序的結(jié)構(gòu)。 2、實(shí)驗(yàn)設(shè)備、儀器及材料(1)硬件環(huán)境 微型計(jì)算機(jī)(intel x86系列cpu)一臺(tái)(2)軟件環(huán)境 windows98/2000/xp操作系統(tǒng) vc6.0集成開發(fā)環(huán)境 3、實(shí)驗(yàn)內(nèi)容 3.1上機(jī)實(shí)驗(yàn)的內(nèi)容及要求(1)熟悉vc中常用菜單項(xiàng)及對(duì)應(yīng)快捷鍵的使用方法。(2)熟悉c語言程序上機(jī)的編輯、編譯、連接、運(yùn)行的基本步驟。(3)編程實(shí)現(xiàn)一個(gè)字符串的輸出。(4)編程輸出兩個(gè)數(shù)的最大值。(5)計(jì)算由鍵盤輸入的任意兩個(gè)整數(shù)的積。3.2算法設(shè)計(jì)思想與算法實(shí)現(xiàn)步驟(1)編程實(shí)現(xiàn)一個(gè)字符串的輸出為程序一,編程中,定義一個(gè)空函數(shù)后,直接由利用printf輸出字符串。(2)編程輸出兩個(gè)數(shù)的最大值為程序二,編程中,用scanf函數(shù)輸入兩個(gè)數(shù),再用選擇函數(shù)判定兩數(shù)大小,最后用printf函數(shù)輸出最大值。(3)計(jì)算由鍵盤輸入的任意兩個(gè)整數(shù)的積為程序三,編程中,用scanf函數(shù)輸入兩數(shù),再由乘積函數(shù)進(jìn)行求積運(yùn)算。 3.3程序核心代碼,程序調(diào)試過程中出現(xiàn)的問題及解決方法 (1)程序核心代碼 程序一: #include #include #include 當(dāng)分別添加上丟失的符號(hào)后,問題解決,程序編輯成功。3.4 程序運(yùn)行的結(jié)果 程序一運(yùn)行結(jié)果: 程序二運(yùn)行結(jié)果: 程序三運(yùn)行結(jié)果: 4、實(shí)驗(yàn)總結(jié) 4.1程序運(yùn)行結(jié)果分析及思考題討論 根據(jù)程序運(yùn)行結(jié)果和編程之前的預(yù)期結(jié)果一致,說明編程成功。 對(duì)于程序的結(jié)構(gòu)應(yīng)該熟記在心,而且在vc6.0集成開發(fā)環(huán)境中不需要用戶去進(jìn)行連接的操作,這一步的操作電腦會(huì)自動(dòng)完成。4.2實(shí)驗(yàn)總結(jié)心得體會(huì) 對(duì)第一次c語言編程上機(jī)實(shí)驗(yàn),對(duì)編程還有很多不是很熟悉的地方,需要在接下來的學(xué)習(xí)中進(jìn)一步熟 練掌握操作。而且在以后的編程中對(duì)于printf,csanf函數(shù)的運(yùn)用將會(huì)更多。在編程中還必須小心翼翼,如果出現(xiàn)編譯錯(cuò)誤,可參看界面下方的錯(cuò)誤提示,這對(duì)于編程成功很有幫助。 1、實(shí)驗(yàn)?zāi)康钠篶程序設(shè)計(jì)實(shí)驗(yàn)三實(shí)驗(yàn)報(bào)告 實(shí) 驗(yàn) 報(bào) 告 工學(xué)院 土木工程專業(yè) 09級(jí) 2011 至 2012 學(xué) 第 1 學(xué)期 學(xué)號(hào):xxxxxx 姓名:xxxxxx 2011 年10月 08日 第3~4節(jié) 綜合 樓 325教室 篇三:c語言實(shí)驗(yàn)報(bào)告1 實(shí)驗(yàn)名稱:熟悉c程序的運(yùn)行環(huán)境 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 了解turbo c++ 3.0的基本操作方法,學(xué)會(huì)獨(dú)立使用該系統(tǒng) 編輯、編譯、連接和運(yùn)行一個(gè)c程序 通過運(yùn)行簡單的c程序,初步了解c源程序的特點(diǎn) 二、實(shí)驗(yàn)內(nèi)容和原理 1.輸入并運(yùn)行一個(gè)簡單、正確的程序 # include 三、實(shí)驗(yàn)環(huán)境 1.硬件:pc機(jī); 2.軟件:windows操作系統(tǒng)、turboc++ 3.0。 四、算法描述及實(shí)驗(yàn)步驟 1.內(nèi)容1(1)啟動(dòng)tc++3.0,新建一個(gè)c文件; (2)輸入程序1; (3)保存文件; (4)編譯源程序,觀察屏幕上顯示的編譯信息,修改出現(xiàn)的錯(cuò)誤,直到編譯成功,再次保存文件; (5)連接程序、運(yùn)行程序,觀察運(yùn)行結(jié)果。2.內(nèi)容2(1)啟動(dòng)tc++3.0,新建一個(gè)c文件; (2)輸入程序2; (3)保存文件; (4)編譯源程序,觀察屏幕上顯示的編譯信息,修改出現(xiàn)的錯(cuò)誤,直到編譯成功; (5)連接程序、運(yùn)行程序,觀察運(yùn)行結(jié)果。3.內(nèi)容3(1)啟動(dòng)tc++3.0,新建一個(gè)c文件; (2)輸入程序2; (3)保存文件; (4)編譯源程序,觀察屏幕上顯示的編譯信息,修改出現(xiàn)的錯(cuò)誤,直到編譯成功; (5)連接程序、運(yùn)行程序; (6)輸入數(shù)據(jù),觀察運(yùn)行結(jié)果。 五、調(diào)試過程 1.輸入后,按alt+f9編譯,出現(xiàn)如下信息: 成功編譯。 2.輸入后,按alt+f9編譯,出現(xiàn)如下信息: 經(jīng)分析是由于int a, b, sum與sum=a+b倆句未加;導(dǎo)致。3.輸入后,按alt+f9編譯,出現(xiàn)如下信息: 經(jīng)分析是由于int a, b, c句未加;導(dǎo)致。 修改后編譯結(jié)果如下: 六、實(shí)驗(yàn)結(jié)果 1.2.3.輸入123,654運(yùn)行結(jié)果如下: 輸入1989,1988運(yùn)行結(jié)果如下: 七、總結(jié) 經(jīng)過本次上機(jī)實(shí)驗(yàn),我基本了解turbo c++ 3.0的操作方法,學(xué)會(huì)在該系統(tǒng)上編輯、編譯、連接和運(yùn)行一個(gè)c程序。同時(shí)也明白在編譯過程中應(yīng)留心一些細(xì)節(jié)問題(如一個(gè)語句結(jié)束要加“;”),也學(xué)會(huì)通過編譯錯(cuò)誤信息找出錯(cuò)誤,并修正錯(cuò)誤。 實(shí)驗(yàn)名稱:數(shù)據(jù)類型、函數(shù)和表達(dá)式 八、實(shí)驗(yàn)?zāi)康暮鸵?/p> 掌握c語言數(shù)據(jù)類型,熟悉如何定義整型、字符型和實(shí)型變量并賦值 掌握不同類型數(shù)據(jù)之間賦值的規(guī)律 學(xué)會(huì)使用c的有關(guān)算法運(yùn)算符及表達(dá)式,特別是自加(++)和自減(--)運(yùn)算符的使用 進(jìn)一步熟悉c程序的編輯、編譯、連接和運(yùn)行的過程 九、實(shí)驗(yàn)內(nèi)容和原理 2.輸入并運(yùn)行下面程序,分析運(yùn)行結(jié)果。# include m=++i; n=j++; printf(%d,%d,%d,%d,i,j,m,n); } 十、實(shí)驗(yàn)環(huán)境 1.硬件:pc機(jī); 2.軟件:windows操作系統(tǒng)、turboc++ 3.0。 十一、算法描述及實(shí)驗(yàn)步驟 (1)啟動(dòng)tc++3.0,新建一個(gè)c文件; (2)輸入程序; (3)保存文件; (4)編譯源程序,觀察屏幕上顯示的編譯信息,修改出現(xiàn)的錯(cuò)誤,直到編譯成功; (5)連接程序、運(yùn)行程序,觀察分析運(yùn)行結(jié)果。 十二、調(diào)試過程 1.經(jīng)分析錯(cuò)誤是由于printf(%c%c, c1, c2)后未加;導(dǎo)致。 修改后運(yùn)行如下: 2.成功運(yùn)行 3.printf(%u, %un a, b);改成printf(%u, %un, a, b);成功運(yùn)行 4. 成功運(yùn)行。 十三、實(shí)驗(yàn)結(jié)果 1.2.3.4.十四、總結(jié)篇四:c程序?qū)嶒?yàn)報(bào)告 《程序設(shè)計(jì)綜合訓(xùn)練》 第一部分 設(shè) 計(jì) 報(bào) 告 專 業(yè): 軟件工程 班 級(jí): 12軟件1 學(xué) 號(hào): 12144131 姓 名: 陳 雷 指導(dǎo)教師: 錢 進(jìn)、呂 萍 成 計(jì)算機(jī)工程學(xué)院 2013年3月 目 錄 (1)題目名稱、內(nèi)容、來源(如2010年省計(jì)算機(jī)等級(jí)考試秋季上機(jī)試卷2)。 (2)解題的基本思路,(3)設(shè)計(jì)方案,功能模塊框圖與程序流程圖等。 (4)算法設(shè)計(jì):算法描述、實(shí)現(xiàn)方法、詳細(xì)流程圖等。 (5)源代碼:主要模塊的代碼與注釋。 (6)程序調(diào)試:調(diào)試過程與步驟,發(fā)現(xiàn)的問題,解決的辦法等。 (7)測試:運(yùn)行程序,輸入測試數(shù)據(jù),判斷是否達(dá)到預(yù)期目的。測試數(shù)據(jù)要有 典型意義,要注意臨界值的選取,注意測試數(shù)據(jù)的廣泛性和普適性。第二部分 (1)題目名稱、內(nèi)容。 (2)解題的基本思路,(3)設(shè)計(jì)方案,功能模塊框圖與程序流程圖等。 (4)算法設(shè)計(jì):算法描述、實(shí)現(xiàn)方法、詳細(xì)流程圖等。 (5)程序調(diào)試:調(diào)試過程與步驟,發(fā)現(xiàn)的問題,解決的辦法等。 (6)測試:運(yùn)行程序,輸入測試數(shù)據(jù),判斷是否達(dá)到預(yù)期目的。測試數(shù)據(jù)要有 典型意義,要注意臨界值的選取,注意測試數(shù)據(jù)的廣泛性和普適性。 (7)總結(jié):收獲與體會(huì),有實(shí)際內(nèi)容,忌空洞無物,忌千篇一律,400字左右。 (8)附錄:源代碼(含注釋)。 第一部分 2010秋03等級(jí)考試 1.編寫函數(shù)int noco(int n,int *a)。函數(shù)動(dòng)能是驗(yàn)證是驗(yàn)證n的立方可表示為n個(gè)連續(xù)奇數(shù)之和,若找到這樣的表示則將連續(xù)奇數(shù)按從小到大的順序存放到a指向的數(shù)組中并且函數(shù)返回1,否則函數(shù)返回0。2.編寫函數(shù)main。函數(shù)功能是聲明數(shù)組a,分別用整數(shù)1~10及數(shù)組a作為實(shí)參調(diào)用函數(shù)noco,并將結(jié)果數(shù)據(jù)按以下屏幕輸出所示形式輸出到屏幕及文件myf2.out中。#include printf(%d^3=,n); } else { printf(false);} fprintf(fp,false);fprintf(fp,%d^3=,n);for(i=0;i } k=k-2;for(j=0;j 1.編寫函數(shù)long find_m(int n)。函數(shù)功能是查找滿足以下條件的整數(shù)m:(1)m是 n的整數(shù)倍;(2)m的十進(jìn)制表示中僅由0和1組成。函數(shù)返回找到的m的值。2.編寫main 函數(shù)。函數(shù)功能是聲明變量n和m,輸入一個(gè)整數(shù)到n中(n<100), 用n作實(shí)參調(diào)用函數(shù)find_m,將n及找到的整數(shù)m輸出到屏幕及文件myf2.out.#include 一列(列下標(biāo)為0)和第二列(列下標(biāo)為1)的值按如下規(guī)則生成第3列各元素的值,再以行為單位重排a數(shù)組各行元素的值,使得所有行按第3列元素從小到大有序。 第3列生成規(guī)則: 用數(shù)組a作為實(shí)參調(diào)用cresort函數(shù),將a數(shù)組中數(shù)據(jù)輸出到屏幕及文件myf2.out.#include stdio.h #define n 5 int isprime(int m){ int i;} void cresort(int a[][3],int n){ int i,j,k,m,c,t;for(i=0;i switch(c){ case 0:a[i][2]=1;break;case 2:a[i][2]=4;break;for(i=2;i<=m/2;i++)if(m%i==0)return 0;return 1;篇五:c程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告 《c語言程序設(shè)計(jì)》實(shí)驗(yàn)報(bào)告 學(xué)號(hào) 不告訴你哦~ 班級(jí) 信管一班 姓名 你猜猜~哈哈 一、實(shí)驗(yàn)題目 一、編程實(shí)驗(yàn) 猜數(shù)問題:輸入兩個(gè)整數(shù),并求這兩個(gè)整數(shù)的和,輸入所猜的結(jié)果,如果輸入數(shù)比正確的結(jié)果要大,提示“猜大了”;如果輸入數(shù)比正確的結(jié)果要小,提示“猜小了”;當(dāng)猜對(duì)結(jié)果時(shí)提示“猜對(duì)了”,結(jié)束游戲(用函數(shù)調(diào)用方式編程)。 二、程序改錯(cuò)實(shí)驗(yàn) 輸入一個(gè)數(shù)字 b,求sum=b+bb+bbb+?,改正下列程序中的錯(cuò)誤。#include “stdio.h” main(){ int i,j;long int b,sum,temp;scanf(“%d”,&b);do { i++;for(j=0;j<=i;j++)temp+=(long int)pow(10,j-1)*b;sum+=temp;} while(i<=3)printf(“sum=%d”,sum);} 三、編程實(shí)驗(yàn) 編寫兩個(gè)矩陣相加減的程序,兩矩陣的行列數(shù)均由用戶輸入(兩矩陣的行列數(shù)要限制最大值),在屏幕上分行列打印出結(jié)果(矩陣元素為整型變量)。 解析:兩個(gè)矩陣可以定義兩個(gè)二維數(shù)組matrixl[m][n],matrix2[m][n]存放,用二重循環(huán)進(jìn)行輸入輸出或?qū)崿F(xiàn)對(duì)應(yīng)元素的相加或相減運(yùn)算,相加后矩陣元素存放在matrixl中,相減后矩陣元素存放在matrix2中(上機(jī)實(shí)驗(yàn)時(shí)輸入矩陣的行數(shù)m=10, 矩陣的列數(shù)n=10)。 #include void delay_100ms(unsigned int t){ unsigned char i,j,k;for(i=t;i>0;i--){ for(j=200;j>0;j--); { for(k=248;k>0;k--); } } } void beep(){ BEEP=1; delay_100ms(100); BEEP=0; } void T0_int()interrupt 1 { static unsigned char count;unsigned char a=1;count++; TH0=(65536-50000)/256; TL0=(65536-50000)%256;if(count==20){ count=0; P0=TAB[pulse_number1--]; } beep(); if(pulse_number1==0) { P0=TAB[0]; TR0=0; while(a) { beep();if(!key5)a=0; } } } void main(){ bit flag; temp=0x00; P2=temp; P0=0x3f; TMOD=0x01; TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1; TR0=1; while(!flag) { } while(flag);} if(!key1){P0=0x06;beep();flag=1;TR0=0;} else if(!key2){P0=0x5b;beep();flag=1;TR0=0;} else if(!key3){P0=0X4f;beep();flag=1;TR0=0;} else if(!key4){P0=0x66;beep();flag=1;TR0=0;}第三篇:4路搶答器設(shè)計(jì)程序
第四篇:C程序?qū)嶒?yàn)報(bào)告
第五篇:51單片機(jī)四路搶答器程序