真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

函數(shù)實(shí)驗(yàn)報(bào)告c語(yǔ)言,函數(shù)實(shí)驗(yàn)報(bào)告c語(yǔ)言怎么寫(xiě)

c語(yǔ)言函數(shù)實(shí)驗(yàn)報(bào)告

#includestdio.h

10年積累的網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有鳳凰免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

int main()

{

int sum(int);

int factorial(int);

int n,s;

long int p;

printf("請(qǐng)輸入n值:\n");

scanf("%d",n);

s=sum(n);

p=factorial(n);

printf("1+2+3+...+n=%d\n",s);

printf("n!=%ld\n",p);

return 0;

}

int sum(int x)

{

int a=0;

for(int i=0;i=x;i++)

a=a+i;

return a;

}

int factorial(int y)

{

int b=1;

for(int i=1;i=y;i++)

b=b*i;

return b;

}

因?yàn)殡A乘會(huì)得到很大的結(jié)果,會(huì)超出p的范圍,所以n值不能太大,否則階乘沒(méi)有結(jié)果(或不對(duì)),只有加法的結(jié)果;

咋寫(xiě)C語(yǔ)言實(shí)驗(yàn)報(bào)告

c(c++)上機(jī)實(shí)驗(yàn)報(bào)告格式:

⒈ ?實(shí)驗(yàn)?zāi)康??

(1) 了解在具體的語(yǔ)言環(huán)境下如何編輯、編譯、連接和運(yùn)行一個(gè) C 程序。

⑵ 通過(guò)運(yùn)行簡(jiǎn)單的 C 程序,初步了解 C 源程序的特點(diǎn)。

⑶ 掌握 C 語(yǔ)言數(shù)據(jù)類型,熟悉如何定義一個(gè)整型、字符型和實(shí)型的變量,以及對(duì)它們賦值的方法。

⑷ 掌握不同的類型數(shù)據(jù)之間賦值的規(guī)律。

⑸ 學(xué)會(huì)使用 C 的有關(guān)算術(shù)運(yùn)算符,以及包含這些運(yùn)算符的表達(dá)式,特別是自加(++)和自減(--)運(yùn)算符的使用。

2.實(shí)驗(yàn)內(nèi)容和步驟

⑴ ?檢查所用的計(jì)算機(jī)系統(tǒng)是否已安裝了 C 編譯系統(tǒng)并確定他所在的子目錄。

⑵ 進(jìn)入所用的集成環(huán)境。

⑶ 熟悉集成環(huán)境的界面和有關(guān)菜單的使用方法。

⑷ 輸入并運(yùn)行一個(gè)簡(jiǎn)單的、正確的程序。

⒊ 實(shí)驗(yàn)題目

⑴ 輸入下面的程序

# include “stdio.h” void main()

{ printf(“This is a c program.\n”); }

程序無(wú)誤,其運(yùn)行的結(jié)果為:

c語(yǔ)言實(shí)驗(yàn)報(bào)告心得

c語(yǔ)言實(shí)驗(yàn)心得:

1、只有頻繁用到或?qū)\(yùn)算速度要求很高的變量才放到data區(qū)內(nèi),如for循環(huán)中的計(jì)數(shù)值。

2、其他不頻繁調(diào)用到和對(duì)運(yùn)算速度要求不高的變量都放到xdata區(qū)。

3、常量放到code區(qū),如字庫(kù)、修正系數(shù)。

4、邏輯標(biāo)志變量可以定義到bdata中。

在51系列芯片中有16個(gè)字節(jié)位尋址區(qū)bdata,其中可以定義8*16=128個(gè)邏輯變量。這樣可以大大降低內(nèi)存占用空間。定義方法是: bdata bit LedState;但位類型不能用在數(shù)組和結(jié)構(gòu)體中。

5、data區(qū)內(nèi)最好放局部變量。

因?yàn)榫植孔兞康目臻g是可以覆蓋的(某個(gè)函數(shù)的局部變量空間在退出該函數(shù)是就釋放,由別的函數(shù)的局部變量覆蓋),可以提高內(nèi)存利用率。當(dāng)然靜態(tài)局部變量除外,其內(nèi)存使用方式與全局變量相同;

6、確保程序中沒(méi)有未調(diào)用的函數(shù)。

