C语言实验四 函数与预处理Word文件下载.docx

上传人:b****5 文档编号:17283053 上传时间:2022-11-30 格式:DOCX 页数:28 大小:138.07KB
下载 相关 举报
C语言实验四 函数与预处理Word文件下载.docx_第1页
第1页 / 共28页
C语言实验四 函数与预处理Word文件下载.docx_第2页
第2页 / 共28页
C语言实验四 函数与预处理Word文件下载.docx_第3页
第3页 / 共28页
C语言实验四 函数与预处理Word文件下载.docx_第4页
第4页 / 共28页
C语言实验四 函数与预处理Word文件下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

C语言实验四 函数与预处理Word文件下载.docx

《C语言实验四 函数与预处理Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言实验四 函数与预处理Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。

C语言实验四 函数与预处理Word文件下载.docx

n;

g=gcd(m,n);

cout<

<

"

G.C.D="

g<

endl;

l=lcm(m,n,g);

L.C.M="

l<

return0;

}

intgcd(intu,intv)

intt,r;

if(v>

u)

{

t=u;

u=v;

v=t;

}

while((r=u%v)!

=0)

u=v;

v=r;

return(v);

intlcm(intu,intv,inth)

return(u*v/h);

【方案设计】

请根据课件中关于辗转相除法的相关内容,理解辗转相除法的执行过程。

并画出gcd函数的流程图。

【实验(实训)过程】

(步骤、记录、数据、程序等)

(1)测试:

请拟5组数据,比如m=100,n=105等等,运行上面的程序,初步测试该程序是否正确。

对每组数据,写出程序的输出结果,判断输出结果是否正确。

回答:

289

G.C.D=1

L.C.M=252

36

G.C.D=3

L.C.M=6

1525

G.C.D=5

L.C.M=75

114

L.C.M=44

228

G.C.D=2

L.C.M=88

(2)调试:

对下面每组数据,通过调试,给出每个步骤后,m、n(或u、v)变量的值。

提示1:

调试方法,在cin语句处插入一个断点,进行调试,如下图所示。

然后单步运行(stepover),输入两个数据m和n。

提示2:

当运行到g=gcd(m,n);

这条语句处时,点击调试工具条上的StepInto按钮,进入到gcd函数中进行调试。

1)输入数据为m=18,n=33,请回答:

main函数中:

m的值是:

18

n的值是:

33

gcd函数中:

uv

进入到gcd时:

执行完if语句后:

3318

第一次while循环执行之后:

1815

第二次while循环执行之后:

153

gcd函数的返回值是:

3

赋值后变量g的值是:

赋值后变量l的值是:

198

2)输入数据为m=10,n=16,请回答:

10

16

1610

106

64

2

80

【结论】

(结果、分析)

实验任务二给出程序,记录编译、连接错误,并进行调试与运行。

(或者为程序填空题,简答题等)

函数的定义及调用、素数的判定、while循环的使用

2005年秋浙江省高等学校计算机等级考试试卷(二级C),试题三程序填空题第2题有改动。

读入一批正整数(以零或负数表示结束),输出其中的素数。

函数prime(m)用于判断m是否为素数。

素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

提示:

读入一批正整数(以零或负数表示结束)的含义是,在一次运行过程中,可以连续进行判断,每输入一个正整数,回车,判断该正整数是否为素数,再输入下一个数,判断。

直到输入的数为0或者为负数时,结束判断。

cmath>

intx;

intprime(intm);

cin>

x;

while(

(1))

if(prime(x))cout<

prime"

<

elsecout<

notprime"

cin>

intprime(intm)

intk,n,res;

//res为0表示不是素数,为1表示是素数

if(m==1)return0;

res=1;

n=(int)sqrt(m);

for(k=2;

k<

=n;

k++)

if(m%k==0)

{

(2);

break;

}

return(3);

(1)A、x<

0B、x>

=0C、x<

