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