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

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

C語(yǔ)言上機(jī)實(shí)驗(yàn)九函數(shù) c語(yǔ)言上機(jī)實(shí)驗(yàn)九答案

4、設(shè)計(jì)一個(gè)函數(shù),當(dāng)給定一個(gè)整數(shù)后,能得到該數(shù)的補(bǔ)碼(應(yīng)考慮該整數(shù)是正數(shù)或負(fù)數(shù))。

實(shí)驗(yàn)一 C語(yǔ)言程序初步

創(chuàng)新互聯(lián)公司是專(zhuān)業(yè)的敖漢網(wǎng)站建設(shè)公司,敖漢接單;提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行敖漢網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

[實(shí)驗(yàn)?zāi)康暮鸵骫

1、 熟悉C語(yǔ)言運(yùn)行環(huán)境。

2、 掌握C語(yǔ)言程序的書(shū)寫(xiě)格式和C語(yǔ)言程序的結(jié)構(gòu)。

3、 掌握C語(yǔ)言上機(jī)步驟,了解運(yùn)行一個(gè)C程序的方法。

4、 本實(shí)驗(yàn)可在學(xué)習(xí)完教材第一章后進(jìn)行。

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

1、輸入一個(gè)簡(jiǎn)單的C語(yǔ)言程序:輸入矩形的兩條邊,求矩形的面積。

[分析與討論]

1、記下在調(diào)試過(guò)程中所發(fā)現(xiàn)的錯(cuò)誤、系統(tǒng)給出的出錯(cuò)信息和對(duì)策。分析討論對(duì)策成功或失敗的原因。

2、總結(jié)C程序的結(jié)構(gòu)和書(shū)寫(xiě)規(guī)則。

實(shí)驗(yàn)二 數(shù)據(jù)類(lèi)型、運(yùn)算符和表達(dá)式

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

1.熟練表達(dá)式的表示方法

2.了解表達(dá)式的運(yùn)行結(jié)果

3.了解C語(yǔ)言中數(shù)據(jù)類(lèi)型的意義

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

1. 用printf函數(shù)來(lái)輸入表達(dá)式運(yùn)行結(jié)果

2. 程序試圖計(jì)算由鍵盤(pán)輸入的任意兩個(gè)整數(shù)的平均值:

[問(wèn)題討論]

1.“=”和“==”有什么區(qū)別?

2.“”和“”、“|”和“||”有什么區(qū)別?

3. 如何正確地選用數(shù)據(jù)類(lèi)型?

實(shí)驗(yàn)三 選擇結(jié)構(gòu)

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

1、了解條件與程序流程的關(guān)系

2、了解用不同的數(shù)據(jù)使程序的流程覆蓋不同的語(yǔ)句、分支和路徑。

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

1、題目

有如下程序段:

{……

if (a1b= =0) x=x/a;

if(a==2||x1) x=x+1;

}

為了更容易明白程序的邏輯結(jié)構(gòu),要求用流程圖來(lái)加以描述。

要求增加一些輸入語(yǔ)句和輸出語(yǔ)句,以便使上述程序能在不同的a,b和x值下運(yùn)行,并且能觀察程序流程經(jīng)過(guò)(覆蓋)了哪些語(yǔ)句、哪些分支及哪些路徑。

[分析討論]

(1) 用哪一組數(shù)據(jù)就可使程序中的每個(gè)處理語(yǔ)句都執(zhí)行一次?為了找出程序中各條處理語(yǔ)句中的錯(cuò)誤,應(yīng)該使用什么樣的數(shù)據(jù)對(duì)程序進(jìn)行測(cè)試?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。

(2) 用哪兩組數(shù)據(jù)就可以使程序段中的每個(gè)分支都運(yùn)行一次?這種情形與上面的討論有何不同?如果為了找出程序中積壓分支中的錯(cuò)誤,應(yīng)該使用什么樣的數(shù)據(jù)對(duì)程序進(jìn)行測(cè)試?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。

(3)用哪兩組數(shù)據(jù)就可以把判定框中的每個(gè)條件運(yùn)算都進(jìn)行一次?如果為了測(cè)試出判定條件中的錯(cuò)誤,應(yīng)使用哪些數(shù)據(jù)對(duì)程序進(jìn)行測(cè)試?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。

(4)用哪四組數(shù)據(jù)才可以把各種條件的組合都檢測(cè)一遍? 如果為了測(cè)試各種條件的組合的情形,應(yīng)該使用什么樣的測(cè)試數(shù)據(jù)?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。

