实验五函数与编译预处理.docx

上传人:b****8 文档编号:10041338 上传时间:2023-05-23 格式:DOCX 页数:16 大小:63.55KB
下载 相关 举报
实验五函数与编译预处理.docx_第1页
第1页 / 共16页
实验五函数与编译预处理.docx_第2页
第2页 / 共16页
实验五函数与编译预处理.docx_第3页
第3页 / 共16页
实验五函数与编译预处理.docx_第4页
第4页 / 共16页
实验五函数与编译预处理.docx_第5页
第5页 / 共16页
实验五函数与编译预处理.docx_第6页
第6页 / 共16页
实验五函数与编译预处理.docx_第7页
第7页 / 共16页
实验五函数与编译预处理.docx_第8页
第8页 / 共16页
实验五函数与编译预处理.docx_第9页
第9页 / 共16页
实验五函数与编译预处理.docx_第10页
第10页 / 共16页
实验五函数与编译预处理.docx_第11页
第11页 / 共16页
实验五函数与编译预处理.docx_第12页
第12页 / 共16页
实验五函数与编译预处理.docx_第13页
第13页 / 共16页
实验五函数与编译预处理.docx_第14页
第14页 / 共16页
实验五函数与编译预处理.docx_第15页
第15页 / 共16页
实验五函数与编译预处理.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验五函数与编译预处理.docx

《实验五函数与编译预处理.docx》由会员分享,可在线阅读,更多相关《实验五函数与编译预处理.docx(16页珍藏版)》请在冰点文库上搜索。

实验五函数与编译预处理.docx

实验五函数与编译预处理

实验五函数与编译预处理

实验课程名:

高级语言程序设计(C)

专业班级:

11级环境科学

(1)班学号:

201140340104姓名:

杨华

实验时间:

2013-6-7实验地点:

K3-208指导教师:

刘军

一、实验目的和要求

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

2.掌握函数实参与形参的对应关系以及“值传递”的方法。

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

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

二、实验内容

1.任务名称

阅读c60101.c程序,通过调试该程序,熟悉函数的调用方法及单步跟踪键F7和F8的不同。

源代码:

#include

voidmain()

{

voidfun(inti,intj,intk);

intx,y,z;

x=y=z=6;

fun(x,y,z);

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

}

voidfun(inti,intj,intk)

{

intt;

t=(i+j+k)*2;

printf("t=%d\n",t);

}

运行结果:

(需要截图)

运行结果分析:

2、任务名称

阅读c60102.c程序,注意在调试时F11和F10的区别,还要注意函数调用过程中形参、实参的关系。

源代码:

运行结果:

(需要截图)

运行结果分析:

3、任务名称

程序c60103.c是实现求素数的,请填空完成该程序,并上机运行测试。

#include

#include

voidmain()

