C语言 第七章 函数

合集下载

《c语言函数》PPT课件

《c语言函数》PPT课件
其它函数: 可以互相调用函数、自调用函数,不能调用main()。
精选课件ppt
4
2、使用参数 入口参数: 主调函数向被调函数传递的数据------实参、形参。
出口参数: 被调函数向主调函数传递的数据------返回值。
精选课件ppt
5
§7.2 函数的定义 问题: 1、被调函数如何使用主调函数中的数据。 2、假设被调函数有办法使用主调函数中的数据,如何保证 被调函数和主调函数中数据类型的一致。
在函数中允许有多个return语句,但每次调用只能有一个 return 语句被执行, 因此只能返回一个函数值。
精选课件ppt
15
2、函数值(回传值)的类型与被调用函数的类型说明
函数调用语句 被调函数类型 回传值类型
在定义函数时,需要指定函数的类型:
例如:
int max(x,y);
doubel a(c1,c2); 等等
1、被调函数为库函数 对库函数的调用不需要再作说明, 但必须把该函数的头
文件用include命令包含在源文件前部。
精选课件ppt
23
2、用户自定义的函数 一般应该在主调函数中对被调函数的返回值的类型做说明。 对被调函数的说明也有两种格式,
一种为传统格式,其一般格式为: 类型说明符 被调函数名();
9
调用结束:形参临时单元被释放,形参数据失效,实参数 据不变。这就是所谓的单值传递。
函数的形参和实参具有以下特点:
(1)、形参变量只有在被调用时才分配内存单元,在调用 结束时, 即刻释放所分配的内存单元。因此,形参只有在 函数内部有效。 函数调用结束返回主调函数后则不能再使 用该形参变量。
精选课件ppt
}
精选课件ppt

c语言第7章函数练习题

