C程序設計實驗報告
實驗項目:
1、字符與ASCII碼
2、運算符與表達式的應用
3、順序結構應用程序
4、數學函數的算法描述
5、雞兔同籠的算法描述
6、確定坐標的算法描述
姓名:劉健斌 實驗地點:教室514 實驗時間:3月19號
一、實驗目的與要求
1、字符與ASCII碼
實驗目的:
- 了解字符在計算機中以ASCII碼方式表達;
- 了解字符的類型、字長其數的表達范圍;
- 熟練使用scanf()輸入用戶提供的數據;
- 熟練使用printf()輸出變量;
要求:
(1)從鍵盤輸入任意字符,且在輸入前要求有提示信息
(2)輸出兩行:第1行是字符形式輸出3個字符,3個字符以逗號隔開,第2行是輸出字符對應的ASCII碼
2、運算符與表達式的應用
實驗目的:
- 掌握算術運算符的使用
- 正確定義程序中的變量
- 熟練使用scanf()輸入用戶提供的數據
- 熟練使用printf()輸出變量
要求:
(1)將輸入的3位整數,個位數轉換為百位數,百位數轉換為個位數,把轉換的3個數字生成一個新的逆序數
(2)任意的3位整數以鍵盤輸入且在輸入前要求有提示信息
(3)輸出結果時,要求形式為:原數:轉換后的數
3、順序結構應用程序
實驗目的:
- 掌握算術運算符的使用
- 正確定義程序中的變量
- 熟練使用scanf()輸入用戶提供的數據
- 熟練使用printf()輸出變量
要求:
(1)輸入數據包括9個浮點數,因此可以用float來定義
(2)提示用戶輸入6項費用,並用scanf()讀入到相應的變量中
(3)計算6項費用的總額,並存儲在相應變量中
(4)用printf()語句輸出應付款
(5)用scanf()語句接收病人的實際付款金額,並存儲在相應的變量中
(6)計算應付款和實際付款之間的差額,並存儲在相應的變量中
(7)用printf()語句將病人付款、應收款、應找回的各項金額顯示
4、數學函數的算法描述
實驗目的:
- 用if語句根據條件的真假進行判斷
- 掌握運算符的運算規則
要求:
(1)程序需要接收1個浮點數,因此用float來表示。
(2)使用scanf語句接收用戶輸入的X的值,並保存在變量中
(3)判斷變量x的值是否小於1,如果是,根據函數公式1,將x的值賦給y;如果不是,則進一步判斷x的值是否小於10,是則根據函數公式2,計算y的值;不是則根據函數公式3,計算y的值
(4)用printf語句輸出Y的值
5、雞兔同籠的算法描述
實驗目的:
- 用if語句根據條件的真假進行判斷
- 掌握運算符的運算規則
要求:
(1)需要定義兩個整型變量,分別代表雞兔的總頭數和總腳數
(2)判斷輸入數據的正確性
6、確定坐標的算法描述
實驗目的:
- 用if語句根據條件的真假進行判斷
- 掌握運算符的運算規則
要求:
(1)求出該點到各中心的距離
(2)判斷該點是否在塔外
二、實驗內容
1、實驗練習:2.3.3
1.問題的簡單描述:從鍵盤輸入一個大寫字母,要求轉換成小寫字母輸出,並輸出這個小寫字母相鄰的兩個字母,以及它們的ASCII碼
2.實驗代碼:
1 #include<stdio.h> 2 main() 3 { 4 char x; 5 printf("請輸入一個大寫字母:\n"); 6 scanf("%c",&x); 7 printf("小寫字母為:%c,%c,%c\n",x+31,x+32,x+33); 8 printf("ASCII碼值為:%d,%d,%d",x+31,x+32,x+33); 9 }
2、實驗練習:2.3.4
1.問題的簡單描述:將鍵盤輸入一個3位的正整數,將輸出該數的逆序數。
2實驗代碼:
#include<stdio.h> int main() { int a,b,c,x,y; printf("請輸入一個3位的正整數:\n"); scanf("%d",&x); a=x/100; b=x%100/10; c=x%10; y=c*100+b*10+a; printf("%d: %d\n",x,y); }
3問題分析:會把“/”與“%”搞混,然后翻書看了一下,把思路理了一下,就寫出來了
3、實驗練習:2.3.5
1.問題的簡單描述:編寫一個程序,用於醫院收費處出納算賬。要求輸入所在醫院費用(西葯費、檢查費、材料費、床位費、觀察費和護理費),打印出應付錢數,再輸入病人所付款數,打印出應找的錢數(已知某病人,西葯費268.2元,檢查600元,注射用材料費206元,床位費120元,觀察費360元,護理費220元)。
2實驗代碼:
#include<stdio.h> int main() { float x,j,c,hj,fk,zh,cw,g,f; /*其中,x代表西葯費;j代表檢查費;c代表材料費;cw代表床位費;g代表觀察費;f代表護理費;hj代表應付費;fk代表病人付款;zh代表應找回的金額;*/ printf("輸入西葯費,檢查費,材料費。床位費,觀察費,護理費:\n") ; scanf("%f,%f,%f,%f,%f,%f",&x,&j,&c,&cw,&g,&f);/*編寫接受語句,將西葯費、檢查費、材料費、床位費、觀察費、護理費存放在相應的變量中*/ hj=x+j+c+cw+g+f;/*計算各項費用的金額*/ printf("應付款(元):%.2f",hj); printf("病人付款(元):"); scanf("%f",&fk); zh=fk-hj;/*得出應找回給病人的金額*/ printf("計算結果:\n"); printf("病人付款=%6.2f元\n應付款=%6.2f元應找回=%6.2f元\n",fk,hj,zh); return 0; }
3問題分析:編寫代碼的時候會把中英文的符號搞混,檢查了很多次才發現
4、實驗練習:3.3.1
1.問題的簡單描述:有一函數:y={x (x<1);2x-1 (1<=x<10);3x-1 (x>=10)}。請用流程圖表示該函數的算法,輸入x的值,輸出滿足函數關系的y值。並用c語言編寫程序進行檢驗
2實驗代碼:
#include<stdio.h> main() { float x,y; printf("請輸入x的值:"); scanf("%f",&x); if(x<1) y=x; else if(x<10) y=2*x-1; else y=3*x-1; printf("y的值為%.2f\n",y); }
3問題分析:多重判斷中else if 不能放一起,要回車分開
5、實驗練習:3.3.2
1.問題的簡單描述:用流程圖描述求解雞兔同籠問題的算法:已知雞兔的總頭數為h(head),總腳數為f(feet),求雞兔各有多少只?
2實驗代碼:
#include<stdio.h> main() { int h,f,x,y; printf("雞兔總數,雞兔腳總數: "); scanf("%d,%d",&h,&f); if(h>0&&f>0) { x=(4*h-f)/2; y=(f-2*h)/2; printf("雞:%d 兔:%d\n",x,y); } else printf("輸入錯誤!\n"); }
3問題分析:if中如果有多步計算,則要用{}括起來
6、實驗練習:3.3.3
1.問題的簡單描述:有4個圓塔,圓心分別為(2,2)、(-2,2)、(2,-2)、(-2,-2),圓半徑為1。這4個塔的高度均為10m,塔以外無建築物。現輸入任一點的坐標,若該點坐標在任一圓塔內,則輸出圓塔的高度;若該點不在圓塔內,則輸出0。
2實驗代碼:
#include<stdio.h> #include<math.h> main() { int h=10; float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4; printf("請輸入一個點(x,y):"); scanf("%f,%f",&x,&y); d1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)); d2=sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2)); d3=sqrt((x-x3)*(x-x3)+(y-y3)*(y-y3)); d4=sqrt((x-x4)*(x-x4)+(y-y4)*(y-y4)); if (d1>1&&d2>1&&d3>1&&d4>1) { h=0; printf("該點高度為:%d",h); } else{ h=10; printf("該點高度為:%d",h); } }
3問題分析:因為該運算涉及平方運算,所以要添加頭文件#include<math.h>來獲取函數。之前一直忘加,導致一直算不出來。
三、實驗小結(在本次實驗中收獲與不足)
在這次實驗中我的不足:
1、無法牢記知識點,會把某些知識點搞混
2、中英文字符輸入的錯誤。在進行字符輸入時,不會注意中英文的轉換
3、對於格式字符的運用還是不夠熟悉
4、編碼習慣的問題,有時候會忘記打“;”,出現錯誤
我的收獲:
1、通過這次實驗,我鞏固了不太熟悉的代碼
2、要養成打“;”的習慣
3、要時刻注意中英文的轉換
4、要多看書,多和同學交流