实验4 指针

实验4 指针
实验4 指针

实验4 指针

一、实验目的

(1)通过实验进一步掌握指针的概念,会定义和使用指针变量;

(2)能够正确使用数组的指针和指向数组的指针变量;

(3)能够正确使用字符串的指针和指向字符串的指针变量;

(4)能正确使用指向函数的指针变量。

二、实验内容

写出实现下述两个问题的程序并调试

(1)将一个3×3的矩阵转置,用一函数实现这一计算(在函数中只能使用指

针变量)。

在主函数中用scanf()函数输入以下矩阵元素:

1 3 5

7 9 11

13 15 17

将数组名作为函数的参数,在执行函数的过程中实现矩阵转置,函数调用结束后,在主程序中输出已转置的矩阵。

(2)用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原

型为:

int strcmp(char *p1,char *p2);

?两个串相等时,返回0

?p1>p2时,返回值>0

?p1

三、实验指导

问题1提示:

本题目要求编程实现矩阵的转置,并且在实现这一操作时只能使用指针,因此解决这一问题时,应注意下面几个问题:

?数组名是一个指针变量,但该指针变量是一个常量;

?int a[10]中的a 的类型等同于int *p定义的指针变量p;

?int a[10][5]中定的a的类型等同于int (*p)[5];

问题2提示:

?字符串本质上就是一个一维字符数组(串尾附加了一个’\0’);

?字符串可用一个指向字符串的字符指针操作;

?串相等是指两串字符个数相等、且每个字符都相等;

?不相等时,以第一对不相等字符的大小决定。

四、预习题

选择题

1.变量的指针,其含义是指该变量的。

A)值B)地址C)名D)一个标志

2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是。

A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2)

3.若有说明:int *p,m=5,n;以下程序段正确的是。

A)p=&n ; B)p = &n ;

scanf(“%d”,&p); scanf(“%d”,*p);

C)scanf(“%d”,&n); D)p = &n ;

*p=n ; *p = m ;

4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是。

void print_value(int *x)

{ printf(“%d\n”,++*x); }

A)23 B)24 C)25 D)26

5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项

是。

A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;

6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是。A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p

7.下面判断正确的是。

A)char *a=”china”; 等价于char *a; *a=”china” ;

B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;}

C)char *s=”china”; 等价于char *s; s=”china” ;

D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;

8.下面程序段中,for循环的执行次数是。

char *s="\ta\018bc" ;

for ( ; *s!='\0' ; s++)

printf("*") ;

A)9 B)7 C)6 D)5

9.下面能正确进行字符串赋值操作的是。

A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’};

C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s) ;

10.下面程序段的运行结果是。

char *s=”abcde” ;

s+=2 ; printf(“%d”,s);

A)cde B)字符’c’ C)字符’c’的地址D)不确定

11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是。

A)c=*p1+*p2 B)p2=c C)p1=p2 D)

c=*p1*(*p2)

12.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的

是。

A)s和p完全相同

B)数组s中的内容和指针变量p中的内容相等

C)s数组长度和p所指向的字符串长度相等

D)*p与s[0]相等

13.以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段

是。

A)strcpy1(char *p1,char *p2)

{ while ((*p1++=*p2++)!=’\0’) ; }

B)strcpy2(char *p1,char *p2)

{ while ((*p1=*p2)!=’\0’) { p1++; p2++ } }

C)strcpy3(char *p1,char *p2)

{ while (*p1++=*p2++) ; }

D)strcpy4(char *p1,char *p2)

{ while (*p2) *p1++=*p2++ ; }

14.下面程序段的运行结果是。

char a[ ]=”language” , *p ;

p=a ;

while (*p!=’u’) { printf(“%c”,*p-32); p++ ; }

A)LANGUAGE B)language C)LANG D)langUAGE

15.若有语句:char s1[ ]=”string”,s2[8],*s3,*s4=”string2”;则库函数strcpy的正确调用是。

