答案 實驗報告-實驗8 函數(shù)(1)(學(xué)號-姓名)_第1頁
答案 實驗報告-實驗8 函數(shù)(1)(學(xué)號-姓名)_第2頁
答案 實驗報告-實驗8 函數(shù)(1)(學(xué)號-姓名)_第3頁
答案 實驗報告-實驗8 函數(shù)(1)(學(xué)號-姓名)_第4頁
答案 實驗報告-實驗8 函數(shù)(1)(學(xué)號-姓名)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

實驗報告_實驗8函數(shù)(1)(學(xué)號_姓名)一、實驗?zāi)康模?、理解函數(shù)的功能2、熟練掌握函數(shù)的定義、聲明和調(diào)用方法;二、實驗內(nèi)容1、(基礎(chǔ)題)根據(jù)海倫公式由三角形的三邊長度a、b、c可以計算三角形面積,公式為:,其中:。請根據(jù)下列要求編寫程序:(1)三角形面積的計算由函數(shù)triangle_area實現(xiàn),函數(shù)原型為:doubletriangle_area(doublea,doubleb,doublec);當(dāng)輸入的a、b、c值不能構(gòu)成三角形時,返回0.0;(提示:構(gòu)成三角形的三邊條件:任意兩邊之和大于第三邊,任意兩邊之差小于第三邊。)(2)主函數(shù)的功能是輸入三角形的三條邊長,再調(diào)用triangle_area()得到面積,最后輸出結(jié)果;(3)主函數(shù)在前,triangel_area()在后面定義。程序代碼:#include<stdio.h>#include<math.h>intmain(){ doubletriangle_area(doublea,doubleb,doublec);//函數(shù)聲明 doublex,y,z,area; printf("請輸入三角形的三邊長度:"); scanf("%lf%lf%lf",&x,&y,&z); area=triangle_area(x,y,z); printf("三角形的面積=%.4lf\n\n",area); return0;}doubletriangle_area(doublea,doubleb,doublec)//函數(shù)定義{ if((a+b<=c)||(a+c<=b)||(b+c<=a))//不能構(gòu)成三角形 return0.0; doubles,p; p=(a+b+c)/2.0; s=sqrt(p*(p-a)*(p-b)*(p-c)); returns;}2、(基礎(chǔ)題)定義一個求最大公約數(shù)函數(shù)intgcd(intx,inty),在主函數(shù)輸入兩個整數(shù),然后調(diào)用gcd()輸出這兩個整數(shù)的最大公約數(shù)。提示:輾轉(zhuǎn)相除法求最大公約數(shù)的原理:先比較兩個數(shù)的大?。?1)用較大數(shù)去除較小數(shù),得到一個余數(shù);(2)如果余數(shù)為0,則除數(shù)(較小數(shù))就是最大公約數(shù),結(jié)束運算;(3)如果余數(shù)不為0,則計算除數(shù)(較小數(shù))和余數(shù)的最大公約數(shù)即可(舍去被除數(shù))。轉(zhuǎn)向執(zhí)行(1)。程序運行結(jié)果如下圖所示:程序代碼:#include<stdio.h>#include<stdlib.h>intmain(){ intm,n,t; intgcd(intx,inty);//聲明 printf("請輸入2個正整數(shù):"); scanf("%d%d",&m,&n); while(m<0||n<0){ printf("不能是負數(shù),請重新輸入2個正整數(shù):"); scanf("%d%d",&m,&n); } if(m<n) { t=m;m=n;n=t; } printf("%d和%d的最大公約數(shù)為:%d\n",m,n,gcd(m,n)); system("pause");return0;}intgcd(intx,inty)//定義{ intr; r=x%y; while(r!=0) { x=y; y=r; r=x%y; }//余數(shù)為0,除數(shù)y即是最大公約數(shù) returny;}3、(基礎(chǔ)題)定義一個將十進制數(shù)轉(zhuǎn)換成十六進制數(shù)的函數(shù)voiddec_to_hex(intn),該函數(shù)的功能是將參數(shù)中的十進制數(shù)以十六進制方式輸出(編程思路參考第6講課件例子)。在主函數(shù)輸入一個十進制整數(shù),然后調(diào)用dec2hex()輸出對應(yīng)的十六進制數(shù)。程序運行結(jié)果圖如下:請根據(jù)題意及注釋,填充程序所缺代碼:(1):voiddec_to_hex(intn)(2):dec_to_hex(n)(3):num[i++]=rem;(4):num[i++]=rem+55;程序代碼:#include<stdio.h>#include<stdlib.h>intmain(){ intn,rem; voiddec_to_hex(intn);//dec_to_hex函數(shù)的聲明 printf("Entern:"); scanf("%d",&n); printf("\n十進制數(shù):%d轉(zhuǎn)換為十六進制數(shù)是:",n); dec_to_hex(n);//dec_to_hex函數(shù)的調(diào)用 printf("\n");system("PAUSE"); return0;}voiddec_to_hex(intn){ charnum[20]; intrem,i=0; do { rem=n%16;//存放余數(shù) n=n/16; if(rem<10) num[i++]=rem;//10以內(nèi)的數(shù)字轉(zhuǎn)換成對應(yīng)的字符存放在字符數(shù)組num[]中 else num[i++]=rem+55;//10以上的數(shù)字轉(zhuǎn)換成對應(yīng)的字符存放在字符數(shù)組num[]中 }while(n>0); for(i=i-1;i>=0;i--) printf("%c",num[i]); printf("\n");}4、(提高題)編寫程序,當(dāng)用戶從鍵盤輸入公元年、月、日三個整數(shù)值(

