當前位置:編程學習大全網 - 源碼下載 - 105源代碼補碼

105源代碼補碼

實驗壹:C語言程序的初步研究

[實驗目的和要求]

1,熟悉C語言運行環境。

2.掌握C語言程序的編寫格式和結構。

3、掌握C語言計算機步驟,了解運行C程序的方法。

4.這個實驗可以在學完教材第壹章後進行。

[實驗內容和步驟]

1.輸入壹個簡單的C語言程序:輸入壹個矩形的兩條邊,求矩形的面積。

[分析和討論]

1.寫下調試過程中發現的錯誤,系統給出的錯誤信息和對策。分析討論對策成敗的原因。

2.總結C程序的結構和編寫規則。

實驗2數據類型、運算符和表達式

[實驗目的]

1.熟練表達的表示

2.理解表達式的運行結果

3.理解C語言中數據類型的含義

[實驗內容和步驟]

1.使用printf函數輸入表達式運行結果。

2.該程序試圖計算鍵盤輸入的任意兩個整數的平均值:

[問題討論]

1.“=”和“= =”有什麽區別?

2." & amp和“&;& amp“|”和“||”有什麽區別?

3.如何正確選擇數據類型?

實驗三:選擇結構

[實驗目的]

1,了解條件和程序流程的關系

2.理解程序的進程覆蓋了不同的語句、分支和不同數據的路徑。

[實驗內容和步驟]

1,主題

有以下程序段:

{……

如果(a & gt1。& ampb = = 0)x = x/a;

if(a = = 2 | | x & gt;1)x = x+1;

}

為了更容易理解程序的邏輯結構,需要用流程圖來描述。

要求添加壹些輸入語句和輸出語句,使上述程序在a、b、X的不同值下運行,可以觀察到程序流經過了(覆蓋)哪些語句、分支和路徑。

[分析和討論]

(1)哪壹組數據可以使程序中的每個處理語句執行壹次?為了找出程序中每個處理語句的錯誤,應該用什麽樣的數據來測試程序?請在電腦上檢查妳的結論。

(2)哪兩組數據可以使程序中的每個分支運行壹次?這種情況和上面的討論有什麽不同?為了找出程序中backlog分支的錯誤,應該用什麽樣的數據來測試程序?請在電腦上檢查妳的結論。

(3)哪兩組數據可以用來執行壹次決策框中的每個條件運算?為了檢驗判斷條件中的錯誤,應該用什麽數據來檢驗程序?請在電腦上檢查妳的結論。

(4)哪四組數據可以用來檢驗各種條件的所有組合?應該用什麽樣的測試數據來檢驗各種條件的組合?請在電腦上檢查妳的結論。

(5)哪四組數據可以用來壹次覆蓋從開始到結束的所有路徑?為了測試程序在不同路徑下的錯誤,應該使用什麽樣的測試數據?請在電腦上檢查妳的結論。

實驗四循環結構(1)

[目的和要求]

1.掌握在編程條件循環結構時,如何正確設置循環條件,如何控制循環次數。

2.了解條件循環結構的基本測試方法。

[實驗內容和步驟]

1,下面是計算e的近似值(使誤差小於給定的δ)的程序。

主()

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

int I = 1;

printf("\n請輸入錯誤:");

scanf("%lf ",& ampdetax);

y = 1/x;

while(y & gt;=detax)

{

x = x * I;

y = 1/x;

e = e+y;

++ I;

}

printf("%12.10lf ",e);

}

[分析和討論]

(1),閱讀上面的程序,寫出程序所依據的計算公式。

(2)、當輸入detax是什麽值時,可以使程序按以下要求運行:

。不進入循環;

僅循環壹次;

只循環兩次;

進入無限循環(程序會永遠循環下去)。

為了知道程序循環了多少次,應該在程序中添加什麽樣的語句?

(3) Y >在原程序的while語句中;=detax,分別用y & gtdetax,y=detax,y & ltdetax,y & lt=detax,觀察程序運行會發生什麽。