A)strcpy(s1,”string2”); B)strcpy(s4,”string1”); C)strcpy(s3,”string1”); D)strcpy(s2,s1);

16.以下与库函数strcmp(char *s,char *t)功能相等的程序段

是。

A)strcmp1(char *s,char *t)

{ for ( ; *s++=*t++; )

if (*s==’\0’) return 0 ;

return (*s-*t) ;

}

B)strcmp2(char *s,char *t)

{ for ( ; *s++=*t++; )

if (!*s) return 0 ;

return (*s-*t) ;

}

C)strcmp3(char *s,char *t)

{ for ( ; *t==*s; )

{ if (!*t) return 0 ; t++ ; s++ ; }

return (*s-*t) ;

}

D)strcmp4(char *s,char *t)

{ for ( ; *s==*t; s++, t++ )

if (!*s) return 0 ;

return (*t-*s) ;

}

17.以下说明不正确的是。

A)char a[10]=”china” ; B)char a[10],*p=a; p=”china”; C)char *a; a=”china” ; D)char a[10],*p; p=a=”china”;

18.设有说明语句:char a[]=”It is mine”;char *p=”It is mine”;则以下不正确的叙述是。

A)a+1表示的是字符t的地址

B)p指向另外的字符串时,字符串的长度不受限制

C)p变量中存放的地址值可以改变

D)a中只能存放10个字符

19.若已定义char s[10];则在下面表达式中不表示s[1]的地址

是。

A)s+1 B)s++ C)&s[0]+1 D)&s[1]

20.若有定义:int a[5],*p=a;则对a数组元素的正确引用是。A)*&a[5] B)a+2 C)*(p+5) D)*(a+2)

21.若有定义:int a[5],*p=a;则对a数组元素地址的正确引用是。A)p+5 B)*a+1 C)&a+1 D)&a[0]

22.若有定义:int a[2][3];则对a数组的第i行第j列元素值的正确引用

是。

A)*(*(a+i)+j) B)(a+i)[j] C)*(a+i+j) D)*(a+i)+j

23.若有定义:int a[2][3];则对a数组的第i行第j列元素地址的正确引用

是。

A)*(a[i]+j) B)(a+i) C)*(a+j) D)a[i]+j

24.若有程序段:int a[2][3],(*p)[3]; p=a;则对a数组元素地址的正确引用

是。

A)*(p+2) B)p[2] C)p[1]+1 D)(p+1)+2

25.若有程序段:int a[2][3],(*p)[3]; p=a;则对a数组元素的正确引用

是。

A)(p+1)[0] B)*(*(p+2)+1) C)*(p[1]+1) D)p[1]+2

26.在C程序中,指针变量能够赋值或

值。

27.在C语言中,数组名是一个不可改变的,不能对它进行

赋值运算。