c语言第7章函数练习题
3. 以下对 C语言函数的有关描述中,正确的是( )。 A. 调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B. C函数既可以嵌套定义又可以递归调用 C. 函数必须有返回值,否则不能使用函数 D. C程序中有调用关系的所有函数必须放在同一个源程序文件中
4. C语言程序中,当函数调用时( )。 A. 实参和形参各占一个独立的存储单元 B. 实参和形参共用一个存储单元 C. 可以由用户指定是否共用存储单元 D. 计算机系统自动确定是否共用存储单元
fun(int x,int y,int z)
{ z=x*x+y*y;}
main()
{
int a=31;
fun(5,2,a);
printf("%d",a);
}
A.0
B.29
30.下列程序执行后的输出结果是( )。
voidfunc1(int i);
voidfunc2(int i);
charst[]="hello,friend!";
printf("%d\n",x);
}
上面程序的输出结果是( )。
A.720
B.120
C.24
39.下面程序的输出是( )。
main()
{
intt=1;
fun(fun(t));
}
fun(inth)
{
staticinta[3]={1,2,3};
intk;
for(k=0;k<3;k++) a[k]+=a[k]-h;
B. 不同函数中,可以使用相同名字的变量
C. 形式参数是局部变量
D. 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效

C语言 第七章

C语言 第七章

7.4、对被调用函数的声明和函数原型
⒈ 对被调用函数说明的前提条件
必须是已存在的函数,如用户自定义函数或库函数。 2.被调用函数是用户自定义函数的函数说明 主调函数和被调用函数在同一文件中, 在主调函数中说明被调函数类型。
在C语言中,以上的函数说明称为函数原型。 main() 对被调用函数的说明 { float add(float x,float y); float a, b, c; scanf(“ %f, %f”, &a, &b); 作为表达式被调用 c=add(a,b) ; printf(“ sum is %f ”, c ); } /*定义add函数*/ float add (float x,float y) { float z; z=x+y; return (z); }
7.3 调用函数
• 调用函数就是使用函数。 • 调用函数之前,必须首先声明函数。 • 声明函数就是声明:函数名、函数返回 值的类型和参数的类型。 • 例:
int Power(int, int);
一、函数调用的一般形式 有参数函数
函数名(实际参数表)
无参数函数
函数名()
二、函数调用的具体方式
1.函数调用作为一个语句 函数名(实际参数表);
main( ) { int max( int x, int y) ; int a,b,c; scanf (“%d,%d,&a,&b); c=max(a,b); printf(“Max is %d”,c);} int max( int x, int y) { int z; z=x>y? x:y; return(z);} void print_star()
四、 形式参数和实际参数

C语言在线实验第5次(第七章函数)-题目与答案

C语言在线实验第5次(第七章函数)-题目与答案

第五次实验题目-第七章函数教学目标31.一元二次方程的系数:a、b、c由主函数输入,编写函数求方程的根。

#include <stdio.h>#include <math.h>void root(double a, double b, double c){ double delta,x1,x2,m,n;if (fabs(a) <= 1e-6){if (fabs(b) <= 1e-6)puts("Not an equation");elseprintf("x=%.2lf",-c/b);return;}else{delta=b*b - 4*a*c;m = -b / (2*a);n = sqrt(fabs(delta)) / (2*a);x1 = m + n;x2 = m - n;if (fabs(delta) <= 1e-6)printf("x1=%.2lf, x2=%.2lf", x1, x1);else if (delta < 0)printf("x1=%.2lf+%.2lfi, x2=%.2lf-%.2lfi",m,n,m,n);elseprintf("x1=%.2lf, x2=%.2lf", x1, x2);}}int main( ){ double a,b,c;scanf("%lf%lf%lf",&a,&b,&c);root(a,b,c);return 0;}教学目标32.输入一串字符,统计其中英文字母的个数,编写统计英文字母个数的函数。

#include<stdio.h>int numberOfLetter(char str[]) {int i=0;int num = 0;//统计字母个数while (str[i]!=’\0’) {if ((str[i]>='A'&& str[i]<='Z')||( str[i]>='a'&& str[i]<='z')) num++;i++;}return num;}int main( ) {char str[100];int letterNum;printf("Enter a string: ");gets(str);letterNum = numberOfLetter(str);printf("Number of letters is %d.\n", letterNum);return 0;}教学目标33. 求100以内所有素数的和。

计算机二级C语言第七章函数

计算机二级C语言第七章函数
正确答案:B 【解析】形式参数简称形参,就是在定义函数时给出的参数,它可以是任意合法的数据类型;实际参数简称实参,是在调 用函数时传递给函数的确定的数据,它的类型应该与对应的形参类型一致,可以是常量、变量或表达式,选项A、C、D 正确;选项B中,常量、表达式不能作为右值,所以形参不能是常量、表达式,错误;本题答案为B。
C.int fun(int a[], int *, int);
D.int fun(int [], int *, int);
正确答案:A 【解析】C语言中,函数声明的函数名、返回值类型和参数列表必须与函数定义相同,其中参数列表中可以省略参 数名。题意中,fun()函数返回整型,三个参数分别是:整型指针、整型指针、整型,选项A中,第一个参数应该是 整型指针类型,第二个参数也应该是指针类型,错误;其他选项都正确,本题答案为A。
函数说明的一般形式如下: 类型名 函数名(参数类型1,参数类型2,……) 如: double sum( double, double );
也可采用下面的形式: 类型名 函数名(参数类型1 参数名1,参数类型2 参数名2,……) 如: double sum( double p, double q );
正确答案:A 【解析】数学库中定义了函数的名称、参数个数与类型、返回值类型与具体的函数体,A选项正确。编译预处理时, 预处理程序将查找指定的被包含文件,并将其复制到#include命令出现的位置上,B、C选项错误。不引用 math.h文件,文件编译时,编译器无法识别没有被定义的sin函数,D选项错误。
关于C语言函数说明的位置,以下叙述正确的是( ) A.在函数说明之后对该函数进行调用,编译时不会出现错误信息 B.函数说明可以出现在源程序的任意位置,在程序的所有位置对该函数的调用,编译时都不会出现错误信息 C.函数说明只能出现在源程序的开头位置,否则编译时会出现错误信息 D.函数说明只是为了美观和编译时检查参数类型是否一致,可以写也可以不写

C语言程序设计_课件_第七章(适于清华谭浩强版)

C语言程序设计_课件_第七章(适于清华谭浩强版)

注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。

问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:

C语言程序设计基础 第7章

C语言程序设计基础 第7章

模块化程序设计的基本要点是贯彻“自顶向下,逐步细 化”的思想方法,即将一个复杂功能的编程问题,划分成若 干个功能相对简单的子问题。这种划分可以逐层进行,直到 便于编程为止。在C语言中,一个模块的功能由一个函数来 实现。顶层函数是主函数main( )。功能模块与C语言函数的 关系如图7.1所示。
图7.1 模块与函数
第7章 函数——模块化程序设计方法的实现
7.1 模块化程序设计方法与函数 7.2 函数的定义 7.3 函数的调用 7.4 函数调用的条件与函数声明 7.5 函数的嵌套调用和递归调用 7.6 变量的作用域与函数间的数据传递 7.7 用函数实现模块化程序设计 实训任务十三 熟悉函数的功能及其使用方法 实训任务十四 学习模块化程序设计的方法
② 函数功能实现部分,是一个程序段,要依据实现某 种功能的算法进行设计。
③ 函数体最后使用一个“return(返回值);”语句,括 号中的返回值是一个需传带给主调函数的数据对象。如果没 有返回值,可以不要这个语句。VC++ 6.0系统中提倡在 main( )函数体后使用一个“return 0;”语句,表示正常返 回系统,否则会出现警告。如果函数体仅是一对花括号,没 有任何语句,就是空函数。空函数一般是无参函数。
7.2 函 数 的 定 义
怎样定义函数?定义函数要考虑哪些问题?
定义函数要解决两个方面的问题:一是函数间的接口问 题,二是功能实现问题。接口问题包括如何被上层函数调用 ,调用时需传递什么数据,调用返回时需传带什么数据。功 能实现问题就是如何实现模块的过程算法。
函数定义的一般形式为
基类型符 函数名(类型符形式参数 1,类型符形式参数 2,…) {
函数体内数据对象定义或声明部分; 函数功能实现部分; return(返 回值); }

C语言课件第07章-自定义函数

C语言课件第07章-自定义函数

在主函数或其他函数中,我们可以使用y=sum();语句执行函数sum,并把 函数的值送给y,或者用printf("%d",sum());直接输出函数sum的值。
第7章 自定义函数
2. 有参函数的定义形式 如果一个函数,需要调用者提供原始数据才能执 行(如sqrt函数),则这种函数可以被定义成有 参函数。其定义形式如下:
第7章 自定义函数
下面我们定义一个函数,名叫 printStar,其功能就是专门输出 则,主函数代码可以简化为:
经过函数调用,程序的代码行大大缩水,且main 函数更清晰且可读性更好。
第7章 自定义函数
如果我们把printStar函数的代码放到d盘根目录 下的一个文本文件中,比如放到function.txt文 本文件中,其他的程序如果有需要,也完全可以 用#include <d:\function.txt>把有关内容包含 到对应程序文件中,在需要的时候调用printStar 函数即可 。 函数:函数就是一个用名字命名的独立的程序块( 子程序),能实现某些功能,可供本程序其他函数 ,或者另外一些程序的函数调用。
第7章 自定义函数
factorial 函数专门求n的阶乘
第7章 自定义函数
形式参数(形参):函数在声明(定义) 的时候,同时对函数所需要的参数的数量、类型做出 说明。这些参数的名字只是一种形式,只有在函数被 调用时,这些参数才能得到具体值,所以这些参数为 形式参数。比如,函数求阶乘函数中的n就是形式参 数。 实际参数(实参):一个有参函数在被调用的时候, 主调函数必须根据被调用函数形参(形式参数)的要 求,传递具体数据给被调用函数的形参,这些实际的 数据就叫做实际参数,也就是我们所说的实参。 实参是有具体值的,实参可以是常数,也可以是变量 。但在使用时必须有具体值。

C语言程序设计知识点—第7章 函数

C语言程序设计知识点—第7章 函数
C 语言程序设计知识点
第 7 章:函数
主讲教师:杨剑
1. 本章目标
熟练掌握函数的定义与调用方法 理解函数的定义、声明和调用的区别 理解函数原型、实参、形参和函数的返回值 了解函数的嵌套调用和递归调用的方法 掌握数组做为函数参数的使用方法 理解变量的作用域和存储方法
2. 函数机制的优点
~6~
C 语言程序设计知识点
主讲教师:杨剑
[练习]若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,
以下选项中错误的程序是( )
A.main()
{……x=fun(2,10); ……}
float fun(int a,int b){……}
B.float fun(int a,int b){……}
int data; scanf(“%d”,&data); printf(“%d”,add(data)); return 0;
~5~
C 语言程序设计知识点
主讲教师:杨剑
} int add(____②_____) {
int i,sum=0; for(i=1;i<=n;i++)
sum=sum+i; _______③__________ } 答案: ①int add(int); ②int n ③retrun sum;
{
printf(“%d\n”,F(3+5));
}
[练习]程序运行后的输出结果是( )
A.192 B.29
C.25
D.编译出错
答案:D
在 C 语言中,函数返回值的类型最终取决于( )
A.函数定义时在函数首部所说明函数类型
B.return 语句中表达式值的类型 C.调用函数时主调函数所传递的实参类型