(5)用哪四組數(shù)據(jù)才可以把起始到終止的各條路徑都覆蓋一次?如果為了測(cè)試出程序在不同路徑下的錯(cuò)誤,應(yīng)該使用什么樣的測(cè)試數(shù)據(jù)?請(qǐng)上機(jī)驗(yàn)證自己的結(jié)論。

實(shí)驗(yàn)四 循環(huán)結(jié)構(gòu)(1)

[目的和要求]

1、掌握在程序設(shè)計(jì)條件型循環(huán)結(jié)構(gòu)時(shí),如何正確地設(shè)定循環(huán)條件,以及如何控制循環(huán)的次數(shù)。

2、了解條件型循環(huán)結(jié)構(gòu)的基本測(cè)試方法。

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

1、下面是一個(gè)計(jì)算e的近似值(使誤差小于給定的δ)的程序。

main()

{double e=1.0,x=1.0,y,detax;

int i=1;

printf(“\n please input enter a error:”);

scanf(“%lf”,detax);

y=1/x;

while(y=detax)

{

x=x*I;

y=1/x;

e=e+y;

++i;

}

printf(“%12.10lf”,e);

}

[分析討論]

(1)、閱讀上面的程序,寫(xiě)出程序所依據(jù)的計(jì)算公式。

(2)、當(dāng)輸入的detax各是什么值時(shí),能分別使程序按下面的要求運(yùn)行:

.不進(jìn)入循環(huán);

.只循環(huán)一次;

.只循環(huán)兩次;

.進(jìn)入死循環(huán)(程序?qū)⒂肋h(yuǎn)循環(huán)下去)。

為了能知道程序循環(huán)了多少次,應(yīng)該在程序中增加一條什么樣的語(yǔ)句?

(3)、原程序中while語(yǔ)句中的y=detax,分別換成ydetax,y=detax,ydetax,y=detax,觀察程序運(yùn)行將會(huì)有什么變化。

假如不知道機(jī)器內(nèi)的程序中的各語(yǔ)句實(shí)際上是什么,分別輸入什么樣的detax來(lái)測(cè)試出while語(yǔ)句的循環(huán)條件寫(xiě)錯(cuò)了。

(4)、把原程序中while語(yǔ)句之前的y=1/x語(yǔ)句去掉,觀察程序的運(yùn)行將會(huì)發(fā)生什么樣的變化。

假如不知道機(jī)器內(nèi)的程序?qū)嶋H上是怎么寫(xiě)的,輸入什么樣的detax就能測(cè)試出少了上述這條語(yǔ)句。

(5)、若把原程序中的++i換成i++,觀察程序的運(yùn)行發(fā)生了什么變化?

假如不知道這條語(yǔ)句到底是怎么寫(xiě)的,輸入什么樣的detax就能測(cè)試出這條語(yǔ)句寫(xiě)錯(cuò)了.

(6)、把原程序中的while結(jié)構(gòu)改寫(xiě)成do—while結(jié)構(gòu),再分別按上述的(2)、(3)兩步進(jìn)行實(shí)驗(yàn)。

實(shí)驗(yàn)五 循環(huán)結(jié)構(gòu)(2)

[ 目的和要求]

1、 掌握如何正確地控制計(jì)數(shù)型循環(huán)結(jié)構(gòu)的次數(shù)

2、 了解對(duì)計(jì)數(shù)型循環(huán)結(jié)構(gòu)進(jìn)行測(cè)試的基本方法

3、 了解在嵌套循環(huán)結(jié)構(gòu)中,提高程序效率的方法

4、 本實(shí)驗(yàn)應(yīng)在學(xué)習(xí)了教材第3.3.4進(jìn)行

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

實(shí)驗(yàn)題目:下面是一個(gè)循環(huán)結(jié)構(gòu) 的C程序。

main()

{

int i ,j;

long sum=0;

for(i=1,i=20,i++)

for(j=1;j=3;j++)

sum=sum+(i+1)*(i+1)*(j+2)

printf(“sum is :%d\n”,sum);

}

[ 分析討論]

(1) 將上述程序中的和分別做什么樣修改,能使程序按如下要求運(yùn)行:

.不循環(huán);

.外循環(huán)1次,不進(jìn)入內(nèi)循環(huán);

.外循環(huán),內(nèi)循環(huán)各1次;

.外循環(huán)1次,內(nèi)循環(huán)2次;

.外循環(huán) 2次, 內(nèi)循環(huán)1次;

.外循環(huán)19次,內(nèi)循環(huán)3次;

.外循環(huán)20次,內(nèi)循環(huán)2次;

.外循環(huán)21次,內(nèi)循環(huán)3次。

(2) 試修改程序,以便能知道控制表達(dá)式

i=1;j=20;i++

