答案 实验报告-实验8 函数(1)(学号-姓名)_第1页
答案 实验报告-实验8 函数(1)(学号-姓名)_第2页
答案 实验报告-实验8 函数(1)(学号-姓名)_第3页
答案 实验报告-实验8 函数(1)(学号-姓名)_第4页
答案 实验报告-实验8 函数(1)(学号-姓名)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告_实验8函数(1)(学号_姓名)一、实验目的:1、理解函数的功能2、熟练掌握函数的定义、声明和调用方法;二、实验内容1、(基础题)根据海伦公式由三角形的三边长度a、b、c可以计算三角形面积,公式为:,其中:。请根据下列要求编写程序:(1)三角形面积的计算由函数triangle_area实现,函数原型为:doubletriangle_area(doublea,doubleb,doublec);当输入的a、b、c值不能构成三角形时,返回0.0;(提示:构成三角形的三边条件:任意两边之和大于第三边,任意两边之差小于第三边。)(2)主函数的功能是输入三角形的三条边长,再调用triangle_area()得到面积,最后输出结果;(3)主函数在前,triangel_area()在后面定义。程序代码:#include<stdio.h>#include<math.h>intmain(){ doubletriangle_area(doublea,doubleb,doublec);//函数声明 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)//函数定义{ if((a+b<=c)||(a+c<=b)||(b+c<=a))//不能构成三角形 return0.0; doubles,p; p=(a+b+c)/2.0; s=sqrt(p*(p-a)*(p-b)*(p-c)); returns;}2、(基础题)定义一个求最大公约数函数intgcd(intx,inty),在主函数输入两个整数,然后调用gcd()输出这两个整数的最大公约数。提示:辗转相除法求最大公约数的原理:先比较两个数的大小:(1)用较大数去除较小数,得到一个余数;(2)如果余数为0,则除数(较小数)就是最大公约数,结束运算;(3)如果余数不为0,则计算除数(较小数)和余数的最大公约数即可(舍去被除数)。转向执行(1)。程序运行结果如下图所示:程序代码:#include<stdio.h>#include<stdlib.h>intmain(){ intm,n,t; intgcd(intx,inty);//声明 printf("请输入2个正整数:"); scanf("%d%d",&m,&n); while(m<0||n<0){ printf("不能是负数,请重新输入2个正整数:"); scanf("%d%d",&m,&n); } if(m<n) { t=m;m=n;n=t; } printf("%d和%d的最大公约数为:%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; }//余数为0,除数y即是最大公约数 returny;}3、(基础题)定义一个将十进制数转换成十六进制数的函数voiddec_to_hex(intn),该函数的功能是将参数中的十进制数以十六进制方式输出(编程思路参考第6讲课件例子)。在主函数输入一个十进制整数,然后调用dec2hex()输出对应的十六进制数。程序运行结果图如下:请根据题意及注释,填充程序所缺代码:(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函数的声明 printf("Entern:"); scanf("%d",&n); printf("\n十进制数:%d转换为十六进制数是:",n); dec_to_hex(n);//dec_to_hex函数的调用 printf("\n");system("PAUSE"); return0;}voiddec_to_hex(intn){ charnum[20]; intrem,i=0; do { rem=n%16;//存放余数 n=n/16; if(rem<10) num[i++]=rem;//10以内的数字转换成对应的字符存放在字符数组num[]中 else num[i++]=rem+55;//10以上的数字转换成对应的字符存放在字符数组num[]中 }while(n>0); for(i=i-1;i>=0;i--) printf("%c",num[i]); printf("\n");}4、(提高题)编写程序,当用户从键盘输入公元年、月、日三个整数值(

年份的范围为2001--2099),能够计算该日期是这一年份的第几天,例如: 当输入的数据有错误时,也能输出提示信息,并结束程序,例如:(提示:本程序主要考查多个函数的相互调用,除主函数外,可以定义如下三个函数:intis_leap_year(intyear)//判断是否为闰年,如果是返回1,否则返回0intcheck_pass(intyear,intmonth,intday)//检查输入的数据是否有错误,通过返回1,否则返回0intcount_days(intyear,intmonth,intday)//统计该日期是当年中的第几天,先累加之前各月份天数(区分闰年与平年),再加上本月份的day)提示:闰年2月份是29天,非闰年2月份是28天。请根据题意及注释,填充程序所缺代码:(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个函数的声明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("输入的天数有误,程序结束!\n");gotolabel;} printf("%d-%d-%d是当年的第%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;}//检查输入的数据是否有错误,通过返回1,否则返回0intcheck_pass(intyear,intmonth,intday){if(month==2){if((!is_leap_year(year))&&(day==29))return0;}elsereturn1;}//统计该日期是当年中的第几天,先累加之前各月份天数(区分闰年与平年),再加上本月份的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};//平年各月份天数,下标从1开始intdays2[]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年各月份天数,下标从1开始intmain(){ intcheck_pass(intyear,intmonth,intday);//函数声明 intcount_days(intyear,intmonth,intday);//函数声明 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天。\n\n",year,month,day,count_days(year,month,day)); return0;}//检查输入的数据是否有错误,通过返回1,否则返回0intcheck_pass(intyear,intmonth,intday){ intis_leap_year(intyear);//声明is_leap_year(intyear)函数 if(year<2001||year>2099) { printf("输入的年份有错误,程序结束!\n\n"); return0; } if(month<1||month>12) { printf("输入的月份有错误,程序结束!\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\n",days_of_the_month); if(day<1||day>days_of_the_month) { printf("输入的天数有错误,程序结束!\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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论