C语言_7函数

C语言_7函数

2 必须有某个结束递归条件:这个结束条件是递归 分解的终止点。
例 1. 用递归法求 n! n! =n*(n-1)! n! =1 当n>1时 时 当n=0或n=1时 或 时
例 2.用递归函数计算Febonacci序列的第n项值 函数原形是:f(n)=f(n-1)+f(n-2)
例 3.用递归函数计算xn的值
§4 函数的调用 一、 函数调用的一般形式 函数名(实参表列) 函数名(实参表列) 说明 : 调用无参函数,虽然不需要实参,但括号不能省。 调用无参函数,虽然不需要实参,但括号不能省。
调用函数的方式有三种: 调用函数的方式有三种: 函数语句、函数表达式、函数参数。 函数语句、函数表达式、函数参数。 如: ShowInfor(); m=max(a,b)*20; cout<<max(a,b);
实验题 1.找出1000之内的所有“完数”,判一个数是否 为完数用函数实现 。 2 .编写程序,从键盘上读入一个整数m,然后输出 这个数的全部素数因子,其中判断是否为素数用函 数实现。
§7.5 函数的嵌套调用
函数的嵌套调用
main 函数 ① 调用 a 函数 ⑨ ⑧ 结束 函数不能嵌套定义函数 ②
main
a d e f e
b g h i g
c j
C 程序结构
§2 函数定义
无参函数 形式: 函数名() 形式:函数类型 函数名() { 函数体 } 注意: 注意: 如果一个函数不需要返回值, 如果一个函数不需要返回值,认为函数类型是void类 型 例如: 定义一个ShowInfor函数,显示如下信息: 函数, 例如: 定义一个 函数 显示如下信息: ********* int a,b,c; cin>>a>>b; c=max( a ,b ); cout<<c<<‘\n’; }