=0D、x>

(2)A、res=1B、res=0C、res=-1D、res=2

(3)A、1B、resC、0D、-1

(1)请填写你选择的答案。

DBB

(2)选择好答案后,为完整的程序建立控制台工程

(1)如果你选择正确的话,那么输入以下数据,正确的运行过程是:

45↙

notprime

51↙

89↙

prime

7↙

请测试你的程序是否正确

请记录该程序的运行过程:

输入输出。

比如:

123456↙(↙表示输入,如果没有输入,则没有这一行)

a+b=579(输出)

并尽可能对程序的执行结果进行分析。

11

67

45

4

-5

第2题问答题

带默认参数的函数

(1)在带有默认参数的函数中,指定默认值的参数必须放在形参表列中的最右端,否则出错。

为什么?

实参与形参的结合是从左至右顺序进行的,第1个实参必然与第1个形参结合,第2个实参必然与第2个形参结合·

·

(2)在使用带默认参数的函数时,应当在什么时候给出参数的默认值,在定义时还是在声明时?

如果函数的定义在调用之前,在定义时给出参数的默认值。

如果函数的定义在调用之后,则在函数调用之前需要有函数声明,此时必须在函数声明时给出参数的默认值。

(3)一个函数不能既作为重载函数,又作为有默认参数的函数。

因为当调用函数时如果少写一个参数,系统无法判定是利用重载函数还是利用默认参数的函数,出现二义性,系统无法执行。

实验任务三给出程序,要求给出程序运行结果、回答问题,或者设计测试数据等。

自动变量、静态局部变量、函数定义及调用、参数传递

05~06学年《程序设计基础》课程期末考试四程序分析第1题

intf(inta)

autointb=0;

staticintc=3;

b=b+1;

c=c+1;

returna+b+c;

inta=2,i;

for(i=0;

i<

3;

i++)

cout<

f(a)<

"

;

为该程序建立控制台工程。

(1)请给出程序的输出结果

(2)请分析每次函数调用后b和c的值分别是多少

f函数中:

bc

第一次执行完函数f中的语句后:

14

第二次执行完函数f中的语句后:

15

第三次执行完函数f中的语句后:

16

(3)请根据这道题,总结静态局部变量的含义。

函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保留上一次函数调用结束时的值。

第2题

求余、取整数各位上数字的方法、函数定义及调用

2005年秋浙江省高等学校计算机等级考试试卷(二级C),试题五程序阅读题第4题,有改动

下面的程序是实现:

输入一个正整数,统计该正整数的各位数字中,0出现了几次,1出现了几次,…。

如没有出现,则不输出该位数字的信息。

intf(intnumber,intdigit)

intcount=0;

