计算机二级C++七.ppt_第1页
计算机二级C++七.ppt_第2页
计算机二级C++七.ppt_第3页
计算机二级C++七.ppt_第4页
计算机二级C++七.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章 函数,控制每行数据的个数 1.for(i=0;i10;i+) if(i%2=0) printf(“n”); printf(“%d”,x); 2. for(i=1;i=10;i+) printf(“%d”,x); if(i%2=0) printf(“n”); ,设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是 A) n=0;while(ch=getchar()!=”n”)n+; B) n=0;while(getchar()!=”n”)n+; C) for(n=0;getchar()!=”n”;n+); D) n=0;for(ch=getchar();ch!=”n”;n+);,#include main() int a1, a2; char c1, c2; scanf(“%d%c%d%c”, 通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为b,程序输出结果是:12,a,34,b则正确的输入格式是: A)12a34b B)12 a34 b C)12,a,34,b D)12 a34 b,例题:请输入二个整数,来判断二个数是奇数还是偶数,main() int a,b; printf(“请输入二个数来判断是奇数还是偶数:”); scanf(“%d%d”, ,void main() : x=x*x*x; y=y*y*y; z=z*z*z; ans1=x+y+z; a=a*a*a; b=b*b*b; c=c*c*c; ans2=a+b+c; : ,为什么使用函数,重复多次的同一计算类型,void main() : ans1=cube(x,y,z); ans2=cube(a,b,c); : ,int cube(int a,b,c) int ans; ans=(a*a*a)+(b*b*b)+(c*c*c); return ans; ,函数,主程序,ans,函数可以把相对独立的某个功能抽象出来,使之成为程序中的一个独立实体。可以在同一个程序或其他程序中多次重复使用,函数机制的优点,使程序变得更简短而清晰 有利于程序维护 可以提高程序开发的效率 提高了代码的重用性,函数类型,内置函数: 由语言系统提供; 用户无须定义,也不必在程序中作类型说明; 只需在程序前包含有该函数定义的头文件;,自定义函数: 用户在程序中根据需要而编写的函数;,内置函数rand示例,2,6,64,#include #include /#include void main() int i; printf(“产生 10 个 0 到 99 之间的随机数序列:nn“); /srand(unsigned)time(NULL); for(i=0; i10; i+) printf(“%d “, rand() % 100); printf(“n“); ,产生 10 个 0 到 99 之间的随机数序列: 44 73 26 58 37 94 27 42 28 90 Press any key to continue,演示:示例4,函数形参和实参,void main ( ) . . . . . . display ( 10, 20.5 ); display ( int num, float fraction ) . . . . . . ,实际参数 又叫实参,函数调用,形式参数 又叫形参,7.2函数定义,void displayDiscount() float price, discount_amt; printf(“请输入价格“); scanf(“%f, ,double max(double x, double y) double m; m=xy?x:y; return m; ,该函数名为displayDiscount,无参数,使用void说明无返回值,函数体内的语句用于根据产品的价格求折扣后的价格。,该函数名为max,它有两个double类型的参数,返回值为double类型。在函数体内有三条语句实现了求两个数中较大的数,并将它返回。,注意:函数返回值类型 函数名(类型名 形式参数),1.若没有声明函数类型,则默认为int类型 2.没有返回值,必须定义为void类型,有返回值,根据,函数中没 有return,函数中有return,但 return后没有表达式,返回值定义类型,int divisibleCheck(int num) if (num % 5 = 0) return 1; else return 0; ,C语言中的函数至多可以返回一个值,不能返回多个值; 返回值的数据类型必须与函数原型中返回值的数据类型匹配; 当遇到 return 语句时,函数执行将终止。程序控制流将立即返回调用函数;,函数返回值,C 语言中的 return 语句用于向调用函数返回值,语法如下: return ();,函数返回值示例,#include int get_age(); void main() int age1, age2, age3; age1 = get_age(); age2 = get_age(); age3 = get_age(); if ( (age1 age2) ,65,78,int get_age() int age; printf(“n请输入年龄: “); scanf(“%d“, ,请输入年龄:65,请输入年龄:78,请输入年龄:54,年龄为 78 岁的人最大,54,函数调用,7.3.1函数的两种调用方式 1)当调用的函数用于求出某个数值,即有返回值。 y=add(3.0,4.0); 2)仅进行某些操作而不返回函数值。 add(3.0,4.0);,通过在程序中使用函数名称,可以执行函数中包含的语句,这称为调用函数 函数之间允许相互调用,也允许嵌套调用 函数还可以自己调用自己,称为递归调用,#include float set_discount(int i,int j) float displayDiscount() void main() : y=set_discount(2,3); displayDiscount(); : : 说明:1.函数名必须与所调用的函数名称完全一致 2.实参与形参个数必须一致,且一一对应 3.必须先定义后调用,float set_discount(int i,int j) : : float displayDiscount() : : ,函数调用 语法要求,void reverse() : : ,#include void main() : palindrome(); : : ,void palindrome() : reverse(); : ,函数嵌套调用,从一个函数调用另一个函数称为函数的嵌套调用,函数说明,#include float count (int, int); void main() float count(2,3); . . . float count(int x,int y) . . . ,函数原型说明在形式上与函数头部类似,最后加一个分号。原型说明 中参数表里的参数名可以不写(只写参数类型)。 C语言规定:函数必须先定义,后调用(函数的返回值类型为int 除外)凡是未在调用前定义的函数(即未在调用前写函数原型),c编译 程序都默认函数的返回值为int型。对于返回值为其他类型的函数,若把 函数的定义放在调用之后,应该在调用之前对函数进行说明(即写函数 原型)。,#include float count(int x,int y) . . . void main() . . . float count(2,3); ,调用函数和被调用函数之间的数据传递,1.实参与形参之间的数据传递(按值传递) 2.通过return把函数值返回调用函数 #include float count(int x,int y) return; void main() . . . float count(2,3); ,void main() int a = 0; /初始化a值为0 func(a); /调用函数func printf(“%d“,a); /输出a的结果 /定义函数func void func(int a) a = 10; /让参数a等于10 ,传值调用,0,传值调用,将会输出什么,void func(int );,#include void increment(int,int); void main() int num1,num2; printf(“n 请输入两个数: “); scanf(“ %d %d“, ,传值调用示例,请输入两个数 :,34 56,递增前的值是 34 和 56,_,递增后的值是 34 和 56,34,56,子函数中的值是 35 和 57,35,34,56,57,总结:传值调用在调用时,系统将实参拷贝一个副本给形参,使形参具有与实参相同的值,即实参值分别按位置传递给对应的形参,使形参获取从实参传递来的值.这种调用方式的特点是在被调用函数中改变形参的值,只是改变其副本值,而不会影响调用函数中的实参值.,#include void try(int,int,int); main() int x=2,y=3,z=0; printf(“(1)x=%d y=%d z=%dn”,x,y,z); try(x,y,z); printf(“(4)x=%d y=%d z=%dn”,x,y,z); void try(int x,int y,int z) printf(“(2)x=%d y=%d z=%dn”,x,y,z); z=x+y; x=x*x; y=y*y; printf(“(3)x=%d y=%d z=%dn”,x,y,z); ,程序的运行结果如下: (1)x=2 y=3 z=0 (2)x=2 y=3 z=0 (3)x=4 y=9 z=5 (4)x=2 y=3 z=0,问题描述: 根据用户的选择求不同形状的面积。,函数调用示例,#include void AreaOfRect(); void AreaOfTriangle(); void AreaOfRound(); void main() int select; do printf(“ 0、退出n 1、长方形n 2、三角形n 3、圆形n“); printf(“请选择功能:“); scanf(“%d“, ,void AreaOfRect() int x,y; printf(“请输入长方形的长:“); scanf(“%d“, ,void AreaOfTriangle() int x,y; printf(“请输入三角形的底:“); scanf(“%d“, ,void AreaOfRound() int r; printf(“请输入圆形的半径:“); scanf(“%d“, ,函数原型,演示:示例6,例题7.4,编写函数isprime(int a),判断自变量a是否为素数,若是则返回1,否则,返回0 #include int isprime(int); main() int x; printf(“Enter a integer number:”); scanf (“%d, ,例题7.5,验证任意大于2的偶数可以表示为两个素数之和,并输出,思路:输入一个数,偶数,奇数,输出:这是一个奇数,判断是否为 两个素数之和,关键:如何判断? 示例:如何判断x是否为两个素数之和? x=素数+素数? !拿出2x/2每个数i 2.判断i是否为素数&判断x-i是否为素数,#include int isprime(int); void even (int) main() int a; printf (“Ener a even number:”);scanf(%d,return (isprime函数如上题),例题7.6编写函数求sum(int n),用以求f(0)+f(1)+f(2)f(n),且已知f(x)=x*x+1,分析:除了main函数外有两个函数,sum和f函数,并且sum函数由个n个f函数构成(即sum函数中要调用n次f函数) 1.定义f函数 int f (int x) return x*x+1; 2.定义sum函数,int sum (int n) int x,s=0; for (x=0;x=n;x+) s+=f(x);/ f(0)+f(1)+f(2)f(n) return s; ,#includ int (sum int); int f(int); main() int a,b; printf(“Enter a integer number:”); scanf (“%d, ,7.10编写函数统计输入文本中单词的个数,单词之间用空格符、换行符、跳格符隔开,用作为输入结束标志。 分析: a_ _good_ _beginning is_a_ _half_done (_代表空格,_代表跳格符) 即计算单词第一个字符的个数。 思考:怎样辨别是单词的第一个字符? 当前字符不是空格、回车、跳格,但当前字符的前一个字符是空格、回车或跳格。 设置一个状态flag,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论