C语言函数实验报告_第1页
C语言函数实验报告_第2页
C语言函数实验报告_第3页
C语言函数实验报告_第4页
C语言函数实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京联合大学信息学院“程序设计基础”课程调研(研究)报告题目:函数姓名(学号):专业:计算机科学与技术编制时间:2012-6-3。版本:指导教师:北京联合大学-信息学院编制函数实验(程序)设计报告2012年6月3日班号:姓名:学号:实验情况概述本次实验主要做了判断素数和用一个函数来实现将一行字符串中最长的单词输出、写一函数能输入一个十六进制数后输出相应的十进制数以及用递归法将一个整数转换成字符串实验,主要实践了函数的定义、声明、调用及运用返回值等的内容,验证了函数的递归调用和嵌套调用。理解了函数用来完成特定功能的便捷性,并初步了解并掌握了模块化程序设计思路。实验记录1.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。素数定义:除了1和它本身外,不能被任何数整除且大于2的整数。#include<stdio.h>intmain(){voidfun(intn);//函数声明intn; printf("inputanumberwhichislargerthan2:\n");scanf("%d",&n);fun(n);//调用函数 return0; /*若主函数为int型用getchar()也可以,若为void则只能用getchar,或什么都不用;此处可以将return注释掉*/}voidfun(intn)//定义被调用函数{inti,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);}写一函数,输入一个十六进制数,输出相应的十进制数。#include<stdio.h> intfun(void)//定义无参被调函数fun的类型、名称{ intn; //定义int型变量n printf("Pleaseinputahexnumber:"); //打印提示信息 scanf("%x",&n); //从键盘上读入数据,%x表示该数以16进制形式输入 printf("\nItsdecimalnumberis:%d\n",n);//打印所需的结果,即十进制数输出return0;}intmain() //主调函数{intfun(void);//声明无参被调函数的fun类型、名称 fun(); //调用函数funreturn0;}3.用递归法将一个整数转换成字符串。#include<stdio.h>voidmain(){voidexchange(intn);//声明转换函数exchangeintn;printf("inputaintegernumber:\n");scanf("%d",&n);printf("itsstringis:\n");if(n<0)//如果输入的是负数{putchar('-');//输出负号“-”n=-n;//将此负数转化为正数处理}exchange(n);//调用转换函数,该函数包括了整数的转换和转换成的字符串的输出printf("\n");}voidexchange(intm)//定义转换函数,其中m为形参。{inti;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,判断是否为字母*/intfun(charc){if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))return(1);elsereturn(0);}/*以下30行,函数longest,计算最长单词的起始位置。*/intlongest(charstring[])//变量为字符型数组{inti,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计算最长单词的起始位置,并输出*/voidmain(){charline[1000];inti,n=0;printf("pleaseinputoneline:\n");gets(line);printf("Thelongestwordis:");for(i=longest(line);fun(line[i]);i++) {printf("%c",line[i]);n++; }printf("\nItslengthis%d.\n",n);}实验程序调试的步骤:根据该题目相应的要求,通过主动思考、查资料、与人交流等方式构思算法,在草稿纸上编写出简单的流程图,再将具体的程序在电脑上敲出来,不断的更正并改进,得出比较完善的程序。遇到的问题:如图所示,调试程序时无错误,但运行完后,求得的是最长单词及其长度不是预期的,而是输入的第一个单词。问题的解决方法:根据检查结果,出现上述问题的原因是第二个函数longest内部for循环的控制条件及for内部的if()else()选择结构有重大缺陷,解决办法主要是在赋初始值时,将flag变为flag=1,将length=strlen(string)改为length=0,if选择结构里面就不至于混乱,这样就可以解决上述问题了。第三章.系统的评测测试方案:该程序是用一个函数来实现将一行字符串中最长的单词输出,且此行字符串从主函数传递给该函数。这样,我们不妨输入几组容易辨别的单词组,再夹杂一些数字或符号的混合组,查看是否与预期结果相符。测试用例:(1)abcabcd(2)abcdabc(3)3a2bc@#$abc根据测试的结果进行分析和修改:部分运行结果如下:有结果可知,经过改进后,运行结果完全符合要求,达到了预期目的。第四章.程序清单#include<stdio.h>#include<string.h>/*以下是函数letter,判断是否为字母*/intletter(charc)//定义函数letter{if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))//判断由主调函数传来的line[i]是否在a~b或A~Z之间return(1);//是,则返回真值1给主调函数elsereturn(0);//否,则返回假值0给主调函数}/*以下是函数longest,计算最长单词的起始地址。*/intlongest(charstring[])//定义函数longest,变量为字符串数组{intletter(charc);//声明被调函数inti,flag=1;//flag表示单词是否开始,flag=0表示未开始,flag=1表示单词开始;intlength0=0,length=0;//length0表示单词已累计的字母个数;length表示先前单词中最长单词的长度;intpoint,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赋给lengthplace=point;//把该单词的首字母地址作为所求的最长单词的起始位置 length0=0;//将统计的前一个单词的长度清零,以便统计下一个单词长度 } }}return(place);//将所求最长单词的初始位置返回给主调函数}/*以下是主调函数,调用longest计算最长单词的起始位置,并输出*/voidmain(){ intlongest(charstring[]);//声明被调函数 intletter(charc);//声明被调函数charline[1000];//定义字符串数组inti,n;printf("pleaseinputoneline:\n");gets(line);//将从键盘输入的数据读入数组printf("Thelongestwordis:");for(i=longest(line),n=0;letter(line[i]);i++)//调用函数longest(char)、letter(char) {//i的初始值为longest函数的返回值place,for循环的控制条件为函数letter的返回值为真值1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论