文档库 最新最全的文档下载
当前位置:文档库 › 函数程序设计 -C语言程序实验报告

函数程序设计 -C语言程序实验报告

函数程序设计 -C语言程序实验报告
函数程序设计 -C语言程序实验报告

安徽工程大学

高级语言程序设计实验报告

班级姓名同组者/ 成绩

日期2019\11\21 指导教师

实验名称函数程序设计

一、实验目的

1.掌握定义函数的方法。

2.掌握函数实参与形参的对应关系,体会“值传递”的方式。

3.掌握函数的嵌套调用和递归调用的方法。

4.掌握全局变量和局部变量、动态变量和静态变量的概念与使用方法。

5.理解数组作为函数参数的传递方式。

6.理解宏的概念,掌握宏的定义。

7.了解文件包含的概念,掌握其用法。

二、实验内容

1.完成程序,求解n!

具体要求:输入并完善源程序;对源程序进行编译、连接和运行;写出程序运行结果。

2.计算s=1的k次方+2的k次方+3的k次方+……+N的k次方。

具体要求:输入并完善源程序;对源程序进行编译、连接和运行;写出程序运行结果。

3.写出下面3个程序的输出结果,说明每个程序中的各个x有何不同。

4.阅读程序,理解程序的功能,写出预期结果并上机验证。

5.编程并上机调试运行。

(1)编写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。(2)输入一个整数,将它逆序输出。要求定义并调用函数rverse(number),它的功能是返回number的逆序数。如reverse(12345)的返回值是54321。

(3)用递归法求n阶勒让德多项式的值,递归公式为

P(x)=1,n=0;P(x)=x,n=1;P(x)= [(2n-1)*x-Pn-1(x)-(n-1)Pn-2(x)]/n, n>1

(4)编写一函数,由实参传递一个字符串,统计此字符串中字母、数字、空格和其他

字符的个数,在主函数中输入字符串并输出上述结果。

(5)带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出交换后的两个值。

(6)编写函数,实现两个字符串的连接,在主函数中输入两个字符串并输出连接后的结果(不要使用库函数中的strcat函数)。

(7)请编写函数fun,它的功能是:求出1~1000之内能被7或11整除,但不能同时被7和11整除的所有整数,并将它们放在a所指的数组中,通过n返回这些数的个数,在主函数中输出这些整数,并给出统计的总数。

(8)设有未完成的函数:

char GetChar(char c)

{ char s[]="9038571426";

……

}

字符串s中无序地存储了10个数字字符,没有重复。函数的功能是:

如果字符c不是数字字符,函数原样返回该字符;否则,在s中查找字符C,并返回其在s 中的前一个字符。如果该字符位于s的最前面(字符'9') ,则返回最后一个字符6'。

如GetChar(4)得到字符'I', GetChar(T)得到字符T。请完成该函数并在主函数中调用。*思考题

1.请分析不返回值的函数定义与有返回值的函数定义有什么不同,思考这两类函数在实际编程中的作用。

2.请观察本次实验中使用的函数都有几个返回值,当个函数需要有多个返回值时,应该如何处理?

3.数组作为函数参数有哪几种方式?这些方式中有没有能解决之前“函数多值返回问题”的方法?

4.请分析下面程序的作用。

/*format.h*/

#define DIGIT(d) printf("整数输出:%d\n",d)

#define FLOAT(f) printf("实数输出:%10.2f\n",f)

#define STRING(s) printf("字符串输出:?号s\n",s)

/*user's program*/

#include

#include

int main()

{

int d,num;

float f;

char s[80];

printf("请选择输入格式:1-整数,2-实数,3-字符串: ");

scanf("%d",&num);

switch(num)

{ case 1:printf("请输入一个整数: ");

scanf("%d",&d);

DIGIT(d);

break;

case 2:printf("请输入一个实数:");

scanf("%f",&f);

FLOAT(f);

break;

case 3:printf("请输入一个字符串:");

scanf("%s",s);

STRING(s);

break;

default:printf("输入有错误!");

}

return 0;

}

三、算法流程图或实验步骤(可根据需要增删、修改)

1.

