伍
C程序设计实验报告
实验项目
- 6.3.1(练习3)
- 6.3.1(练习4)
- 6.3.2(练习1)
- 6.3.2(练习2.1)(练习2.2)
姓名:王新媛 实验地点:一教524 实验时间:2021.05.21
一、实验目的与要求
- 熟练地掌握函数的定义方法和调用规则。
- 掌握再C语言程序种主调函数和被条用函数之间进行数据传递的规则。
- 了解函数的返回值及其类型,并正确使用它。
- 了解局部变量和全局变量的作用域及它们与存储分类的关系,理解变量的存在性和可见性的概念。
- 练习递归函数的使用。
二、实验内容
1、实验练习
实验6.3.1(练习3)
(1)问题的简单描述:输入两整数,调用gcd()函数求最大公约数。
(2)实验代码:
#include<stdio.h>
int gcd(int a,int b)
{
int temp;
int remainder;
if(a<b)
{
temp=a,a=b,b=temp;
}
remainder=a%b;
while(remainder!=0)
{
a=b;
b=remainder;
remainder=a%b;
}
return b;
}
main()
{
int x,y;
int fac;
printf("请输入两个整数x,y:");
scanf("%d,%d",&x,&y);
fac=gcd(x,y);
printf("The great common divisor is:%d",fac);
}
(3)问题分析
要正确调用gcd()函数 |
2、实验练习
实验6.3.1(练习4)
(1)问题的简单描述:打印出指定图形。
(2)实验代码:
#include<stdio.h>
void trangle(int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
printf(" ");
for(j=0;j<=2*i;j++)
printf("*");
putchar('\n');
}
}
main()
{
int n;
printf("请输入一个整数n:");
scanf("%d",&n);
printf("\n");
trangle(n);
}
(3)问题分析
无 |
3、实验练习
实验6.3.2(练习1)
(1)问题的简单描述:求500以内所以亲密对数。
(2)实验代码:
#include<stdio.h>
int facsum(int m)
{
int sum=1,f=2;
while(f<=m/2)
{
if(m%f==0)
sum=sum+f;
f++;
}
return sum;
}
int main()
{
int m=3,n,k;
while(m<=500)
{
k=facsum(m);
n=facsum(k);
if(m==n&&m<=k)
printf("%d,%d\n",m,k);
m++;
}
}
(3)问题分析
无 |
4、实验练习
实验6.3.2(练习2.1)(练习2.2)
(1)问题的简单描述:求500以内所以亲密对数。
(2)实验代码:
#include<stdio.h>
int facsum(int m)
{
int sum=1,f=2;
while(f<=m/2)
{
if(m%f==0)
sum=sum+f;
f++;
}
return sum;
}
int main()
{
int m=3,n,k;
while(m<=500)
{
k=facsum(m);
n=facsum(k);
if(m==n&&m<=k)
printf("%d,%d\n",m,k);
m++;
}
}
#include<stdio.h>
#include<math.h>
#include"sab.h"
double f(double x)
{
double result;
result=1/(25+x*x);
return result;
}
main()
{
double a,b,result;
int n;
printf("Please input double a,b and integer n:\n");
scanf("%lf,%lf,%d",&a,&b,&n);
result=sab(a,b,n);
printf("sab(%lf,%lf,%d)=%f",a,b,n,result);
}
#include<stdio.h>
double f(double x);
double sab(double a,double b,double n)
{
double h,result,x1,x2,x3=0,t;
int k;
h=(b-a)/n;
x1=f(a);
x2=f(b);
for(k=1;k<=n-1;k++)
{
t=a+k*h;
x3+=f(t);
}
result=h*(x1+x2)/2+h*x3;
return result;
}
(3)问题分析
不要忘记sab()文件,存储的时候要选.h文件,并命名为sab |
三、什么是辗转相除法
含义:欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。欧几里得算法和扩展欧几里得算法可使用多种编程语言实现。 |
算法简介:欧几里得算法是用来求两个正整数最大公约数的算法。古希腊数学家欧几里得在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里得算法。
扩展欧几里得算法可用于RSA加密等领域。 |
四、实验小结
递归函数的设计与调用不知道如何正确书写,并且对递归过程模糊不清;对函数的返回值还不是特别明白。
经过实验以及自己对代码的反复检验,对递归函数有了一定的了解,同时更深刻的了解的函数的定义与调用及宏定义的使用。 |
五、近期个人学习小结
开始学习C语言是因为兴趣一开始因为C语言与上学期所学的web前端有很多相似,所以学习起来十分容易,但最近随着学习更加深入后对一些函数及算法的掌握逐渐力不从心。
希望老师加强对一些函数应用方面的练习。 |