j=1;j3;j+=

各執(zhí)行了多少次?

(3)內(nèi)循環(huán)與外循環(huán)的控制表達(dá)式進(jìn)行對(duì)換,觀察程序的執(zhí)行結(jié)果有無(wú)變化,并且觀

察對(duì)換后的外循環(huán)與內(nèi)循環(huán)控制表達(dá)式執(zhí)行的總次數(shù)有無(wú)變化?

(4)將(3)中程序?qū)憺?/p>

main()

{

int i,j,k;

long sum=0;

for (j=1.j=3.j++)

{

k=j+2;

for(i=1;i=20;i++)

sum=sum+(i+1)*(i+1)**k;

}

printf(“sum is :%d\n”,sum);

}

觀察程序的執(zhí)行結(jié)果有無(wú)變化?

(5)將(3)中程序改寫(xiě)為

main()

{

int I,j,m,n;

long sum=0;

for(j=1;j=3;j++)

{

m=j+2;

for(I=1;j=20;I++)

{

n=I+1;

sum=sum+m*m*k;

}

}

printf(“sum is :%d\n”,sum);

}

觀察程序的執(zhí)行結(jié)果有無(wú)變化?

(1)

實(shí)驗(yàn)六 函數(shù)(1)

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

1.理解和掌握多模塊的程序設(shè)計(jì)與調(diào)試的方法。

2.掌握函數(shù)的定義和調(diào)用的方法。

3.學(xué)會(huì)使用遞歸方法進(jìn)行程序設(shè)計(jì)。

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

1. 編寫(xiě)一個(gè)函數(shù),判斷一個(gè)數(shù)是不是素?cái)?shù)。在主函數(shù)中輸入一個(gè)整數(shù),輸出是否是素?cái)?shù)的信息。

實(shí)驗(yàn)步驟與要求:

(1) 編寫(xiě)一個(gè)函數(shù)prime(n),返回給定整數(shù)n是否為素?cái)?shù)。

(2) 編寫(xiě)一個(gè)主函數(shù),輸入一個(gè)整數(shù),調(diào)用(1)中的函數(shù),判斷此整數(shù)是否為素?cái)?shù),并輸出結(jié)果。

(3) 對(duì)于屬于多函數(shù)程序,可以采用每個(gè)函數(shù)分別進(jìn)行編輯、編譯的方法,然后再連接、運(yùn)行。如果編譯有錯(cuò)時(shí),可分別修改,這樣便于調(diào)試。實(shí)驗(yàn)2和實(shí)驗(yàn)3也可以使用這樣的調(diào)試方法。

2. 用梯形法求函數(shù)的定積分。

實(shí)驗(yàn)步驟與要求:

(1) 編制一個(gè)函數(shù)sab(a,b,n),其功能是求函數(shù)f(x)在[a,b]上的定積分,其中n為區(qū)間[a,b]的等分?jǐn)?shù)。要求該函數(shù)在一個(gè)獨(dú)立的文件中。

(2) 編制一個(gè)主函數(shù)以及計(jì)算被積函數(shù)值的函數(shù)f(x),在主函數(shù)中調(diào)用(1)中的函數(shù)計(jì)算并輸出下列積分值。要求主函數(shù)與函數(shù)f(x)在同一個(gè)文件中。

(3) 編制另一個(gè)主函數(shù)以及計(jì)算被積函數(shù)值的函數(shù)f(x),在主函數(shù)中調(diào)用(1)中的函數(shù)計(jì)算并輸出下列積分值。要求主函數(shù)與函數(shù)f(x)在同一個(gè)文件中。

說(shuō)明:

用梯形法求定積分,梯形公式為

s=h[f(a)+f(b)]/2+hf(a+kh)其中,h=(b-a)/n

3. 用遞歸方法編寫(xiě)程序,求n階勒讓德多項(xiàng)式的值,遞歸公式為

1 (n=0)

pn(x)=x (n=1)

((2n-1)xpn-1(x)-(n-1)pn-2(x))/n (n1)

,

[ 分析討論]

1. 小結(jié)函數(shù)的定義及調(diào)用方法。

2. 小結(jié)函數(shù)中形參和實(shí)參的結(jié)合規(guī)則。

實(shí)驗(yàn)七 函數(shù)(2)

[目的與要求]

1、 掌握C語(yǔ)言函數(shù)定義及調(diào)用的規(guī)則。

2、 理解參數(shù)傳遞的過(guò)程。

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

1、 上機(jī)調(diào)試下面的程序,記錄系統(tǒng)給出的出錯(cuò)信息,并指出出錯(cuò)原因。

main()