如果不知道機器中程序的每條語句實際是什麽,輸入什麽樣的detax來測試while語句的循環條件是錯誤的。

(4)去掉原程序中while語句前的y=1/x語句,觀察程序的運行會發生什麽變化。

如果不知道機器裏的程序實際是怎麽寫的,可以輸入什麽樣的detax來測試上面的語句是否缺失。

(5)如果將原程序中的++i替換為i++,觀察程序的運行發生了哪些變化?

如果不知道這個語句具體是怎麽寫的,可以通過輸入什麽樣的detax來檢驗這個語句是錯的。

(6)將原程序中的while結構改寫成do-while結構,然後分別按照上述步驟(2)和(3)進行實驗。

實驗五循環結構(2)

[目的和要求]

1,掌握如何正確控制計數周期結構的個數。

2.了解測試盤點周期結構的基本方法。

3.了解在嵌套循環結構中提高程序效率的方法。

4.本實驗應在學完教材第三段3.3.4後進行。

[實驗內容和步驟]

實驗題目:下面是壹個循環結構的C程序。

主()

{

int i,j;

long sum = 0;

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

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

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

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

}

[分析和討論]

(1)上述程序中的和將分別做哪些改變,使程序能按以下要求運行:

無循環;

外循環1次,不進入內循環;

外循環和內循環各1次;

外循環1次,內循環2次;

外循環兩次,內循環1次;

外循環19次,內循環3次;

外循環20次,內循環2次;

外循環21次,內循環3次。

(2)嘗試修改程序,以便知道控制表達式。

I = 1;j & lt=20;i++

j = 1;j & lt3;j+=

每條線妳都握過幾次?

(3)交換內循環和外循環的控制表達式,觀察程序的執行結果有無變化,觀察

切換後外循環和內循環的控制表達式的執行總數有變化嗎?

(4)將(3)中的程序編寫如下

主()

{

int i,j,k;

long sum = 0;

for(j = 1 . j & lt;=3.j++)

{

k = j+2;

for(I = 1;我& lt=20;i++)

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

}

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

}

觀察程序的執行結果有變化嗎?

(5)按如下方式重寫(3)中的程序

主()

{

int I,j,m,n;

long sum = 0;

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

{

m = j+2;

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

{

n = I+1;

sum = sum+m * m * k;

}

}

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

}

觀察程序的執行結果有變化嗎?

(1)

實驗六函數(1)

[實驗目的]

1.了解並掌握多模塊編程和調試的方法。

2.掌握函數的定義和調用方法。

3.學會用遞歸方法編程。

[實驗內容和步驟]

1.寫壹個判斷壹個數是否是質數的函數。在main函數中輸入壹個整數,輸出是否是質數的信息。

實驗步驟和要求:

(1)寫壹個函數prime(n)返回給定的整數n是否是素數。

(2)寫壹個主函數,輸入壹個整數,調用(1)中的函數,判斷這個整數是否是素數,輸出結果。

(3)對於有多個功能的程序,可以分別編輯編譯每個功能,然後連接運行。如果編譯有錯誤,可以單獨修改,方便調試。實驗二和實驗三也可以使用這種調試方法。

2.用梯形法求函數的定積分。

實驗步驟和要求:

(1)編譯壹個函數sab(a,b,n),它的作用是求函數f(x)在[a,b]上的定積分,其中n是區間[a,b]的等分數。這個函數需要在壹個單獨的文件中。

(2)編譯壹個主函數和壹個計算被積函數值的函數f(x),在主函數中調用(1)中的函數,計算並輸出下面的整數值。要求主函數和函數f(x)在同壹個文件中。

(3)編寫另壹個主函數和函數f(x)用於計算被積函數的值,在主函數中調用(1)中的函數,計算並輸出下面的整數值。要求主函數和函數f(x)在同壹個文件中。

描述:

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

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

3.用遞歸的方法寫壹個程序求n階勒讓德多項式的值,遞歸公式為