年份的范圍為2001--2099),能夠計算該日期是這一年份的第幾天,例如: 當(dāng)輸入的數(shù)據(jù)有錯誤時,也能輸出提示信息,并結(jié)束程序,例如:(提示:本程序主要考查多個函數(shù)的相互調(diào)用,除主函數(shù)外,可以定義如下三個函數(shù):intis_leap_year(intyear)//判斷是否為閏年,如果是返回1,否則返回0intcheck_pass(intyear,intmonth,intday)//檢查輸入的數(shù)據(jù)是否有錯誤,通過返回1,否則返回0intcount_days(intyear,intmonth,intday)//統(tǒng)計該日期是當(dāng)年中的第幾天,先累加之前各月份天數(shù)(區(qū)分閏年與平年),再加上本月份的day)提示:閏年2月份是29天,非閏年2月份是28天。請根據(jù)題意及注釋,填充程序所缺代碼:(1):intcheck_pass(intyear,intmonth,intday);(2):intcount_days(intyear,intmonth,intday);(3):intis_leap_year(intyear);(4):check_pass(year,month,day)(5):if(((year%4==0)&&(year%100!=0))||(year%400==0))return1;elsereturn0;(6):intmonthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};intleapmonthday[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};intday_count=0;inti;if(is_leap_year(year))//(6)完成代碼,不止一行for(i=0;i<month;i++)day_count+=leapmonthday[i];elsefor(i=0;i<month;i++)day_count+=monthday[i];day_count+=day;returnday_count;程序代碼1:#include<stdio.h>#include<stdlib.h>intmain(){ intis_leap_year(intyear);//3個函數(shù)的聲明intcheck_pass(intyear,intmonth,intday);intcount_days(intyear,intmonth,intday);intyear,month,day,days;label:printf("請輸入年份:(2001--2099)"); scanf("%d%d%d",&year,&month,&day); if(check_pass(year,month,day))//判斷輸入的日期是否有誤 days=count_days(year,month,day); else{printf("輸入的天數(shù)有誤,程序結(jié)束!\n");gotolabel;} printf("%d-%d-%d是當(dāng)年的第%d天",year,month,day,days);while(1);return0;}//判斷是否為閏年,如果是返回1,否則返回0intis_leap_year(intyear){if(((year%4==0)&&(year%100!=0))||(year%400==0))return1;elsereturn0;}//檢查輸入的數(shù)據(jù)是否有錯誤,通過返回1,否則返回0intcheck_pass(intyear,intmonth,intday){if(month==2){if((!is_leap_year(year))&&(day==29))return0;}elsereturn1;}//統(tǒng)計該日期是當(dāng)年中的第幾天,先累加之前各月份天數(shù)(區(qū)分閏年與平年),再加上本月份的dayintcount_days(intyear,intmonth,intday){intmonthday[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};intleapmonthday[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};intday_count=0;inti;if(is_leap_year(year))//(6)完成代碼,不止一行for(i=0;i<month;i++)day_count+=leapmonthday[i];elsefor(i=0;i<month;i++)day_count+=monthday[i];day_count+=day;returnday_count;}或者2:#include<stdio.h>intdays1[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//平年各月份天數(shù),下標(biāo)從1開始intdays2[]={0,31,29,31,30,31,30,31,31,30,31,30,31};//閏年各月份天數(shù),下標(biāo)從1開始intmain(){ intcheck_pass(intyear,intmonth,intday);//函數(shù)聲明 intcount_days(intyear,intmonth,intday);//函數(shù)聲明 intyear,month,day; printf("請輸入年(2001-2099)、月、日:"); scanf("%d%d%d",&year,&month,&day); if(!check_pass(year,month,day)) return1; printf("%d-%d-%d是當(dāng)年的第%d天。\n\n",year,month,day,count_days(year,month,day)); return0;}//檢查輸入的數(shù)據(jù)是否有錯誤,通過返回1,否則返回0intcheck_pass(intyear,intmonth,intday){ intis_leap_year(intyear);//聲明is_leap_year(intyear)函數(shù) if(year<2001||year>2099) { printf("輸入的年份有錯誤,程序結(jié)束!\n\n"); return0; } if(month<1||month>12) { printf("輸入的月份有錯誤,程序結(jié)束!\n\n"); return0; } intdays_of_the_month; if(is_leap_year(year)) days_of_the_month=days2[month]; else days_of_the_month=days1[month]; //printf("當(dāng)月的最大天數(shù)為:%d\n",days_of_the_month); if(day<1||day>days_of_the_month) { printf("輸入的天數(shù)有錯誤,程序結(jié)束!\n\n"); return0; } else return1;}//判斷是否為閏年,如果是返回1,否則返回0intis_leap_year(intyear){ if(((year%4==0)&&(year%100!=0))||(year%400==0)) return1; else return0;}//

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論