28.若有定义语句:int a[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值

是。

29.若有定义:int a[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值

是,*(a[1]+2)的值是。

30若有程序段:

int *p[3],a[6],i;

for (i=0; i<3; i++)

p[i]=&a[2*i] ;

则*p[0]引用的是a数组元素,*(p[1]+1)引用的是a数组元

素。

程序填空题

1.下面函数的功能是从输入的十个字符串中找出最大的那个串,请填(2)空使程序完整。

void fun(char str[10][81],char **sp)

{ int i;

*sp = 【1 】;

for (i=1; i<10; i++)

if (strlen (*sp)

【2 】;

}

2.下面函数的功能是将一个整数字符串转换为一个整数,例如:”-1234”转换为1234,请填(3)空使程序完整。

int chnum(char *p)

{ int num=0,k,len,j ;

len = strlen(p) ;

for ( ; 【1 】; p++) {

k=【2 】;

j=(--len) ;

while (【3 】)

k=k*10 ;

num = num + k ;

}

return (num);

}

3.下面函数的功能统计子串substr在母串str中出现的次数,请填(3)空使程序完整。

int count(char *str, char *substr)

{ int i,j,k,num=0;

for ( i=0; 【1 】; i++)

for (【2 】, k=0; substr[k]==str[j]; k++, j++) if (substr [【3 】]==’\0’) {

num++ ;

break ;

}

return (num) ;

}

4.下面函数的功能是用递归法将一个整数存放到一个字符数组中,存放时按逆序存放,如483存放成“384”,请填(2)空使程序完整。

void convert(char *a, int n)

{ int i ;

*a=【1 】;

if ((i=n/10)!=0)

convert(【2 】,i);

}

5.下面函数的功能是用递归法求数组中的最大值及下标值,请填(2)空使程序完整。

void findmax(int *a,int n,int i,int *pk)

{ if (i

if (a[i]>a[*pk])

【1 】;

findmax(【2 】) ;

}

}

6.下面函数的功能是将两个字符串s1和s2连接起来,请填(3)空使程序完整。

void conj(char *s1,char *s2)

{

char *p=s1 ;

while (*s1) 【1 】;

while (*s2) { *s1=【2 】; s1++,s2++; }

*s1=’\0’ ;

【3 】;

}

数值分析实验四(龙格函数)

实验名称:龙格反例的数值实验 实验目的与要求: 1、了解切比雪夫多项式零点插值; 2、运用切比雪夫多项式零点插值法避免龙格现象。 3、与等距节点构造插值多项式比较。 实验内容: 龙格反例的数值实验 在区间[–5,5 ]上分别取11阶切比雪夫多项式的零点 22 )12(cos 5π+=k x k ( k = 0,1,2,……,10) 和等距节点作插值结点,计算函数211)(x x f +=在结点处的值 y k = f (x k )。构造插值多项式L 10(x ), ∑==10 010)()(k k k y x l x L 其中,∏≠=--=n k j j j k j k x x x x x l 0)()()(。取自变量点 t k = – 5 + 0.05k ( k =0,1,…,201),分别计算切比雪夫零点、等距节点插值多项式L k (x )和被插值函数f (x )在离散点t k ( k =0,1,…,201)上的值,并绘出三条曲线比较。 实验环境与器材: 9#505机房、《数值分析》 实验过程(步骤)或程序代码: function y=Lagrange(x,n,xx,yy) sum=0; %初始化 for k=1:n+1 lk=1; %初始化 for i=1:n+1 if k~=i lk=lk*(x-xx(i))/(xx(k)-xx(i)); end end sum=lk*yy(k)+sum; end y=sum; clc

clear for i=1:11 %下标只能从1开始 x1(i)=-5+10*(i-1)/10; x2(i)=5*cos((2*i-1)*pi/22); y1(i)=1/(1+x1(i)*x1(i)); y2(i)=1/(1+x2(i)*x2(i)); %y1,y2分别是在两种节点处得到的函数值 end h=0.05; for k=1:202 x3(k)=-5+(k-1)*h; y11(k)=Lagrange(x3(k),10,x1,y1); y22(k)=Lagrange(x3(k),10,x2,y2); y(k)=1/(1+x3(k)*x3(k)); %y11,y22分别为利用切比雪夫零点和等距节点构造出的插值多项式在离散点处的值 end plot(x3,y11,'r'); hold on plot(x3,y22,'g'); hold on plot(x3,y,'b') %被插值函数在离散点处值的曲线图 hold on xlabel('-5<=x<=5'); ylabel('y'); legend('f(x)=1/(1+x^2)','等距节点插值多项式','切比雪夫多项式零点插值多项式'); xlim([-5,5]) 实验结果与分析:

实验四 MATLAB程序设计

实验四 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)

实验4函数文件

实验四 函数文件 1.定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。 函数文件: function [e,ln,s,c]=plural(x) e=exp(x); ln=log(x); s=sin(x); c=cos(x); End 命令文件: x=input('请输入一个复数:'); [e,ln,s,c]=plural(x); e ln s c 运行结果: 请输入一个复数:3+4i e = -13.1288 -15.2008i ln = 1.6094 + 0.9273i s = 3.8537 -27.0168i c = -27.0349 - 3.8512i 2.一物理系统可用下列方程组来表示: ? ?????????????=??????????????????????????----g g m m N N a a m m m m 2121212111001cos 000sin 00cos 0sin 0sin cos θθ θθ θθ 从键盘输入m 1、m 2和θ的值,求N a a 121、、和N 2的值。其中g 取9.8,输入 θ时以角度为单位。 函数文件: function [a1,a2,N1,N2]=physis(m1,m2,t) g=9.8; A=[m1*cos(t*pi/180),-m1,-sin(t*pi/180),0;... m1*sin(t*pi/180),0,cos(t*pi/180),0;... 0,m2,-sin(t*pi/180),0;... 0,0,-cos(t*pi/180),1]; B=[0;m1*g;0;m2*g];

实验四 用窗函数法设计FIR数字滤波器

实验四 用窗函数法设计FIR 数字滤波器 实验项目名称:用窗函数法设计FIR 数字滤波器 实验项目性质:验证性实验 所属课程名称:数字信号处理 实验计划学时:2 一. 实验目的 (1)掌握用窗函数法设计FIR 数字滤波器的原理与方法。 (2)熟悉线性相位FIR 数字滤波器的特性。 (3)了解各种窗函数对滤波特性的影响。 二. 实验容和要求 (1) 复习用窗函数法设计FIR 数字滤波器一节容,阅读本实验原理,掌握设计步骤。 (2) 用升余弦窗设计一线性相位低通FIR 数字滤波器,截止频率 rad c 4 π ω= 。窗口长度N =15,33。要求在两种窗口长度情况下,分别求出()n h ,打印出相应的幅频特性和相频特性曲线,观察3dB 带宽和20dB 带宽。总结窗口长度N 对滤波器特性的影响。 设计低通FIR 数字滤波器时,一般以理想低通滤波特性为逼近函数()ωj e H ,即 ()?????≤<≤=-π ωωωωωα ω c c j j d ,,e e H 0 其中2 1 -= N α ()() ()[]() a n a n d e e d e e H n h c j j j j d d c c --= = = ??- -- πωωπ ωπ ωαωω ωαωπ π ωsin 2121

(3) 33=N ,4πω=c ,用四种窗函数设计线性相位低通滤波器,绘制相应的幅频特性曲线,观察3dB 带宽和20dB 带宽以及阻带最小衰减,比较四种窗函数对滤波器特性的影响。 三. 实验主要仪器设备和材料 计算机,MATLAB6.5或以上版本 四. 实验方法、步骤及结果测试 如果所希望的滤波器的理想的频率响应函数为()ωj d e H ,则其对应的单位脉冲响应为 ()()ωπ ω ωπ πd e e H n h j j d d ?- = 21 (4.1) 窗函数设计法的基本原理是用有限长单位脉冲响应序列()n h 逼近 ()n h d 。由于()n h d 往往是无限长序列,而且是非因果的,所以用窗函数() n ω将()n h d 截断,并进行加权处理,得到: ()()()n n h n h d ω= (4.2) ()n h 就作为实际设计的FIR 数字滤波器的单位脉冲响应序列,其频率 响应函数()ωj e H 为 ()()n j N n j e n h e H ωω ∑-==1 (4.3) 式中,N 为所选窗函数()n ω的长度。 我们知道,用窗函数法设计的滤波器性能取决于窗函数()n ω的类型及窗口长度N 的取值。设计过程中,要根据对阻带最小衰减和过渡带宽度的

C上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示

C语言实验四实验报告——函数

一、实验项目名称 函数 二、实验目的 1.掌握C函数的定义方法、函数的调用方法、参数说明以及返回值。掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法; 2.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法; 3.在编程过程中加深理解函数调用的程序设计思想。 三、实验内容 1.多模块的程序设计与调试的方法; 2.函数的定义和调用的方法; 3.用递归方法进行程序设计。 具体内容: 1.编写一个函数primeNum(int num),它的功能是判别一个数是否为素数。如果num 是素数,返回该数;否则返回0值。 要求: (1)在主函数输入一个整数num,调用该函数后,输出num是否是素数的信息。输出格式为:num is prime或num is not prime。 (2)分别输入以下数据:0,1,2,5,9,13,59,121,运行程序并检查结果是否正确。 2.编写函数computNum( int num),它的功能是计算任意输入的一个正整数的各位数字之和,结果由函数返回(例如:输入数据是123,返回值为6)。 要求:num由主函数输入,调用该函数后,在主函数内输出结果。 3.编写函数,mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。 要求: (1)在主函数中输入一对数据a和b,调用该函数后,输出结果并加以相应的说明。例如:在主函数中输入:10,5 ,则输出:10 is multiple of 5. (2)分别输入下面几组数据进行函数的正确性测试:1与5、5与5、6与2、6与4、20与4、37与9等,并对测试信息加以说明。 4.编写一个计算组合数的函数combinNum(int m,int n)。计算结果由函数返回。 计算组合数的公式是: c(m,n)=m!/(n!*(m-n)!) 要求: (1)从主函数输入m和n的值。对m>n、m

C++ 实验4 函数的定义与调用(下)

实验4 函数的定义与调用(下) Visual C++控制台应用程序设计 一、实验目的 1、掌握变量的分类、作用域、生存期、存储类别; 2、掌握递归函数的定义以及调用方法; 3、掌握函数的重载。 二、实验内容 Visual C++控制台应用程序设计 要求:(1)自己独立编写出完整程序,注意书写格式,熟练掌握程序的结构; (2)按照正确的步骤进入vc++环境,在自己创建的工程中录入源程序,消除语法错误,编译、连接程序; (3)运行程序,输入数据观察结果。 1、分析并写出下列程序的执行结果。 #include using namespace std; int a=300,b=400,c=500; void funa( int c) {static int a=5; a+=c; cout<

cout<

实验四 函数编程练习

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次仍未赚到该点数,则游戏者输。 【思考题】将游戏规则改为:计算机想一个数作为一个骰子掷出的点数(在用户输入数据之前不显示该点数),用户从键盘输入一个数作为另一个骰子掷出的点数,再计算两点数之和。其余规则相同,然后请读者重新编写该程序。

实验四:函数与指针

陕西理工大学 《高级语言程序设计(C)》 实验报告 院系: 班级: 学号: 姓名:

目录 实验一:C开发环境与顺序结构程序设计 (2) 1.实验目的: (2) 2.实验环境: (2) 3.实验步骤: (2) 4.实验内容: (2) 5.实验总结 (9) 实验二:分支结构与循环结构程序设计 (10) 1.实验目的: (10) 2.实验环境: (10) 3.实验内容: (10) 4.实验总结 (18) 实验三数组及数组的应用 (19) 1.实验目的: (19) 2.实验环境: (19) 3.实验内容: (19) 4.实验总结: (20) 实验四:函数与指针 (20) 1.实验目的: (21) 2.实验内容: (21) 3.实验总结 (24)

实验一:C开发环境与顺序结构程序设计 1.实验目的: (1) 了解集成开发环境VC++6.0的使用方法,理解相关命令的含义,掌握编辑、编译、连接以及运行调试的方法,掌握程序的基本结构,掌握输入输出的方式。 (2) 掌握程序设计的基本要素中的数据类型、变量、运算符以及表达式的运用。 (3) 学会正确使用逻辑运算符和逻辑表达式以及关系运算符与关系表达式,掌握在程序设计中灵活使用顺序结构。 2.实验环境: (1) 硬件环境 CPU:Inter Pentium(R)4 CPU 3.00GHz 以上 内存:2GByte (2) 软件环境 操作系统:Microsoft Windows 7 编译系统:Microsoft Visual C++ 6.0 3.实验步骤: 按如图所示流程进行实验内容的 调试。 (1) 在XP操作系统中,启动 VC++6.0编译环境; (2) 在VC++6.0编译界面输入C源 程序; (3) 选择编译、组建、执行命令进 行编译、链接和运行,并记录实验 数据; (4) 按以上方法依次输入其他源程 序并调试、运行和记录实验数据。 4.实验内容: 4.1 输入并运行下列程序,查看程序运行的结果。 #include

实验4-1 函数的应用的答案

实验4 函数的应用 【实验目的】 1掌握函数声明、定义和调用的方法; 2了解函数调用的实参与形参的传递,以及参数默认值的设置。 3掌握重载函数的实现方法。 4理解递归和嵌套函数的概念、定义与调用。 【实验内容】 ⒈分别输入整数半径和实数半径,使用函数重载计算圆的面积。 #include #define PI 3.14 int area(int); float area(float); void main() { int r1; cout<<"Input a integer r="; cin>>r1; cout<<"area="<

实验4-函数

实验4 函数 程序填空 1.普通参数 本题分值:4 题目描述:输入日期的年份和月份,求该月有多少天。要求编写函数int daynum(int year,int month),求出以year为年份、以month为月份的某个月的天数。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。 代码: //通过日期求某月的天数。 #include using namespace std; int main() { int daynum(int year,int month); int y,m,d; cin>>y>>m; if(y<1900 || y>=3000 || m<1 || m>12) { cout<<"输入错误!"<

case 12: days=31; break; case 4: case 6: case 9: case 11: days=30; break; case 2: if(year%4==0&&year%100!=0 || year%400==0) days=29; else days=28; break; } return __(2)__; } 答案: (1) y,m (2) days 每空分值:2 参考答案:yx3-t1.cpp 2.字符数组参数 本题分值:4 题目描述:编写一个函数,用来求字符串s的任意子串。函数原型为 void SubString ( char s[ ] , int start , int len , char d[ ] ) ; 其中s是原字符串,d用来存放s中从第start个字符开始(1≤start≤strlen(s) ),长度为len 的子串。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。 代码: #include using namespace std; int main( ) { void SubString(char s[ ], int start, int len, char d[ ]); char s[81],d[81]; int m,n; gets(s); //输入一个字符串的值存放在字符数组s中,以回车结束 //cout<<"从第m个字符开始(m≥1)取n个字符构成的子串。请依次输入m、n的值:"; cin>>m>>n; if(m>strlen(s) || n>strlen(s) || m+n>strlen(s)+1) { cout<<"m、n值超过了范围!\n"; return 0; } SubString(__(1)__); cout<

