C语言实验七 函数 实验报告

时间:2024.4.20

    

      C语言程序设计

         实

         验

         报

         告     

       

实验题目

  实验七  函数

实验目的

(1)掌握函数定义的方法;

(2)掌握函数实参与形参的对应关系,以及值传递的方式。

(3)掌握函数的嵌套调用和递归调用的方法;

(4)掌握全局变量和局部变量、动态变量、静态变量的概念和使用方法;

(5)学习对多文件的程序的编译和运行。

实验内容和步骤

1、写一个判别素数的函数。在主函数输入一个整数,输出是否是素数的信息。

#include<stdio.h>

void main()

{int  prime(int);

 int m,flag=1;

 char c;

 while(flag)

  {printf("Enter the m:\n");

   scanf("%d",&m);

   if(prime(m))

       printf("%d 是素数!",m);

    else

         printf("%d 不是素数!",m);

  printf("\nContinue or not?(Y&N)\n");

  scanf(" %c",&c);

  if(c=='Y')

        flag=1;

  else

        flag=0;

  }

}

int prime(int m)

{int i,flag=1;

for(i=2;i<m && flag;i++)

   if(m%i==0)

          flag=0;

  return flag;

}

2、用一个函数来实现将一行字符串中最长的单词找出。此行字符串从主函数传递给该函数。

1)把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。#include<stdio.h>

#include<string.h>

void main()

{int word(char);

 int longest(char[]);

 int i;

 char string[80];

 printf("Enter a line:\n");

 gets(string);

 printf("The longest word is:\n");

 for(i=longest(string);word(string[i]);i++)

        putchar(string[i]);

 putchar('\n');

}

int word(char c)

{if(c>'a'&&c<'z' || c>'A'&&c<'z')

     return 1;

 else

         return 0;

}

int longest(char string[])

{int len=0,length=0,flag=1,place=0,point,i;

 for(i=0;i<=strlen(string);i++)

        if(word(string[i]))

               if(flag)

               {point=i;flag=0;}

               else len++;

        else

        {flag=1;

        if(len>length)

        {length=len;place=point;}

        len=0;

        }

 return place;

}

2)、把两个函数分别放在两个程序文件中,作为两个文件进行编译。

注:下图为文件内容(文件名分别为8__10.cfile2.c

 3、用递归法讲一个整数n转换成字符串。

#include<stdio.h>

void main()

{void convert(int);

 int m;

 printf("Enter int m:\n");

 scanf("%d",&m);

 convert(m);

 putchar('\n');

}

void convert(int m)

{int i;

if((i=m/10)!=0)

  convert(i);

printf("%c ",m%10+'0');

}

4、求两个整数的最大公约数和最小公倍数。

1)不用全局变量,分别用两个函数求最大公约数和最小公倍数。两整数在主函数中输入,传递给函数1,以求出最小公倍数,然后再与两个整数一起作为实参传给函数2,以求出最小公倍数,返回主函数输出最大公约数和最小公倍数。

#include<stdio.h>

void main()

{int great_commom(int x,int y);

int low_common(int m,int n,int a);

int a,b,m,n;                     //用m,n,a,b分别代表两个数及其最大公约数和最小公倍数

printf("Please enter two numbers:\n");

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

a=great_commom(m,n);

b=low_common(m,n,a);

printf("最大公约数为:%d;\n最小公倍数为:%d。\n",a,b);

}

int great_commom(int x,int y)

{int i,s;

for(i=1;i<=(x>y?y:x);i++)

   if(x%i==0 && y%i==0)

          s=i;

   return s;

}

int low_common(int m,int n,int a)

{

       return (m*n/a);

}

2)用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。将最小公倍数和最大公约数都设为全局变量,在主函数输出他们的值

#include<stdio.h>

int a=0,b=0;                                      //最大公约数和最小公倍数

void main()

{void great_commom(int x,int y);

void low_common(int m,int n,int a);

int m,n;                                             //用m,n分别代表两个数

printf("Please enter two numbers:\n");

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

great_commom(m,n);

low_common(m,n,a);

printf("最大公约数为:%d;\n最小公倍数为:%d。\n",a,b);

}

void great_commom(int x,int y)

{int i;

for(i=1;i<=(x>y?y:x);i++)

   if(x%i==0 && y%i==0)

          a=i;

}

void low_common(int m,int n,int a)

{

       b=(m*n)/a;

}

5、写一个函数,输入一个十六进制的数,输出相应的十进制数。

#include<stdio.h>

#include<string.h>

#include<math.h> 

int flag=1; 

void main() 