在Keil C里遇到未調(diào)用函數(shù),編譯器就將其認(rèn)為可能是中斷函數(shù)。函數(shù)里用的局部變量的空間是不釋放,也就是同全局變量一樣處理。這一點(diǎn)Keil做得很愚蠢,但也沒(méi)辦法。

7、如果想節(jié)省data空間就必須用large模式。

將未定義內(nèi)存位置的變量全放到xdata區(qū)。當(dāng)然最好對(duì)所有變量都要指定內(nèi)存類型。

8、使用指針時(shí),要指定指針指向的內(nèi)存類型。

在C51中未定義指向內(nèi)存類型的通用指針占用3個(gè)字節(jié);而指定指向data區(qū)的指針只占1個(gè)字節(jié);指定指向xdata區(qū)的指針占2個(gè)字節(jié)。如指針p是指向data區(qū),則應(yīng)定義為: char data *p;。還可指定指針本身的存放內(nèi)存類型,如:char data * xdata p;。其含義是指針p指向data區(qū)變量,而其本身存放在xdata區(qū)。

以前沒(méi)搞過(guò)C51,大學(xué)時(shí)代跟單片機(jī)老師的時(shí)候也是搗鼓下匯編,現(xiàn)在重新搞單片機(jī),因?yàn)槭诸^資料不多,找到一些C51的程序,發(fā)現(xiàn)里面有這些關(guān)鍵字,不甚明了,沒(méi)辦法只好找了下,發(fā)現(xiàn)如下描述:

從數(shù)據(jù)存儲(chǔ)類型來(lái)說(shuō),8051系列有片內(nèi)、片外程序存儲(chǔ)器,片內(nèi)、片外數(shù)據(jù)存儲(chǔ)器,片內(nèi)程序存儲(chǔ)器還分直接尋址區(qū)和間接尋址類型,分別對(duì)應(yīng)code、data、xdata、idata以及根據(jù)51系列特點(diǎn)而設(shè)定的pdata類型,使用不同的存儲(chǔ)器,將使程序執(zhí)行效率不同,在編寫(xiě)C51程序時(shí),最好指定變量的存儲(chǔ)類型,這樣將有利于提高程序執(zhí)行效率(此問(wèn)題將在后面專門(mén)講述)。與ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各種不同的模式對(duì)應(yīng)不同的實(shí)際硬件系統(tǒng),也將有不同的編譯結(jié)果。

在51系列中data,idata,xdata,pdata的區(qū)別

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

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

xdata:外部擴(kuò)展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問(wèn)。

pdata:外部擴(kuò)展RAM的低256個(gè)字節(jié),地址出現(xiàn)在A0-A7的上時(shí)讀寫(xiě),用movx ACC,@Rx讀寫(xiě)。這個(gè)比較特殊,而且C51好象有對(duì)此BUG,建議少用。但也有他的優(yōu)點(diǎn),具體用法屬于中級(jí)問(wèn)題,這里不提。

三、有關(guān)單片機(jī)ALE引腳的問(wèn)題

"單片機(jī)不訪問(wèn)外部鎖存器時(shí)ALE端有正脈沖信號(hào)輸出,此頻率約為時(shí)鐘振蕩頻率的1/6.每當(dāng)訪問(wèn)

外部數(shù)據(jù)存儲(chǔ)器是,在兩個(gè)機(jī)器周期中ALE只出現(xiàn)一次,即丟失一個(gè)ALE脈沖."這句話是不是有毛

病.我覺(jué)得按這種說(shuō)法,應(yīng)該丟失3個(gè)ALE脈沖才對(duì),我一直想不通是怎么回事,希望大蝦們幫幫我.

小弟感激涕零.

答:

其他所有指令每6個(gè)機(jī)器周期發(fā)出一個(gè)ALE,而MOVX指令占用12個(gè)機(jī)器周期只發(fā)出一個(gè)ALE

四、如何將一個(gè)INT型數(shù)據(jù)轉(zhuǎn)換成2個(gè)CHAR型數(shù)據(jù)?

經(jīng)keil優(yōu)化后,char1=int1/256,char2=int1%256或char1=int18,char2=int10x00ff效率是一樣的。

五、在KEIL C51上仿真完了,怎樣生成HEX文件去燒寫(xiě)??

