c程序實驗報告
姓名:黃志乾????實驗地點:教學樓514教室????實驗時間:3月19日
實驗項目:
???1、字符與ASCII碼
???2、運算符與表達式的應用
???3、順序結構應用程序
???4、數學函數的算法描述
???5、雞兔同籠的算法描述
???6、確定坐標的算法描述
一、實驗目的與要求
1.字符與ASCII碼
● 了解字符在計算機中以ASCII碼方式表示;
● 了解字符的類型,
● 字長其數的表示范圍;熟練使用scanf()輸入用戶提供的數據;
● 熟練使用printf()輸出變量。
2.運算符與表達式的應用
● 掌握算術運算符的使用
● 正確定義程序中的變量
● 熟練使用scanf()輸入用戶提供的數據;
● 熟練使用printf()輸出變量。
3.順序結構應用程序
● 掌握算術運算符的使用
● 正確定義程序中的變量
● 熟練使用scanf()輸入用戶提供的數據;
● 熟練使用printf()輸出變量。
4.數學函數的算法描述
● 用if語句根據條件的真假進行判斷
● 掌握運算符的運算規則
5.雞兔同籠的算法描述
● 用if語句根據條件的真假進行判斷
● 掌握運算符的運算規則
6.確定坐標的算法描述
● 用if語句根據條件的真假進行判斷
● 掌握運算符的運算規則
二、實驗內容
1.實驗練習:2.3.3
1從鍵盤輸入一個大寫字母,要求轉換成小寫字母輸出,并輸出這個小寫字母相鄰的兩個字母;以及它們的ASCII碼值。
2
#include<stdio.h>
main()
{ char x;printf("請輸入一個大寫字母\n");scanf("%c",&x);printf("小寫字母為:%c,%c,%c\n",x+31,x+32,x+33);printf("ASCII碼值為%d,%d,%d",x+31,x+32,x+33);
}
3問題:字符與數值的轉換
??解決辦法:通過不同類型輸出%c與%d實現
2.實驗練習:2.3.4
1從鍵盤輸入一個3位整數,將輸出該數的逆序數。例如,輸入123,輸出321
2
#include<stdio.h>
main()
{int a,b,c,x,y;printf("請輸入一個3位的正整數:\n");scanf("%d",&x);c=x/100;b=x%100/10;a=x%10;y=a*100+b*10+c;printf("%d:%d\n",x,y);return 0;
}
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;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元\n應找回=%6.2f元\n",fk,hj,zh); return 0;
}
3問題:本實驗主要是數據較多復雜程度較高,容易因數據處理失誤而出錯
??解決辦法:認真分清楚定義的每個數據及數據的相關類型,在語句上多檢查相關符號是否有缺漏。
4.實驗練習:3.3.1
1有一函數
請用流程圖表示該函數的算法。輸入x值,輸出滿足函數關系的y值。并用c語言編寫程序進行檢驗。
2
#include<stdio.h>
main()
{float x,y;printf("請輸入x的值:"); scanf("%f",&x);if (x<1)printf("%f",x);else if (x<10&&x>1)printf("%f",x*2-1); else printf("%f",x*3-1);
}
3問題:if語句與else if語句的嵌套容易出錯
??解決辦法:注意語句的條件特別是語句的結束部分,以及輸出部分相關的符號是否完整或是否有出錯。
5.實驗練習:3.3.2
1雞兔同籠問題。將雞和兔子關在同一個籠子里,假如知道雞和兔子的總頭數h,雞和兔的總腳數f,請設計算法,能計算出雞和兔分別有多少只。
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);}elseprintf("輸入錯誤");
}
3問題:8到9行算法上總是報錯,
??解決辦法:在4和h之間和2和h之間需要打上“*”號,不能直接使用4h或2h。注意:當條件輸出有多項時需要用包含在大括號內。
6.實驗練習:3.3.3
1根據平面坐標,輸出圓塔的高度。
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)printf("該點高度為:0");else printf("該點高度為:10");
}
3問題:根號及平方的使用總是出錯
??解決辦法:首先要先包含數學的頭文件,否則無法使用根號“sqrt”(并列條件需要使用“&&”)
三、實驗小結
本次實驗課上總共進行了6個實驗,由于缺少實機操作,起初我對于寫程序并沒有那么的熟練,通過這幾個實驗我不但學習到了關于ASCII碼與數值的轉換,而且對于數據類型的異同與應用更加熟練,在操作上更加的嫻熟,同時提升了寫代碼的速度。通過本次實驗課讓我初步的認識到算法在其中的重要作用,不同的數據類型能夠幫助我們巧妙的設計相應的算法,在程序中是最為主要的部分。本次實驗課程的主要提升在與對運算符的使用上和if語句的使用及嵌套上,對于if語句的嵌套已有基本掌握,與此同時在編程中對于應注意的事項變得更加了解,在編程時中降低了自己犯錯的幾率,使編程更加得心應手。除此以外,我還有許多不足之處,有時會輸錯代碼或者代碼輸錯了位置,從而導致程序無法運行,在許多方面仍有待提高。