#include

f(int n)

{

if (n==1)

return(1);

else

return n*f(n-1);

}

void main ( )

{

int x,i;

scanf("%d",&i);

x=f(i);

printf("i!=%d\n",x);

}

2.

#include

long f1(int i,int j)

{

long power=i;

int m;

for(m=1;m

power*=i ;

return power;

}

void main( )

{

int n,k,m;

long sum=0;

printf("please input N,k:\n");

scanf("%d,%d",&n,&k);

for(m=1;m<=n;m++)

sum+=f1(m,k);

printf("sum is %ld\n",sum); }

3.(1)

#include

int x=8;

void main( )

{

printf("\nx1=%d",x);

{

int x=5;

printf("\nx2=%d",x);

}

}

(2)

#include

int x=8;

void main( )

{

printf("\nx1=%d",x);

{

int x=5;

printf("\nx2=%d",x);

}

printf("\nx3=%d",x);

}

(3)

#include

void main( )

{

void sub(void);

int i;

static int x;

int y;

i=1;x=8;y=5;

printf("i=%d x=%d y=%d\n",i,x,y);

sub( );

printf("i=%d x=%d y=%d\n",i,x,y); }

void sub(void)

{

int i;

static int x;

i=18;x=20;

printf("i=%d x=%d\n",i,x);

}

4.(1)

#include

void sort (int a[])

{

int i,j,t;

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

for(j=0;j<4-i;j++)

if(a[j]

{t=a[j];a[j]=a[j+1];a[j+1]=t;} }

void main( )

{

int a[5]={5,10,-7,3,7},i;

sort(a);

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

printf("%4d",a[i]);

}

结果:10 7 5 3 -7

(2)

#include

#define SQR(X) X*X

void main( )

{

int a=15,k=1,m=1;

a/=SQR(k+m)/SQR(k+m);

printf("%d\n",a);

}

结果:3

(1)

#include

int prime(int n)

{

int i;

for(i=2;i

if(n%i==0)break;

if(i>=n)

return 1;

else

return 0;

}

void main()

{

int n;

printf(“Input a integer:”);

scanf(“%d”,&n);

if(prime(n))

printf(“%d is a prime\n”,n);

else

printf(“%d is not a prime\n”,n); }

(2)

#include

int reverse_num(int n)

{

int m = n%10;

int i = n/10;

while (i > 0)

{ int a = i%10; m *= 10; m += a; i /= 10; }

return m;

}

int main( )

{ int n = 0;

int m = 0;

printf("please input a number:\n");

scanf("%d", &n);

printf("the reverse number is : %d\n",reverse_num(n)); return 0;

}

(3)

#include

double p(int n,double x)

{

if(n==0)

return 1;

else

if(n==1)

return x;

else

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

void main()

{

int n;

double x;

printf(“Input n and x:\n”);

scanf(“%d,%lf”,&n,&x);

printf(“%f”,p(n,x));

}

(4)

#include

#include

int letter=0,digit=0,space=0,other=0;

void count(char s[])

{

int i=0;

while(s[i]!=‘\0’)

{

if(s[i]>=‘A’&&s[i]<=‘Z’||s[i]>=‘a’&&s[i]<=‘z’)

letter++;

else

if(s[i]>=‘0’&&s[i]<=‘9’)

digit++;

else

if(s[i]==‘‘)

space++;

else other++;

i++;

}

}

void main()

{

char s[20];

printf(“Plese input a string:”);

gets(s);

count(s);

printf(“letter=%d,digit=%d,space=%d,other=%d\n”,letter,digit,space,other); }

(5)

#include

#define swap(a,b) t=a;a=b;b=t;

void main()

{

int a,b,t;

scanf(“%d%d”,&a,&b);

swap(a,b);

printf(“%d,%d”,a,b);

}

(6)

#include

#include

void main()

{

void connect(char s1[],char s2[]);

char s1[20],s2[20];

printf(“Please input string1:”);

gets(s1);

printf(“Please input string2:”);

gets(s2);

connect(s1,s2);

printf(“The connected string is:”);

puts(s1);

}

void connect(char s1[],char s2[])

{

int length1,i,j;

length1=strlen(s1);

for(i=length1,j=0;s2[j]!=‘\0’;i++,j++) s1[i]=s2[j];

s1[i]=‘\0’;

}

(7)

#include

int f(int a[])

{

int i = 0,n;

for(n = 1;n <=1000;n++)

{

if(n%7==0 || n%11==0) //能被7整除或被11整除if(n%77!=0) //不能的同时被7和11整除a[i++]=n; //符合要求的数赋值给数组}

return i;

}

void main()

{

int a[300],length;

length = f(a);

for(int i=0; i

{

printf("%-4d",a[i]);

if((i+1)%5 == 0) //使输出时每行五个数printf("\n");

}

printf("\n%d\n", length);

}

*思考题

/*format.h*/

#define DIGIT(d) printf("整数输出:%d\n",d)

#define FLOAT(f) printf("实数输出:%10.2f\n",f)

#define STRING(s) printf("字符串输出:?号s\n",s)

/*user's program*/

#include

#include

int main()

{

int d,num;

float f;

char s[80];

printf("请选择输入格式:1-整数,2-实数,3-字符串: ");

scanf("%d",&num);

switch(num)

{ case 1:printf("请输入一个整数: ");

scanf("%d",&d);

DIGIT(d);

break;

case 2:printf("请输入一个实数:");

scanf("%f",&f);

FLOAT(f);

break;

case 3:printf("请输入一个字符串:");

scanf("%s",s);

STRING(s);

break;

default:printf("输入有错误!");

}

return 0;

}

四、实验结果及分析

1.如第三项程序所示

2.如第三项程序所示

3. 运行结果:x1=5 /*此处x为全局变量*/

x2=3 /*此处x为局部变量*/

2) 运行结果:x1=5 /*此处x为全局变量*/

x2=3 /*此处x为局部变量*/

x3=5 /*此处x为引用外部变量*/

3) 此程序中x为静态变量,并且两个变量x所处的域不同运行结果:HELLO

i=1 x=10 y=5

C PROGRAM

1=18 x=20

HELLO

1=1 x=10 y=5

4.如第三项程序所示

5.如第三项程序所示

*思考题

1.函数有返回参数和输入参数,是函数最完整的一种形式。在数据传输方面,一方面,它既可以接收调用时传递的参数,也可以给调用的程序返回需要的数据。例如:传给它一副图片,它可以对图片进行处理,然后把处理后的图片再传回来。

function [out1 out2 ...]=myfunc(in1,in2,...)

函数无返回参数而有输入参数,这样只能给它传入参数,由它对数据进行处理,然后作图显示等等。它只是单向接收数据,不能双向传递数据。

function myfunc(in1,in2,...)

2.用指针、地址参数传递即可。void fun(char* s,int &nChar,int &nInt,int &nBlk);这样在函数中赋值三个int,数值会传递回主函数。

3.直接使用数组名;使用指针

五、实验体会、问题讨论

1.值传递的方式。

2.函数的嵌套调用和递归调用的方法。

3.全局变量和局部变量、动态变量和静态变量的概念与使用方法。

教师签字:批改日期:

说明:

1、对于每一个实验项目,实验报告(含预习)一般应包含以下内容:

第一部分——预习后的书面汇报。其主要内容应包含:*一、实验目的;*二、实验内容;三、算法流程图或实验步骤。实验目的和实验内容参见实验教材或老师下发的内容。

第二部分——实验结果的书面汇报。其主要内容应包含:*四、实验结果及分析(含实验测试输入数据,实验运行结果截图,用简洁的语言总结实验,汇报是否达到实验目的);*五、实验体会、问题讨论(谈体会或感想、提出建议或意见、讨论与实验有关的且自己感兴趣的问题、回答课后思考题)。

第三部分——附录:实验源程序。提前编写好程序,实验时调试并完善。

2、实验报告写在教务处下发的实验报告纸上,每次实验完成后课代表收齐统一交给老师。

实验源程序写在单独的一个本子上,实验课时带到机房,供上机调试使用,实验教师抽查完成情况。

相关文档