1 (n=0)

pn(x)=x (n=1)

((2n-1)xpn-1(x)-(n-1)pn-2(x))/n(n & gt;1)

,

[分析和討論]

1.匯總函數的定義和調用方法。

2.匯總函數中形參和實參的組合規則。

實驗七函數(2)

[目的和要求]

1,掌握C語言函數的定義和調用規則。

2.了解參數傳遞的過程。

[實驗內容和步驟]

1,在電腦上調試以下程序,記錄系統給出的錯誤信息,指出錯誤原因。

主()

{

int,y;

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

int sum(a,b)

{

int a,b;

返回(a+b);

}

}

2.編寫並調試壹個遞歸函數find (n為整數),希望能動態顯示遞歸函數在程序運行時的軌跡。

[分析和討論]

1.根據以上實驗內容寫出相應的參數傳遞過程,並對結果進行分析。

2.討論參數傳遞的幾種形式。

實驗八數組(1)

[實驗目的]

掌握數組和字符串的編程方法。

[實驗內容和步驟]

1知道壹組數據如下:

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

寫程序,按從小到大的順序排列。

該過程如下:

/*EX3-1*/

# include & ltstdio.h & gt

#定義編號10

主()

{

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

int i,j,t;

printf("排序前的數組:");

for(I = 0;我& ltn;i++)

printf("%4d ",a[I]);

for(I = 0;我& lt9;i++)

{

for(j = I+1;j & lt10;j++)

{

if(a[I]& gt;a[j])

{

t = a[I];

a[I]= a[j];

a[j]= t;

}

}

}

for(I = 0;我& ltn;i++)

printf("%4d ",a[I]);

返回o;

}

[分析和討論]

1.定義數組中光標的用法和註意事項。

2.什麽情況下下標越界?

實驗九陣列(2)

[目的和要求]

1,掌握數組定義的規則。

2.掌握C語言數組的基本用法。

[實驗內容和步驟]

1.寫壹個程序測試下面的數組定義是否正確。

(1) main()

{

int n;

scanf("%d ",& ampn);

int a[n];

……

}

(2)主要()

{

const int n = 10;

int a[n];

}

③# include & lt;stdio.h & gt

#定義M 10

主()

{

int a[M];

}

(4)主要()

{

int a[2+2 * 4];

}

(5) #include <stdio.h & gt

#定義M 2

#定義N 8

主()

{ int a[M+N];

}

這個實驗能說明什麽?

2.運行下面的C程序。根據運行結果,可以說明什麽?

主( )

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

inti I;

for(I = 0;我& lt=5;i++)

printf("%d ",num[I]);

}

3.運算符&;查找函數scanf中使用的變量的地址。現在我要妳設計壹個程序,返回壹個3 * 5的二維數組中元素的地址,從而解釋二維數組中元素的存儲順序。

4.為冒泡排序程序設計壹個測試用例,並測試它。

[分析和討論]

通過實驗,分析了定義數組和參考數組的區別。

實驗十指針(1)

[目的和要求]

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

[實驗內容和步驟]

1.指出下列程序錯誤的原因。

主( )

{

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

px = py

px = & ampx;

py = & ampy;

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

}

2.下面的程序能得到上面的運行結果嗎?

主()

{

char *S= "計算機";

char c;

printf("妳要哪種風格\ n ");

printf("大寫(c)或非大寫(u);");

c = getchar();

if(c='c ')

賣出;

否則{

s= "計算機";

賣出期權;

}

}

分析錯誤的原因。

3.設計壹個C程序來測試下列表達式的運算。

(1) y=*px++

(2)y = * +++py

(3) y=(*py)++

(4) y= - *ppx++

[分析和討論]

數組和指針之間的聯系。

實驗十壹指針(2)

[目的和要求]

1,了解指針參數的特殊性。

2.掌握函數、指針和數組的用法。

[實驗內容和步驟]

