实验九 - - 函数

更新时间:2023-10-31 06:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验九函数

一、实验学时

2学时

二、实验目的

(一)掌握函数的定义、函数类型、函数参数、函数调用的基本概念; (二)掌握变量名作函数参数的程序设计方法; (三)掌握函数的嵌套调用的方法; (四)掌握数组元素作函数参数;

(五)掌握数组名作函数参数的程序设计方法; (六)掌握字符数组作函数参数的程序设计方法; (七)了解全局变量、局部变量的概念和使用方法;

(八)使用功能键F7单步执行,使用Ctrl+F7观察变量的值,学会程序调试基本方法。

三、预习要求

(一)函数的定义、函数类型、函数参数、函数调用的基本概念; (二)函数实参与形参的对应关系以及参数的传递; (三)以变量名和数组名作函数参数时的使用方法; (四)全局变量、局部变量的概念和使用方法。

四、实验内容

(一)下面程序的功能是:根据输入的整数x和n,利用函数fact实现求x。

例如:输入:2,3 输出23=8

请在程序中的横线上填入正确的内容,将程序补充完整。 /* c9-1.c 利用函数fact实现求x的n次方*/ #include \void main( )

{ long int fact(long x,long n) ; /*声明fact函数*/

longint x ; longint n;

printf(\scanf(\

printf(\调用fact函数 */ }

long int fact(long int x, long int n) /*定义fact函数求xn */ { long int i,s;

n

; /*求累积变量的初始化*/ if (n= =0) return 0;

for(i=1; i<=n; i++) /*用循环实现x*/ s=s*x;

; /*返回结果x*/ }

(二) 下面程序的功能是:计算Cm?的内容,将程序补充完整。

n例如:输入:5,3 输出:Cm?10 编程提示:(1)定义求阶乘函数,在此基础上定义求组合数函数。

nn

n

m!的值。请在程序中的横线上填入适当

n!*(m?n)! (2)主函数调用求组合数函数,求组合数函数再三次调用求阶乘函数。 /* c9-2.c 利用函数组合数*/ #include \

long intjf(int n) /*定义求阶乘函数jf*/ { inti; long int t=1; for(i=1; i<=n; i++) t*=i; ; }

long int cmn(int m, int n) /*定义求组合数函数cmn*/ { return(jf(m)/(jf(n)*jf(m-n))) ;} /*用return语句返回结果*/

void main( ) { int m,n;

printf(\scanf(\,%d\; }

(三)下面程序的功能是:读入一个整数m,计算如下公式的值:

t?1?111???? 23m例如:若输入5,则应输出:“The result is 2.28333”。 请在程序中的横线上填入适当的内容。

/* c9-3.c 利用函数实现级数求和*/ #include \double fun(int m) { float t=1.0; int i; for(i=2; i<=m; i++)

;

return _________ ; }

void main( ) {int m;

printf(\scanf(\

_________ ; /*按照例子中的输出形式输出结果*/ }

(四)下面程序的功能是:输入一个十进制整数,输出其对应的二进制数。

编程提示: 在main函数中定义一个变量并为其赋值,然后调用函数fun将该十进制数转换为二进制。

函数fun的形参即为被转换的整数,在for循环中每次求出m%k存放到数组aa中,同时将m/k的整数商赋给m继续判断,直止m的值为0。最后按反序输出数组aa的元素。

请在程序中的三处横线上填入适当的内容,将程序补充完整: /* c9-4.c 通过函数调用实现数制转换*/ #include \void fun(int m) { int aa[20],i,k=2;

for(i=0;m;i++) {aa[i]=m%k; ___ ______ ;} printf(\

for(;i;i--) printf(\void main() { int n;

printf(\请输入一个十进制整数:\\n\fun( _________ ); }

如果将十进制数转换为八进制数,应对程序的哪个语句进行修改?怎样修改?

(五)写一个程序,判别一个整数数组中各元素的值,若大于0 则输出该值,若小于或等于0则输出0值。

编程提示: 判断函数:1.函数的类型为void,函数中不使用return语句;

2.函数的形参为一整型变量;

3.函数体中使用选择结构,根据对变量值的判断输出相应结果。

main函数:1.定义一个一维整型数组;

2. 为整型数组赋若干个数值;

3. 调用判断函数对数组元素逐一进行判断,以数组元素作实参。

/* c9-5.c 判别一个整数数组中各元素的值 */ #include \void main( ) {

}

(六)一维数组a中的元素为:1,4,2,7,3,12,5,34,5,9。求一维数组a中的最大元素及其下标。程序的输出应为:The max is: 34,position is: 7 。要求:求最大元素位置用函数实现,在main函数中调用该函数。

编程提示: 定义一个全局变量max,用来存放最大元素。求最大元素位置的子函数: 1.函数的类型为整型;

2. 函数的形参应为整型一维数组和一整型变量(存放数组元素的个数);

3.函数体中,定义一个整型pos,用来存放当前最大元素在数组中的下标,初值为0;将全局变量max的初值设置为数组中的第一个元素;

4. 函数体中使用循环结构,将数组元素依次和max中的值进行比较,将两者中的最大元素存入max中,并将最大元素的下标存入pos中;

5. 循环结束后,用return语句,将pos的值返回到主函数。 main函数:

1. 定义一个一维整型数组并为该数组赋若干个数;

2. 以赋值语句的形式,将求最大元素位置函数的返回值赋给一个变量,以数组名和数组的元素个数作实参。

注意:以数组名作实参时,实参与形参之间是地址的传递,实参数组和形参数组是公用一段内存单元。

/* c9-6.c 通过函数调用求一维数组中的最大元素及其下标*/

#include \ #include \int max;

int fun( int arr[],int n ) { int pos,i; max = arr[0]; pos = 0;

for( i=1; ipos=i; }

return (pos); } voidmain()

{int a[10]={1,4,2,7,3,12,5,34,5,9},n; _______________;

printf(\ }

(七)下面程序的功能是:求二维数组a中的上三角元素之和。

例如:a中的元素为:

4 4 34 37

7 3 12 8 5 6 5 52 24 23 2 10 程序的输出应为:The sum is:147。

请在程序中的横线上填入适当的内容,将程序补充完整。

/* c9-7.c 通过函数调用求二维数组中的上三角元素之和*/ #include \ #include \int arrsum( int arr[4][4]) { int i,j,sum; sum=0;

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

for ( __________;j<4; j++) sum+=arr[i][j]; return (sum); }

void main()

{ int a[4][4]={4,4,34,37,7,3,12,8,5,6,5,52,24,23,2,10},i,j; printf(\

(八)将字符串1的第1,3,5,7,9,......位置的字符复制到字符串2并输出。 例如:当字符串1为\,则字符串2为\。

编程提示:

子函数:1. 函数的类型为void,函数中不使用return语句;

2. 函数的形参应为两个字符型一维数组;

3. 函数体中使用循环结构,将字符串1中相应位置上的字符逐一复制到字符

串2中,注意循环变量每次递增的数目。 main函数:1. 定义一个一维字符型数组;

2. 为字符数组赋一个字符串;

3. 调用转换函数,以两个数组名作实参;

4. 输出转换后的字符数组的内容。

/* c9-8.c 通过函数调用实现对字符串的处理*/ #include \ #include \ #include \

void fun(char str1[],char str2[]) { int i,j;

j=0;

for(i=0;i

str2[j]=’\\0’; }

voidmain()

{ char str1[80]=\printf(\ _______________;

printf(\ }

(九)输入下面的程序并分析运行结果。用F7单步执行,注意程序的执行过程,观察变量d的值,理解全局变量和局部变量的区别,理解各种局部变量的作用范围。

/* c9-9.c 全局变量与局部变量的作用范围 */

int d=1; fun(int p)

{ int d=5; d+=p++; printf(\main( )

{ int a=3; fun(a); { int d=16; d+=a++; printf(\printf(\}

五、实验注意事项

(一)定义函数时,函数名后的圆括号后面不能加“;”。 (二)在函数体内,不能再对形参进行定义和说明。

(三)变量作实参时,只使用变量名,实参变量对形参变量的数据传递是“值传递”。 (四)一维数组作函数的实参时,只使用数组名如:fun(a); 。

下面对函数的调用都是不正确的: fun(int a[4]); fun(int a[ ]); fun(int a);

本文来源:https://www.bwwdw.com/article/ewh2.html

Top