实验四 函数

包头师范学院信息科学与技术学院实验报告 实验课程名称:C语言程序设计实验指导教师:于方 实验院系:信息科学与技术学院实验班级: 学号:姓名: 实验地点:博学楼西109 一、实验题目:实验四函数(4学时) 二、实验要求:①掌握函数定义、说明及调用的方法;②了解函数调用时参数传递的本质;③掌握正确使用变量存储属性的方法。 三、实验内容及实验过程 1、实验11函数及其测试 2+4+6。要求:①编写函数f1和f2实现 (1)完善程序,实现求解222 所求功能;②给出正确的函数调用实参值(与所给a相关)。 (2)实参调用测试。要求:分别使用f1(a+++1,a+++2,a+++3)和 f1(++a+1,++a+2,++a+3)两种实参调用函数f1,记录程序运行结果,给出相关分析。 (3)参数传递和函数返回测试。要求:在程序中合适位置插入输出 语句,能够验证函数间参数传递和函数返回是否正确。 (4)多文件编译、链接的方法和步骤。要求:将程序中的main函 数、f1函数和f2函数分别保存在三个文件中,给出正确的多程序文件的编译、链接方法。 (5)递归函数测试。要求:①设计一个递归程序实现同样的功能, 2+4+6的值;②使用输出语句显示递归调用的过程。 即求解222