第七章(c语言谭版)函数

第七章(c语言谭版)函数

调用a

调用b

}
}
}
例: 用弦截法求方程的根。
x3–5x2+16x–80=0 方法如下: (1) 取两个不同点x1、x2,如果f(x1)和f(x2)符号相反, 则(x1,x2)区间内必有一个根。如果f (x1)与f (x2)同 符号,则应改变x1、x2,直到f (x1)、f (x2)异号为 止。注意x1、x2的值不应差太大,以保证(x1, x2) 区间只有一根。
float x1, x2; { int i; float x, y, y1; y1=f(x1); do { x=xpoint(x1, x2);
y=f(x);
if (y*y1>0) /*f(x)与f(x1)同符号。*/ {y1=y; x1=x;} else x2=x; } while (fabs(y)>=0.0001); return (x); }
个return.
返回值类型为函数类型。 一般return中的返
回值类型应与函数定义时的类型一致, 不一致时,
以函数定义类型为准。
5. 调用函数应对被调用函数的返回值类型作出说 明:(函数名相当于一变量,但应有所区别)
类型符 函数名( );
它不同于函数的定义(功能定义) 例: 求二实数之和 main ( ) { float add( ); float a, b, c;
hanoi(n, one, two, three)
表示n个盘子从one塔借助于two塔(空)移至three塔。 调用时塔用字符常量'A' ,' B ', ' C '表示。
§7.5 数组作为函数参数
分为两种情况: 1. 数组元素作为实参

计算机等级考试 C语言 第7章C语言 函数

计算机等级考试 C语言 第7章C语言 函数

/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变说量n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
数入口
*/
long Fact(int n) /* 函数定义 *函/ 数内部可以定义
{
只能自己使用的变
int i;
量,称内部变量
long result = 1;
for (i=2; i<=n; i++)
2/51
问题的提出
此前,我们所有的代码基本上都是放在main函 数中,这对于一个小的问题来说没问题,但如 果一个问题较大,里面涉及到成百上千个变量 ,将所有代码放在main函数里面显然是非常糟 糕的事情。
我们可以将一个大的问题分解成一个一个的小 问题,每个小问题放在一个函数里面,最后在 main函数里整合。这种思想实际上就是所谓的 “分而治之”。
printf("Input data error!\n"); } else {
for(i=2;i<=n;i++) {

result*=i;
2019/9/10
} return result; } }
25/51
防御性程序设计(Defensive Programming)
但是输入-1后,会输出 :
Input data error!
int i; long result=1; for(i=2;i<=n;i++) {
result*=i; } return result; }
int main() { int m; long ret;
printf("input m:"); scanf("%d",&m); ret=Fact(m); printf("%d!=%d\n",m,ret); return 0; }

(完整版)答案第七章函数..

(完整版)答案第七章函数..

第七章函数一、选择题1.以下函数声明正确的是: C 。

(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。

(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。

(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。

4.以下正确的函数形式是: D 。

(1级)A)double fun(int x,int y) B)fun (int x,y){z=x+y;return z;} {int z;return z;}C)fun(x,y) D)double fun(int x,int y){int x,y ; double z; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。

(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。

(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。

(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。

(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。

高树芳C语言程序设计--第七章

高树芳C语言程序设计--第七章
[解决方案] 一行需要两个函数。一个函数显 示星号左面的空格,一个函数显示星号。
程序代码
11
7.2函数的定义、声明和调用
相关知识:
1.有参、无返回值函数的定义 2.有参、无返回值函数的调用 3.有参、无返回值函数的声明
12
7.2函数的定义、声明和调用
案例7-4 求组合数
[案例任务]
键盘输入m和n两个整数, 计算并显示下面的组合数, C 要求运用函数编程。
n m m! n! (m-n)!
[解决方案] 定义一个求阶乘的函数。它有一个 形参,而且有返回值。
程序代码
13
7.2函数的定义、声明和调用
[课堂训练7-2]
修改案例7-3的主函数,使之显示一个与案例7-3 形状相似的倒三角“*”号图案(要求显示4行)。
14
7.2函数的定义、声明和调用
相关知识: 1.有参、有返回值函数的定义 2.有参、有返回值函数的调用 3.无参、有返回值函数的调用
15
7.2函数的定义、声明和调用
案例7-5
显示100~200间的素数
[案例任务]
参照案例5-9判断素数程序,将其改造成一个函数如 prime,其功能是对给定的整数x,判断它是否是素数,如 是则返回1,不是则返回0。然后利用下面给出的主函数 调用函数prime ,显示100至200之间的全部素数。
[解决方案] 设计一个函数用于判断一个整数是
案例7-2 用函数实现简易菜单 [案例任务]
对案例5-3进行简化和改造。要求循环显示菜单并等 待用户选择,然后显示用户选择了第几项功能,如选 择0则结束程序。要求用函数实现菜单的显示内容。
[解决方案]定义无形参、无返回值的函数显示菜单。
程序代码

C语言第7章 函数

C语言第7章 函数

函数的 参数?
int main() {
int a=12, b=24; … printf("%d\n", Average(a, b)); … return 0; }
int Average(int x, int y) {
int result;
result = (x + y) / 2;
return result; }
C语言程序设计
22/114
7.3.1 函数调用
每次执行函数调用时
现场保护并为函数的内部变量(包括形参)分配内存 把实参值复制给形参,单向传值(实参形参) 实参与形参数目一致,类型匹配(否则类型自动转换)
int main()
{

int a=12, b=24,ave;

ave = Average(a, b);
21
1*2
3 (1*2)
(1*2)*3
}
4 (1*2*3)
(1*2*3)*4
return result;
……

}
n (1*2*3*4*…)
(1*2*3*4*…)*n
C语言程序设计
监视窗(Watches)
26/114
7.3.2函数原型
第7章 函数
函数原型(Function Prototype)
调用函数前先声明返回值类型、函数名和形参类型
Function Call?
int main() {
int a=12, b=24, ave; … ave = Average(a, b); … return 0; }
int Average(int x, int y) {
int result;

(完整版)答案第七章函数..

(完整版)答案第七章函数..

(完整版)答案第七章函数..第七章函数一、选择题1.以下函数声明正确的是: C 。

(02~03第一学期试题)A) double fun(int x, int y) B) double fun(int x; int y)C) double fun(int x, int y) ; D) double fun(int x , y)2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。

(0级)A)地址传递;B)单向值传递;C)双向值传递;D)由用户指定传递方式3.以下关于C语言程序中函数的说法正确的是: B 。

(0级)A)函数的定义可以嵌套,但函数的调用不可以嵌套;B)函数的定义不可以嵌套,但函数的调用可以嵌套;C)函数的定义和调用均不可以嵌套;D)函数的定义和点用都可以嵌套。

4.以下正确的函数形式是: D 。

(1级)A)double fun(int x,int y) B)fun (int x,y){z=x+y;return z;} {int z;return z;}C)fun(x,y) D)double fun(int x,int y){int x,y ; double z; {double z;z=x+y; return z;} z=x+y; return z;}5.以下说法不正确的是: B 。

(1级)C 语言规定A)实参可以是常量、变量或表达式B)形参可以是常量、变量或表达式C)实参可以是任意类型D)形参应与其对应的实参类型一致6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。

(0级)A) float型B) int 型C)long 型D)double 型7.以下错误的描述是 D 。

(0级)函数调用可以A)出现在执行语句中B)出现在一个表达式中C)做为一个函数的实参D)做为一个函数的形参8.若用数组名作为函数调用的实参,传递给形参的是 A 。

(0级)A)数组的首地址B)数组第一个元素的值C)数组中全部元素的值D)数组元素的个数9.以下正确的说法是 A 。

c语言第七章PPT课件

c语言第七章PPT课件

{ float z;
z=x+y;
return (z);
共 71 页 第 21 页
}
第21页/共70页
3. 函数声明和函数定义的区别
函数声明的作用是把函数的名字、函数类型以 及形参的类型、个数和顺序通知编译系统,以便在调 用该函数时系统按此进行对照检查。
函数定义是指对函数功能的确立,包括指定函 数名、函数值类型、形参及其类型、函数体等,它是 一个完整的、独立的函数单位。
[例7-2]
}
形参变量的说明
(现代形式) int max ( x, y)
int max (int x,int y) { int z; z=x>y?x : y; return z; }
int x,y; { int z;
形参变量的说明 (传统形式)
z=x>y?x : y;
return z;
}
共 71 页 第 7 页
用户定义函数: 形式
无参函数 有参函数 空函数
共 71 页 第 2 页
第2页/共70页
函数示例
[7-1] 输入三个整数,计算它们的和并输出运算结果。
main( )
{ int a, b, c, sum ;
scanf("%d,%d,%d",&a,&b,&c);
sum=add(a,b,c); printf(" sum= %d\n",sum); }
}
形参:通知系统 要预留内存位置.
把函数的 结果赋给函数名
实参:在运行时把 值传给函数.
共 71 页 第 14 页
第14页/共70页
数据在函数间的传递
main()

计算机二级c语言第七章 函数习题

计算机二级c语言第七章 函数习题

第七章函数一、选择题1、以下关于函数的叙述中正确的是A)每个函数都可以被其它函数调用(包括main函数)B)每个函数都可以被单独编译C)每个函数都可以单独运行D)在一个函数内部可以定义另一个函数2、设函数fun的定义形式为void fun(char ch,float x) { … }则以下对函数fun的调用语句中,正确的是A)fun("abc",3.0); B)t=fun('D',16.5);C)fun('65',2.8); D)fun(32,32);3、有以下程序int f1(int x,int y){return x>y?x:y;}int f2(int x,int y){return x>y?y:x;}main(){ int a=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d));f=f1(f2(a,b),f2(c,d));g=a+b+c+d-e-f;printf("%d,%d,%d\n",e,f,g); }程序运行后的输出结果是A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,74、有以下程序#define P 3#define F(int x) { return (P*x*x);}main(){ printf("%d\n",F(3+5));}程序运行后的输出结果是A)192 B)29 C)25 D)编译出错5、若程序中定义了以下函数double myadd(double a,double B){ return(a+B);}并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是A)double myadd(double a,B); B)double myadd(double,double);C)double myadd(double b,double A); D)double myadd(double x,double y);6、有以下程序char fun(char x ,char y){ if(x < y) return x;return y;}main(){ int a=’9’,b=’8’,c=’7’;printf("%c\n",fun(fun(a,b),fun(b,c))); }程序的执行结果是A)函数调用出错 B)8 C)9 D)77、有以下程序void f(int v,int w){ int t;t=v;v=w;w=t;}main(){ int x=1,y=3,z=2;if(x>y) f(x,y);else if(y>z) f(y,z);else f(x,z);printf("%d,%d,%d\n",x,y,z);}执行后输出结果是A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,18、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是A) 调用可以作为独立的语句存在 B) 调用可以作为一个函数的实参C) 调用可以出现在表达式中 D) 调用可以作为一个函数的形参9、有以下函数定义:void fun(int n,double x) { …… }若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是A)fun(int y,double m); B) k=fun(10,12.5);C)fun(x,n); D) vold fun(n,x);10、有以下程序fun(int a,int b){ if(a>b) return(a);else return(b);}main(){ int x=3,y=8,z=6,r;r=fun(fun(x,y),2*z);printf("%d\n",r);}程序运行后的输出结果是A) 3 B) 6 C) 8 D) 1211、在一个C程序中A) main函数必须出现在所有函数之前 B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后 D) main函数必须出现在固定位置12、有以下程序int f1(int x,int y){ return x>y?x:y; }int f2(int x,int y){ return x>y?y:x; }main(){ int a=4,b=3,c=5,d,e,f;d=f1(a,b); d=f1(d,c);e=f2(a,b); e=f2(e,c);f=a+b+c-d-e;printf("%d,%d,%d\n",d,f,e);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 3,5,413、有如下程序void f(int x,int y){ int t;if(x < y){ t=x; x=y; y=t; }}main(){ int a=4,b=3,c=5;f(a,b); f(a,c); f(b,c);printf("%d,%d,%d\n",a,b,c);}执行后输出结果是A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,514、C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是A) void B) int C) float D) double15、有以下程序float fun(int x,int y){ return(x+y); }main(){ int a=2,b=5,c=8;printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序运行后的输出结果是A) 编译出错 B) 9 C) 21 D) 9.016、若有以下程序#includevoid f(int n);main(){ void f(int n);f(5);}void f(int n){ printf("%d\n",n); }则以下叙述中不正确的是A)若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数fB)若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数fC)对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明D)函数f无返回值,所以可用void将其类型定义为无值型17、以下函数值的类型是fun(float x){ float y;y= 3*x-4;return y;}A)int B)不确定 C)void D)float18、以下所列的各函数首部中,正确的是A)void play(var :Integer,var b:Integer)B)void play(int a,b)C)void play(int a,int b)D)Sub play(a as integer,b as integer)19、以下程序的输出结果是fun(int x, int y, int z){ z=x*x+y*y; }main(){ int a=31;fun(5,2,a);printf("%d",a);}A)0 B)29 C)31 D)无定值20、有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是A) 3 B) 4 C) 5 D) 有语法错21、有如下程序int func(int a,int b){ return(a+b);}main(){ int x=2,y=5,z=8,r;r=func(func(x,y),z);printf("%d\n",r);}该程序的输出的结果是A) 12 B) 13 C) 14 D) 1522、以下叙述中不正确的是A)在不同的函数中可以使用相同名字的变量B)函数中的形式参数是局部变量C)在一个函数内定义的变量只在本函数范围内有效D)在一个函数内的复合语句中定义的变量在本函数范围内有效23、有以下程序void fun (int a,int b,int c){ a=456; b=567; c=678;}main(){ int x=10, y=20,z=30;fun(x,y,z);printf("%d,%d,%d \n",z,y,x);}输出结果是A)30,20,10 B)10,20,30 C) 456,567,678 D) 678,567,45624、有以下程序#include "stdio.h"int abc(int u,intv);main(){ int a=24,b=16,c;c=abc(a,b);printf("%d\n",c);}int abc(int u,int v){ int w;while(v){ w=u%v; u=v; v=w }return u;}输出结果是A)6 B)7 C)8 D)925、以下说法中正确的是A)C语言程序总是从第一个的函数开始执行B)在C语言程序中,要调用的函数必须在main()函数中定义C)C语言程序总是从main()函数开始执行D)C语言程序中的main()函数必须放在程序的开始部分26、请读程序:#includefunc( int a, int b){ int c;c=a+b;return c;}main(){ int x=6,y=7,z=8,r;r=func((x--,y++,x+y),z--);printf("%d\n",r);}上面程序的输出结果是A)11 B)20 C)21 D)31二、填空题1、有以下程序int sub(int n) {return(n/10+n%10); }main(){ int x,y;scanf("%d",&x);y=sub(sub(sub(x)));printf("%d\n",y);}若运行时输入:1234<回车>,程序的输出结果是。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第七章函数
一、选择题
1.【B】
分析:函数返回值的隐含类型是整型。

2.【B】
分析:main函数可以在任何地方出现。

它是程序的入口。

3.【D】
分析:函数的调用有一个返回值或者实现一定的功能,因此可以作为独立的语句存在,也可以出现在表达式中,可以作为一个函数的实参(返回值是一个实际的值)。

4.【B】
分析:实参与形参之间的数据传递,只能是实参传给形参,单向传递。

5.【B】
分析:任何函数(除了main函数)的使用通过调用实现。

普能的函数都能被单独编译(一定要能过调用才能运行),不能在一个函数中嵌套定义另一个函数。

6.【CD】
分析:C选项程序就是由若干个函数组成,无论是否有其他函数,主函数一定得存在。

每个程序都必须有且仅有一个主函数,但不是每个程序文件都必须有main()函数。

因为一个程序可能包含多个程序文件。

函数不能嵌套定义。

7.【D】
分析:函数调用时实参必须与形参在个数,类型,顺序上相同。

A选项中的"abc"是字符串,所以错误。

C选项中'65'本身就是错误的。

函数的返回值为空,不能用于赋值运算,所以B选项错误。

D选项的第二个32在传给形参时可以转换为实型,正确。

8.【A】
分析:实参都是用逗号隔开,第二个实参是个加法表达式,第三个实参是个逗号表达式。

9.【C】
分析:fl函数功能返回较大的值,f2函数的功能返回较小的值。

f1(a,b)返回为4,f2(a,b)返回为3。

10.【C】
分析:void *fun();的含义是fun函数的返回值是无值型的指针类型。

11.【C】
分析:函数在调用时不会出现类型说明符,所以A,D错误。

函数的返回值为空,不能用于赋值运算,所以B选项错误。

12.【D】
分析:fun函数的功能选择两个数中较大的一个作为返回值。

x为3,y为8,z为6以实参传到形参中,所以fun(fun(x,y), 2*z)等价于fun(fun(3,8), 2*6)等价于fun(8, 12),最后r被赋12。

答案选D。

13.【B】
分析:fun函数功能返回两个数之和。

此题就是函数调用作为函数实参。

a为2,b为5,c 为8传到fun((int)fun(a+c,b),a-c))中那么它等价于fun(15,-6)。

所以答案选B。

14.【C】
分析:此题关键的一点就是实参与形参数据是单向传递的,a为31以实参传到函数中或者说传到形参z中,而函数体z=x*x+y*y会使z发生改变,形参改变了,但是实参是不
会改变的。

所以请大家记好实参是永远不会改变的。

所以a还是31。

15.【D】
分析:同12,13题。

16.【C】
分析:此题是复杂的函数调用,fun2中调用了fun1。

fun1的功能是求一个数的平方。

将实参1.1和2.0传到fun2的形参,然后进行计算。

注意返回值被强制转换为整型了,所以答案选C。

17.【D】
分析:A选项f的初值不能为0。

B,C选项for循环有误,死循环。

18.【A】
分析:函数声明时形参的类型说明符一定不能省。

形参名可以省,也可以和定义的不同。

19.【C】
分析:声明既可以在主函数内也可以在主函数外,同时声明不会出错。

20.【D】
分析:a,b,c是实参传给形参的,是不会改变的。

21.【A】
分析:函数的返回值如果缺省默认为整型。

22.【A】
分析:函数一定要先定义后调用,如B选项,或者先声明再调用最后定义,如C,D选项。

23.【C】
分析:同20题。

24.【C】
分析:函数定义时,形参类型一定不能省。

25.【C】
分析:此题涉及到后面的知识,请学有余力的同学自己完成。

26.【B】
分析:同25题。

二、填空题
1.4334
分析:同选择题14,20题。

2.i<10 j%3 !=0
分析:j=i*10+6;从这条语句可以看出i从1变化到9可以选出100以内个位数为6的所有整数。

所以第一空填入i<10。

第二空填入j%3 !=0,用来判断是否能被3整除。

3.return 0 return 1
分析:从函数的首部看,返回值类型int,函数名isprime,形参为int类型,形参名字为a。

接下来定义一个int类型的变量i,后面语句部分是判定素数。

我们知道,判断一个整数是不是素数,就看除了1和它本身外,还有没有能被它整除的整数。

当i从2开始一直到a/2,一旦有一个i能被a整除,那么a就不是素数,返回0。

所以if条件后面应该填写return 0。

如果整个for循环结束了if的条件都为假,即表示没有哪一个i能被a 整除,a必为素数,需要返回1。

因此后面的空应该填写return 1 。

注意,执行了return 语句后就会退出函数,不会再执行后面的语句。

4.t*10
分析:从1+12+123+1234+12345可以看出个位数,刚好是i的各个值。

后一个数都是都是前一个数乘10然后加个数。

5.a=1.0,b=1.0,s=1.0;
分析:此题给a,b,s赋初值,思路同上题。

注意a,b,s是实型的。

6.m=fun(a,4)+fun(b,4)-fun(a+b,3);
分析:对fun(x,n)函数的分析可以看出其功能是求x n,所以fun(a,4)就是a4,fun(b,4)就是b4,fun(a+b,3)就是(a+b)3。

7.x x*x+1
分析:题目要求求f(x)的累加和,s+=F( );这条语句就是完成累加功能,所以是调用函数。

填入x。

然后f(x)=x2+1,所以返回值填x*x+1。

8.-f fun(10)
分析:从1-2+3-4+ … +9-10可以看出是正负号交替出现的。

f就是1和-1交替。

所以第一空填-f。

然后是从1运算到10,所以函数调用时,实参传入10,填入fun(10)。

9.9
分析:函数返回为(y-x)*x,所以f(3,4)为3,f(3,5)为6,f(f(3,4),f(3,5))等价于f(3,6)为9。

相关文档
最新文档