1.如果想讓指針變量pt1指向A和B中較大的壹個,pt2指向較小的壹個,下面的程序能達到這個目的嗎?

swap(int *p1,int *p2)

{

int * p;

p = p 1;p 1 = p2;p2 = p;

}

主()

{

int a,b;

scanf("%d,%d ",& amp壹,& ampb);

pt 1 = & amp;a;pt2 = & ampb;

如果(a & ltb)swap(pt 1 . pt2);

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

}

在計算機上調試這個程序。如果達不到題目要求,指出原因,進行修改。

2.以下程序。註意復雜的申報報表;

int(* function[4])();

並且記錄每個標記的含義。

主()

{

int fun 1();

int fun 2();

int fun 3();

int fun 4();

int(* function[4])();

int a=10,b=5,I;

函數[0]= fun 1;

函數[1]= fun 2;

函數[2]= fun 3;

函數[3]= fun 4;

for(I = 0;我& lt4;i++)

printf("趣味號% 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)

{

返回(x-y);}

fun3(int x,int y)

{

return(x * y);}

fun4(int x,int y)

{

返回(x/y);}

[分析和討論]

指針、數組和函數的關系。

實驗12中相關文件的程序設計

[實驗目的]

1.掌握文檔創建的方法。

2.掌握包括文件操作在內的程序設計和調試方法。

[實驗內容和步驟]

1創建壹個磁盤文件,其內容是0到90之間間隔為5的正弦值。

該過程如下:

//EX8-1

# include & ltiostream.h & gt

# include & ltfstream.h & gt

# include & ltmath.h & gt

#定義PI 3.14159

主()

{

float S[19];

int i,a;

of stream out(" fsin . bny ");

如果(!out)

{

cout & lt& lt"無法打開文件。"& lt& ltendl

返回1;

}

for(i=0,a =-5;我& lt19;i++)

{

a+= 5;

s[I]= sin(a * PI/180.0);

}

out.write((無符號字符*)& amp;s,sizeof s);

out . close();

返回0;

}

[分析和討論]

每個函數在文件操作中的作用,以及具體的使用方法。

實驗13結構和* * *用戶

[目的和要求]

1,掌握結構類型方法以及結構變量的定義和引用。

2.掌握指向結構變量的指針變量的應用,尤其是鏈表的應用。

3.掌握運算符”和“->;“的應用。

4.* * *用戶的概念及應用。

[實驗內容和步驟]

1.編程:有4個學生,每個學生的數據包括學號,姓名,年級。要求找出成績最高的人的姓名和年級,在電腦上運行程序。

2.建立壹個鏈表。每個節點包括以下成員:員工編號和薪金。用malloc打印出來。用creat創建壹個鏈表,用list輸出數據。這五個員工編號分別是101,103,105,107,109。

3.在以上問題的基礎上,添加壹個新員工的數據,按照員工編號的順序插入鏈表。新插入的員工編號是106。編寫壹個函數insert來插入壹個新節點。

4.在上面的基礎上,寫壹個函數delete來刪除壹個節點。需要刪除員工編號為103的節點。打印出刪除的鏈表。

5.構造鏈表時,有沒有辦法測試內存空間的動態分配?

[分析和討論]

如何引用結構變量成員?

實驗性14位操作

[目的和要求]

1.掌握位運算的概念和方法。

2.主機位操作(&;, |, ~).

3.掌握位運算的用法。

[實驗內容和步驟]

1.根據練習8.2的要求,寫壹個程序分別輸出壹個整數的高字節和低字節(按位運算法)。在電腦上運行。

2.根據習題8.6的要求,寫壹個程序翻轉壹個整數的低四位。在計算機上運行,用十六進制數輸入輸出。

3.根據習題8.10的要求,將壹個整數I的每壹位左移4位,設I的值為十六進制數fe13。

4.根據練習8.13的要求,設計壹個函數。給定壹個整數,就可以得到該數的補數(要考慮該整數是正數還是負數)。

[分析和討論]

鉆頭操作要註意哪些問題?

實驗15綜合應用實例

[目的和要求]

1,熟悉C語言的端口和硬件控制的方法和原理。

2.用C語言實現語音程序,了解要訪問的端口。

[實驗內容和步驟]

1.調試教材中示例10.8的程序,註意不同的效果。

2.調試總結程序中用到的知識點,在樂譜文件中寫出演奏的是什麽樂譜。

樂譜示例:

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 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 M6 0.5h 1 1 H2 1 m3 1h 1 1 M6 0

M5 0.5 M6 0.5h 1 0.5 M5 4 H3 1.5 H5 0.5 M7 1 H2 1 M6 0.5h 1.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.5h 1 1.5

H2 0.5 H5 1 H3 1 H2 1 H3 0.5 H2 0.5h 1 1 M6 0.5 M5 0.5 m3 2h 1 2 M6 0.5h 1

0.5 M6 0.5 M5 0.5 m3 0.5 M5 0.5 M6 0.5h 1 0.5 M5 3 H3 0.5 H5 0.5 H2 0.5 H3

0.5 H2 0.5h 1.5 M7 1 M6 1 H5 4 # #

void play _ music(char * filename)/* filename是音樂文件名格式。參見*/

{

FILE * fp

利息率;

char sound _ high[3];

浮音_ long

寄存器int i=0,j;

int sign = 0;

float str[1000][2];

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

{

printf("打開文件music.doc錯誤!\ n ");

退出(1);

}

fscanf(fp," %d ",& amp率);

而(!金融衍生工具公司& amp!簽名)

{

fscanf(fp," %s%f ",& amp聲音高& amp聲音_長);

str[I][1]=速率*聲音_ long

開關(sound_high[0])

{

案例“h”:

開關(sound_high[1])

{

案例“1”:

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

打破;

案例“2”:

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

打破;

案例“3”:

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

打破;

案例“4”:

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

打破;

案例“5”:

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

打破;

案例“6”:

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

打破;

案例“7”:

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

打破;

默認值:printf(" \ n Error music . doc \ n ");

打破;

}

打破;

案例“m”:

開關(sound_high[1])

{

案例“1”:

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

打破;

案例“2”:

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

打破;

案例“3”:

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

打破;

案例“4”:

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

打破;

案例“5”:

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

打破;

案例“6”:

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

打破;

案例“7”:

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

打破;

默認值:printf(" \ n Error music . doc . " \ n ");

打破;

}

打破;

案例“l”:

開關(sound_high[1])

{

案例“1”:

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

打破;

案例“2”:

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

打破;

案例“3”:

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

打破;

案例“4”:

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

打破;

案例“5”:

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

打破;

案例“6”:

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

打破;

案例“7”:

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

打破;

默認值:printf(" \ n Error music . doc . " \ n ");

打破;

}

打破;

大小寫' * ':

開關(sound_high[1])

{

案例“1”:

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

打破;

案例“2”:

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

打破;

案例“3”:

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

打破;

案例“4”:

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

打破;

案例“5”:

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

打破;

案例“6”:

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

打破;

案例“7”:

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

打破;

默認值:printf(" \ n Error music . doc \ n ");

打破;

}

打破;

案例' # ':

if(sound _ high[1]= = ' # ')sign = 1;

打破;

案例“x”:

if(sound _ high[1]= = ' 0 ')str[i++][0]= 20;

打破;

默認值:printf(" \ n ERRor music . doc \ n ");

退出(1);

}

}

for(j = 0;j & lt= I-1;j++)

{

sound(str[j][0]);

delay(str[j][1]);

}

nosound();

}

[分析和討論]

如何用1.c語言管理數據庫?

2.分析如何在編程過程中靈活運用基礎知識。

  • 上一篇:想去周莊旅遊,征集壹些關於周莊的資料跟自助遊的經歷
  • 下一篇:飛天茅臺背標條形碼下的數字到底是什麽意思?
  • copyright 2024編程學習大全網