右鍵點(diǎn)項(xiàng)目中Target 1,選第二個(gè),在OUTPUT中選中CREAT HEX

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

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

typedef unsigned char UCHAR ;

#define unsigned char UCHAR ;

typedef命名一個(gè)新的數(shù)據(jù)類型,但實(shí)際上這個(gè)新的數(shù)據(jù)類型是已經(jīng)存在的,只不過(guò)是定義了

一個(gè)新的名字.

#define只是一個(gè)標(biāo)號(hào)的定義.

你舉的例子兩者沒(méi)有區(qū)別,但是#define還可以這樣用

#define MAX 100

#define FUN(x) 100-(x)

#define LABEL

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

七、請(qǐng)問(wèn)如何設(shè)定KELC51的仿真工作頻(時(shí)鐘)

用右鍵點(diǎn)擊左邊的的target 1,然后在xtal一欄輸入

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

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

九、C51中對(duì)于Px.x的訪問(wèn)必須自己定義嗎?

是的。

如sbit P17 = 0x97;即可定義對(duì)P1.7的訪問(wèn)

十、SWITCH( )語(yǔ)句中表達(dá)式不可以是位變量對(duì)嗎?

可以用位變量:

#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 變量只有兩種狀態(tài),if 語(yǔ)句足夠啦,!!!

十一、const常數(shù)聲明占不占內(nèi)存???

const 只是用來(lái)定義“常量”,所占用空間與你的定義有關(guān),如:

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

占用代碼空間;而如:

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

當(dāng)然占用內(nèi)存空間。

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

十二、philips的單片機(jī)P89C51RD+的擴(kuò)展RAM在C51中如何使用?

試一試將auxr.1清0,然后在c語(yǔ)言中直接聲明xdata類型的變量

十三、BUG of Keil C51

程序中用如下語(yǔ)句:

const unsigned char strArr[] = {"數(shù)學(xué)"};

結(jié)果發(fā)現(xiàn)strArr[] 內(nèi)容為 {0xCA,0xD1,0xA7},真奇怪!

凡是有0xfd,則會(huì)通通不見(jiàn)了,所以只能手工輸入內(nèi)碼了,例如 uchar strArr[]=

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

十四、Keil C51中如何實(shí)現(xiàn)代碼優(yōu)化?

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

看到Code optimization了嗎?

十五、請(qǐng)教c的!和 ~ 符號(hào)有甚區(qū)別??

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

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

我怎么看到有的要,有的不要,請(qǐng)高手給講講,到底咋回事?謝了

要輸出1的,除非你能保證之前已經(jīng)是1,而中間沒(méi)有輸出過(guò)其他值。

十七、當(dāng)定時(shí)器1(T1)用于產(chǎn)生波特率時(shí),P3^5還是否可以用作正常的I/O口呢?

p3.5完全可以當(dāng)普通的io使用

十八、C51中 INT 轉(zhuǎn)換為 2個(gè)CHAR?

各位高手:

C51中 INT 轉(zhuǎn)換為 CHAR 如何轉(zhuǎn)換諸如:

X = LOW(Z);

Y = HIGH(Z);

答:

x=(char)z;

y=(char)(z8);

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

現(xiàn)在對(duì)位操作指令我一些不太明白請(qǐng)各位多多指教:

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

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

SETB 77H

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

20h-2fh每字節(jié)有8個(gè)可位操作(00h-7fh),其它RAM不可位直接操作

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

char *addr=0xc000;

char xdata *addr=0xc000;

除了在內(nèi)存中占用的字節(jié)不同外,還有別的區(qū)別嗎?

char *addr=0xc000; 是通用定義,指針變量 addr 可指向任何內(nèi)存空間的值;

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

后一種定義中該指針變量(addr)將少占用一個(gè)存儲(chǔ)字節(jié)。

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

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

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

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

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

假設(shè),P1_0為單片機(jī)P1口的第一腳,請(qǐng)問(wèn),

while(P1_0)

{

P1_0=0;

}

while(!P1_0)

{

P1_0=1;

}

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

仿真運(yùn)行看看就知道了,

我仿真了試了一下,約14個(gè)周期

二十二、怎樣編寫(xiě)C51的watchdog程序?

