C语言函数实验报告

时间:2024.4.21

北京联合大学 信息学院

“程序设计基础”课程

调研(研究)报告

vfs

       目:         函数            

姓名(学号):                       

       业:  计算机科学与技术                       

间:     20##-6-3                   

       本:                         

师:                       

           

                   北京联合大学-信息学院编制

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

20##年6月3

班号:             姓名:            学号:   

第一章.  实验情况概述

本次实验主要做了判断素数和用一个函数来实现将一行字符串中最长的单词输出、写一函数能输入一个十六进制数后输出相应的十进制数以及用递归法将一个整数转换成字符串实验,主要实践了函数的定义、声明、调用及运用返回值等的内容,验证了函数的递归调用和嵌套调用。理解了函数用来完成特定功能的便捷性,并初步了解并掌握了模块化程序设计思路。

第二章.  实验记录

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

素数定义:除了1和它本身外,不能被任何数整除且大于2的整数。

#include<stdio.h>

int main()

{

    void fun(int n);       //函数声明

    int n;

       printf("  input a number which is larger than 2 :\n  ");

    scanf("%d",&n);        

    fun(n);                 //调用函数

       return 0;         /*若主函数为int型用getchar()也可以,若为void则只能 

                       用getchar,或什么都不用;此处可以将return注释掉*/

}

void fun(int n)      //定义被调用函数

{

    int i,j;

    for(i=2,j=2;i<n;i++)     //i做除数,j用来计数。

       {  

          if(n%i!=0)

                 j++;

          else

                break;

       }

       if(j<n)

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

    else

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

}

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

    #include<stdio.h>                       

 int fun(void)    //定义无参被调函数fun的类型、名称

{

       int n;                            //定义int型变量n

       printf(" Please input a hex number :");        //打印提示信息

       scanf("%x",&n);           //从键盘上读入数据,%x表示该数以16进制形式输入

       printf("\n Its decimal number is : %d\n",n); //打印所需的结果,即十进制数输出

    return 0;

}

int main()                            //主调函数

{

    int fun(void);    //声明无参被调函数的fun类型、名称

       fun();                    //调用函数fun

    return 0;

}  

 

3.用递归法将一个整数转换成字符串。

#include <stdio.h>

void main()

{

 void exchange(int n); //声明转换函数exchange

 int n;

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

 scanf("%d",&n);

 printf("its string is:\n ");

 if(n<0)   //如果输入的是负数

 {

  putchar('-');   //输出负号“-”

  n=-n;    //将此负数转化为正数处理

 }

 exchange(n); //调用转换函数,该函数包括了整数的转换和转换成的字符串的输出

 printf("\n");

}

void exchange(int m)  //定义转换函数,其中m为形参。

{

 int i;

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

 {exchange(i);} /* 因为i和10都是整数,所以i=m/10的结果不会是浮点型,只能是整

     型;根据该编译系统“向零取整”的规则,如果等于0,说明m就只有一位数;

    若不为0,则说明m是一个多位数,递归调用继续处理i,使m 除去个位的数字 */

printf("%c ",m%10+'0');  /* m%10是取余运算,结果为0~9之间的整数,即整数n的最

                    后一位数。字符'0'~'9'的ASCⅡ代码依次比字符'0'的代码大0~9,

                    m%10+'0'表示所要输出的该数的ASCⅡ代码,这样才能使打印

                    出的是字符'0'~'9'中的某个字符而不是整数0~9中的某个整数。*/

}

 

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

#include<stdio.h>

#include<string.h>

/*以下6行,函数fun,判断是否为字母*/

int fun(char c)   

{

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

       return(1);

   else

       return(0);

}           

/*以下30行,函数longest,计算最长单词的起始位置。*/

int longest(char string[])  //变量为字符型数组