while(number!

if(number%10==digit)

count++;

number=number/10;

returncount;

unsignedintnum;

num;

for(inti=0;

i<

=9;

i++)

if(f(num,i)!

cout<

i<

:

f(num,i)<

(1)请拟5个正整数,尽量大一点,但不要超出unsignedint所表示的范围。

然后运行程序,输入每个正整数,记录各自的输出。

355455

3:

1

4:

5:

587011100

0:

1:

7:

8:

65541055

6:

6677545

67787676

(2)请分析f函数中while循环的功能,并画出流程图。

while(number!

if(number%10==digit)

count++;

number=number/10;

}

实验任务四根据题目说明,编程实现并进行程序调试

函数的的定义及调用,if语句

完成课后第2题。

其中对应于b2-4ac大于0、等于0和小于0的3个函数名分别为greater_than_zero、equal_to_zero和smaller_than_zero,函数的参数和返回类型自己编写。

3个系数a、b、c是在main函数中通过键盘输入的,然后需要判断b2-4ac的大小来调用相应的求根函数。

请在此粘贴你的完整程序。

#include<

floatd,p,q,x1,x2;

voidgreater_than_zero(float,float);

voidequal_to_zero(float,float);

voidsmaller_than_zero(float,float);

floata,b,c;

a>

b>

c;

d=b*b-4*a*c;

if(d>

0)

{greater_than_zero(a,b);

x1="

x1<

x2="

x2<

elseif(d=0)

{equal_to_zero(a,b);

else{smaller_than_zero(a,b);

p<

+"

q<

i"

x2="

-"

voidgreater_than_zero(floata,floatb)

{x1=(-b+sqrt(d))/(2*a);

x2=(-b-sqrt(d))/(2*a);

voidequal_to_zero(floata,floatb)

x1=x2=(-b)/(2*a);

voidsmaller_than_zero(floata,floatb)

p=-b/(2*a);

q=sqrt(-d)/(2*a);

请如实记录你在实验过程中出现的错误(如发现错误无法解决,请举手)。

567341

x1=-0.0299824+0i

x2=-0.0299824-0i

函数的的定义及调用,for语句

完成课后第4题。

intfac(intn);

inta,b,c,f;

cin>

f=fac(a)+fac(b)+fac(c);

cout<

f<

intfac(intn)

{ints=1;

for(inti=1;

i++)s=s*i;

return(s);

479

367944

第3题

函数的的定义及调用,库函数的调用

完成课后第5题。

写一个函数e(x)用来求ex,其中需要调用<

中的doubleexp(doublex)函数。

doublee(doublex);

doublex,sinh;

sinh=(e(x)-e(-x))/2;

sinh="

sinh<

return0;

doublee(doublex)

{returnexp(x);

3.2

sinh=12.2459

第4题

函数的的定义及调用,do-while语句

完成课后第6题。

牛顿迭代法的公式是

,设迭代到

时结束。

其中

f(x)的导数

用牛顿迭代法求根的函数solut的算法如下:

do

{x0=x;

计算函数f(x0)的值;

计算函数f(x0)的导数f’(x0)的值;

计算近似根x=x0-f(x0)/f’(x0);

}until(

输出近似根x;

{doublesolut(double,double,double,double);

doublea,b,c,d;

c>

d;

x="

solut(a,b,c,d)<

doublesolut(doublea,doubleb,doublec,doubled)

{doublex=1,x0,f,f1;

{x0=x;

f=((a*x0+b)*x0+c)*x0+d;

f1=(3*a*x0+2*b)*x0+c;

x=x0-f/f1;

while(fabs(x-x0)>

=1e-5);

return(x);

1234

x=-1.65063

第5题

递归函数的定义及调用

完成课后第8题。

课本有印刷错误。

正确的n阶勒让德多项式如下:

{intx,n;

floatp(int,int);

n>

n="

n<

x="

x<

p(n,x)<

floatp(intn,intx)

{if(n==0)

return

(1);

elseif(n==1)

elseif(n>

=1)

return(((2*n-1)*x*p((n-1),x)-(n-1)*p((n-2),x))/n);

46

n=4,x=6

5535.38

第6题

完成课后第11题。

可以将求值的式子表示如下,即递归公式:

{intf(int);

inta,n;

a=f(n);

f(n)="

a<

intf(intn)

{intf=0;

f=f+i*i;

return(f);

56

f(n)=60116

第7题

库函数的调用、输出格式控制

2005年秋浙江省高等学校计算机等级考试试卷(二级C),试题五程序设计题第2题

输出一张平方根表(如下表所示),x是整数,取值范围是[5,100],请调用库函数sqrt()计算平方根。

xsqrt(x)

52.24

62.45

……

10010.00

iomanip>

{doublef(int);

intx;

doubley;

x"

sqrt(x)"

for(x=5;

=100;

x++)

y=f(x);

setiosflags(ios:

fixed)<

left)<

setprecision

(2);

y<

doublef(intx)

{doubley;

y=sqrt(x);

return(y);

72.65

82.83

93.00

103.16

113.32

123.46

133.61

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1