各位大蝦,我用KEIL C51 編寫(xiě)了一個(gè)帶外部開(kāi)門(mén)狗的程序,可程序無(wú)法運(yùn)行起來(lái),經(jīng)過(guò)查

找,發(fā)現(xiàn)程序在經(jīng)過(guò)C51編譯后,在MAIN()函數(shù)的前部增加了一端初始化程序,等到進(jìn)入

主程序設(shè)置開(kāi)門(mén)狗時(shí),開(kāi)門(mén)狗已經(jīng)時(shí)間到,將我的程序復(fù)位了,請(qǐng)問(wèn)我怎樣才能修改這一端

初始花程序,使他一運(yùn)行,就設(shè)置開(kāi)門(mén)狗?

可以在startup.a51中加入看門(mén)狗刷新指令,當(dāng)然用匯編,然后重新編譯startup.a51

,將他和你的程序連接即可。新的startup.a51會(huì)自動(dòng)代替系統(tǒng)默認(rèn)的啟動(dòng)模塊。

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

直接加入即可

注意不要改動(dòng)?STACK,?C_START,?C_STARTUP等符號(hào)。startup.a51直接加入項(xiàng)目,不用修改也可。可在內(nèi)面自己修改匯編的一些限制或堆棧指針。

二十四、關(guān)于波特率的設(shè)置

我在設(shè)定串口波特率時(shí)發(fā)現(xiàn)一個(gè)問(wèn)題:在晶體震蕩器為11.0592MHz時(shí),若設(shè)9600BPS的話,

TH1=0XFD,TL1=0XFD,而要設(shè)19200BPS的話,TH1、TL1有否變化,如果沒(méi)變,為什么?

如果變了,又為什么?(因?yàn)槲铱磿?shū)上倆個(gè)是一樣的),希望大家點(diǎn)撥。

答:

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

TH1和TL1的值不變.

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

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

DSEG AT 20H

AA: DS 10

這樣C51就不會(huì)占用20H--29H了

或者在c51里這樣定義:

uchar data asm_buff[10] _at_ 0x20;

二十六、問(wèn)浮點(diǎn)運(yùn)算問(wèn)題

我在用C51時(shí)發(fā)現(xiàn)它對(duì)傳遞浮點(diǎn)參數(shù)的個(gè)數(shù)有限制,請(qǐng)問(wèn):

1)參數(shù)是以全局變量的形式傳遞的,請(qǐng)問(wèn)以全局變量的形式傳遞的參數(shù)也有限制嗎?

2)這種傳遞浮點(diǎn)參數(shù)的限制有多少呢?

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

答:

由于KEIL C51的參數(shù)傳遞是通過(guò)R0-R7來(lái)傳遞的,所以會(huì)有限制。

不過(guò)KEIL提供了一個(gè)編譯參數(shù),可以支持更多參數(shù)的傳遞。具體

的內(nèi)容見(jiàn)KEIL的PDF文檔。

我建議你把多個(gè)要傳遞的參數(shù)定義到指針或結(jié)構(gòu)體中去,傳遞參

數(shù)通過(guò)指針或結(jié)構(gòu)進(jìn)行,這樣好一些。

第3個(gè)問(wèn)題回答是YES,你自己試試不就知道了。

二十七、如何在某一個(gè)地址定義ram

用_at_ 命令,這樣可以定位靈活一點(diǎn)的地址

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

將dis_buff[16]定位在0x6020開(kāi)始的16個(gè)字節(jié)

二十八、keil c中,用什么函數(shù)可以得到奇偶校驗(yàn)位?

例如32位數(shù)據(jù),將四個(gè)字節(jié)相互異或后檢查P即可,若耽心P被改變,可用內(nèi)嵌匯編。

#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語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告怎么寫(xiě)啊

只是個(gè)例子,不可照抄。

實(shí)驗(yàn)內(nèi)容與要求:

[實(shí)驗(yàn)內(nèi)容]

1、 通過(guò)本試驗(yàn)初步培養(yǎng)計(jì)算機(jī)邏輯解題能力。熟練掌握賦值語(yǔ)句和if語(yǔ)句的應(yīng)用;掌握switch多路分支語(yǔ)句和if嵌套語(yǔ)句的使用