{

   int i,flag,len=0,length=strlen(string),place,point;  /*flag表示单词是否开始,flag=0表示未

                                开始,flag=1表示单词开始;  len表示单词已累计的字

                              母个数;length表示先前单词中最长单词的长度;  point

                            表示当前单词的起始位置;place表示最长单词的起始位置*/

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

   {

      if(fun(string[i]))      /*判断是否为字母*/

         {

         if(flag)      /*是,开始*/

               {

            flag=0;

            point=i;

               }

         else

                  len++;      /*进入计算,+1*/

         }

      else      /*不是,比较已统计*/

         {

         flag=1;

         if(len>=length)

               {

            length=len;

            place=point;

                     len=0;

               }

         }

   }

   return(place);

}                 

/*以下14行,主函数,调用longest计算最长单词的起始位置,并输出*/  

void main()    

{

    char line[1000];

    int i,n=0;

    printf("please input one line:\n");

    gets(line);

    printf("The longest word is :");

    for(i=longest(line);fun(line[i]);i++)

       {

        printf("%c",line[i]);

        n++;

       }

    printf("\nIts length is %d.\n",n);

}                       

实验程序调试的步骤:根据该题目相应的要求,通过主动思考、查资料、与人交流等方式构思算法,在草稿纸上编写出简单的流程图,再将具体的程序在电脑上敲出来,不断的更正并改进,得出比较完善的程序。

遇到的问题:如图所示,调试程序时无错误,但运行完后,求得的是最长单词及其长度不是预期的,而是输入的第一个单词。

问题的解决方法:根据检查结果,出现上述问题的原因是第二个函数longest 内部for循环的控制条件及for内部的if()else()选择结构有重大缺陷,解决办法主要是在赋初始值时,将flag变为flag=1,将length=strlen(string)改为length=0,if选择结构里面就不至于混乱,这样就可以解决上述问题了。

第三章.系统的评测

测试方案:该程序是用一个函数来实现将一行字符串中最长的单词输出,且此行字符串从主函数传递给该函数。这样,我们不妨输入几组容易辨别的单词组,再夹杂一些数字或符号的混合组,查看是否与预期结果相符。

测试用例:(1)abc  abcd(2)abcd  abc(3)3a2bc  @#$abc

根据测试的结果进行分析和修改:

部分运行结果如下:

有结果可知,经过改进后,运行结果完全符合要求,达到了预期目的。

第四章.程序清单

#include<stdio.h>

#include<string.h>

/*以下是函数letter,判断是否为字母*/

int letter(char c)   //定义函数letter

{

   if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) //判断由主调函数传来的line[i]是否在a~b或A~Z之间

       return(1);     //是,则返回真值1给主调函数

   else

       return(0);      //否,则返回假值0给主调函数

}           

/*以下是函数longest,计算最长单词的起始地址。*/

int longest(char string[])  //定义函数longest,变量为字符串数组

{

   int letter(char c); //声明被调函数

   int i,flag=1; //flag表示单词是否开始,flag=0表示未开始,flag=1表示单词开始;

   int length0=0,length=0;  //length0表示单词已累计的字母个数;length表示先前单词中 

                                      最长单词的长度;

   int point,place;   //point表示当前单词的首字母地址,即起始地址;place表示最长单                                                                 

                                                       词的起始地址

   for(i=0;i<=strlen(string);i++) //strlen(string)表示string[]的长度,strlen为测字符串长度函数

   {

      if(letter(string[i])) //判断string[i]是否为字母,string[i]代表一个字母、空格或其他符号

         {

         if(flag)      //若是,开始处理以string[i]开头的一个单词

               {   

            point=i;   //point代表当前单词的起始位置,将该单词首字母地址赋给point

                     flag=0;  //将i传给point后,把flag变为零,使下几步连续执行length0++

         }                      

         else

                  length0++;   //统计除首字母外该单词的长度

         }

      else     //若string[i]不是字母,而是空格或其他符号

         {

         flag=1;   // 将flag变为1,当下一个字符是字母时就计数

         if(length0>length)  //length代表该字符串数组中的单词的最大长度,初始化赋值为0

               {

            length=length0;  //当length0大于length时,把length0赋给length

            place=point;  //把该单词的首字母地址作为所求的最长单词的起始位置

                     length0=0; //将统计的前一个单词的长度清零,以便统计下一个单词长度

               }

         }

   }

   return(place);  //将所求最长单词的初始位置返回给主调函数

}                 