{int convert(char string[]);

 char string[100];

 int s,flag=1; 

 printf("Please enter a line:\n");

 gets(string);

 s=convert(string); 

 if(flag) printf("s(D)=%d.\n",s); 

 else printf("The number is not a ox.\n"); 

int convert(char string[])   

{int i=strlen(string)-1,sum=0; 

 for(;i>=0;i--) 

       if(string[i]<='9' && string[i]>='0')

              sum=sum+(string[i]-'0')*pow(16,(i)); 

       else if(string[i]>='A' && string[i]<='Z')

                  sum=sum+(string[i]-'A')*pow(16,(i)); 

               else  if(string[i]>='a' && string[i]<='z')

                           sum=sum+(string[i]-'a')*pow(16,(i));

                      else  flag=0;

 return sum;

实验分析

1、 在实验过程中,当使用数组名作为函数的参数时,忘记了不需要加[n],造成编译过程出错而又摸不着头脑,使用数组作为函数参数时,只需在调用函数时写数组名即可;

2、 实验的第一个内用(判断素数),由于采用了循环语句使两个scanf连续,这种情况往往会造成回车键被第二个scanf所接受,造成第二个scanf无效,程序错误;

3、 通过实验,更加了解C语言,也明白了C语言中格式符的严格控制;

4、 实验三中,采用convert函数(借鉴了答案)巧妙地将一个整数转化成了对应的字符,应该积累这种经验。

实验感想

1自己写的程序效率不高,对变量没有很好的做到全局统筹,关于C的注释和书写格式控制不是很好,这需要以后多多从他人的程序中慢慢领悟;

2以前除了做课后习题外,几乎没有其他行动,这一点我想在以后的学习中要注意改正,学习C语言首要的就是上机操作,一些书上的不懂的地方也可以通过上机操作来解决;

3、使用各个变量的时候记得一定要有预处理命令;

4每次做作业的时候感觉程序没有什么问题,但是由于C语言逻辑的紧密性,仅依靠理论是没有用的。当把自己写的程序拿到电脑上进行调试的时候,总是漏洞百出,经过这么几次的实验课,错误已经渐渐减少了,所以以后学习C语言只有在不断地实践中才能发现更多的问题,也会掌握的更加牢固;

5以后要注意分析中提到的典型问题,多积累经验。


第二篇:函数(C语言实验报告)


仲恺农业工程学院实验报告纸

信息学院(院、系) 专业 班 C语言程序设计 课 实验目的:

(1)掌握定义函数的方法。

(2)掌握函数实参与形参的对应关系,以及“值传递”的方式。

(3)掌握函数的嵌套调用和递归调用。

(4)掌握变量作用域和存储方式的概念和方法。

(5)学习对多文件的程序进行编译和运行。

实验内容与总结:

编程练习

1、写出求第n个Fibonacci数的递归函数,主函数输入n,输出第n个Fibonacci数。 Fibonacci数列为1, 1, 2, 3, 5, 8, 13,?

程序如下:

#include <stdio.h>

void main()

{

int fibonacci(int n);

int n,f;

printf("请输入n= ");

}

int fibonacci(int n)

{

}

第 1 页 共 3 页 scanf("%d",&n); f=fibonacci(n); printf("第n个Fibonacci数是:%d\n",f); int f; if(n<=0) printf("出错了,请输入大于0的整数!"); else if(n==1||n==2) f=1; else f=fibonacci(n-1)+fibonacci(n-2); return (f);

(1)程序编制要点:

①定义函数的方法;

②递归调用。

(2)该题目涉及的知识点和难点:

①函数的定义与使用;

②函数的嵌套调用和递归调用;

③if语句的使用;

④return语句的使用。

2、成绩排名次

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:

1.输入学号、姓名、各科成绩;

2.计算每个学生的总分和平均分,并输出学号,姓名,各科成绩,总分,平均分;

程序如下:

#include <stdio.h>

#include<string.h>

#define N 2

#define M 3

#define L 13

void main()

{

}

void input(long num[],char name[][L],float score[][M]) /*输入学生学号、姓名、成绩*/ 第 2 页 共 3 页 extern void input(long num[],char name[][L],float score[][M]); extern void getsumaver(float score[][M], float sum[],float aver[]); int i,j; long num[N]; char name[N][L]; float score[N][M],sum[N],aver[N]; input(num,name,score); getsumaver(score,sum,aver); printf("\n 学号 姓名 数学 英语 物理 总分 平均分\n"); for(i=0;i<N;i++) { } printf("%5d",num[i]); /*输出一个学生的学号*/ printf(" %5s",name[i]); /*输出一个学生的姓名*/ for(j=0;j<M;j++) printf(" %5.2f",score[i][j]); /*输出一个学生的各门课的成绩*/ printf(" %5.2f",sum[i]); /*输出一个学生的总分*/ printf(" %5.2f\n",aver[i]); /*输出一个学生的平均成绩*/

{

}

void getsumaver(float score[][M], float sum[],float aver[]) /*计算总分和平均分*/ {

int i,j; float s; for(i=0;i<N;i++) { } s=0; for(j=0;j<M;j++) s+=score[i][j]; sum[i]=s; aver[i]=s/M; int i,j; for(i=0;i<N;i++) { printf("输入第%d位学生的学号:\n",i+1); } scanf("%d",&num[i]); printf("输入姓名:\n"); scanf("%s",&name[i]); printf("输入数学、英语和物理成绩:\n"); for(j=0;j<M;j++) scanf("%f",&score[i][j]);

}

(1)程序编制要点:

①函数实参与形参的对应关系,以及“值传递”的方式;;

②对多文件的程序进行编译。

(2)该题目涉及的知识点和难点:

①宏定义;

②for语句的输入与使用;

③函数实参与形参的“值传递”;

④变量作用域和存储方式的概念和方法;

⑤对多文件的程序进行编译和运行。

程序代码和运行情况描述:

在实验1中,当程序运行时,提示使用者输入n ;然后,函数运行,并输出第n个Fibonacci数的值。

在实验2中,先函数声明与函数调用;主函数执行输出结果;一个外函数提示用户输入学生学号、姓名、成绩;一个外函数计算总分和平均分;外函数运行完毕,把值返回。

更多相关推荐:
C语言:函数的应用实验报告

课程名称结构化程序设计与C语言开课实验室年月日一实验目的用C语言编写和调试函数的程序从而对函数的定义调用全局变量的灵活运用有比较深入的了解二内容及结果1程序一素数函数1程序要求写一个判断是否是素数的函数在主函数...

C语言函数实验报告

北京联合大学信息学院程序设计基础课程调研研究报告题目函数姓名学号专业计算机科学与技术编制时间20xx63版本指导教师北京联合大学信息学院编制函数实验程序设计报告20xx年6月3日班号姓名学号第一章实验情况概述本...

C语言实验报告(四)

C语言实验报告四一实验目的1掌握C语言中函数和模块2掌握怎样定义函数如何调用或使用函数如何声明函数3掌握函数的参数了解在函数调用时参数是如何传递的4在使用函数的过程中怎样确定函数的参数5如何使用局部变量和全局变...

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

C语言程序设计实验报告实验名称函数1实验目的1掌握函数的定义方法调用方法参数说明以及返回值2掌握实参与形参的对应关系以及参数之间的值传递的方式3掌握函数的嵌套调用及递归调用的用的设计方法4在编程过程中加深理解函...

C语言集中上机实验报告

重庆邮电大学移通学院C语言集中上机实验报告学生学号班级专业重庆邮电大学移通学院20xx年5月重庆邮电大学移通学院目录第一章循环311实验目的312实验要求313实验基本内容3131题目一3132题目二5第二章数...

c语言函数实验报告

实验报告课程名称C语言程序设计实验名称姓名学号专业班级实验日期一实验目的1学习定义函数的方法2练习形参与实参数据传递的方式3深刻理解全局变量与局部变量动态变量与静态变量的区别二实验内容1判断素数2求平均成绩3字...

C语言实验报告-函数

华北水院高级语言程序设计C语言实验报告五20xx20xx学年第二学期20xx级专业学号姓名一实验题目函数二实验目的略三实验内容1程序验证略2程序设计1编程实现求两个正整数的最大公约数要求计算最大公约数用函数fu...

C语言函数实验报告模版

第六次实验函数一实验要求1掌握函数定义和调用的方法2掌握函数嵌套调用和递归调用的方法3理解实参与形参的对应关系以及值传递调用函数的方法4理解变量作用域和存在期的概念掌握全局变量和局部变量动态变量和静态变量的定义...

C语言实验报告函数

高级语言程序设计实验报告实验序号6实验项目名称函数2includeltstdiohgtincludeltmathhgtdefinee1e5doublefunadoublenfloati1doublex10s0w...

C语言实验报告《函数》

C语言实验报告函数学号姓名班级日期指导教师成绩实验四函数一实验目的1掌握函数定义调用和声明的方法2掌握实参和形参之间的传递方式3函数的嵌套调用二实验内容1写一个函数将两个字符串连接习题862编写一个函数由实参传...

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

C语言程序设计实验报告1实验目的掌握C函数的定义方法函数的调用方法参数说明以及返回值掌握实参与形参的对应关系以及参数之间的值传递的方式掌握函数的嵌套调用及递归调用的设计方法掌握全局变量和局部变量动态变量与静态变...

C语言实验报告之利用函数进行程序设计

一实验的目的1掌握定义函数的方法2掌握函数的实参与形参的对应关系以及值传递的方式3掌握函数的嵌套调用及其递过调用的方法4掌握全局变量与局部变量的使用二要求及内容本实验主要完成函数的的应用训练总共要求完成四个问题...

c语言函数实验报告(47篇)