2、 將前期所學(xué)習(xí)到的基本數(shù)據(jù)類型、運(yùn)算符和表達(dá)式等程序設(shè)計(jì)基礎(chǔ)知識(shí)運(yùn)用于具體的程序設(shè)計(jì)。

3、 進(jìn)一步熟練掌握輸入輸出函數(shù)scanf, printf和getchar的使用,熟悉math.h中常用數(shù)學(xué)函數(shù)的使用方法

4、 掌握循環(huán)語(yǔ)句的應(yīng)用方法。

5、 了解隨機(jī)數(shù)生成函數(shù)。

[實(shí)驗(yàn)要求]

在規(guī)定期限獨(dú)立完成實(shí)驗(yàn)內(nèi)容

1、 提交實(shí)驗(yàn)報(bào)告(電子版)

2、 提交相應(yīng)源程序文件(文件名 EX6_x姓名.c, 如EX6_1彭健.c)

3、 要求從簡(jiǎn)單到復(fù)雜,后面的要求均在前面的基礎(chǔ)上進(jìn)行修改,前六題,每題均需要保留各自的程序,六題以后,每題均在前一題基礎(chǔ)上修改,保留最后一個(gè)程序即可(如做到第九題,則保留EX6_9姓名.c,做到第11題,則保留ex6_11姓名.c)

二、實(shí)驗(yàn)原理和設(shè)計(jì)方案:

1、函數(shù)頭的選則,while循環(huán)語(yǔ)句,switch(case)語(yǔ)句,條件表達(dá)式,if else條件語(yǔ)句,自增運(yùn)算符,設(shè)置復(fù)雜變量,輸出隨機(jī)操作數(shù)。

2、 變量要有分?jǐn)?shù)變量和等級(jí)變量,要有選擇算法題數(shù)的變量和計(jì)算正確與否的變量,要有隨機(jī)輸出的兩個(gè)操作數(shù)變量和自己按運(yùn)算符號(hào)輸入結(jié)果的變量,最后還有判斷是否要進(jìn)行的變量字符。中間結(jié)果有選擇運(yùn)算符的switch()和分?jǐn)?shù)等級(jí)的switch()和錯(cuò)題對(duì)題的自增和選擇運(yùn)算符計(jì)算的自增。

3、 問(wèn)題的分析方法:先考慮設(shè)置整形變量和字符變量,考慮到要不斷循環(huán)計(jì)算,選擇用while語(yǔ)句來(lái)循環(huán)。在循環(huán)體中,將前面的輸出提示運(yùn)算符,和自行選擇運(yùn)算符、答案及輸出隨機(jī)操作數(shù)完成。再用switch語(yǔ)句對(duì)選擇的運(yùn)算符進(jìn)行判斷,并用變量進(jìn)行自增運(yùn)算,計(jì)算出錯(cuò)題于對(duì)題個(gè)數(shù)和選擇了那種運(yùn)算符號(hào)。在循環(huán)體最后用if else語(yǔ)句來(lái)判斷是否繼續(xù)執(zhí)行還是跳出循環(huán)。最后根據(jù)自增計(jì)算的結(jié)果和公式進(jìn)行分?jǐn)?shù)計(jì)算,并用switch語(yǔ)句來(lái)是想等級(jí)的制定。

三、源代碼

#includestdio.h

#includestdlib.h

#includetime.h

void main()

{

..........

}

四、試驗(yàn)結(jié)果和啟發(fā)

因?yàn)檩斎難要繼續(xù)循環(huán),所以選擇用while語(yǔ)句。在while語(yǔ)句中要結(jié)合前面的按提示計(jì)算,并嵌套switch語(yǔ)句并用條件表達(dá)式,來(lái)計(jì)算結(jié)果正確與否,計(jì)算的題型是什么。最后再用switch語(yǔ)句來(lái)完成分?jǐn)?shù)等級(jí)的判斷。

五、實(shí)驗(yàn)體會(huì):

描述自己在編程或程序編譯運(yùn)行中遇到的難點(diǎn)和問(wèn)題及解決的辦法。


分享文章:函數(shù)實(shí)驗(yàn)報(bào)告c語(yǔ)言,函數(shù)實(shí)驗(yàn)報(bào)告c語(yǔ)言怎么寫(xiě)
URL分享:http://weahome.cn/article/dsicchj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部