{

int,y;

printf(“%d\n”,sum(x+y));

int sum(a,b)

{

int a,b;

return(a+b);

}

}

2、 編寫(xiě)并調(diào)試一個(gè)求(n為整數(shù))的遞歸函數(shù),希望能在程序運(yùn)行過(guò)程中動(dòng)態(tài)地顯示遞歸函數(shù)被調(diào)用的軌跡。

[分析討論]

1、 針對(duì)以上實(shí)驗(yàn)內(nèi)容寫(xiě)出相應(yīng)的參數(shù)傳遞過(guò)程并分析結(jié)果。

2、 討論參數(shù)的傳遞的幾種形式。

實(shí)驗(yàn)八 數(shù)組(1)

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

掌握有關(guān)數(shù)組和字符串的程序設(shè)計(jì)方法。

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

1 已知一組數(shù)據(jù)如下:

6,3,42,23,35,71,98,67,56,38

編寫(xiě)程序,把它們按從小到大的次序排列起來(lái)。

程序如下:

/*EX3-1*/

# includestdio.h

# define N 10

main()

{

int a[N]={6, 3, 42, 23, 35, 71, 98, 67, 56, 38};

int i, j, t;

printf(“The array before sorted:”);

for(i=0; iN; i++)

printf(“%4d”, a[i]);

for(i=0; i9; i++)

{

for(j=i+1; j10; j++)

{

if(a[i]a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

}

for(i=0; iN; i++)

printf(“%4d”, a[i]);

return o;

}

[ 分析討論]

1. 定義數(shù)組時(shí)下標(biāo)的用法和注意事項(xiàng).

2.什么情況下出現(xiàn)下標(biāo)越界.

 實(shí)驗(yàn)九 數(shù)組(2)

[目的和要求]

1、掌握數(shù)組定義的規(guī)則。

2、掌握C語(yǔ)言數(shù)組的基本用法。

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

1、編寫(xiě)程序,測(cè)試下列數(shù)組的定義方式是否正確

(1) main()

{

int n;

scanf(“%d”,n);

int a[n];

……

}

(2) main()

{

const int n=10;

int a[n];

}

(3) #include stdio.h

#define M 10

main()

{

int a[M];

}

(4) main()

{

int a[2+2*4];

}

(5) #include stdio.h

#define M 2

#define N 8

main()

{ int a[M+N];

}

通過(guò)這一實(shí)驗(yàn),可以說(shuō)明什么問(wèn)題?

2、運(yùn)行下面的C程序,根據(jù)運(yùn)行結(jié)果,可以說(shuō)明什么?

main( )

{ int num[5]={1,2,3,4,5};

inti i;

for(i=0;i=5;i++)

printf(“%d”,num[i]);

}

3、操作符用以求一個(gè)變量的地址,這在函數(shù)scanf中已經(jīng)使用過(guò)了?,F(xiàn)在要你設(shè)計(jì)一個(gè)程序,返回一個(gè)3 * 5 的二維數(shù)組各元素的地址,并由此說(shuō)明二維數(shù)組中各元素是按什么順序存諸的。

4、為一個(gè)起泡排序程序設(shè)計(jì)測(cè)試用例,并測(cè)試之。

[分析討論]

通過(guò)實(shí)驗(yàn),分析定義與引用數(shù)組的區(qū)別。

實(shí)驗(yàn)十 指 針 (1)

[目的和要求]

1. 熟悉指針的正確用法。

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

1、指出下面程序錯(cuò)誤的原因。

main( )

{

int x=10,y=5,*px,*py;

px=py;

px=x;

py=y;

printf(“*px=%d,*py=%d,*px,*py);

}

2.下面的程序能獲得上述運(yùn)行結(jié)果嗎?

main()

{

char *S=”COMPUTER”;

char c;

printf(“which style you want to \n”);

printf(“capital (c) or uncapital(u);”);

c=getchar();

if(c=’c’)

put(s);

else {

s=”computer”;

puts(s);

}

}

分析出錯(cuò)原因。

3.設(shè)計(jì)一個(gè)C程序,用以測(cè)試下列各表達(dá)式的運(yùn)算。

(1) y=*px++

(2) y=*++py

(3) y=(*py)++

(4) y=--*ppx++

[分析討論]

數(shù)組與指針的聯(lián)系。

實(shí)驗(yàn)十一 指針(二)

[目的和要求]

1、了解指針參數(shù)的特殊性。

2、掌握函數(shù)、指針、數(shù)組的用法。

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

1、想使指針變量pt1指向a 和b 中的大者,pt2指向小者,以下程序能否實(shí)現(xiàn)此目的?

swap(int *p1,int *p2)

{

int *p;

p=p1;p1=p2;p2=p;

}

main()

{

int a,b;

scanf(“%d,%d”,a,b);

pt1=a;pt2=b;

if(ab)swap(pt1.pt2);

printf(“%d,%d\n”,*pt1,*pt2);

}

上機(jī)調(diào)試此程序。如果不能實(shí)現(xiàn)題目要求,指出原因,并修改之。

2、 下面的程序。注意其中的復(fù)雜聲明語(yǔ)句;

int (*function[4])();

和各標(biāo)記符的含義,并記錄執(zhí)行結(jié)果。

main()

{

int fun1();

int fun2();

int fun3();

int fun4();

int (*function[4])();

int a=10,b=5,i;

function[0]=fun1;

function[1]=fun2;

function[2]=fun3;

function[3]=fun4;

for(I=0;I4;i++)

printf(“fun no.%d-%d\n”,i+1,execute(a,b,function[i]));

}

execute(int x,int y,int *fun())

{

return(*fun)(x,y);}

fun1(int x, int y)

{

return(x+y);}

fun2(int x,int y)

{

return(x-y);}

fun3(int x,int y)

{

return(x*y);}

fun4(int x,int y)

{

return(x/y);}

[分析討論]

指針、數(shù)組、函數(shù)的聯(lián)系。

實(shí)驗(yàn)十二 有關(guān)文件的程序設(shè)計(jì)

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

1. 掌握文件建立的方法。

2. 掌握包含文件操作的程序設(shè)計(jì)和調(diào)試方法。

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

1 建立一個(gè)磁盤(pán)文件,其內(nèi)容是0~90°之間每隔5°的正弦值。

程序如下:

//EX8-1

#includeiostream.h

#includefstream.h

#includemath.h

#define PI 3.14159

main()

{

float S[19];

int i, a;

ofstream out(“fsin.bny”);

if(!out)

{

cout”Cannot open file.”endl;

return 1;

}

for(i=0,a=-5; i19; i++)

{

a+=5;

S[i]=sin(a*PI/180.0);

}

out.write((unsigned char*)s, sizeof s);

out.close( );

return 0;

}

[ 分析討論]

文件操作中各函數(shù)的功能,具體使用方法.

實(shí)驗(yàn)十三 結(jié)構(gòu)體和共用體

[目的和要求]

1、掌握結(jié)構(gòu)體類(lèi)型方法以及結(jié)構(gòu)體變量的定義和引用。

2、掌握指向結(jié)構(gòu)體變量的指針變量的應(yīng)用,特別是鏈表的應(yīng)用。

3、掌握運(yùn)算符”.”和”-”的應(yīng)用。

4、共用體的概念和應(yīng)用。

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

1、編寫(xiě)程序:有4名學(xué)生,每個(gè)學(xué)生的數(shù)據(jù)包括學(xué)號(hào)、姓名、成績(jī),要求找出成績(jī)最高者的姓名和成績(jī),上機(jī)運(yùn)行程序。

2、建立一個(gè)鏈表每個(gè)結(jié)點(diǎn)包括的成員為:職工號(hào)、工資。用malloc打印出來(lái)。用一個(gè)creat 來(lái)建立鏈表,用list來(lái)輸出數(shù)據(jù)。5個(gè)職工號(hào)為101,103,105,107,109。

3、在上題基礎(chǔ)上,新增加一個(gè)職工的數(shù)據(jù),按職工號(hào)的順序插入鏈表,新插入的職工號(hào)為106。寫(xiě)一函數(shù)insert來(lái)插入新結(jié)點(diǎn)。

4、在上面的基礎(chǔ)上,寫(xiě)一函數(shù)delete,用來(lái)刪除一個(gè)結(jié)點(diǎn)。要求刪除職工號(hào)為103的結(jié)點(diǎn)。打印出刪除后的鏈表.

5、你有無(wú)辦法測(cè)試構(gòu)造鏈表時(shí),內(nèi)存空間的動(dòng)態(tài)分配情形?

[分析討論]

怎樣引用結(jié)構(gòu)體變量成員?

實(shí)驗(yàn)十四 位運(yùn)算

[目的和要求]

1. 掌握位運(yùn)算的概念和方法。

2. 掌握位運(yùn)算(,|,^,~)的使用方法。

3. 掌握有關(guān)位運(yùn)算的用法。

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

1. 按習(xí)題8.2的要求,編一個(gè)程序,將一個(gè)整數(shù)的高字節(jié)和低字節(jié)分別輸出(用位運(yùn)算方法)。上機(jī)運(yùn)行。

2. 按習(xí)題8.6的要求,編一個(gè)程序,使一個(gè)整數(shù)的低4位翻轉(zhuǎn)。上機(jī)運(yùn)行,用十六進(jìn)制數(shù)輸入和輸出。

3. 按習(xí)題8.10的要求,將一個(gè)整數(shù)i的各位循環(huán)左移4位,設(shè)i的值為十六進(jìn)制數(shù)fe13。

4. 按習(xí)題8.13的要求,設(shè)計(jì)一個(gè)函數(shù),當(dāng)給定一個(gè)整數(shù)后,能得到該數(shù)的補(bǔ)碼(應(yīng)考慮該整數(shù)是正數(shù)或負(fù)數(shù))。

[分析討論]

位運(yùn)算時(shí)應(yīng)注意什么問(wèn)題?

實(shí)驗(yàn)十五 綜合應(yīng)用舉例

[目的與要求]

1、熟悉C語(yǔ)言的端口及硬件控制的方法與原理。

2、了解用C語(yǔ)言實(shí)現(xiàn)發(fā)聲程序所要訪問(wèn)的端口。

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

1、調(diào)試課本中例10.8程序,注意調(diào)出不同的效果。

2、調(diào)試并總結(jié)程序中所用的知識(shí)點(diǎn),寫(xiě)出樂(lè)譜文件播放的是什么樂(lè)譜?

樂(lè)譜實(shí)例:

6000 h5 1 h3 2 h2 0.5 h3 0.5 h1 4 h2 1 m7 2 m6 0.5 h1 0.5 m5 4 m3 2 m5 1.5

m6 0.5 h1 1.5 h2 0.5 m6 0.5 h1 0.5 m5 1 h5 1.5 h1 0.5 h6 0.5 h5 0.5 h3 0.5

h5 0.5 h2 4 h2 1.5 h3 0.5 m7 1 m6 1 m5 1.5 m6 0.5 h1 1 h2 1 m3 1 h1 1 m6 0

m5 0.5 m6 0.5 h1 0.5 m5 4 h3 1.5 h5 0.5 m7 1 h2 1 m6 0.5 h1 0.5 m5 3 m3 0.

m5 0.5 m3 0.5 m5 0.5 m5 0.5 m6 0.5 m7 0.5 h2 0.5 m6 3 m5 0.5 m6 0.5 h1 1.5

h2 0.5 h5 1 h3 1 h2 1 h3 0.5 h2 0.5 h1 1 m6 0.5 m5 0.5 m3 2 h1 2 m6 0.5 h1

0.5 m6 0.5 m5 0.5 m3 0.5 m5 0.5 m6 0.5 h1 0.5 m5 3 h3 0.5 h5 0.5 h2 0.5 h3

0.5 h2 0.5 h1 0.5 m7 1 m6 1 h5 4##

void play_music(char *filename) /*filename為音樂(lè)文件名格式見(jiàn)上*/

{

FILE *fp;

int rate;

char sound_high[3];

float sound_long;

register int i=0,j;

int sign=0;

float str[1000][2];

if ((fp=fopen(filename,"r"))==NULL)

{

printf("Open file music.doc Errors!\n");

exit(1);

}

fscanf(fp,"%d",rate);

while(!feof(fp)!sign)

{

fscanf(fp,"%s%f",sound_high,sound_long);

str[i][1]=rate*sound_long;

switch(sound_high[0])

{

case 'h':

switch(sound_high[1])

{

case '1':

str[i++][0]=1046.5;

break;

case '2':

str[i++][0]=1174.7;

break;

case '3':

str[i++][0]=1318.5;

break;

case '4':

str[i++][0]=1396.9;

break;

case '5':

str[i++][0]=1568;

break;

case '6':

str[i++][0]=1760;

break;

case '7':

str[i++][0]=1975.5;

break;

default: printf("\n Error Music.doc\n");

break;

}

break;

case 'm':

switch(sound_high[1])

{

case '1':

str[i++][0]=523.3;

break;

case '2':

str[i++][0]=587.3;

break;

case '3':

str[i++][0]=659.3;

break;

case '4':

str[i++][0]=698.5;

break;

case '5':

str[i++][0]=784.0;

break;

case '6':

str[i++][0]=880;

break;

case '7':

str[i++][0]=987.8;

break;

default: printf("\n Error music.doc.\n");

break;

}

break;

case 'l':

switch(sound_high[1])

{

case '1':

str[i++][0]=262;

break;

case '2':

str[i++][0]=296;

break;

case '3':

str[i++][0]=329.6;

break;

case '4':

str[i++][0]=349.2;

break;

case '5':

str[i++][0]=392;

break;

case '6':

str[i++][0]=440;

break;

case '7':

str[i++][0]=493.9;

break;

default: printf("\n Error music.doc.\n");

break;

}

break;

case '*':

switch(sound_high[1])

{

case '1':

str[i++][0]=131;

break;

case '2':

str[i++][0]=147;

break;

case '3':

str[i++][0]=165;

break;

case '4':

str[i++][0]=176;

break;

case '5':

str[i++][0]=196;

break;

case '6':

str[i++][0]=220;

break;

case '7':

str[i++][0]=247;

break;

default: printf("\n Error music.doc\n");

break;

}

break;

case '#':

if (sound_high[1]=='#') sign=1;

break;

case 'x':

if (sound_high[1]=='0') str[i++][0]=20;

break;

default:printf("\n ERRor music.doc\n");

exit(1);

}

}

for(j=0;j=i-1;j++)

{

sound(str[j][0]);

delay(str[j][1]);

}

nosound();

}

[分析討論]

1.c語(yǔ)言怎樣對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理?

2.分析程序設(shè)計(jì)過(guò)程中怎樣對(duì)基礎(chǔ)知識(shí)進(jìn)行靈活運(yùn)用。

什么是C語(yǔ)言函數(shù)(9)

extern int x,y;   說(shuō)明x,y為外部整型變量

下面分別介紹以上四種存儲(chǔ)類(lèi)型:

一、自動(dòng)變量的類(lèi)型說(shuō)明符為auto。

這種存儲(chǔ)類(lèi)型是C語(yǔ)言程序中使用最廣泛的一種類(lèi)型。C語(yǔ)言規(guī)定, 函數(shù)內(nèi)凡未加存儲(chǔ)類(lèi)型說(shuō)明的變量均視為自動(dòng)變量, 也就是說(shuō)自動(dòng)變量可省去說(shuō)明符auto。 在前面各章的程序中所定義的變量凡未加存儲(chǔ)類(lèi)型說(shuō)明符的都是自動(dòng)變量。例如:

{ int i,j,k;

char c;

……

}等價(jià)于: { auto int i,j,k;

auto char c;

……

}

自動(dòng)變量具有以下特點(diǎn):

1. 自動(dòng)變量的作用域僅限于定義該變量的個(gè)體內(nèi)。在函數(shù)中定義的自動(dòng)變量,只在該函數(shù)內(nèi)有效。在復(fù)合語(yǔ)句中定義的自動(dòng)變量只在該復(fù)合語(yǔ)句中有效。 例如:

int kv(int a)

{

auto int x,y;

{ auto char c;

} /*c的作用域*/

……

} /*a,x,y的作用域*/

2. 自動(dòng)變量屬于動(dòng)態(tài)存儲(chǔ)方式,只有在使用它,即定義該變量的函數(shù)被調(diào)用時(shí)才給它分配存儲(chǔ)單元,開(kāi)始它的生存期。函數(shù)調(diào)用結(jié)束,釋放存儲(chǔ)單元,結(jié)束生存期。因此函數(shù)調(diào)用結(jié)束之后,自動(dòng)變量的值不能保留。在復(fù)合語(yǔ)句中定義的自動(dòng)變量,在退出復(fù)合語(yǔ)句后也不能再使用,否則將引起錯(cuò)誤。例如以下程序:

main()

{ auto int a,s,p;

printf("\ninput a number:\n");

scanf("%d",a);

if(a0){

s=a+a;

p=a*a;

}

printf("s=%d p=%d\n",s,p);

}

{ auto int a;

printf("\ninput a number:\n");

scanf("%d",a);

if(a0){

auto int s,p;

s=a+a;

p=a*a;

}

printf("s=%d p=%d\n",s,p);

}

s,p是在復(fù)合語(yǔ)句內(nèi)定義的自動(dòng)變量,只能在該復(fù)合語(yǔ)句內(nèi)有效。而程序的第9行卻是退出復(fù)合語(yǔ)句之后用printf語(yǔ)句輸出s,p的值,這顯然會(huì)引起錯(cuò)誤。

3. 由于自動(dòng)變量的作用域和生存期都局限于定義它的個(gè)體內(nèi)( 函數(shù)或復(fù)合語(yǔ)句內(nèi)), 因此不同的個(gè)體中允許使用同名的變量而不會(huì)混淆。 即使在函數(shù)內(nèi)定義的自動(dòng)變量也可與該函數(shù)內(nèi)部的復(fù)合語(yǔ)句中定義的自動(dòng)變量同名。例5.14表明了這種情況。

[例5.14]

main()

{

auto int a,s=100,p=100;

printf("\ninput a number:\n");

scanf("%d",a);

if(a0)

{

auto int s,p;

s=a+a;

p=a*a;

printf("s=%d p=%d\n",s,p);

}

printf("s=%d p=%d\n",s,p);

}

本程序在main函數(shù)中和復(fù)合語(yǔ)句內(nèi)兩次定義了變量s,p為自動(dòng)變量。按照C語(yǔ)言的規(guī)定,在復(fù)合語(yǔ)句內(nèi),應(yīng)由復(fù)合語(yǔ)句中定義的s,p起作用,故s的值應(yīng)為a+ a,p的值為a*a。退出復(fù)合語(yǔ)句后的s,p 應(yīng)為main所定義的s,p,其值在初始化時(shí)給定,均為100。從輸出結(jié)果可以分析出兩個(gè)s和兩個(gè)p雖變量名相同, 但卻是兩個(gè)不同的變量。

4. 對(duì)構(gòu)造類(lèi)型的自動(dòng)變量如數(shù)組等,不可作初始化賦值。

二、外部變量外部變量的類(lèi)型說(shuō)明符為extern。

在前面介紹全局變量時(shí)已介紹過(guò)外部變量。這里再補(bǔ)充說(shuō)明外部變量的幾個(gè)特點(diǎn):

1. 外部變量和全局變量是對(duì)同一類(lèi)變量的兩種不同角度的提法。全局變是是從它的作用域提出的,外部變量從它的存儲(chǔ)方式提出的,表示了它的生存期。

2. 當(dāng)一個(gè)源程序由若干個(gè)源文件組成時(shí), 在一個(gè)源文件中定義的外部變量在其它的源文件中也有效。例如有一個(gè)源程序由源文件F1.C和F2.C組成: F1.C

int a,b; /*外部變量定義*/

char c; /*外部變量定義*/

main()

{

……

}

F2.C

extern int a,b; /*外部變量說(shuō)明*/

extern char c; /*外部變量說(shuō)明*/

func (int x,y)

{

……

}

在F1.C和F2.C兩個(gè)文件中都要使用a,b,c三個(gè)變量。在F1.C文件中把a(bǔ),b,c都定義為外部變量。在F2.C文件中用extern把三個(gè)變量說(shuō)明為外部變量,表示這些變量已在其它文件中定義,并把這些變量的類(lèi)型和變量名,編譯系統(tǒng)不再為它們分配內(nèi)存空間。 對(duì)構(gòu)造類(lèi)型的外部變量, 如數(shù)組等可以在說(shuō)明時(shí)作初始化賦值,若不賦初值,則系統(tǒng)自動(dòng)定義它們的初值為0。

三、靜態(tài)變量

靜態(tài)變量的類(lèi)型說(shuō)明符是static。 靜態(tài)變量當(dāng)然是屬于靜態(tài)存儲(chǔ)方式,但是屬于靜態(tài)存儲(chǔ)方式的量不一定就是靜態(tài)變量, 例如外部變量雖屬于靜態(tài)存儲(chǔ)方式,但不一定是靜態(tài)變量,必須由 static加以定義后才能成為靜態(tài)外部變量,或稱(chēng)靜態(tài)全局變量。 對(duì)于自動(dòng)變量,前面已經(jīng)介紹它屬于動(dòng)態(tài)存儲(chǔ)方式。 但是也可以用static定義它為靜態(tài)自動(dòng)變量,或稱(chēng)靜態(tài)局部變量,從而成為靜態(tài)存儲(chǔ)方式。

由此看來(lái), 一個(gè)變量可由static進(jìn)行再說(shuō)明,并改變其原有的存儲(chǔ)方式。

1. 靜態(tài)局部變量

在局部變量的說(shuō)明前再加上static說(shuō)明符就構(gòu)成靜態(tài)局部變量。

例如:

static int a,b;

static float array[5]={1,2,3,4,5};

靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)方式,它具有以下特點(diǎn):

(1)靜態(tài)局部變量在函數(shù)內(nèi)定義,但不象自動(dòng)變量那樣,當(dāng)調(diào)用時(shí)就存在,退出函數(shù)時(shí)就消失。靜態(tài)局部變量始終存在著,也就是說(shuō)它的生存期為整個(gè)源程序。

C語(yǔ)言出警告了,這句是什么意思?

就是說(shuō)你有個(gè)變量定義了,但沒(méi)有用。警告你是不是忘了,或別的什么的。


網(wǎng)站名稱(chēng):C語(yǔ)言上機(jī)實(shí)驗(yàn)九函數(shù) c語(yǔ)言上機(jī)實(shí)驗(yàn)九答案
標(biāo)題來(lái)源:http://weahome.cn/article/hgcjss.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部