2、实验12变量的存储属性 (1)变量存储属性测试练习。要求:①找出实验内容(1)所给程序中 的错误;②分析每个错误原因。 (2)分析变量的作用域和存储属性。要求:①调试程序,给出程序 运行结果;②分析每个变量“i”的存储属性和作用域。 (3)分析变量的作用域和存储属性。要求:①根据实验内容(3)给出 的程序框架,分别在a~f各个函数中添加printf语句,将每个函数范围内的所有有效变量值打印出来;②删除file3.c中的extern int y,给出程序运行结果和相关原因分析。 四、分析与总结: 1、总结函数调用时,参数的计算顺序。 2、总结测试函数的一般方法。(通过函数功能、参数传递和函数 返回是否正确等几方面分析) 3、总结不同存储属性变量的使用方法。 4、自己在实验过程中出现的错误及解决方法。

C语言实验4

C语言实验报告 课程名称:高级语言程序设计系(院):信息工程学院 专业:电子信息工程 班级: 学生姓名 学号: 指导教师: 开课时间:学年第学期

关于实验报告的说明 (一)对教师和学生的基本要求 1、加实验的学生需提交实验报告, 一次实验写一个实验报告。实验报告要求字迹工整,文字简练,数据齐全,图表规范,计算正确,分析充分、具体、定量。 2、教师应根据学生在实验中和在实验报告书写中反映出来的认真程度、实验效果、理解深度、独立工作能力、科学态度等给予出恰当的评语,并指出实验报告中的不妥之处,然后依照评分细则,采用100分制评出成绩并签名和评定日期。如学生抄袭或缺交实验报告达该课程全学期实验报告总次数三分之一以上,不得同意其参加本课程的考核。 3、学期结束后任课教师要及时收交学生实验报告,并按要求给出学生实验报告成绩册和学生实验报告上交到系办公室。 (二)内容填写要求 1、实验项目名称:要用最简练的语言反映实验的内容。 2、实验目的和要求:目的和要求要明确,在理论上验证定理、公式、算法,并使实验者获得深刻和系统的理解,在实践上,掌握使用实验设备的技能技巧和程序的调试方法。 3、实验内容及步骤:这是实验报告极其重要的内容。要抓住重点,可以从理论和实践两个方面考虑。只写主要操作步骤,不要照抄实习指导,要简明扼要。还应该画出实验流程图,再配以相应的文字说明,这样既可以节省许多文字说明,又能使实验报告简明扼要,清楚明白。 4、实验结果:根据实验目的将原始资料系统化、条理化,用准确的专业术语客观地描述实验现象和结果,要有时间顺序以及各项指标在时间上的关系。 5、实验总结:根据相关的理论知识对所得到的实验结果进行解释和分析和总结。也可以写一些本次实验的心得以及提出一些问题或建议。

