实验10指针做函数参数编程训练
实验目的:
1.掌握指针的定义及使用;
2.体会使用指针的作用;
3.掌握指针做函数参数的作用;
4.掌握指针做函数参数的基本步骤;
实验题目:
1.输入某年某月某日,计算并输出它是这一年的第几天。
/*函数功能:对给定的某年某月某日,计算它是这一年第几天
函数参数:整型变量year,month,day,分别代表年,月,日
函数返回值:这一年的第几天*/
int DayofYear(int year,int month,int day);
2.输入某一年的第几天,计算并输出它是这一年的第几月第几日。
/*函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日函数入口参数:整型变量year,存储年
整型变量yearDay,存储这一年的第几天
函数出口参数:整型指针pMonth,指向存储这一年第几月的整型变量
整型指针pDay,指向存储第几日的整型变量
函数返回值:无*/
void MonthDay(int year,int yearDay,int *pMonth,int *pDay);
3.输出如下菜单,用switch语句实现根据用户输入的选择执行相应的操作。
1.year/month/day->yearDay
2.yearDay->year/month/day
3.Exit
Please enter your choice:
参考程序及注释:
#include
#include
int DayofYear(int year, int month, int day);
void MonthDay(int year, int yearDay, int *pMonth, int *pDay);
void Menu(void);
int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
char c;
Menu(); /* 调用Menu函数显示一个固定式菜单*/
c = getchar(); /* 输入选择*/
switch (c) /* 判断选择的是何种操作*/
{
case '1':
printf("Please enter year, month, day:");
scanf("%d,%d,%d", &year, &month, &day);
yearDay = DayofYear(year, month, day);
printf("yearDay = %d\n", yearDay);
break;
case '2':
printf("Please enter year, yearDay:");
scanf("%d,%d", &year, &yearDay);
MonthDay(year, yearDay, &month, &day);
printf("month = %d, day = %d\n", month, day);
break;
case '3':
exit(0); /* 退出程序的运行*/
default:
printf("Input error!");
}
return 0;
}
/* 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天*/
int DayofYear(int year, int month, int day)
{
int i, leap;
/* 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;
否则leap值为0,用第0行dayTab[0][i]计算*/
leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
for (i=1; i { day = day + dayTab[leap][i]; } return day; /* 返回计算出的day的值*/ } /* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日*/ void MonthDay(int year, int yearDay, int *pMonth, int *pDay) { int i, leap; leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); for (i=1; yearDay>dayTab[leap][i]; i++) { yearDay = yearDay - dayTab[leap][i]; } *pMonth = i; /* 将计算出的月份值赋值给pMonth所指向的变量*/ *pDay = yearDay; /* 将计算出的日号赋值给pDay所指向的变量*/ } /* 函数功能:显示菜单*/ void Menu(void) { printf("1. year/month/day -> yearDay\n"); printf("2. yearDay -> year/month/day\n"); printf("3. Exit\n"); printf("Please enter your choice:"); } 实验11 字符串与指针编程练习 实验目的: 1.熟悉字符串的输入及输出 2.掌握字符指针做函数参数的方法 3.掌握数组做函数参数的方法 实验题目: 1.编写一函数实现字符串的反序输出,函数原型如下: void invert(char *s); 即将字符串s反序。 解题思路:用循环将串s的首尾字符对调,直到中间位置结束。 如:串“ABCDE\0”,将A与E对调(交换),B与D对调,循环次数是串的实际长度的一半。 2.在主函数main中输入一串字符串,并调用invert函数将此字符串反序,然后再将反序后 的字符串输出。 3.编写一函数将字符串s中的字符c删除 void charDel(char *s,char c); 解题思路:假设s为“aebefe\0”串中的e字符删除,判断当前s指针是否指向e字符,若指向e字符,则将e字符后面的befe\0字符向前移动一位,然后移动s指针,重复这一过程。 4.编写函数void replace(char *s,char c1,char c2)实现将s所指向的字符串中所有字符c1用 c2替换,字符串,字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上。 解题思路:如果当前s指针指向的是c1字符,则把c2赋值给s指针所指向的地址空间,然后移动指针s,重复上述过程。 参考代码: #include "stdio.h" #include "string.h" void replace(char *s,char c1,char c2); void charDel(char *s,char c); void invert(char *s); int main() { char str[]="acbd"; invert(str); puts(str); } void invert(char *s) { int strLenth; char *i,*j,*mid,temp;//j和i所指向字符是相互交换的字符 strLenth=strlen(s); mid=s+strLenth/2;//交换的次数应为字符串总长度除以2 j=s+strLenth-1;//令j指向字符串的末尾,\0字符的前一个字符 for(i=s;i { temp=*i;*i=*j;*j=temp;//交换对应的字符 j--;//字符串末尾指向前移 } } void charDel(char *s,char c) { char *p,*q; while(*s!='\0') { if(*s==c) { p=s; q=s+1; while(*p++=*q++);//要删除的字符后面的字符串整体向前移动一位,也可以用下面的这段代码 /*while(*p!='\0') { *p=*q; p++; q++; } *q='\0';*/ } s++; } } void replace(char *s,char c1,char c2) { while(*s!='\0') { if(*s==c1) { *s=c2; s++; } } } 实验8 函数(一)实验目的: 1、理解自定义函数过程的定义与调用方法; 2、掌握自定义函数的定义与调用方法; 3、理解函数中的参数的作用; 实验内容: 1、编写一函数Fabonacci(n),其中参数n代表第n 次的迭代。While循环 def fib(n): if n==1 or n==2: return 1 a=1 b=1 i=2 while True: c=a+b a=b b=c i+=1 #第i次迭代,也就就是第i个数 if i==n: return c break def main(): n=input("Enter a number of generation:") print fib(n) main() 或者用for循环 def fib(n): a=1 b=1 c=0 if n==1 or n==2: return 1 else: for i in range(3,n+1): c=a+b a=b b=c return c def main(): n=input("enter n:") print fib(n) main() 2、编写一函数Prime(n),对于已知正整数n,判断该数就是否为素数,如果就是素数,返回True,否则返回 False。 def prime(n): if n<2: return False a=0 for i in range(1,n+1): if n%i==0: a+=1 if a>2: return False else: return True def main(): n=input("Enter a number:") print prime(n) main() Or: def prime(n): if n<2: return False if n==2: return True for i in range(2,n): if n%i==0: return False return True def main(): n=input("Enter a number:") print prime(n) main() 上机实验十函数与程序结构 学号姓名 一.目的要求 1.掌握函数声明、定义和调用的基本方法 2.掌握用递归函数解决问题的方法。 3.掌握局部变量与全局变量的作用域区别 4.掌握数组作为函数参数的基本方法。 二.实验内容 【实验题1】 分析如下: Line 2中的变量k是_全局_变量;而Line 10中的k是__局部_变量。程序输出结果是k=1,k=1,k=1 。 如果将第10行改为“static int k=1;变量,程序输出结果是k=1,k=2,k=1 。 如果将第10行改为“k=1; ”,该k变量,程序输出结果是k=1,k=1,k=2 。 如果将第10行改为空语句“; ”后,,程序输出结果是k=1,k=2,k=3 。 【实验题2】程序填空:输入一个整数n (1≤n≤10),再输入n个整数,将它们按升序排列后输出。 程序分析_选择法: (1)由于n最大是10,需要定义一个长度为10的整型数组a; (2)整个排序只需要确定前n-1个元素(a[0] ~a[n-2]),最后一个元素a[n-1]无需另外处理; (3)在确定a[i](i=0,1,…,n-2)时,先将a[i]本身看成最小,即令k=i, 并将a[k]与后面的元素a[j](j=i+1, i+2, …, n-1)一一比较, 如果a[j]< a[k],则更新k的值:k =j。找出对应于下标i的最小元素a[k]后,交换a[i]与a[k]。(4)上述排序算法的代码: 运行程序,输入n: 5,输入5个整数:23 -9 14 0 -3,显示结果为: 如果是按从大到小的降序排列,语句行Line 13 应改为:if(a[k]> a[j] ) k=j; [思考题]程序填空: 将上述的程序用函数调用的方式去实现。定义一个sort()函数来实现数组的排序;在main()函数中调用sort()函数来实现数组的排序,并将结果输出。 实验项目:函数的应用 实验目的: (1)掌握函数的定义和调用方法 (2)练习重载函数的使用 (3)练习使用系统函数 (4)使用debug调试功能,使用step into追踪到函数内部。 实验任务: 1.编写重载函数MAX1可分别求取两个整数,三个整数,两个双精度,三个双精度数的最大值。 2.用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。 实验步骤: 1.分别编写四个同名的函数max1,实现函数重载,在main()中测试函数功能。 int max1(int x, int y) { return (x>y?x:y); } int max1(int x, int y, int z) { int temp1=max1(x,y); return (y>z?y:z); } double max1(double x, double y) { return (x>y?x:y); } double max1(double x, double y, double z) { double temp1=max1(x,y); return (y>z?y:z); } void main() { int x1, x2; double d1, d2; x1 = max1(5,6); x2 = max1(2,3,4); d1 = max1(2.1, 5.6); d2 = max1(12.3, 3.4, 7.8); cout << "x1=" < C语言程序设计实验教学(7) 【实验目的】函数是C程序的基本组成部分,学习函数的设计和调用是很重要的。实验目的是掌握函数的定义、变量的作用域和函数的调用。 【实验要求】实际应用程序通常是由多个函数构成的,要求将常见的功能模块用函数形式实现,并学会在主函数或其他函数中调用定义的函数。要学会函数声明。 【实验课时】6.0 【实验内容】 编写函数fun(n),n为三位自然数,判断n是否为水仙花数,是返回1,否返回0。编写main 函数,输入一个数num,调用fun(num)函数,并输出函数的返回值。 #include "stdio.h" int fun(int n) {int a,b,c; a=n%10; b=n/10%10; c=n/100; if(a*a*a+b*b*b+c*c*c==n) return(1); else return(0);} main() {int num; scanf("%d",&num); while(num<100||num>=1000) {printf("please enter the num again! (num>=100&&num<1000) \n"); scanf("%d",&num);} if(fun(num)==1) printf(" yes \n"); else printf(" no \n");} 编写函数ss(n), 判断n是否为素数,是返回1,否返回0。编写main函数,输入一个数num,调用ss(num)函数,并输出函数的返回值。 #include "stdio.h" int ss(int n) {int i; for(i=2;i 实验四 MATLAB 程序设计 1.实验目的 (1)熟练掌握MATLAB 的程序流程控制结构。 (2)掌握M 文件的结构,M 函数文件编写、使用。 (3)熟练掌握函数调用和参数传递。 2.实验仪器 (1)Matlab6.5应用软件安装版 一套 (3)PC 机 一台 3. 实验原理 依据MA TLAB 的编程的原理,编写M 函数文件,调用M 函数文件,完成曲线绘制。 4. 实验步骤 (1)利用for 、while 控制语句和sum 指令求和。 (2)使用MA TLAB 函数文件绘图。 (3)利用置换指令绘制脉冲响应曲线. (4)利用feval 指令实现指定的函数。 5. 实验报告内容(选做其中两题) (1)分别用for 和while 循环语句计算∑==630i i 2 K 的程序,再写出一种避免循环的计算程序。 (提示:可考虑利用MA TLAB 的sum (X,n )函数,实现沿数组X 的第n 维求和。)保存为M 文件. (2)将课本例4-8子函数编程及调用演示,三个子图上的圆和多边形绘制在同一坐标系中。并保存为M 文件。保存输出结果图。 (3)利用置换指令subs(X,new),例4-18中的脉冲响应在t=[0,18]的曲线。并保存为M 文件。保存输出结果图。 (4)试利用feval ()指令计算F(x)+F 2(x),其中F 可取‘sin ’、‘cos ’。(提示:先编写以个M 函数function y=trif(F,x)实现F(x)+F 2(x)的计算,在编写调用函数完成F 为‘sin ’、‘cos ’的计算),并保存为M 文件。(指定完成sin(pi/2)+sin(pi/2)^2; cos(pi/3)+cos(pi/3)^2) 《C程序设计》实验教学大纲 欧阳家百(2021.03.07) 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分: 4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解C 语言的特点,熟练掌握C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 五、实验项目与学时分配 注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。 2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每 实验二函数的应用 一、实验目的 1、掌握函数的定义和调用方法。 2、掌握函数实参与形参的对应关系。 3、掌握函数嵌套调用和递归调用的方法。 二、实验内容与步骤 1、写一个判断素数的函数,在主函数中输入一个整数,输出是否是素数的信息。 2、编写重载函数Max可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。 3、递归函数与非递归函数。 编写一个函数,求从n个不同的数中取r个数的所有选择的个数。其个数值为:n! C r n= r!*(n-r)! 其中:n!=n*(n-1)*(n-2)* (1) 要求: (1)分别用递归和非递归两种方式完成程序设计; (2)主程序中设计一个循环,不断从输入接收n和r的值,计算结果并输出,当用户输入0 0时,程序结束; (3)能检查输入数据的合法性,要求n>=1并且n>=r; (4)注意整数能存放的数据范围有限,如何解决? 提示: (1)可以用double数据类型来存放函数的计算结果。 (2)递归结束条件: 如果r=0,则C(n,r)=1; 如果r=1, 则C(n,r)=n。 测试数据: 输入:5 3 输出:10 输入:10 20 输出:Iput Invalid1 输出:50 3 输出:19600 输入:0 0 程序结束 思考问题: (1)对各种数据类型的字长是否有了新的认识? (2)递归函数的书写要点是什么? (3)递归和非递归函数各有哪些好处? 4、求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数,用另一个函 数求最小公倍数。 要求: 两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再和两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。 实验6 函数 班级:学号: 姓名:日期: 一、实验目的 (1)掌握定义函数的方法; (2)掌握函数实参与形参的对应关系,以及“值传递”的方式; (3)掌握函数的嵌套调用和递归调用的方法; (4)掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法; (5)学习对多文件的程序编译和运行。 二、实验内容 1.阅读下面程序,写出程序运行结果,并且上机进行验证。 (1)a1.cpp 变量的虚实耦合,实现的是值传递,是单向传递 #include "stdio.h" int swap(int a,int b) { int c,s; c=a; a=b; b=c; s=a+b; return s; } void main() { int a,b,s; a=3;b=4; s=swap(a,b); printf("a=%d b=%d s=%d\n",a,b,s); } (2)a2.cpp 将十进制数26的各位数字相乘 #include "stdio.h" int fun(int num) { int k=1; do { k*=num %10; / num/=10; }while(num); return(k); } void main() { int n=26; printf("%d\n",fun(n)); } (3)a3.cpp 变量的作用域,当在函数内定义了与全局变量同名的局部变量时,全局变量被屏蔽#include "stdio.h" int a=3,b=5,c; void f(int b) { c=a+b; printf("%d %d %d\n",a,b,c); } void main() { int a=8; f(3); printf("%d %d %d\n",a,b,c); } (4)a4.cpp 递归,将十进制11转换为二进制 #include "stdio.h" void dtob(int n) { int i; 实验4 函数的应用 【实验目的】 1掌握函数声明、定义和调用的方法; 2了解函数调用的实参与形参的传递,以及参数默认值的设置。 3掌握重载函数的实现方法。 4理解递归和嵌套函数的概念、定义与调用。 【实验内容】 ⒈分别输入整数半径和实数半径,使用函数重载计算圆的面积。 #include ⒊编写程序,求)! (!!m n m n C m n -= #include Matlab 课后实验题答案 实验一 MATLAB 运算基础 1. 先求下列表达式的值,然后显示MATLAB 工作空间的使用情况并保存全部变量。 (1) 0 12 2sin851z e =+ (2) 221 ln(1)2z x x = ++,其中2120.45 5i x +??=??-?? (3) 0.30.330.3sin(0.3)ln , 3.0, 2.9,,2.9,3.022a a e e a z a a --+= ++=-- (4) 22 42011 122123t t z t t t t t ?≤=-≤?-+≤ ,其中t =0:0.5:2.5 解: M 文件: z1=2*sin(85*pi/180)/(1+exp(2)) x=[2 1+2*i;-.45 5]; z2=1/2*log(x+sqrt(1+x^2)) a=-3.0:0.1:3.0; z3=(exp(0.3.*a)-exp(-0.3.*a))./2.*sin(a+0.3)+log((0.3+a)./2) t=0:0.5:2.5; z4=(t>=0&t<1).*(t.^2)+(t>=1&t<2).*(t.^2-1)+(t>=2&t<3) .*(t.^2-2*t+1) 2. 已知: 1234413134787,2033657327A B --???? ????==???? ????-???? 求下列表达式的值: (1) A+6*B 和A-B+I (其中I 为单位矩阵) (2) A*B 和A.*B (3) A^3和A.^3 (4) A/B 及B\A (5) [A,B]和[A([1,3],:);B^2] 解: M 文件: A=[12 34 -4;34 7 87;3 65 7];B=[1 3 -1;2 0 3;3 -2 7]; A+6.*B A-B+eye(3) A*B A.*B A^3 A.^3 A/B B\A [A,B] [A([1,3],:);B^2] 3. 设有矩阵A 和B 1234 53 166789101769,11 121314150 23416171819209 7021222324254 1311A B ???? ????-??? ?????==-??? ? ???????????? (1) 求它们的乘积C 。 (2) 将矩阵C 的右下角3×2子矩阵赋给D 。 (3) 查看MATLAB 工作空间的使用情况。 解:. 运算结果: E=(reshape(1:1:25,5,5))';F=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11]; C= E*F H=C(3:5,2:3) C = 93 150 77 计算两个复数之积(调试示例error05_1)程序填空,不要改变与输入输出 有关的语句。 分别输入两个复数的实部与虚部,编程调用函数实现计算两个复数之积。 若两个复数分别为:c1=x1+(y1)i, c2=x2+(y2)i,则: c1*c2 = (x1*x2-y1*y2) + (x1*y2+x2*y1)i 输入输出示例:括号内是说明 输入 1 2 (x1=1, y1=2) -2 3 (x2=-2, y2=3) 输出 product of complex is (-5.000000)+(1.000000)i #include 实验十函数应用 一?实验目的 1.掌握函数的定义和调用; 2.理解形参和实参的使用和传值调用; 3.理解函数声明的使用; 4.掌握函数的嵌套调用; 5.了解函数的嵌套与递归调用,掌握递归函数的编写规律; 6.了解数组元素、数组名作函数参数。 二?实验学时数 2学时 三?实验步骤 (一)阅读程序 1.#include x=x-y; printf("%d,%d\n",x,y); 3.#include 实验八函数 【目的与要求】 1.掌握C语言函数的定义方法、函数的声明及函数的调用方法。 2.了解主调函数和被调函数之间的参数传递方式。 【上机内容】 【一般示例】 【例1】将打印18个"*"组成星形线定义为一个返回值和形参列表都为空的函数,通过主函数调用它。 #include #include 实验四:函数编写与程序设计 一、实验目的1 . 掌握M文件的创建。 2.掌握函数的编写规则。 3.掌握函数的调用。 4 . 掌握基本的输入输出函数以及显示函数的用法。 5.会用Matlab程序设计实现一些工程算法问题。 二、实验内容 1 . 设计程序,完成两位数的加、减、乘、除四则运算,即产生两个两位随机整数,再输入一个运算符号,做相应的运算,显示相应的结果,并要求结果显示类似于“a=x+y=34”。a=input('请输入一个数: ') b=input('请输入一个数:'); fuhao=input('请输入一个运算符号(+-*/):','s'); switch fuhao case {'+'} he=a+b; disp(['和=',num2str(a),'+',num2str(b),'=',num2str(he)]); case {'-'} he=a-b; disp(['减=',num2str(a),'-',num2str(b),'=',num2str(he)]) case {'*'} he=a*b; disp(['乘=',num2str(a),'*',num2str(b),'=',num2str(he)]) case {'/'} he=a/b; disp(['除=',num2str(a),'/',num2str(b),'=',num2str(he)]) otherwise disp('请输入正确的符号'); end 2 . 求下列分段函数的值 2 2 2 6,0 56, 1, y χχχχ χχχχχ χχ ?+-<≠ ? =-+≤≠≠? ?-- ? 且-3 0<10,2且3 其他 课程名称:结构化程序设计与C语言开课实验室:年月日 一、实验目的 用C语言编写和调试函数的程序。从而对函数的定义、调用、全局变量的灵活运用有比较深入的了解。 二、内容及结果 1、程序一素数函数 1)程序要求:写一个判断是否是素数的函数,在主函数输入一个整数,调用它后输出结果。2)代码: #include return 1; } int main() { int prime(int n); int n; printf("Please enter n:"); scanf("%d\n",&n); if(prime(n)==1) printf("%d is a prime number",int(n)); else printf("%d is not a prime number",int(n)); } 3)运行截图: 2、程序二用递归方法求n阶勒让德多项式的值 1)程序要求: 递归公式为: 当n=0,= ) (x P n 1 当n=1, = ) (x P n x; 当n>=1, = ) (x P n((2n-1)x-P n-1(x)-(n-1)P n-2 )x))/n 2)代码: #include #include 河南工业大学C语言实验报告 专业班级:生物11级1班学号:201112910118姓名:l刘路路指导老师:朱红莉评分: 实验题目:用函数实现模块化程序设计 实验目的:熟练掌握函数的定义、调用、声明 实验内容:P218-219 习题1、2、4 实验步骤:(具体程序及运行结果) 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 #include if (prime(n)) printf("%d is a prime.\n",n); else printf("%d is not a prime.\n",n); return 0; } int prime(int n) {int flag=1,i; for (i=2;i 实验七 参考答案(参考答案) (1) (sy7-1.c )请编写函数fun ,它的功能是:计算并输出n (包括n )以内能被5 或9 整除的所有自然数的倒数之和。例如,若主函数从键盘给n 输入20后,则输出为s=0.583333。 注意:n 的值要求不大于100。 算法分析: 使用for 循环i ,遍历n 包含n 以内的所有整数,逐一判断每个i ,是否满足条件(能被5 或9 整除),如果满足,则把它的倒数累加到累加器里。注意:i 的倒数要表示成:1.0/i; 参考子函数如下: double fun(int n) { double sum=0; int i; for(i=5;i<=n;i++) if(i%5==0||i%9==0) sum=sum+1.0/i; return sum; } (2) (sy7-2.c ) 请编写函数fun ,其功能是:根据以下公式计算s ,并计算结果作为函数值返回,n 通过形参传入。 n s ?++++?++++++=321132112111 例如:若n 的值为11时,函数的值为1.83333 算法分析: 等式右边从第二项(i=2)开始,其分母等于前一项的分母加上i ;一共有n 项;求出每项的分母,然后把每项进行累加。 参考子函数如下: float fun(int n) { float sum=1; //sum 中已经累加了第一项的值 int i,m=1; //m 表示每项的分母; for(i=2;i<=n;i++) { m=m+i; sum=sum+1.0/m; } return sum; } (3) (sy7-3.c)请编写函数fun,其功能是:将两个两位数的正整数a、b 合并形成一个整数放在c 中。合并的方式是:将 a 数的十位和个位依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的个位和百位上。 例如,当a=45,b=12,调用该函数后,c=5241。 算法分析: 对一个两位数n,它的各位可以通过n%10求的,它的十位数可以通过n/10求的;所以分别用上述方法求的a和b的个位和十位,同时按照要求累加到c里。 参考子函数如下: long fun(int a, int b) { long c=0; c=a%10*1000+a/10*10+b/10+b%10*100; return c; } (4) (sy7-4.c)请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。例如:实型数为1234.567, 则函数返回1234.570000;实型数为1234.564, 则函数返回1234.560000。 算法分析: 先把这个数乘以100,然后再加0.5(实现四舍五入),再把这个数存放到一个长整型变量中,目的是把小数点后的小数去除,最后把这个数转换成浮点型数除以100,即可得出所的结果。 参考自定义函数如下: float fun ( float h ) { long w ; w = h * 100 + 0.5 ; return (float) w / 100 ; } (5) (sy7-5.c)请编写一个函数unsigned fun ( unsigned w ),w 是一个大于10的无符号整数,若w 是n (n ≥2)位的整数,函数求出w的低n-1位的数作为函数值返回。 例如:w 值为5923,则函数返回923;w 值为923 则函数返回23。 算法分析: 首先应求出w的位数,有一位,i就乘以10(如果有4位,i就等于10000);然后通过求模运算舍弃最高位; 参考子函数如下: unsigned fun ( unsigned w ) { int i=1;//i用来存放整数的位数 C++语言程序设计实验答案-函数的应用 实验03函数的应用(2学时) (第3章函数) 一、实验目的 (1) 掌握函数的定义和调用方法。 (2) 练习重载函数的使用。 (3) 练习使用系统函数。 (4) 学习使用Visual Studio 2010的调试功能,使用“逐语句”追踪到函数内部。 二、实验任务 3_1(习题3-8)编写一个函数把华氏温度转换为摄氏温度,转换公式为:C=(F-32)*5/9。 3_2 编写重载函数Max1可分别求取2个整数、3个整数、2个双精度数、3个双精度数的最大值。 3_3 使用系统函数pow(x, y)计算x y的值,注意包含头文件cmath。 3_4(习题3-13)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。 三、实验步骤 1.(编程,习题3-8)把华氏温度转换为摄氏温度。 编写函数float Convert(float TempFer),参数和返回值都为float类型,实现算法 C=(F-32)*5/9,在main()函数中实现输入、输出。程序名:lab3_1.cpp。 ★程序及运行结果:(注意:定义的函数头是float Convert(float TempFer)) //lab3_1(习题3-8) #include 度的值是"< 2.2.4 实验4:函数编程练习 1. 给小学生出加法考试题 编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程。 程序1 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,程序结束。 程序2 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止。 程序3 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则提示重做,显示“Not correct! Try again!”,最多给三次机会,如果三次仍未做对,则显示“Not correct! You have tried three times! Test over!”,程序结束。 程序4 连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。 程序5 通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错题数。 【思考题】如果要求将整数之间的四则运算题改为实数之间的四则运算题,那么程序该如何修改呢?请读者修改程序,并上机测试程序运行结果。 2.掷骰子游戏 编写程序模拟掷骰子游戏。已知掷骰子游戏的游戏规则为:每个骰子有6面,这些面包含1、2、3、4、5、6个点,投两枚骰子之后,计算点数之和。如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。如果投掷7次仍未赚到该点数,则游戏者输。 【思考题】将游戏规则改为:计算机想一个数作为一个骰子掷出的点数(在用户输入数据之前不显示该点数),用户从键盘输入一个数作为另一个骰子掷出的点数,再计算两点数之和。其余规则相同,然后请读者重新编写该程序。Python 实验8 函数1
浙师大 C语言 实验10函数2+答案
实验2:函数的应用
实验(7)-函数-参考答案
实验四 MATLAB程序设计
C语言程序设计实验报告(实验大纲+过程)之欧阳家百创编
实验二 函数的应用
实验6函数习题及答案
实验4-1 函数的应用的答案
MATLAB程序设计及应用(第二版)课后实验答案
实验05 函数程序设计
实验十函数应用答案
实验八 函数含答案
matlab实验四函数编写与程序设计
C语言:函数的应用实验报告
实验七 用函数实现模块化程序设计
大学生C语言程序设计(第四版 谭洪强)实验7 答案
C++语言程序设计实验答案-函数的应用
实验四 函数编程练习