c程序設計實驗報告


c程序設計實驗報告

姓名:張樂 實驗地點:一教522 實驗時間:2021.4.15

一、實驗目的與要求

(1)掌握結構化程序的算法描述方法。

(2)了解C語言的基本語法要素,能熟練地將算法描述轉化為C語言程序。

(3)熟練掌握C語言運算符的優先級、結合性、運算規則、運算對象類型等。

(4)掌握C語言邏輯值的表示方法(0代表“假”,1代表“真”)。

(5)學會正確的使用邏輯表達式和關系表達式。

(6)掌握各種形式的if語句語法和使用方法。注意if語句中if和else的匹配關系,以及if語句的嵌套。

(7)掌握switch語句的語法和使用方法。注意在switch語句中break語句的語法及switch語句的嵌套。

(8)能獨立編寫分支結構程序並測試通過。

(9)用if語句、switch語句解決簡單的應用問題並上機實現。

二、實驗內容

1、實驗練習:3.3.1
(1)問題描述:自己設計合適的算法流程圖。輸入x值,輸出滿足函數關系的y值。
(2)實驗代碼:
#include<stdio.h>
main()
{
float x,y;
printf("請輸入x的值:");
scanf("%f",&x);
if(x<1)
{
y=x;
printf("y的值為%.2f",y);
}
else if(x<=10)
{
y=2*x-1;
printf("y的值為%.2f",y);
}
else
{y=3*x-1;
printf("y的值為%.2f\n",y);
}
}
(3)問題分析:
·在使用if語句嵌套時沒有加大括號,導致代碼運行失敗,請教了老師,在老師的幫助下解決了該問題。
·if后面的括號里寫完條件語句之后,不用輸入分號。
2、實驗練習:3.3.2
(1)問題描述:用算法流程圖描述求解雞兔同籠問題的算法:已知雞兔的總頭數為h,總腳數為f,求雞兔各有多少只?
(2)實驗代碼:
#include<stdio.h>
void main() 
{
	int h,f,x,y;
	printf("雞兔總數,雞兔腳總數:");
	scanf("%d,%d",&h,&f);
	if(x>0&&y>0)
	{
		x=(4*h-f)/2;
		y=(f-2*h)/2;
		printf("雞有%d只 兔有%d只\n",x,y);	
	}
	else
	printf("輸入錯誤!\n");
}
(3)問題分析:
·這個實驗中主要出現的問題是關於x(雞),y(兔)的表達式的計算,再找到問題之后,在草稿紙上用關於h,f的式子表達出了x,y。
3、實驗練習:3.3.3
(1)問題描述:有四個圓塔,圓心分別為(2,2)、(-2,2)、(2,-2)、(-2,-2),圓半徑為1,四個塔的高度均為10m,塔以外無建築物。現輸入任意一點的坐標,若該點的坐標在任意一個圓塔內,則輸出圓塔的高度;若該點不在圓塔內,則輸出0.
(2)實驗代碼:
#include<stdio.h>
#include<math.h> 
void 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);
}
(3)問題分析:
·在求兩點間距離時,運用了兩點間距離公式,在上機操作時,忘記了引用數學公式頭文件,經過同學的提醒,改正了這個錯誤。
·求兩點間距離時,平方只能用相乘的形式。
4、實驗練習:4.3.1
(1)問題描述:讀入三個表示箱子長、寬、高的整數值,判斷並輸出該箱子是正方體還是長方體。
(2)實驗代碼:
#include<stdio.h>
int main()
{
	int l,w,h;
	printf("請輸入箱子的長,寬,高:\n");
	scanf("%d%d%d",&l,&w,&h);
	if(l==w==h)
	printf("該箱子是正方體。\n");
	else
	printf("該箱子是長方體。\n");
	return 0;
}

(3)問題分析:
·if后面的條件語句要注意用兩個等於號。
5、實驗練習:4.3.2
(1)問題描述:編寫程序實現如下功能:商店有打印紙(18元/本)、墨盒(132元/個)、光盤(4.5元/片)出售,商店進行優惠酬賓活動。具體規則如下:顧客購買商品的總額超過100元,優惠%5;超過200元,優惠%6;超過300元,優惠%7;超過400元,優惠%8;超過500元,優惠%10。根據不同的購買量,計算應付貨款。
(2)實驗代碼:
#include<stdio.h>
void main()
{
	int x,y,z,a;//x為打印紙的數量,y為墨盒的數量,z為光盤的數量
	float sum;
	sum=0.0;
	printf("請輸入打印紙,墨盒,光盤的數量:\n");
	scanf("%d%d%d",&x,&y,&z);
	sum=18*x+132*y+4.5*z;
	a=sum/100;
	switch(a)
	{
		case 1:sum=sum*0.95;break;
		case 2:sum=sum*0.96;break;
		case 3:sum=sum*0.93;break;
		case 4:sum=sum*0.92;break;
		default:sum=sum*0.9;break;
	}
	printf("應付款%.2f",sum);
	return 0;
}
(3)問題分析:
·對於sum函數的應用不夠熟悉,這道題是在同學的指導下完成的。對於其中一些細節性的知識一知半解,還有就是對switch···case語句嵌套掌握的不夠熟練。
6、實驗練習:4.3.3
(1)問題描述:輸入某一年、月的數值,輸出該月的天數。
(2)實驗代碼:
#include<stdio.h>
int main()
{
	int year,month,days;
	printf("Please enter year and month:\n");
	scanf("%d%d",&year,&month);
	switch(month)
	{
		case 2:if(year%4==0&&year%100!=0||year%400==0)
		days=29;
		else days=28;
		break;
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12: days=31;break;
		case 4:
		case 6:
		case 9:
		case 11: days=30;break;	
	}
	printf("%d年%d月%d天",year,month,days);
	return 0;
}
(3)問題分析:
·判斷閏年的條件用代碼表示不太會,請教了旁邊的同學,在他的講解下掌握了如何用代碼表示.
·代碼的最后兩行要放在switch···case語句嵌套的大括號外面。

三、實驗小結

1、這次實驗課主要學習了簡單算法和分支結構的應用。
·在學習簡單算法時:要學會算法流程圖的繪制。不僅要掌握用if語句根據條件的真假進行判斷的方法,還要學會正確使用運算符。
·在學習分支結構時:我們要正確使用C語言邏輯運算和關系運算,還要正確使用關系表達式和邏輯表達式。尤其要掌握if語句和switch···case的用法。
2、if···else語句中,if后面的單個語句有分號,但復合語句(花括號)后沒分號。當 felse語句有嵌套時,注意其搭配關系,else總是與它前面最近的尚未配對的if對應。switch后一對括號中的“表達式”,只要其值為整型即可,可以是整型表達式、字符型表達式或枚舉型表達式;case后的表達式必須是常量表達式,不能包含變量;和if語句中的條件判斷不同, switch語句只測試相等條件;一般在使用 switch語句實現“多選一”功能時,每個case子句后都使用 break語句。由於 switch語句的表達式不允許是實型的,當應用於實型值選擇情況時,通常將實數表達式乘上一個適當的比例因子,將實數表達式的值映射到一個較小的范圍,然后將它轉換成整型。

四、預習

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM