实验答案--函数
- 格式:docx
- 大小:29.74 KB
- 文档页数:20
实验一 MATLAB入门(1)1.实验目的:(1)了解MATLAB的体系结构与特点,熟悉其集成开发环境。
(2)熟悉MATLAB界面窗口的功能和使用方法。
(3)熟悉MATLAB的帮助系统及使用方法。
(4)了解MATLAB的的数据类型、基本形式和数组的产生方法。
(5)掌握MATLAB基本的数学运算操作。
2.实验原理(1)MATLAB简介MATLAB是美国MathWorks公司开发的高性能的科学与工程计算软件。
它在数值计算、自动控制、信号处理、神经网络、优化计算、小波分析、图像处理等领域有着广泛的用途。
近年来, MATLAB在国内高等院校、科研院所的应用逐渐普及,成为广大科研、工程技术人员必备的工具之一。
MATLAB具有矩阵和数组运算方便、编程效率极高、易学易用、可扩充性强和移植性好等优点,俗称为“草稿纸式的科学计算语言”。
它把工程技术人员从繁琐的程序代码编写工作中解放出来,可以快速地验证自己的模型和算法。
经过几十年的扩充和完善,MATLAB已经发展成为集科学计算、可视化和编程于一体的高性能的科学计算语言和软件开发环境,整套软件由MATLAB开发环境、MATLAB语言、MATLAB数学函数库、MATLAB图形处理系统和MATLAB应用程序接口(API)等五大部分组成。
MATLAB的主要特点包括强大的计算能力(尤其是矩阵计算能力)、方便的绘图功能及仿真能力、极高的编程效率。
另外,MATLAB还附带了大量的专用工具箱,用于解决各种特定领域的问题。
通过学习软件的基本操作及其编程方法,体会和逐步掌握它在矩阵运算、信号处理等方面的功能及其具体应用。
通过本课程实验的学习,要求学生初步掌握MATLAB的使用方法,初步掌握M文件的编写和运行方法,初步将MATLAB运用于数字信号处理中。
循序渐进地培养学生运用所学知识分析和解决问题的能力。
(2)MATLAB的工作界面(Desktop)与操作MATLAB 安装成功后,第一次启动时,主界面如下图(不同版本可能有差异)所示:其中① 是命令窗口(Command Window ),是MATLAB 的主窗口,默认位于MATLAB界面的右侧,用于输入命令、运行命令并显示运行结果。
实验六函数一、实验目的1. 熟练掌握函数的定义、函数的类型和返回值。
2. 熟练掌握形式参数与实际参数、参数值的传递。
3. 掌握函数的嵌套调用与递归调用。
4.学会使用指向函数的指针变量。
5.了解指向指针的指针的概念及带参数的main函数。
6. 掌握局部变量和全局变量。
7. 掌握变量的存储类型。
8. 了解内部函数和外部函数。
二、实验学时:8课时三、预习知识1.标准库函数标准库函数是C系统提供的,这些库函数定义了一些基本的、常用的功能,用户可以使用这些库函数,但是在使用库函数之前需要用预编译命令# include将该库函数所在的头文件包含进来。
2.自定义函数定义函数一般有两种形式形式1:存储类型类型符函数名(类型符形参1,类型符形参2 ,… ) { 说明语句执行语句}形式2:存储类型类型符函数名(形参1,形参2 ,……)形参类型说明{ 说明语句执行语句}说明:①形参表中即使没有参数,函数名后的一对圆括号也不能省略。
②函数名前的类型符是用来说明函数返回值的数据类型(也作为函数的数据类型) 。
当函数值为整型时,类型符可以省略。
③当函数只完成某一特定操作不需要返回值时,可用类型标识符 void 说明,将函数定义成空类型。
④C 规定:不允许在一个函数内部再定义另外一个函数,即函数不允许嵌套定义。
⑤函数的存储类型:函数的存储类型有 extern 和 static 两种。
extern 型的函数除了可以被本程序中其它函数调用外,还可以被其它文件中的函数调用,这种函数称为外部函数,如果定义函数时省略 extern ,则隐含为外部函数。
static 型的函数只能被本源程序文件中的函数调用,称为内部函数(静态函数)。
3.函数的参数(1)在定义函数时函数名后面括号中的变量称为形参(形式参数),如果有两个以上形参,形参之间以逗号分隔。
形参是函数的内部变量,只在函数内部才有意义。
在未出现函数调用时,形参不占内存。
对每个形参必须指明其名字和数据类型。
C语言程序设计实验指导含答案实验一:C语言程序设计基础实验内容:本实验主要以C语言的基础语法为主,通过一些简单的示例和练习来帮助学生熟悉C语言的基本概念和语法规则。
实验步骤:1. 编写一个简单的C程序,输出"Hello, World!"。
要求程序能够顺利编译并执行。
答案:#include <stdio.h>int main(){printf("Hello, World!");return 0;}2. 基于上一题的程序,修改代码,要求程序输入一个整数,并将其乘以2输出。
答案:#include <stdio.h>int main(){int num;printf("请输入一个整数:");scanf("%d", &num);printf("乘以2的结果为:%d", num * 2);return 0;}3. 编写一个C程序,输入一个圆的半径,计算并输出其面积和周长。
要求保留2位小数。
答案:#include <stdio.h>#define PI 3.14159int main(){float radius;printf("请输入圆的半径:");scanf("%f", &radius);float area = PI * radius * radius;float circumference = 2 * PI * radius;printf("圆的面积为:%.2f\n", area);printf("圆的周长为:%.2f\n", circumference);return 0;}实验二:循环和判断语句实验内容:本实验主要通过不同的练习来帮助学生熟悉和掌握C语言中的循环和判断语句的使用方法。
第五次实验题目-第七章函数教学目标31.一元二次方程的系数:a、b、c由主函数输入,编写函数求方程的根。
#include <stdio.h>#include <math.h>void root(double a, double b, double c){ double delta,x1,x2,m,n;if (fabs(a) <= 1e-6){if (fabs(b) <= 1e-6)puts("Not an equation");elseprintf("x=%.2lf",-c/b);return;}else{delta=b*b - 4*a*c;m = -b / (2*a);n = sqrt(fabs(delta)) / (2*a);x1 = m + n;x2 = m - n;if (fabs(delta) <= 1e-6)printf("x1=%.2lf, x2=%.2lf", x1, x1);else if (delta < 0)printf("x1=%.2lf+%.2lfi, x2=%.2lf-%.2lfi",m,n,m,n);elseprintf("x1=%.2lf, x2=%.2lf", x1, x2);}}int main( ){ double a,b,c;scanf("%lf%lf%lf",&a,&b,&c);root(a,b,c);return 0;}教学目标32.输入一串字符,统计其中英文字母的个数,编写统计英文字母个数的函数。
#include<stdio.h>int numberOfLetter(char str[]) {int i=0;int num = 0;//统计字母个数while (str[i]!=’\0’) {if ((str[i]>='A'&& str[i]<='Z')||( str[i]>='a'&& str[i]<='z')) num++;i++;}return num;}int main( ) {char str[100];int letterNum;printf("Enter a string: ");gets(str);letterNum = numberOfLetter(str);printf("Number of letters is %d.\n", letterNum);return 0;}教学目标33. 求100以内所有素数的和。
实验2 顺序结构程序设计1. 编写程序,从键盘输入一个大写字母,将它转换为对应的小写字母后输出。
参考程序:#include "stdio.h"void main(){char ch;printf(“\nPlease input a capital character:”);scanf(“%c”,&ch);ch=ch+32;printf(“\nThe small letter is %c”,ch);}2.编写程序,输入圆半径r ,求圆周长、圆面积、圆球体积。
参考程序:#include <stdio.h>#include <math.h>#define PI 3.14void main(){float r,c,area,v;printf(“\nPlease input the r:”);scanf(“%f”,&r);c=2*PI*r;area=PI*r*r;v=4.0/3*PI*pow(r,3);printf(“\nThe circle’s perimeter is %.2f”,c);printf(“\nT he circle’s area is %.2f”,area;printf(“\nThe circle’s volume is %.2f”,v);}3. 输入一个华氏温度,要求输出摄氏温度。
公式为:()3295-=F c 输出要有文字说明,取2位小数。
参考程序:#include <stdio.h>void main(){float f,c;printf(“\nPlease input a F temperature:”);scanf(“%f ”,&f);c=5.0/9*(f-32);printf(“\nThe temperature is %.2f ”,c);}4. 有3个电阻r1、r2、r3并联,编写程序计算并输出并联后的电阻r 。
实验十 参考答案(指针)三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)1. 程序填空题 给定程序BLACK10-1.C 中,函数fun 的功能是:将形参n 所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n 传回所指变量。
例如,输入一个数:27638496,新的数:为739。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
【解题思路】第一处:t 是通过取模的方式来得到*n 的个位数字,所以应填:10。
第二处:判断是否是奇数,所以应填:0。
第三处:最后通形参n 来返回新数x ,所以应填:x 。
2. 程序改错题 给定程序MODI10-1.C 中函数fun 的功能是: 计算n 的5次方的值(规定n 的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。
例如,7的5次方是16807, 其低3位数的和值是15。
【解题思路】第一处:变量d 的初始值应为1。
第二处:整除的符号是 /。
3. 程序设计题 请编写函数fun ,它的功能是:求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。
【解题思路】本题是求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。
【参考答案】void fun ( int x, int pp[], int *n ){ int i; *n=0;for(i=1; i <= x; i++)if((x % i== 0) && (i % 2)) pp[(*n)++]=i;}4. 程序填空题 给定程序中,函数fun 的功能是:找出N ×N 矩阵中每列元素中的最大值,并按顺序依次存放于形参b 所指的一维数组中。
实验3 函数的极值以及符号表达式的计算-答案1、求函数)sin()(t t e t f t -=在[0,1]内的最小值点以及最小值。
编辑ff2.m 文件:function f=ff(t)f=exp(t)-t*sin(t);调用函数>> [t,favl]=fminbnd('ff',0,1)t =6.6107e-005favl =1.00012、对以下表达式进行因式分解,然后再将分解的结果进行展开,检查因式分解结果是否正确。
(1)12234++++x x x x(2)6555234-++-x x x x(1)>> syms x>> f=x^4+x^3+2*x^2+x+1;>> s=factor(f)s =(x^2+x+1)*(x^2+1)>> expand(s)ans =x^4+x^3+2*x^2+x+1(2)>> syms x>> f= x^4-5*x^3+5*x^2+5*x-6;>> s=factor(f)s =(x-1)*(x-2)*(x-3)*(x+1)>> expand(s)ans =x^4-5*x^3+5*x^2+5*x-63、对以下表达式进行化简。
(1)123842+++x x x(2)x x 22sin cos 2-(1)>> syms x>> f=(4*x^2+8*x+3)/(2*x+1);>> s=simplify(f)s =2*x+3(2)>> syms x>> f=2*cos(x)^2-sin(x)^2;>> s=simplify(f)s =3*cos(x)^2-14、求下列函数的极限。
(1)4586lim 224+-+-→x x x x x (2)x x x /)sin(lim 0→ (1)>> syms x>> f=(x^2-6*x+8)/(x^2-5*x+4);>> limit(f,x,4)ans =2/3(2)>> syms x>> limit(sin(x)/x,x,0)ans =15、 首先作出函数)/1cos(x y =在区[-1,-1e-6]区间上的图形,观测图形在0=x 附近的形状,判断)/1cos(x y =函数在0=x 极限的存在性。
1. 编一个带有函数的程序。
在main() 函数中输入一个字符串(长度<20),调用函数fun 将该字符串中的所有字符按ASCII 码升序排序,然后再输出排序后的字符串。
例如,输入edcba,则应输出abcde.。
#include <>#include <>int main(){void fun(char x[],int y);int i;char c[20];printf("Please input chars:\n"); gets(c);i=strlen(c);fun(c,i);return 0;}void fun(char x[],int y){int i,j;char c;for(i=0;i<y-1;i++)for(j=i+1;j<y;j++)if(x[i]>x[j]){ c=x[i]; x[i]=x[j]; x[j]=c; } puts(x);}2. 下面程序的功能是依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串;(如:abcd123efg456变为123456)。
修改该程序,要求将红色部分用一个函数来实现。
#i nclude ""mai n(){ char s[15]; int i,j;scan f("%s",s);for (i=0,j=0; s[i]!='\0'; i++){ s[j]=s[i]; j++; }s[j]='\0';printf("\nThe result:");prin tf("%s",s);}#in clude <> int main() { void fun(char x[]);char s[15];printf("Input chars to fill s[15]:\n"); scanf("%s",s);fun(s);return 0;}void fun(char x[]){int i,j;for(i=0,j=0; x[i]!='\0'; i++) if(x[i]>='0'&&x[i]<='9'){ x[j]=x[i]; j++; }x[j]='\0';puts(x);}3. 编写带有函数的程序(函数名为:int fun(int s[],int *k) ),功能是求出数组的最大元素在数组中的下标并存放在k 所指的存储单元中。
例如:输入如下整数876 675 896 101 301 401 980 431 451 777则输出结果为:6,980。
#include <>void fun(int s[],int *k){int i,max=s[0];for(i=1;i<10;i++)if(max<s[i]){ max=s[i]; *k=i; }}int main(){int a[10]={876,675,896,101,301,401,980,431,451,777};int k;fun(a,&k);printf("%d,%d\n",k,a[6]);return 0;}4. 在main() 函数中,已有一个已排好序的整型数组,今输入一个整数,调用函数fun() ,其功能是按原来排序的规律将它插入数组中。
例如:原来数组的元素依次为4、6、8、41、56、77、102。
若将42 插入数组中,则插入后数组元素依次为4、6、8、41、42、56、77、89、102。
#include <>void fun (int s[],int m){int i,j;for(i=0;;i++)if(s[i]<m&&s[i+1]>m) break;for(j=6;j>i;j--)s[j+1]=s[j];s[i+1]=m;}int main(){int s[8]={4,6,8,41,56,77,102};int i,m;puts("Please input m:");scanf("%d",&m);fun (s,m); for(i=0;i<8;i++) prin tf("%d ",s[i]); putchar('\n'); return 0;}5. 下面程拷贝序的功能是将字符数组s2中的全部字符拷贝到字符数组s1时,’0'也拷贝过去,但’0'后面的字符不拷贝。
修改该程序,要求将红色部分用一个函数来实现。
mai n(){char s1[80],s2[80];int i;sca nf("%s",s2);for(i=0;s2[i]!= ' 0' ;i++)s1[i]= ' 0';printf("s1:%s\n",s1);}#include <>void xp(char s1[],char s2[]) {int i;for(i=0;s2[i]!='\0';i++) s1[i]=s2[i];s1[i]='\0';}int main(){char s1[80],s2[80];puts("Input chars of s2[]:"); gets(s2);xp(s1,s2); printf("s1:%s\n",s1); return 0;}6. 编写带有函数的程序(函数名为:fun()),功能是将ss 所指字符串中下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换,注意下标是从0 开始的)。
例如:输入abbcc45ghNj,则应输出aBbCc45GhN。
#include <>void fun(char x[]){int i;for(i=1;x[i]!='\0';i=i+2) if(x[i]>'a'&&x[i]<'z') x[i]=x[i]-32;}int main(){char ss[80];puts("Input chars to fill ss[]:");gets(ss);fun(ss);puts(ss);return 0;}7. 在main()函数中,先从键盘上输入一个3行3列整型数组的各个元素的值,然后调用函数fun() ,其功能是计算并返回主对角线元素之和。
#include <>int fun(int a[][3]){int i,j,s=O;for(i=0;i<3;i++)for(j=0;j<3;j++)if(i==j) s=s+a[i][j];return s;}int mai n(){int i,j,k,a[3][3];puts(" In put 9 numbers to fill a[3][3]:");for(i=0;i<3;i++)for(j=0;j<3;j++)sca nf("%d",&a[i][j]);k=fu n(a);printf(" 主对角线之和=%d",k);return 0;}8. 下面程序的功能是用冒泡法对10个整数按降序进行排序。
修改该程序,要求将红色部分用一个函数来实现。
mai n(){ int a[11],i,j,t;prin tf("I nput 10 numbers:\n");for(i=1;i<11;i++)scan f("%d",&a[i]); prin tf("\n");for(j=1;j<=9;j++)for(i=1;i<=10-j;i++)if(a[i]<a[i+1])for(i=1;i<11;i++)prin tf("%d ",a[i]);}#in elude <>void fun (i nt a[]){int i,j,t;for(j=1;jv=9;j++)for(i=1;i<=10-j;i++) if(a[i]<a[i+1]){ t=a[i]; a[i]=a[i+1]; a[i+1]=t; }}int mai n(){int a[11],i;prin tf("I nput 10 numbers:\n");for(i=1;i<11;i++)scan f("%d",&a[i]);prin tf("\n");fun( a);prin tf("The sorted nu mbers:\n"); for(i=1;i<11;i++)prin tf("%d ",a[i]);putchar('\n');return 0;9. 编写带有函数的程序(函数名为:int fun()),功能是从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。
结果应该是:15 45 51 54#in elude <>int fun(int b[]){int i,j=O;for(i=1;i<=55;i++)if(i%3==0)if(i/10==5||i%10==5){ b[j]=i; j++; }return j;}int mai n(){int a[100],k,m;m=fu n(a);prin tf("The result is:\n");for(k=0;k<m;k++)prin tf("%4d",a[k]);prin tf("\n");return 0;}10. 下面程序的功能是将两个字符串连接起来,不要用strcat函数。
修改该程mai n(){char s1[80],s2[80];int i=0,j;sca nf("%s",s1);scanf( “%s‘ ,s2);while(s1[i]!= ' 0' ) i++;for(j=0; s2[j]!= ' 0';)s1[i++]=s2[j++];prin tf("s1:%s\n",s1);#in elude <>void xp(char s1[],char s2[]){int i=0,j;while(s1[i]!='\0')i++;for(j=0; s2[j]!='\0';)s1[i++]=s2[j++];s1[i]='\0';}int mai n(){char s1[80],s2[80];puts(" In put chars to fill s1[]:");gets(s1);puts(" In put chars to fill s2[]:");gets(s2);xp(s1,s2);puts(s1);return 0;}11. 编写带有函数的程序(函数名为fun ),功能是求出ss 所指字符串中指定字符的个数,并返回此值。