C语言-上机实验报告7- 函数

时间: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.c和file2.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实验目的1掌握指针的概念会定义和使用指针变量2能正确使用变量的指针和指向变量的指针变量3能正确使用数组的指针和指向数组的指针变量4能正确使用字符串的指针和指向字符串的指针变量2实验内容将...

c语言指针实验报告

C语言实习报告题目指针及其应用系别专业姓名学号日期一实验名称指针及其应用二实验目的1掌握变量的指针及其基本用法2掌握一维数组的指针及其基本用法3掌握指针变量作为函数的参数时参数的传递过程及其用法三实验内容1运行...

C语言实验六实验报告——指针

一、实验项目名称指针二、实验目的1.掌握指针的基本概念和基本用法。包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等;2.掌握数组与指针的关系并能够利用指针解决…

C语言实验报告指针

高级语言程序设计实验报告实验序号7实验项目名称指针附源程序清单二includeltstdiohgtmainchara80b80pintigetsagetsbfori0ilt10iifi20paelsepbput...

C语言与软件技术基础指针实验报告

C语言与软件技术基础实验报告课程名称指导老师班级实验名称实验时间姓名实验地点提交时间座号一实验目的和要求1掌握指针和间接访问的概念会定义和使用指针变量2能正确使用数组的指针和指向数组的指针变量3能正确使用字符串...

C语言程序设计实验报告 实验7 指针.doc

实验报告实验目的1掌握指针的定义和指针的运算2掌握用指针处理变量和数组二实验内容实验71编写函数用指针实现两个数的交换在主函数中实现调用1程序代码includeltstdiohgtvoideintmintnvo...

C语言实验6 实验报告(指针)

C语言程序设计实验报告实验六使用指针的程序设计1班级20xx153学号20xx15317姓名杜顺永一实验目的1掌握指针的概念会定义和使用指针变量2能正确使用数组的指针和指向数组的指针变量3熟悉指针做函数参数的使...

C语言程序实验报告_指针

实验指针一实验目的及要求1掌握C语言环境下指针的声明定义和使用方法2掌握指针和变量以及指针和数组的关系3掌握指针数组之间的关系4掌握指针函数之间的关系二实验内容1熟悉指针的基本使用方法1请仔细分析以下程序段并上...

实验报告 C语言指针及指针的应用

C语言指针及指针的应用学院计算机与软件学院系软件工程专业软件工程班级学号姓名杨帅指导教师林福平时间实验报告1008班20xx00459420xx年5月11日实验报告六

c语言上机实验报告报告

C语言程序设计实验报告1实验目的1熟练掌握ififelseifelseif语句掌握if语句中的嵌套关系和匹配原则利用if语句实现分支选择结构2熟练掌握for语句格式及使用方法3掌握简单常用的算法并在编程过程中体...

厦门理工学院11级C语言 实验7_指针

高级语言程序设计实验报告实验序号7实验项目指针附源程序清单123456

内蒙古工业大学C语言实验报告

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

c语言指针实验报告(33篇)