{intm;

;/*申明求素数函数*/

printf("Pleaseinputadatam=:

");

scanf("%d",&m);

;/*调用求素数函数*/

}

voidprime(intn)

{inti,k;

k=sqrt(n);

for(i=2;i<=k;i++)

if(n%i==0)break;

if(i>=k+1)

printf("Thisisaprimenumber");

elseprintf("Thisisn’taprimenumber");

}

源代码:

#include

#include

voidmain()

{

intm;

voidprime(intn);/*申明求素数函数*/

printf("Pleaseinputadatam=:

");

scanf("%d",&m);

prime(m);/*调用求素数函数*/

}

voidprime(intn)

{

inti,k;

k=sqrt(n);

for(i=2;i<=k;i++)

if(n%i==0)break;

if(i>=k+1)

printf("Thisisaprimenumber\n");

elseprintf("Thisisn'taprimenumber\n");

}

运行结果:

(需要截图)

运行结果分析:

4.任务名称

程序c60104.c的功能是从键盘上输入的若干个数并求出最大值。

请填空完成该程序。

#include

voidmain()

{inti;

ints[10],max;

/*Findmax()函数的申明*/

intFindmax(intx[],intn);

printf("Input10number:

\n");

/*输入10个数据到s数组中*/

for(i=0;i<10;i++)scanf(“%d”,&s[i]);;

/*调用Findmax函数*/

max=Findmax(s,10);;

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

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

printf("\nthemaxis%d",max);

}

intFindmax(intx[],intn)

{intmax,i;

max=x[0];

for(i=1;i

if(max

max=x[i];

returnmax;

}

源代码:

#include

voidmain()

{

inti;

ints[10],max;

intFindmax(intx[],intn);/*Findmax()函数的申明*/

printf("Input10number:

\n");

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

scanf("%d",&s[i]);/*输入10个数据到s数组中*/;

max=Findmax(s,10);/*调用Findmax函数*/;

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

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

printf("\nthemaxis%d\n”max;

}

intFindmax(intx[],intn)

{

intmax,i;

max=x[0];

for(i=1;i

if(max

max=x[i];

returnmax;

}

运行结果:

(需要截图)

运行结果分析

5.任务名称

程序c60105.c的功能是从键盘上输入的若干个数按升序排序。

请调试检查该程序中的错误,程序如下:

#include

voidmain()

{inti,k;

floats[100],j;

printf("Inputnumber:

\n");

for(i=0;scanf("%f",&j);i++)

s[i]=j;

sort(s,i);

for(k=0;k

printf("%f",s[k]);

printf("\n");

}

voidsort(intx[n],intn)

{inti,j,temp,min;

for(i=0;i

{min=i;

for(j=i+1;j

if(x[j]

min=j;

if(min!

=i)

{temp=x[i];

x[i]=x[min];

x[min]=temp;

}

}

}

错误提示:

形参和实参的数据类型不一致;一般形参数组在说明时不指定数组的长度,而仅给出类型、数组名和一对方括号;用户自定义函数sort()没有申明过。

注意:

for(i=0;scanf("%f",&j);i++)这一行中for语句第二个表达式的使用形式,此处用了scanf()函数的出错来结束输出循环。

请读者查一下教材后面的附录,看看什么时候scanf()函数返回0,此时就可以结束循环。

源代码:

#include

voidmain()

{inti,k;

ints[100],j;

voidsort(intx[],intn);

printf("Inputnumber:

\n");

for(i=0;scanf("%d",&j);i++)

s[i]=j;

sort(s,i);

for(k=0;k

printf("%4d",s[k]);

printf("\n");

}

voidsort(intx[],intn)

{inti,j,temp,min;

for(i=0;i

{min=i;

for(j=i+1;j

if(x[j]

min=j;

if(min!

=i)

{temp=x[i];

x[i]=x[min];

x[min]=temp;

}

}

}

运行结果:

(需要截图)

运行结果分析

6.任务名称

编写程序,实现由主函数输入m、n,按下述公式计算并输出

的值。

提示:

定义一个求阶层的函数,然后在主函数中调用三次即可求得

源代码:

#include

intmain()

{

intfac(intx);

intm,n,a,b,c,y;

printf("inputanintegernumber:

");

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

a=fac(m);b=fac(n);c=fac(m-n);

y=a/(b*c);

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

return0;

}

intfac(intx)

{

intf;

if(x<0)

printf("x<0,dateerror!

\n");

elseif(x==0||x==1)

f=1;

elsef=fac(x-1)*x;

return(f);

}

运行结果:

(需要截图)

运行结果分析

7.任务名称

阅读如下递归程序c60107.c,其功能是什么?

上机调试。

#include

voidmain()

{intm,k;

voiddtoo(intn,intr);

printf("Pleaeinputthedecimalnumber:

");

scanf("%d",&m);

printf("Pleaseinputanumberin(2,8,16):

");

scanf("%d",&k);

dtoo(m,k);

printf(“\n”);

}

voiddtoo(intn,intr)

{if(n>=r)dtoo(n/r,r);

printf("%d",n%r);

}

源代码:

运行结果:

(需要截图)

运行结果分析:

输出输入的较小值

8.任务名称

预习c60201.c程序,写出预习结果,上机验证并写出分析。

变量的作用范围

#defineLOW10

#defineHIGH5

#defineCHANGE2

inti=LOW;

#include

voidmain()

{intworkover(inti),reset(inti);

inti=HIGH;

reset(i/2);

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

reset(i=i/2);

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

reset(i/2);

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

workover(i);

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

}

intworkover(inti)

{i=(i%i)*((i*i)/(2*i)+4);

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

return(i);

}

intreset(inti)

{i=i<=CHANGE?

HIGH:

LOW;

return(i);

}

相关知识:

“变量用之不尽,一写就走”。

在main()主函数中reset(i/2)和reset(i=i/2)不同,第一个reset的i没有被赋值到,所以该函数调用结束后还保持原来的值;而第二个reset的i被赋值了,所以函数调用结束后以前的值就没有。

全局变量:

在所函数外面定义的变量,其有效范围到整个源程序结尾;局部变量:

在函数内部定义的变量或在函数头部定义的形参,其有效范围只在所定义的函数,局部变量具有“用之则建,用完则撤”的特点。

在不同函数内定义的变量同名互不干扰。

如果一个源程序中的局部变量和全局变量同名,则局部变量优先。

源代码:

运行结果:

(需要截图)

运行结果分析

9.任务名称

上机调试c60202.c程序,观察静态局部变量在调用过程中的变化。

#include

voidmain()

{inti;

intf(int);

for(i=1;i<=5;i++)

printf("(%d):

%d\n",i,f(i));

printf("\n");

}

intf(intn)

{staticintj=1;

j=j*n;

return(j);

}

相关知识:

静态局部变量。

如果希望在函数调用结束后仍然保留函数中定义的局部变量的值,则可以将该局部变量定义为静态局部变量(或称局部静态变量)。

静态局部变量具有这样一些特点:

①全局寿命:

静态局部变量的数据存储在静态存储区的存储单元中,在函数调用结束后,它的值并不消失,直到整个应用程序执行结束,它的存储空间才被收回去。

②局部可见性:

其作用域只在定义它的函数内部,尽管它的值在函数调用结束后并不消失,但其他函数仍然不能访问它,在进入到它所在的函数内,它的值才可见。

③初始化的特点:

若在定义该局部变量时有赋初值的,则赋初值只在编译过程中进行,只赋值一次;若没有赋初值,则默认的初值为0(数值型)或空字符(字符型)。

源代码:

运行结果:

(需要截图)

运行结果分析

10.任务名称

预习程序c60203.c,分析在程序运行前宏NUM的值,并上机运行,比较一下的预习结果和实际结果。

#include"stdio.h"

#defineN2

#defineMN+1

#defineNUM(M+1)*M/2

main()

{inti,n=0;

for(i=1;i<=NUM;i++)

{n++;printf("%d\n",n);}

printf("\n");

}

源代码:

运行结果:

(需要截图)

运行结果分析

11.任务名称.

分析程序c60104.c的运行结果,上机验证。

#definePOWER(x)((x)*(x))

#defineMAX(x,y)(x)>(y)?

(x):

(y)

#definePRprintf

#include

voidmain()

{inta,b,c,d,x;

a=5;b=10;x=200;

c=POWER(a+b);

x=x/POWER(a+b);

d=MAX(a+6,b);

PR("c=%d,d=%d,x=%d\n",c,d,x);

}

源代码:

运行结果:

(需要截图)

运行结果分析

12.任务名称

编写:

输入10个学生的3门课的成绩,分别用函数求:

(1)每个学生的平均分。

(2)每门课的平均分。

(3)按学生平均分降序排列输出学生信息。

(4)统计不及格学生,输出其相应信息。

(5)编写一菜单主函数,菜单内容包括以上4部分。

分析:

本题要求完成的操作有录入数据、求平均分、排序、统计。

这些操作分别用函数来实现。

先分析表示这些数据的数据结构,可用如下结构来表示学生的成绩:

课程1

课程2

课程3

平均分

68

74

50

即10个学生的3门课程成绩可以登记在一个二维数组中score[10][4],其中最后一列用于保存平均分,学生的学号不单独记录,学生的序号用二维表的行号来表示。

下面给出了主菜单的参考程序c60205.c,其他功能的函数学生自己编写。

#include

#defineN10

#defineM4

voidmain()

{intscore[N][M];

charchoice='1';

voidinput(int[][],int,int);

voidaver_stu(int[][],int,int);

voidaver_cour(int[][],int,int);

voidorde_aver(int[][],int,int);

voidfailed(int[][],int,int);

input(score,N,M);

/*显示主菜单*/

while(choice!

='0')

{clrscr();

printf("==========theScoreProcessingSystem====================\n");

printf("1.printeachstudent'saverage\n");

printf("2.printeachcourse'saverage\n");

printf("3.Orderthestudentsbystudent'saveragedecreasingly\n");

printf("4.printthefailedstudent\n");

printf("0.Exitthesystem\n");

printf("===============================================\n");

printf("Pleasechoise(0-4):

\n");

choice=getchar();

switch(choice)

{case'1':

aver_stu(score,N,M);break;

case'2':

aver_cour(score,N,M);break;

case'3':

orde_aver(score,N,M);break;

case'4':

failed(score,N,M);break;

case'0':

exit(0);

default:

printf("ChoiceError,Pleaseselectagain(0-4).");

}

}

}

源代码:

运行结果:

(需要截图)

运行结果分析

三、结论(写本次实验的收获)

通过近2周的实验学习,我掌握定义函数,函数实参与形参的对应关系以及“值传递”,函数的嵌套调用和递归调用的方法,也熟悉了全局变量和局部变量,动态变量、静态变量的概念和使用方法。

说明:

1、每次实验报告后,以学生的学号+实验项目名作为该word文件名保存。

例如某学生学号为20080001,姓名为张三,本次实验名称是:

实验一顺序结构程序设计,则本次实验报告的保存文件名为:

01张三实验一.doc。

(禁止提交文件夹)

2、在每次试验完后内,学生以整个试验项目为一个完整文档,将本报告(电子文档和纸质文档)按照

(1)要求的文件名提交给实验指导教师。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2