C程序设计实验报告
实验名称:函数程序设计 学时安排:2学时
实验类别:上机操作型 实验要求:1人1组
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
一、实验目的
1. 熟练掌握函数的定义和调用;
2. 熟练掌握使用函数编写程序;
3. 掌握函数的实参、形参和返回值的概念及使用;
4. 掌握单步调试进入函数和跳出函数的方法。
二、实验设备介绍
软件需求: Visual C++ 6.0或CFree3.5以上版本
硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
三、实验内容
1. 输入x,计算并输出分段函数sign(x)的值。要求定义和调用函数sign(x)实现该分段函数。x大于、等于和小于0时sign(x)的值分别为1、0和-1。输入输出示例如下(运行三次):
Enter x:10 Enter x:0 Enter x:-5
sign(10)=1 sign(0)=0 sign(-5)=-1
2. 给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离(保留两位小数)。要求定义和调用函数dist(x1,y1,x2,y2)计算两点间的距离。输入输出示例如下:
Input(x1,y1): 10 10
Input(x2,y2): 200 100
distance = 210.24
3. 输入2 个正整数a 和n, 求a+aa+aaa+aa?a(n 个a)之和。要求定义并调用函数fn(a,n),它的功能是返回aa?a(n 个a)。例如,fn(3,2)的返回值是33。例:括号内是说明
Enter a and n:8 5 (a=8, n=5)
sum=98760 (8+88+888+8888+88888)
4. 输入2 个正整数m 和n(1<=m, n<=500),统计并输出m 和n 之间的素数的个数以及这些素数的和。要求定义并调用函数prime(m)判断m 是否为素数。例:括号内是说明
Enter m and n: 1 10 (m=1, n=10)
count=4, sum=17 (1 到10 之间有4 个素数:2,3,5,7)
Enter m and n: 14 16 (m=14, n=16,这里是第二次运行)
count=0, sum=0 (14 到16 之间没有素数)
5. 输入2 个正整数m 和n(1<=m,n<=1000),输出m 到n 之间的所有完数(完数就是因子和与它本身相等的数)。要求定义并调用函数factorsum(number),它的功能是返回number 的因子和。例如,digitsum(12)的返回值是16(1+2+3+4+6)。输出语句:printf("%d ", i);例:括号内是说明(运行两次)
Enter m and n: 20 500 (m=20, n=500) Enter m and n: 1 100 (m=1, n=100)
28 496 1 6 28
6. 输入1 个正整数n,将其转换为二进制后输出。要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。输出语句:printf("%d");
例:括号内是说明(运行两次)
Enter n: 100 Enter n: 0
1100100 0
四、程序清单
第一题
#include<stdio.h>
int sign(int n,int x)
{
if(x>0)
n=1;
else if(x==0)
n=0;
else
n=-1;
return n;
}
int main()
{
int i,s;
int sign(int n,int x);
printf("Enter x:");
scanf("%d",&i);
s=sign(s,i);
printf("sign(%d)=%d\n",i,s);
return 0;
}
第二题
#include<stdio.h>
#include<math.h>
double dist(double x1,double y1,double x2,double y2)
{
double d,j,k;
j=pow((x2-x1),2);
k=pow((y2-y1),2);
d=sqrt(j+k) ;
return d;
}
int main()
{
double x1,y1,x2,y2,distance;
printf("Input(x1,y1):");
scanf("%lf%lf",&x1,&y1);
printf("Input(x2,y2):");
scanf("%lf%lf",&x2,&y2);
distance=dist(x1,y1,x2,y2);
printf("distance=%.2f\n",distance);
return 0;
}
第三题
#include <stdio.h>
void main()
{
int i, n;
long a, sn;
long fn(long a, int n);
printf("Enter a and n:");
scanf("%ld%d", &a, &n);
sn=0;
for(i=1;i<=n;i++)
sn=sn+fn(a,i);
printf("sum=%ld\n",sn);
}
long fn(long a, int n)
{
long sum;
int i;
sum=0;
for(i=1;i<=n;i++)
sum=sum*10+a;
return sum;
}
第四题
#include "stdio.h"
#include "math.h"
int main( )
{
int count, i, m, n, sum;
int prime(int m);
printf("Enter m and n:");
scanf("%d%d", &m, &n);
sum=0;
count=0;
for(i=m;i<=n;i++)
{
if(prime(i)!=0)
{
sum=sum+i;
count++;
}
}
printf("count=%d, sum=%d\n", count, sum);
}
int prime(int x)
{
int i;
if(x==1)
return 0;
for(i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
return 1;
}
第五题
#include "stdio.h"
int main( )
{
int i, m, n;
int factorsum(int number);
printf("Enter m and n:");
scanf("%d%d", &m, &n);
if(m==1)
printf("1 ");
for(i=m;i<=n;i++)
{
if(factorsum(i)==i)
printf("%d ",i);
}
printf("\n");
return 0;
}
int factorsum(int n)
{
int i,sum=0;
for(i=1;i<n;i++)
{
if(n%i==0)
sum=sum+i;
}
if(sum==n)
return sum ;
}
五、运行结果
第一题
第二题
第三题
第四题
第五题
六、实验心得
1.函数定义中出现的是形参,函数调用中出现的是实参。函数名后面一定有一对圆括号,函数定义后面一定没有分号。函数定义告诉编译系统三件事:函数名,函数有几个参数,都是啥类型的,函数返回值的类型。函数返回值的类型不定义,则默认是整型的(int)。
2.被调函数应实现一个具体的功能,如求n!、排序等。形参是被调函数的输入,从主调函数的实参处得到数据;return是函数的输出,将函数值返回到主调函数的调用处,一般不在被调函数中进行输入、输出操作。
3.在主调函数中实现输入、调用函数(处理)和输出操作。
4.在调用函数时注意分清形参和实参。
第二篇:C程序设计上机实验报告07
C程序设计实验报告
实验名称:控制结构综合程序设计 学时安排:2课时 实验类别:上机操作型 实验要求:1人1组  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
一、实验目的
1. 熟练掌握分支结构、循环结构的综合应用;
2. 熟练掌握使用函数编写程序的方法;
3. 掌握结构化程序设计的思想及方法;
4. 熟练掌握C程序的调试方法。
二、实验设备介绍
软件需求: Visual C++ 6.0或CFree3.5以上版本
硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。
三、实验内容
1. 输入一个十进制,转换成对应的八进制数和十六进制数并输出。注意不能直接用%o和%x输出结果,可以参考整数逆序输出的方法,按位输出。输入输出示例如下:
Input a decimal: 31
The octal is 37
The hexadecimal is 1F
2. 改正程序error06_2.cpp中的错误。改程序实现功能,输入两个整数,分别将其逆向输出,要求定义并调用函数fun(n),它的功能是返回n的逆向值。如fun(123)的返回值为321。输入输出结果如下面4行所示: 123的逆向是321
-910的逆向是-19
要求先读该源程序,并理解其中的算法。然后把正确的代码(按规范缩进)写入报告,并以注释的方式说明错误原因。
注释示例如下:
int i; /*循环控制变量不能定义为double类型*/
3. 验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和。例如6=3+3,8=3+5,…,18=5+13。将100~200之间的偶数都表示成2个素数之和,打印时一行打印5组。要求定义和调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。
四、程序清单
第一题
#include<stdio.h>
void showoct(int n)
{
if(n>7)
showoct(n/8);
printf("%d",n%8);
}
void showhex1(int n)
{
switch(n)
{
case 10: putchar('A'); break; case 11: putchar('B'); break; case 12: putchar('C'); break; case 13: putchar('D'); break; case 14: putchar('E'); break; case 15: putchar('F'); break; default: printf("%d",n); }
}
void showhex(int n)
{
if(n>15)
{
showhex(n/16);
showhex1(n%16);
}
else
showhex1(n%16);
}
int main()
{
int n;
scanf("%d",&n);
printf("The octal is ");
showoct(n);
printf("\n");
printf("The hexadecimal is "); showhex(n);
printf("\n");
return 0;
}
第二题
#include <stdio.h>
int main(void )
{
int m1,m2;
int fun(int m1); /*函数首部要定义*/
int fun(int m2);
scanf("%d%d", &m1, &m2);
printf("%d的逆向是%d\t", m1, fun(m1));
printf("%d的逆向是%d\n", m2, fun(m2));
return 0;
}
int fun(int n)
{
int m,y;
y = 0;
if(n>0) /*n>0时赋给m,使m的值大于0*/
m = n;
else
m = -n;
while(m!=0) /*应该是m不为0时进行运算*/ {
y = y * 10 + m%10; /*逆序输出,m要取余*/ m = m/10; /*m除以10,减少位数*/ }
if(n>=0)
return y;
else
return -y;
}
第三题
#include<stdio.h>
#include<math.h>
int prime(int x)
{
int i;
for(i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
return 1;
}
int main()
{
int i,j,count=0;
for(i=100;i<=200;i=i+2)
{
for(j=3;j<=i/2;j=j+2)
if(prime(j)==1&&prime(i-j)==1) {
printf("%d=%d+%d ",i,j,i-j); count++;
if(count%5==0)
printf("\n");
break;
}
}
return 0;
}
五、运行结果
六、实验心得