大学计算机程序设计基础(C语言)第6章-函数
c语言讲义第06章
![c语言讲义第06章](https://img.taocdn.com/s3/m/f9274fd76f1aff00bed51e44.png)
return r*r;
{ long c=1;
int i; for(i=1;i<=q;i++)
c=c*i;
return c; }
2、函数的递归
1)递归:就是一个函数在它的函数体内
调用它自身称为递归调用,递归调用可 以简化程序设计。 2)函数递归调用:分成直接或间接地调 用函数本身。
注意:递归调用时为了防止递归调用无 休止地进行,必须在函数内有终止递归 调用的手段。常用的办法是加条件判断,
个语句;
l 在执行完所有语句或遇到 return 语句时,返回
到主调函数中原来的调用处继续执行主调函数。
函数调用实质上就是把执行控制权传递 给被调函数,把实参(若存在)的值按照 位置关系传递给被调函数的形参,然后 执行被调函数的函数体。
使用说明:
① 实际参数与形式参数 实际参数:调用函数时括号内括起的是实际参数 形式参数:定义在函数的首部
调用结束时,即释放所分配的内存单元。
⑥形式参数和实际参数在各自的函数中有效。
【例6.3】 main() {int a,b; /*void swap(int c,int d);*/ scanf(“%d%d”,&a,&b); swap(a,b); } void swap(int c,int d) 3 {int t; 10 t=c;c=d;d=t; printf(“c=%d,d=%d”,c,d);}
Char change(int); Main() {….} Char change(int a)
{…. }
6.4
函数的参数
在调用函数时,大多数情况下,
主调函数和被调用函数之间通过函数 的参数进行数据传递。
传递的方式包括值传递和地址传递。
大学C语言程序设计 第六章
![大学C语言程序设计 第六章](https://img.taocdn.com/s3/m/a518efd1240c844769eaee85.png)
2.函数表达式: 2.函数表达式: 函数表达式
功能:将函数作为表达式的一部分。 功能:将函数作为表达式的一部分。 如: c=2*max(a,b); 要点:要求函数带回一个确定的值,以参加表达式的运算。 要点:要求函数带回一个确定的值,以参加表达式的运算。
3.一个函数作为另一个函数的参数: 3.一个函数作为另一个函数的参数: 一个函数作为另一个函数的参数
若不需要函数带回任何值,可使用: 若不需要函数带回任何值,可使用:
void printstar(){ …} } void print_message(){…} print_message(){ }
例exp6_5:函数返回值的类型与其定义的 exp6_5:函数返回值的类型与其定义的 类型不符的情况。 类型不符的情况。
一函数的定义重点二函数的调用重点1函数的一般调用2函数的嵌套调用3函数的递归调用三数组作为函数的参数难点四局部变量与全局变量难点五变量的存储类别难点六内部函数与外部函数1概述2函数定义的方法重点3函数的参数难点4函数的返回值难点1c程序的基本结构回顾2什么是函数
第六章
[教学要求] 教学要求]
函
数
1.理解函数的功能。 理解函数的功能。 2.掌握函数定义的一般形式(重点)。 掌握函数定义的一般形式(重点)。 掌握函数的形参与实参的对应关系、 3.掌握函数的形参与实参的对应关系、参数传递方法及函数返回值 的概念(难点) 的概念(难点) 。 掌握函数调用的基本方法(重点) 4.掌握函数调用的基本方法(重点) 。 掌握函数嵌套调用的一般过程(重点) 5.掌握函数嵌套调用的一般过程(重点) 。 了解函数递归调用的几种形式。 6.了解函数递归调用的几种形式。 掌握数组名作为函数的参数的一些特点(难点) 7.掌握数组名作为函数的参数的一些特点(难点) 。 8.掌握局部变量与全局变量的概念及它们的使用特点(难点) 。 掌握局部变量与全局变量的概念及它们的使用特点(难点) 掌握动态存储变量与静态存储变量的含义,会正确识别和使用。 9.掌握动态存储变量与静态存储变量的含义,会正确识别和使用。 10.了解内部函数与外部函数的含义。 10.了解内部函数与外部函数的含义。
C语言--第六章:函数--教学设计(修改)
![C语言--第六章:函数--教学设计(修改)](https://img.taocdn.com/s3/m/8e58becdd15abe23482f4de8.png)
《C语言程序设计》之----- “函数”教学设计贵州交通技师学院张红《C语言程序设计》之----- “函数”教学设计【教材】:教材:《C语言程序设计实训教程》,主编:康英健。
出版社:海军出版社。
中职中专教材。
【教学内容分析】:函数是C语言程序设计中非常重要的一个知识点。
是学生从杂乱的程序中重新整理排版的思维。
在以后的工作中广泛使用,学生在以后的程序设计中,都需要把相对独立的功能独立出来。
实现“低耦合,高内聚”的效果。
所以函数是程序设计思想的一个升华,也是一个重点和难点。
学生需要学好函数的知识,才能更好的学后续的专业课程。
【学生情况分析】:中职学生整体来说学习基础较差,自主学习的能力也欠缺。
特别对学科专业基础的理论知识体系明显处于劣势,在学习方面多经挫折,信心不足,缺乏学习的积极性。
在理解逻辑思维方面难度较大。
所以在讲解这节知识的过程中,我通过故事的形式导入,让学生理解函数真正的含义。
【教学目标】:本次课需要学生了解什么是函数。
通过本节教学,提升学生的自学能力,增强学生的自信心,并能在平时的编程工作中灵活的运用函数的知识来解决具体的问题。
1、知识目标①了解简单函数的概念②知道函数的分类③掌握函数的定义方法④知道函数参数及返回值2、能力目标:①通过教师的讲解,让学生能以此类推,灵活的使用函数的方法编程。
②在教师的指导下,对认识不到位的知识点进行加深理解。
3、情感目标:①通过“函数”的学习,渗透分工意识;②通过“函数”的学习,加深大家对繁琐问题简单化的直接运用理念。
③通过该知识点的学习,增强学生处理工作简化事项的自信心和面对挫折并敢于解决的勇气。
【教学重点】:掌握函数的定义方法。
【教学难点】:了解函数的简单概念,怎样抽象出具体的独立的函数。
【教学方法】:在教学过程中先通过故事情景引出问题,然后讨论解决问题的方法,引出本节课的主要教学内容。
在教学过程中主要采取启发式教学法和任务驱动法相结合,同时进行实例的演示和小组讨论,以完成任务为主线、以学生为主体,调动学生的学习积极性,促使学生积极探究、互助学习。
c语言《程序设计基础》课后习题参考答案与解析
![c语言《程序设计基础》课后习题参考答案与解析](https://img.taocdn.com/s3/m/abfc4e8e453610661fd9f47a.png)
c语言《程序设计基础》课后习题参考答案与解析《程序设计基础》习题参考答案与部分解析第1章 C 语言概述一、填空a) C源程序的基本单位是函数。
b) 一个C程序中至少应包括一个 main函数。
c) 在C语言中,输出操作是有库函数 printf( )函数完成。
二、单选题1、A2、C3、B解析:第1题答案:A 。
因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。
且到main函数结束。
第2题答案:C 。
因为 main函数没有限制必须位于程序的最前面。
C程序书写自由,一行内可写几个语句。
在对一个C 程序进行编译的过程中,无法检查注释当中的拼写错误。
不过C语言本身并没有输入输出语句,输入输出是由函数完成的。
第3题答案:B。
因为一个C语言程序是由若干个函数组成的。
但至少包含一个main 函数,且main函数的位置不限。
三、编程题1、编写一个输出“Welcome to C!”信息的小程序。
解:程序如下#include “stdio.h”main( ){1printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。
海伦公式为:S?= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。
*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。
*/printf(“area=%f\n”,s1);}2第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A 16、B 17 D解析:1. 答案:C。
C语言程序设计(第3版)第6章习题参考答案
![C语言程序设计(第3版)第6章习题参考答案](https://img.taocdn.com/s3/m/cfd17dfed15abe23482f4d72.png)
gets(stridiom1);
printf("\nplease input the second idiom: ");
gets(stridiom2);
fnConcat(stridiom1,stridiom2);
printf("\nthe result is: %s",stridiom1)=0;
while(b[j] != '\0') /*把第二个字符串的内容连接到第一个字符串的后面*/
{
a[i+j] = b[j];
j++;
}
a[i+j]= '\0'; /*添加字符串结束符*/
}
void main()
{ char stridiom1[80],stridiom2[80];
i++;
}
a[j]= '\0'; /*添加字符串结束符*/
}
void main()
{ char stridiom1[80];
printf("\nplease input the first idiom: ");
gets(stridiom1);
fnConvert(stridiom1);
printf("\nthe result is: %s",stridiom1);
scanf("%d",&n);
printf("%ld",fnF(n));
getch();
}
(4)编一函数判别某一数是否为素数,若是,返回值为1,否则,返回值为0。
第6章C语言
![第6章C语言](https://img.taocdn.com/s3/m/2d135e355a8102d276a22f7e.png)
float
*point;
定义了一个指向浮点型数据的指针变量point,即point是一个 用于存放浮点型变量地址的变量。
6.1.2 指针变量的定义与初始化
在此定义中,基类型声明了该指针变量所指向的 实体的类型。如:一个指向float类型的指针变量,它 的基类型应该为float型;一个指向int类型的指针变 量,它的基类型应该为int型。“*”是一个标识,用 以说明该变量是一个具有指针类型的变量。对于指针 变量的变量名的命名也应该尽量做到“见名知义”。 需要注意的是,指针变量名为“point”,而非 “*point”。
第6章
指针
山东大学电气工程学院
第6章Байду номын сангаас指针
指针是C语言中一个非常重要的概念,它对于变量的引用、数组 的处理、字符串的操作、函数参数的调用及函数间数据的处理、 结构体的应用和文件的操作等等都起着相当重要的作用。正确的 运用指针不仅可以提高程序的执行效率,简化操作过程,而且可 以处理复杂的数据操作,实现动态的数据结构,完成形式多样的 参数传递以及灵活的修改形参与实参的数值。但是需要警惕的是, 因为指针的运用如此的灵活,以至于经常会出现一些意想不到的 错误和结果。甚至在某些情况下,错误的运用指针,会使程序受 到非常严重的破坏。因此可以说,正确的理解和运用指针是衡量 能否成功的编写高质量C程序的标准。
6.1.3 与指针有关的运算符
在C语言中有三个与指针有关的运算符: 1、“&”运算符 此运算符称为取地址运算符。通过取地址运算符“&”可以获得 一个变量的地址。“&”为单目运算符,运算方向为从右向左结合, 直接作用于一个变量前,表示该变量的地址。 例如: int x=10,*p1;
C语言教案:第6章--函数
![C语言教案:第6章--函数](https://img.taocdn.com/s3/m/6a16eec39fc3d5bbfd0a79563c1ec5da50e2d648.png)
24
第24页,共55页。
如:
#define R 3.0
#define PI 3.1415
#define L 2*PI*R
二、带参数的宏定义(类函数宏)
#define 宏名(参数表) 字符串
例1: #define S(a,b) a*b
area=S(3,2);
展开为:area=3*2;
2022/1/24
}
f()
{int a=20;
printf("f ():a=%d\n",a);
}
2022/1/24
30
第30页,共55页。
(3)可以在复合语句中定义局部变量。
如: main() {int x=10; {int x=100; printf("1:x=%d\n",x); } printf("2:x=%d\n",x); }
a=10
swap(a,b);
b=15
printf("a=%d\nb=%d\n",a,b);
}
swap(int x,int y)
{int t; t=x;x=y;y=t; /*交换x和y的值*/ }
2022/1/24
结果:
a= 10 b= 15
9
第9页,共55页。
2、数组元素作函数参数 例: 用数组元素作实参,输出1 ~ 5的平方。
(4)局部变量分为动态存储类别和静态存储方式。
2022/1/24
31
第31页,共55页。
2、全局变量
全局变量: 在函数之外定义的变量。
有效范围: 从定义位置开始到本源程序结束
如: int a,b;
main() {
第6章C语言程序设计
![第6章C语言程序设计](https://img.taocdn.com/s3/m/2bb4e1f3f90f76c661371a64.png)
6.2函数
C语言中又规定在以下几种情况时可以省去主调函数中对 被调函数的函数说明。
本章目录
6.1函数分类 6.2函数
6.3 函数调用
6.4函数和数组 6.5变量的作用域 6.6变量的存储类别 6.7内部函数和外部函数
6.1函数分类 C语言中可从不同的角度对函数分类。
1. 从函数定义的角度,函数分为库函数和用户定义函数。
(1)库函数 由C系统提供,用户无须定义, 不必在程序中作类型说 明,需在程序前包含有该函数原型的头文件即可在程序中直接 调 用。如printf()、scanf()、getchar()、putchar ()等函数 均属库函数。 (2)用户定义函数 由用户按需要写的函数。用户自定义的函数在主调函数中对其 进行类型说明。
6.2函数
例6.2比较两个小朋友的个子,输出个子较高的。 float max(float a,float b) { if(a>b)return a; else return b; } void main() { float x,y,z; printf("input two numbers:\n"); scanf("%f,%f",&x,&y); z=max(x,y); printf("max=%f\n",z);
改例6.2如下:
6.2函数
main() { float max(float a,float b); float x,y,z; printf("input two numbers:\n"); scanf("%f,%f",&x,&y); z=max(x,y); printf("max=%f\n",z); } float max(float a,float b) { if(a>b)return a; else return b; }
C语言程序设计教案第6章21-24
![C语言程序设计教案第6章21-24](https://img.taocdn.com/s3/m/2b63e94df4335a8102d276a20029bd64783e6229.png)
【问题】两种排序算法哪一种排序效率更高,高在什么地方?
6.2嵌套与递归设计与应用(0.5学时)
教学内容
(1)函数的嵌套。
(2)函数的递归设计与应用。
讲解思路
(1)函数的嵌套
二维数组作为函数参数:用实例来说明数组传递数据的重要作用。
【实践】编写程序实现(1)中的例题。
5.4模块化设计中程序代码的访问和应用实例(1学时)
教学内容
(1)模块化设计中程序代码的访问。
(2)应用实例。
讲解思路
(1)模块化设计中程序代码的访问举例说明用指针可以访问程序代码。
(2)应用实例。
计算器增加一个连续相加的功能。
(3)教师程序编写:让学生观摩程序的编写、运行及产生结果的过程,与知识点一一对应,加深理解。
(4)学生用手机C语言模拟器编写程序:题目与例题类似,但小有变化,让学生在设计中的错误。
(5)问答:就一些知识点的变化与学生进行问答互动。
(6)就(4)和(5)中同学们的表现给出部分平时分,为了鼓励同学们的参与积极性,答对者加2-3分。
(3)掌握模块间批量数据传递的方法,提高综合应用程序设计的能力。
重点:简单的排序算法、嵌套与递归设计与应用、模块间的批量数据传递。
难点:递归调用、学生成绩管理综合用例。
教学方法及手段
(1)课件:根据本节课程设计的内容及计划安,逐步展现知识点。
(2)板书:针对学生在学习和练习过程中出现的问题,进行补充讲解。调节课堂节奏,给学生思考的时间。
模块化设计中程序代码的访问
应用实例
《C语言程序设计》第六章函数
![《C语言程序设计》第六章函数](https://img.taocdn.com/s3/m/afe385770a4c2e3f5727a5e9856a561253d3216c.png)
《C语言程序设计》第六章函数函数是C语言中的一个重要概念,可以将一段程序逻辑封装成一个独立的代码块,供其他地方调用。
在本章中,我们将讨论函数的定义、声明、调用、形参和实参等相关内容。
1.函数定义和声明函数定义是指给函数取一个名字,并在花括号{}内编写函数的代码实现。
一个函数的定义一般包括函数的返回类型、函数名、形参列表和函数体。
例:int add(int a, int b)return a + b;}函数声明是指告诉编译器函数的存在,但不实现函数的具体代码。
函数声明一般包括函数的返回类型、函数名和形参列表。
例:int add(int a, int b);2.函数调用函数调用是指在程序中使用函数,让函数执行具体的逻辑。
函数调用的一般形式为:函数名(实参列表);实参列表是指函数调用时实际传递给形参的参数值。
例:int sum = add(1, 2);3.形参和实参形参是函数定义中用于接收调用函数时传递过来的参数值的变量。
函数调用时,传递给函数的参数值称为实参。
形参和实参在数量、类型、顺序上必须保持一致。
例:int add(int a, int b)return a + b;}int sum = add(1, 2); // 形参a接收到实参1,形参b接收到实参24.函数的返回值类型函数的返回值类型定义了函数的返回结果的类型。
函数可以有不同的返回值类型,如整型、浮点型、字符型、指针等。
返回值类型通过函数的声明或定义来指定。
例:int add(int a, int b) // 返回类型为int(整型)return a + b;}5.无返回值函数和有返回值函数无返回值函数指在函数定义或声明时,返回值类型为void。
这种函数通常用于执行一些操作,没有返回结果。
有返回值函数指在函数定义或声明时,返回值类型为非void类型。
这种函数通常用于计算并返回一个结果。
例:void printHello( // 无返回值函数printf("Hello!");}int add(int a, int b) // 有返回值函数return a + b;}6.函数的嵌套调用在一个函数中调用另一个函数,称为函数的嵌套调用。
C语言( 函数) ppt课件
![C语言( 函数) ppt课件](https://img.taocdn.com/s3/m/2c8e91f208a1284ac850438b.png)
11 ppt课件
#include<stdio.h> //构成逆序数的函数 int reverseNum(int x) // x 是正整数 {
int r=0; while(x>0) {
r = r*10 + x%10; x = x/10; } return r; }
#include<stdio.h>
#include<math.h>
void process(double array[ ], int n)//数组名作函数形参
{
int i;
for(i=0; i<n; i++) {
if(array[i]>=36) array[i]=sqrt( array[i] )*10;
printf("%d", a[i]);//数组元素作为函数实参
}
return 0;
p}pt课件
19
例5:有一个一维数组a,内放10个整数,分别输出这十 个数的平方。
#include<stdio.h> int square(int n) {
return n*n; } int main() {
int a[10], i, j; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%5d",square(a[i])); return 0; }
int isSymmetric(int n) //n为回文数返回1,否返回0 {
C程序设计第6章
![C程序设计第6章](https://img.taocdn.com/s3/m/ad51f34e33687e21af45a922.png)
6.1 一维数组 6.2 二维数组 6.3 字符数组 6.4 程序举例6.1 一维数组6.1.1 一维数组的定义和引用一维数组的定义方式为 类型标识符数组名[常量表达式];main() {float s1, s2, s3, s4, s5; printf("Enter five scores: "); scanf("%f , %f , %f, %f, %f", &s1, &s2, &s3, &s4, &s5); printf("\nThe score in reverse order are: "); printf("%f\n", s5); printf("%f\n", s4); printf("%f\n", s3); printf("%f\n", s2); printf("%f\n", s1); }(1)表示数组长度的常量表达式,必须是正的整型常量表达式。
(2)相同类型的数组、变量可以在一个类型说明符下一起说明,互相之间用逗号隔开。
例如,int a[5], b[10], i;(3)C语言不允许定义动态数组,即数组的长度不能依赖于程序运行过程中变化着的量,下面这种数组定义方式是不允许的。
int i; scanf("%d", &i); int a[i];main() {int i; float score[5]; printf("Enter five scores: "); for (i=0; i<5; i++) scanf("%f", &score[i]); printf("\nThe scores in reverse order are: "); for (i=4; i>=0; i--) printf("%4.2f\n", score[i]); } 6.1.2 一维数组的初始化 可以在程序运行后用赋值语句或输入语句使数组中的元素得到值,也可以使数组在程序运行之前(即编译阶段)就得到初值,后者称为数组的初始化。
第6章 函数与预处理
![第6章 函数与预处理](https://img.taocdn.com/s3/m/3de24bf402d276a201292e43.png)
C语言程序设计案例教程
大连理工大学出版社
6.1 函数应用实例
6.1.4 函数的分类
从函数使用的角度看,函数可分为库函数和用户定义函 数两种。
{ void printstart();
/*对printstart()函数进行声明*/
void menu();
/*对 menu()函数进行声明*/
printstart();
/*调用printstart()函数*/
menu();
/*调用 menu()函数*/
printstart();
/*调用printstart()函数*/
(1)函数的参数传递 (2)递归调用 (3)变量的作用域和存储特性
C语言程序设计案例教程
大连理工大学出版社
6.1 函数应用实例
6.1.1 模块化设计
程序员在设计一个复杂的应用程序时,往往将整个程序 划分为若干个功能较为单一的程序模块,然后分别予以实现, 最后将所有的程序模块像积木一样装配起来,这种在程序设计 中逐步分解、分而治之的的方法,称之为模块化程序设计。
(1)库函数:由编译系统提供的已设计好的函数,用 户只需调用而无须实现它,在编译 C程序时,应尽可能的使 用库函数。这样可以提高编程效率和编程的质量。在前面各章 的例题中反复用到的printf、scanf、getchar、putchar、 gets、puts、strcat等函数均属于库函数。
C语言程序设计案例教程
return z;
}
第06章C语言程序设计教程电子教案
![第06章C语言程序设计教程电子教案](https://img.taocdn.com/s3/m/defb750e52ea551810a687e0.png)
3.可以把2维数组看作是一种特殊的1维数组:它 的元素又是一个1维数 8 | |0 0 | a | 3 4 | + b | 9 10 | = c | 0 0 | |5 6| |11 12| |0 0 | main() //ex60_4.c {static int a[3][2] = {{1,2}, {3,4}, {5,6}}; static int b[3][2] = {{7,8}, {9,10},{11,12}}; static int c[3][2] = {0}; int i, j, k; for(i = 0; i < 3; i++) for(j = 0; j < 2; j++) c[i][j] += a[i][j] + b[i][j]; for(i = 0; i < 3; i++) {for(j = 0; j < 2; j++) printf ("%5d", c[i][j]); printf("\n"); } getchar(); } 8 10 12 14 16 18
运行结果: 123 456
演示
2维数组的定义方式如下:
数据类型 数组名[行常量表达式][列常量表达式][, 数组名2[行常量表达式2][列常量表达式2]……];
1.数组元素在内存中的排列顺序为“按行存放”,即 先顺序存放第一行的元素,再存放第二行,以此类推。
2. 设有一个m*n的数组x,则第i行第j列的元素x[i][j]在 数组中的位置为:i*n+j(注意:行号、列号均从0开始计 数)。
[Return]
6.2 2维数组的定义和引用
6.2.1 6.2.2 6.2.3 6.2.4 2维数组的定义 2维数组元素的引用 2维数组元素的初始化 2维数组应用举例
大学计算机基础第6章
![大学计算机基础第6章](https://img.taocdn.com/s3/m/7cb21148d1f34693dbef3e3b.png)
程序由两局部组成:说明局部和 执行局部。
说明局部主要包括程序名、参数 〔常量、变量〕及其参数类型的 说明;
执行局部是程序的主体,完成具 体的计算和处理任务。
printf("circle_area=%f", circle_area);
}
主要内容
计算机程序与 程序设计
程序设计语言
程序设计过程 及方法
算法基础
❖ 面向对象语言将客观事物看作具有属性和行为的对象,通过抽象找 出同类对象的共同属性和行为,形成类。通过类的继承与多态可以 很方便地实现代码重用,从而大大提高了程序的复用能力和程序开 发效率。面向对象的语言有C++、Java、Visual Basic等。
编译与解释
❖ 用高级语言编写的程序称为源程序,计算机不能直接识别和执行源程 序。在执行源程序前需要通过翻译成机器语言形式的目标程序,这种 “翻译〞通常有两种方式,即编译方式和解释方式。
高级程序设计语言的特征
表达式
❖ 表达式是程序中进展计算并取值的根本单位,它由常量、变量、函 数调用和运算符组成。通常表达式由假设干个运算符把一些运算对 象连接在一起。
❖ 例如,圆半径r,求圆面积的C语句如下:
s=PI*r*r;
其中,PI*r*r就是一个表达式,r和s都是变量,PI是符号常量。=是 赋值运算符。
按功能将该任务分解成4 个子任务,即 ① 输入子任务; ② 计算平均成绩子任务; ③ 降序排序子任务; ④ 输出子任务。
高级程序设计语言的特征
对象的作用域
❖ 对象的作用域是指变量使用的有效范围,它与定义对象的位置和过 程的构造有关。
例如
在C语言程序中,定义在函数内的变量称为局部变量,它的使 用范围只局限于定义它的函数体内,定义在函数外的变量称为 全局变量,它的使用范围是从定义该变量的地方开始生效。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
类型标识符 形参1,类型标识符 形参2,··· 若省略形式参数表,则称为无参函数。否则称为有参函数。 函数体:包含了说明语句和执行语句。当函数无函数体时,则
为空函数。
函数的返回值
2、函数的返回值
函数的返回值是通过return语句实现的。 格式:return(表达式);或 return 表达式; 语义:当函数执行到return语句时,程序的流程立即返回
long fac(int n) { int i; long k=1;
for(i=1;i<=n;i++) k*=i; return(k); }
main() { int m,n; long cmn;
printf("input m,n:"); scanf("%d%d",&m,&n); cmn=fac(m)/fac(n)/fac(m-n); printf("%ld\n",amn); }
函数声明
函数声明的一般形式: 类型标识符 被调函数的函数名([形式参数表]);
这种包含参数和返回值类型的函数声明称为函数原型。
注意: 主调函数中的函数声明只是声明了要调用的函数返回
值的类型以及形参的个数和类型,不是定义一个函数。 函数声明时指定的函数返回值类型必须与该函数定义
时所指定的类型一致。 在同一个文件中,如果被调函数位于主调函数之前,
数执行过程中遇到任何一个return语句时,都将立即返 回到调用该函数的地方。 ❖ 如果函数中没有return语句,程序的流程一直执行到函 数末尾的右花括号“}”处,然后返回到调用该函数的 地方。 ❖ 为了明确表示“不返回值”,可以用“void”定义“无类 型”(或称“空类型”)函数。 ❖ 如果需要从被调函数中带回一个确定的值,被调函数中 必须包含return 语句。
第6章 函数
本章内容
1 标准函数 2 函数的定义和返回值 3 函数的调用和声明 4 函数的参数 5 函数的嵌套调用和递归 6 变量的存储类别
函数
➢ 一个C语言源程序通常由一个主函数和若干个子函 数组成,各子函数之间的关系是平行的,因此不 能嵌套定义,但能相互调用。一个C语言源程序无 论包含了多少个函数,程序的执行总是从主函数 main()开始,并终止于主函数main()。
函数的声明
在一个函数中调用另一函数(即被调函数)必须具 备以下三个条件:
被调函数必须是已经存在的函数(标准函数或用户 自定义函数)。
如果调用的是标准函数,应该用预处理命令 #include 将该函数对应的头文件包含进来。
如果调用用户自定义函数,可能需要对被调用函数 返回值的类型以及形参的个数和类型作声明。
注意:在函数调用期间,实参和形参对应不同的内存单元,所 以在被调函数中形参的改变不会影响到主调函数的实参,这是 一种“单向传值”调用。
参数举例
#include “stdio.h” int ab(int d) {
if (d<0) d=-d; return(d); }
输入 -5 结果 –5 5
main ( ) { int a, b; scanf (“%d” ,&b); a=ab(b); printf (“%d %d”,b,a); }
到调用该函数的地方(通常称为退出调用函数),并 通过return语句返回函数值。return语句中表达式的 值就是函数返回值。 注意:如果函数有返回值,这个值就应该有一个确定的数 据类型,所以在定义函数首部时应指定函数值的类型。
函数返回值
说明: ❖ 在同一个函数内可根据需要在多处设置return语句,函
/* 函数调用*/
printf (“%d\n”,c);
}
int max (int x,int y) /*函数定义*/
{
return (x>y ? x: y);
}
函数参数
形参:形参出现在函数的定义中,在整个函数体内可以使用, 离开该函数则不能使用; 形参必须是变量,在函数定义时必须进行类型说明; 函数调用时,形参被临时分配存储单元,调用结束后,形参所 占单元被释放。 实参:实参出现在主调函数中,在函数调用时,把实参的值传 递给形参,从而实现主调函数向被调函数的数据传递。 实参可以是常量和有确定值的变量、数组元素或表达式。
关于单向传值注意事项
关于单向传值调用归纳如下:
在被定义的函数中,必须指定形参的类型。 实参与形参应在位置、个数、类型上保持一致。 如果实参为整型而形参为实型,或者相反,则 发生“类型不匹配”的错误。但字符型与整型 可以互相通用。 C语言规定,实参变量对形参变量的数据传递 是“单向值传递”。即数据只能由实参传给形 参,而不能由形参传回给实参。
➢从用户使用的角度将函数分为两种:标准函数(库 函数)和用户自定义函数。
6.1 函数的定义和返回值
1、函数定义的一般形式:
[类型标识符] 函数名([形式参数表])
{ [函数体] }
函数名:由用户命名,命名规则与标识符命名规则相同。 类型标识符: 定义了函数返回值的数据类型。当函数的返回值
是整形或字符型,可省略类型标识符。当函数无
函数的嵌套调用
C语言函数的定义是平行的、独立的,不能嵌套 定义,但可以嵌套调用。也就是说,在调用一个 函数的过程中,被调函数又可以调用另一个函数。
例:
求C
3 9
Cmn
m! n!(m n)!
main( ) long cmn( int m int n ) ;
或者被调函数的返回值是int 型或char型时,则对被调 函数的声明可以省略。
函数举例
例: #include “stdio.h”
main ( )
{ int a, b,c;
ቤተ መጻሕፍቲ ባይዱ
int max (int x, int y); /* 函数说明*/
scanf (“%d %d”,&a,&b);
c=max (a,b);
函数调用格式
函数调用的一般形式:函数名([实参表]) 实参表:可以是常量、变量或表达式。其类型、顺 序和个数必须与函数定义时形参表的一致。对于 无参函数,则省略实参,但括号不能省略。函数 调用表达式可出现在主调函数的任何地方。
函数调用过程图解
函数举例
Cmn=m!/(n!*(m-n)!) 例:试编写一个C程序按下列公式求排列组合问题