实验4-函数与指针

实验4 函数与指针 程序填空 1. 本题分值:10 题目描述:输入日期的年份和月份,求该月有多少天。要求编写函数int daynum(int year,int month),求出以year为年份、以month为月份的某个月的天数。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。 代码: //通过日期求某月的天数。 #include using namespace std; void main() { int daynum(int year,int month); int y,m,d; cin>>y>>m; if(y<1900 || y>=3000 || m<1 || m>12) { cout<<"输入错误!"<

case 6: case 9: case 11: days=30; break; case 2: if(year%4==0&&year%100!=0 || year%400==0) days=29; else days=28; break; } return __(2)__; } 2. 本题分值:10 题目描述:编写一个函数,用来求字符串s的任意子串。函数原型为 void SubString ( char s[ ] , int start , int len , char d[ ] ) ; 其中s是原字符串,d用来存放s中从第start个字符开始(1≤start≤strlen(s) ),长度为len的子串。以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。 代码: #include using namespace std; void main() { void SubString(char s[ ], int start, int len, char d[ ]); char s[81],d[81]; int m,n; gets(s); //输入一个字符串的值存放在字符数组s中,以回车结束 //cout<<"从第m个字符开始(m≥1)取n个字符构成的子串。请依次输入m、n的值:"; cin>>m>>n; if(m>strlen(s) || n>strlen(s) || m+n>strlen(s)+1) { cout<<"m、n值超过了范围!\n"; return 0; } SubString(__(1)__); cout<