/*以下是主调函数,调用longest计算最长单词的起始位置,并输出*/  

void main()    

{

       int longest(char string[]); //声明被调函数

       int letter(char c);      //声明被调函数

    char line[1000]; //定义字符串数组

    int i,n;  

    printf("please input one line:\n");

    gets(line);   //将从键盘输入的数据读入数组

    printf("The longest word is :");

    for(i=longest(line),n=0;letter(line[i]);i++)  //调用函数longest(char)、letter(char)

       {     //i的初始值为longest函数的返回值place,for循环的控制条件为函数letter的返回值为真值1                                  

        printf("%c",line[i]); //逐个输出最长单词的首字母及其后面的字母

        n++; //输出一个字母时n自加1

       }

printf("\nIts length is %d.\n",n); //输出最长单词的字母个数

}    

 

第五章.实验分析

1.由于改程序算法实在过于复杂,实验进展相当不顺利,但完全达到了预期的目标。

2.实验中遇到的问题主要就是在复杂程序面前,还是显得手足无措,对复杂算法的构思和编程比较吃力,但归根结底是基础还不够扎实,致使程序中的选择结构混乱不堪,使计算机难以正确执行既定程序步骤。出现问题的原因一是解决复杂算法编程的能力有所欠缺,二是基本功还不够扎实。对于程序本身,解决方法是与人交流、查资料;而对于自身,则主要是再次温故课本,查漏补缺,温故知新。以及利用这一方法解决问题的结果相当不错,最终在自身积极钻研下,搞定了源程序。

3.实验中的得是知道了自己不足和弱项,失主要是由于基础不扎实浪费了大量的时间和精力。今后要注意的问题是要勤于书本,先掌握书本知识,才能做到得心应手。。

第六章.小结

    1.掌握了定义、声明及调用函数以及运用函数返回值的方法;

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

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

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

5. 再次温故了一次课本,查漏补缺,温故知新,加强了记忆,熟练掌握了基本原理和技巧。


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


实验报告

一、设计思想的简单描述:

     在实验4_4中,我调用了pow函数,并通过定义MySerise函数来求和,最后通过“模”的计算使每行的输出控制在五个数。在实验4_5中,我首先定义了一个长度为50的数组,然后使用for和while语句编写了求最大值、最小值、平均数和方差的函数,最后在主函数中调用它们。在实验4_6中,首先定义了一个无返回值函数使它通过循环实现输出所输入数字个数的“*”,在主函数中,再次利用循环,使程序能够按行输出所有数据的直方图表示。在实验4_7中,利用已有的fabs函数,编写了求立方根的函数CubeRoot,并且在主函数中利用for循环使程序能按照步长来求在某一区间内的所有数的立方根。

二、程序结构及流程的简单描述:

1、实验4_4:

2、实验4_5:

3、实验4_6:

4、实验4_7:

三、实验心得体会:

    在这次试验中,我更加深刻的体会到了运用循环的好处,它能使繁琐复杂的问题简单化,并可使不定个数的输入得以输出运算结果。

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

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

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

C语言程序设计实验题目实验七函数实验目的实验报告1掌握函数定义的方法2掌握函数实参与形参的对应关系以及值传递的方式3掌握函数的嵌套调用和递归调用的方法4掌握全局变量和局部变量动态变量静态变量的概念和使用方法5学...

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语言实验报告

内蒙古工业大学信息工程学院实验报告课程名称高级语言程序设计C实验名称循环数组函数和结构体程序设计实验类型验证性综合性设计性实验室名称校计算中心班级学号姓名组别同组人成绩实验日期20xx年6月13日实验报告撰写要...

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