南京郵電大學C語言實驗報告

2020-10-29 12:00:47

南京郵電大學C語言實驗報告1v2

實驗一 順序結構程式設計練習

一、 實驗目的和要求
(1)初識Microsoft Visual Studio 2010上機環境,學會建立工程、檔案,學會編譯、連結並執行程式,查詢並修改簡單的語法錯。
(2)正確呼叫輸入輸出處理的函數scanf( )、printf( )、getchar( )、putchar( )進行資料的I/O,觀察輸出格式,掌握鍵盤輸入方法。
(3)初步使用偵錯程式跟蹤程式,觀察變數的值的變化情況。

二、實驗環境(實驗裝置)
硬體: 微型計算機
軟體: Windows 作業系統、Microsoft Visual Studio 2010

三、實驗原理及內容
實驗題目(1)【見實驗教材實驗一的題目1】:在D槽上建立以自己學號命名的資料夾(例如:B07020518)(以後實驗的所有檔案存於此資料夾下);正確進入VS2010整合式開發環境,建立一個單檔案專案,專案名為:exp1_1,然後向該專案中以新建方式新增一個原始檔,名為:exp1_1.c,完成:從鍵盤輸入兩個整數a和b,計算並輸出他們的和sum、差difference、積product、商quotient和平均值ave(注意ave和商的定義型別)。
具體要求:
① 編輯、編譯、連線並執行程式,觀察執行結果。
② 觀察exp1_1.obj、exp1_1.exe、exp1_1.c所在的資料夾。
③ 對變數quotient分別定義為int和double型,在printf函數中正確使用格式串,當讀入的兩個整數為4和5時,觀察執行結果並分析原因,思考怎麼使變數quotient更準確。
④ 對變數ave分別定義為int和double型,在printf函數中正確使用格式串,當讀入的兩個整數為4和5時,觀察不同的執行結果並分析原因。
⑤ 單步跟蹤程式(用F10鍵),觀察每一步程式執行時各個變數的變化情況。
實驗解答:

① 源程式程式碼如下:

#include<stdio.h>
int main()
{
	int a,b,sum,difference,product,quotient,ave;
    printf("請輸入兩個整數a和b: ");
	scanf("%d,%d",&a,&b);
    sum=a+b;
	difference=a-b;
	product=a*b;
	quotient=a/b;
	ave=(a+b)/2;
	printf("sum=%d,difference=%d,product=%d,quotient=%d,ave=%d\n",sum,difference,product,quotient,ave);
	return 0;
}

#include<stdio.h>
int main()
{
	int a,b,sum,difference,product;
	double quotient,ave;
    printf("請輸入兩個整數a和b:");
	scanf("%d,%d",&a,&b);
    sum=a+b;
	difference=a-b;
	product=a*b;
	quotient=a*1.0/b;
	ave=(a+b)*1.0/2;
	printf("sum=%d,difference=%d,product=%d,quotient=%f,ave=%f\n",sum,difference,product,quotient,ave);
	return 0;
}


檔名 檔案所在的完整路徑(例如:d:\ttt\t1.c)
exp1_1.c d:\ttt\exp1_1.c
exp1_1.obj D:\ttt\Debug\exp1_1.obj
exp1_1.exe D:\ttt\Debug\exp1_1.exe


quotient的型別 求解quotient的語句 輸出quotient的格式串 螢幕輸出的quotient值
int quotient=a/b; %d 0
double quotient=a*1.0/b; %f 0.800000

執行結果的差異、原因以及保證結果正確的措施:
差異:當商型別是int時,結果沒有小數;當商型別是double時,結果帶有小數,且當a/1.0時值更精確。
原因:變數型別的差異,整數除和實數除的差異。
保證結果正確的措施:做除法時儘量使用實數除。

ave的型別 求解ave的語句 輸ave的格式串 螢幕輸出的ave值
int ave=(a+b)/2; %d 4
double ave=(a+b)*1.0/2; %f 4.500000

執行結果的差異及原因:
差異:當ave型別是int時,結果沒有小數;當ave型別是double時,結果帶有小數,且當(a+b)/1.0時值更精確。
原因:變數型別的差異,整數除和實數除的差異。

實驗題目(2)【見實驗教材實驗一的題目3】:程式設計序exp1_3.c,實現兩個整數a,b的交換,提示思考:我們在現實生活中,兩杯水是怎麼交換的。
實驗解答:
源程式exp1_3.c的程式碼是:

#include <stdio.h>
int main( )
{
	int a,b,temp;
	printf("請輸入兩個整數:");
	scanf("%d,%d",&a,&b);
	temp=a;
	a=b;
	b=temp;
	printf("a=%d,b=%d\n",a,b);
    return 0;
}

實驗題目(3)【見實驗教材實驗一的題目4】:程式設計序exp1_4.c,工廠給一圓柱體鍍膜,每平方釐米造價10元,現從鍵盤上輸入圓柱底面的半徑radius(釐米)和圓柱的高height(釐米),求該圓柱體的表面積area(平方釐米)和所需費用,要求輸出結果保留兩位小數。
實驗解答:
① 源程式exp1_4.c的程式碼是:

#include<stdio.h>
#define PI 3.14159
int main()
{
	double r,h,area,fy;
    printf("請輸入圓柱底面的半徑和圓柱的高: ");
	scanf("%lf,%lf",&r,&h);
    area=2*PI*r*r+2*PI*r*h;
	fy=10*area;
	printf("area=%.2f,fy=%.2f\n",area,fy);
	return 0;
}         

② 多次執行程式,根據下表第一列要求,輸入不同的資料,請填寫下表
輸入資料的要求 你輸入的資料 你程式的輸出結果
半徑和高均為正整數 1,2 area=18.85,fy=188.50
半徑和高均為正實型數 1.0,2.0 area=18.85,fy=188.50
半徑和高有一個為負數 1,-2 area=-6.28,fy=-62.83
半徑和高均為負數 -1,-2 area=18.85,fy=188.50
其他測試用例 2,3 area=62.83,fy=628.32

實驗題目(4)【見實驗教材實驗一的題目6】:編寫程式exp1_6.c輸入一個3位正整數,計算該數的逆序數,並輸出。例如:輸入789,輸出987;
實驗解答:源程式exp1_6.c的程式碼是:

#include<stdio.h>
int main()
{
	int x,a,b,c;
    printf("請輸入一個三位整數:");
	scanf("%d",&x);
    a=x/100;
	b=x/10%10;
	c=x%10;
	printf("該數的逆序數=%d%d%d",c,b,a);
	return 0;
}    

四、實驗小結(包括問題和解決方法、心得體會、意見與建議、實驗出錯資訊及解決方案等)
(一)實驗中遇到的主要問題及解決方法
實驗時一些基礎規範沒注意(如忘記在scanf函數中給出所輸入變數的地址、定義PI時在PI和3.14159之間加=),而後意識到之後改了過來。
(二)實驗心得
學習C語言需要牢記基礎,多實踐多嘗試,去解決問題並探尋更佳表達。
(三)意見與建議(沒有可省略)
學校機房的電腦偵錯時總閃退

實 驗 報 告
五、支撐畢業要求指標點
1.2-H掌握計算機軟硬體相關工程基礎知識,能將其用於分析計算機及應用領域的相關工程問題。
3.1-M掌握設計/開發複雜工程問題解決方案所需要的專業知識和開發工具。