MATLAB实验4

实验4. 综合应用程序设计 一、实验目的 1.理解命令.m文件与函数.m文件的异同; 2.掌握定义和调用matlab函数的方法。 二、实验环境 1.计算机 2.matlab软件 三、实验说明 1.实验学时:2学时; 2.学会使用help; 3.编写程序前先写出程序的流程图框架; 4.自主编写调试程序直到正确为止,必要时参考相关资料,; 5.保存整理实验结果,提交实验报告。 四、实验内容 1.教材第365页,完成第4题。 答:代码如下: function y=wx(x) ;定义函数y=wx(x) y=1./(0.1+(x-2).^2)+1./(0.01+(x-3).^4); 函数y的关系式 在编程界面上如图: 输出结果如图:

2.编写一个实现两离散序列循环卷积的函数,并实现调用。 (注:调试后可以调用,保存函数文件名为ms4_学号_02.m) 答:直接调用matlab内部函数,写出代码如下: x1=input('输入序列x1='); x2=input('输入序列x2='); N=input('输入序列卷积的长度N='); y=conv(x1,x2); ;内部函数,x1,x2进行线性卷积运算subplot(2,1,1); n=0:length(y)-1; stem(n,y,'.'); ;绘制第一个线性卷积结果图 title('序列x1与x2的卷积结果'); x11=fft(x1,N); ;内部函数,对x1傅里叶变换 x12=fft(x2,N); ;对x2傅里叶变换 y11=x11.*x12; ;相乘 y1=ifft(y11,N); ;内部函数,进行逆傅里叶变换 subplot(2,1,2); n=0:length(y1)-1; stem(n,y1,'.'); ;绘制第二个循环卷积结果图 title('循环卷积结果'); 调试结果如图: 调用程序: 输出结果:

实验四 函数

实验四 函数 一、目的和要求 1.了解函数的定义方法,理解函数的调用; 2.初步掌握函数的递归、嵌套调用; 3.了解函数调用的实参与形参的传递,以及参数默认值的设置。 4.学习并了解重载函数、内联函数的基本概念。 二、实验设备及分组 1. Windows XP 操作系统; 2. Visual C++6.0语言环境; 3. 每人一台PC 机。 三、内容和步骤 (一)验证实验程序 1.编写一个函数,用递归的方法求1+2+3+4+…+n 的值。在主函数中进行输入输出。 解: #include int fun(int n) { int z; if(n<=0) z=0; else z=n+fun(n-1); return(z); } int main(void) { int x,sum; cout<<"请输入X 的值"<>x; sum=fun(x); cout<<"求和结果为:"<m),求m n c 的值。 分析:已知 )!(!!m n m n c m n -=

根据公式,只要自定义一个函数计算阶乘,即可通过函数调用求出 m n c 的值。 解: 阶乘函数定义如下: double fact(int k) { int p=1; if((k==0)||(k==1)) return p; else { for(int i=1;i<=k;i++) p=p*i; return p; } } 一个完整的参考程序如下: #include double fact(int); int main() { int m,n; double c; cout<<"please input"<

相关文档
最新文档