收藏 分享(赏)

c语言-第7章_函数.ppt

上传人:hwpkd79526 文档编号:10023998 上传时间:2019-09-29 格式:PPT 页数:109 大小:1.11MB
下载 相关 举报
c语言-第7章_函数.ppt_第1页
第1页 / 共109页
c语言-第7章_函数.ppt_第2页
第2页 / 共109页
c语言-第7章_函数.ppt_第3页
第3页 / 共109页
c语言-第7章_函数.ppt_第4页
第4页 / 共109页
c语言-第7章_函数.ppt_第5页
第5页 / 共109页
点击查看更多>>
资源描述

1、第七章 函数,7.1 函数概述,例7.1(P194): main() printf(“* * * * * * * * * * *n”);printf(“How do you do!n”);printf(“* * * * * * * n”); ,程序运行情况如下: * * * * * * * * * * How do you do! * * * * * * *,printstar(int n ) int i;for(i=0;in;i+) printf(“*”);printf(“n”) ,printmesg() printf(“How do you do!n” ); ,printstar(11);

2、 /*调用printstar函数*/,printmesg();/*调用printmesg函数*/,printstar(7); /*调用printstar函数*/,函数是构成C程序的基本构件。C语言的程序是由一个主函数或若干个函数组成的。一个函数是为了完成某一个功能。,C程序执行是从main函数(主函数)开始,在main函数中结束,不管main函数的位置如何。,所有的函数独立定义,main( )函数可以调用任意其它函数,其它函数之间可以相互调用,但任何函数都不能调用main( )函数。,函数的分类,标准函数(库函数):由系统提供,解决公共问题, 使用时要包含相应的库文件,自定义函数:由用户自己定

3、义,解决特定的问题,有参函数:主调函数与被调函数之间有参数传递,无参函数:主调函数与被调函数之间无参数传递,有返回值函数:被调函数返回一个值给主调函数,无返回值函数:被调函数不带回值给主调函数,如: g(x, y)=,g(3,4)= = 5,函数定义,函数调用,两个形式参数,两个实际参数,函数值,7.2 函数的定义与调用,函数的定义与调用,函数定义的格式:函数类型 函数名( 形参类型说明及形参表列 ) 内部变量定义和声明部分执行语句,如: int g(int x,int y) int z;z=sqrt(x*x+y*y);return z;,函数定义后,并不被执行,只有当调用函数时,程序才转到函

4、数去执行。 函数调用的格式:函数名( 实参表列 ),例如 g(3,4),函数各部分作用(分为函数说明部分和函数体)(1)函数的说明部分 (即函数头)函数说明部分说明函数的类型, 函数名, 参数表及参数类型。 函数的类型说明函数的类型即函数的返回值类型。若函数不提供返回值,则可定义其类型为: void。 例如: void putdata(int a) 函数名函数名又称函数标识符。命名遵循C语语言标识符的规定;函数名要反映函数完成的功能。,参数表 参数表写在函数名后的( )内,由一个或多个变量标识符及类型标识符组成。 参数表中的变量称为形式参数, 简称形参。 若函数没有形参,则称为无参函数,其后“

5、( )”不能省略。 参数必须指定类型。形参的类型说明有两种: 方法: int max(int a, int b) 省略函数类型名时,C语言默认其为int型。,(2)函数体 函数体包括变量定义和执行语句序列。函数所完成的工作由函数体中一段程序实现。 函数的返回值用返回语句return返回,形式:return(表达式)或者return 表达式 ; 如果函数的类型与return语句的表达式的类型不一致时, 则以函数的类型为准。返回时自动进行数据转换。,一、无参无返回值函数的定义与调用,void fun ( ) int x, y, max; scanf(“%d%d“, ,main ( ) fun();

6、 ,函数类型void(“空类型”)表示无返回值,无参数,函数定义,对无返回值函数的调用,通常采用函数语句方式,二、有参无返回值函数的定义与调用,void fun (int x, int y) int max;max= xy?x:y;printf(“Max is %dn“,max ); ,main ( ) int a,b;scanf(“%d%d“, ,两个形参,函数定义,两个实参,关于形参与实参,1. 对无参函数,形参表列与实参表列均为空,但括号不能省略,如fun( )。 2. 对有参函数,实参与形参个数相等,顺序对应,类型一致或赋值相容。,函数定义时函数名后的括号中的变量叫形式参数。 形式参数

7、只能是普通变量、指针变量和数组名。,函数调用时函数名后的括号中的参数叫实际参数。 实际参数可以是常量、变量、数组名和表达式。,例:编程输入两个数, 输出其中较大的。void fun (x, y)int x, y; int max;max= xy?x:y;printf(“Max is %dn“,max ); ,main ( ) int a,b;scanf(“%d%d“, ,若程序运行时输入为: 10,5 便有输出为: 10,1) 形参和实参之间值的传递如图所示意。2) 关于形式参数和实际参数说明如下: 形式参数在函数被调用时才被分配内存。当函数执行完毕返回时, 形式参数占用的内存空间便被释放。

8、实参可以是变量、常量和表达式。 如: fun(x,4); fun(x,i*2);但实参必须有确定的值。 3) 形参和实参的类型必须相容。 4) 形参和实参之间的关系是: 单向的值的传递,三、有返回值函数的定义与调用,int fun ( int x, int y ) int max;max= xy?x:y;return (max ); ,main ( ) int a,b,max;scanf(“%d%d“, ,函数定义,return max;,return (xy?x:y);,int型函数(int 可缺省),表示函数返回值为整型,将函数调用作为表达式的一个成分 函数表达式方式,printf(“Ma

9、x is %dn“, fun(a,b) );,函数返回值的获得:由 return语句获得。 函数返回值的类型:取决于函数的类型 如果被调函数的类型为void(空类型),则不能返回函数值;如果被调函数的类型不是void,而函数中又无return语句,则函数返回一个不确定的函数值。 一般将无返回值的函数类型定义为void。,关于函数的返回值,四、函数调用方式小结,函数调用的格式:函数名( 实参表列 ) 函数语句: 把函数调用作为一个语句,这种调用方式不使用函数的返回值,是无返回值函数的调用方式。 如,printf(“ n“ ); 函数表达式: 把函数调用作为表达式的一部分,这种调用方式使用函数返回

10、的函数值,是有返回值函数的调用方式。,举例 判断素数函数1(无返回值函数),#include prime ( int m ) int j,k;k= sqrt(m);for ( j=2; jk ) printf( “%d is a prime numbern“, m ) ; else printf(“%d is not a prime numbern“ , m ) ; ,main ( ) int n;scanf(“%d“, ,prime ( n ) ;,void prime ( int m ),为了明确表示“不带回值”,用void定义函数类型,举例 判断素数函数2(有返回值函数),#includ

11、e prime ( int m ) int j ,k, f ; k= sqrt(m) ;for ( j=2; jk )else ,main ( ) int n;scanf(“%d“, ,f = 1 ; f = 0 ;,return ( f ) ;,if ( ) printf (“%d is a prime numbern“, n); else printf (“%d is not a prime numbern“, n ) ;,prime(n)=1,prime(n),举例求cnm,long func(int k) int i ; long s=1;for(i=1;i=k;i+) s*=i;re

12、turn ( s ) ; ,main( ) int m,k,t; float c; scanf(“%d%d“, ,函数func:求形参n 的阶乘,fun(m),fun(n),fun(m-n),判断一个输入点(x,y)是否位于坐标系上圆心在原点,半径为1的圆范围内。,#include #include int judge(double x, double y) if ( _ ) return 1;else_ void main() double a, b;scanf(“%lf %lf“, ,(x*x+y*y)=1,return 0;,judge(a,b)=1,#include #include

13、double fx(int x) /*/ /*/ void main() printf(“f(80)=%8.3fn“,fx(80);printf(“f(70)=%8.3fn“,fx(70);printf(“f(60)=%8.3fn“,fx(60); ,double y; if(fabs(x)70) y=(x+sqrt(5.8+exp(70-fabs(x)/(cos(x)+2.1); else y=-1; return y;,五、函数调用的条件,1、被调函数是库函数或已经存在的自定义函数; 2、若被调函数是库函数,一般需在文件开头将其头文件#INCLUDE到本文件; 3、若被调函数是自定义函数,

14、应在调用前进行函数原型声明,声明的格式是:函数类型 函数名(形参类型表列) ;或者:函数类型 函数名(形参名及其类型表列) ;举例:int max(int,int) 或 int max(int x,int y)一个例外:若被调函数定义在前、调用在后,则可不加函数原型声明。,函数原型声明方式,1、在主调函数内部声明; 2、在函数的外部声明,一般放在所有函数定义之前,即文件开头。则在各个主调函数中不必对所调用的函数再做声明。,函数原型声明举例,main( ) int a, b ; float z;scanf(“%d%d“, ,float average ( int a , int b ) floa

15、t c ;c = (a+b)/2.0 ;return ( c ) ; ,float average ( int , int ) ;,函数的调用和声明的格式有什么区别?,void letter(char,char); void number(int,int);/*在所有函数定义之前声明两个函数*/ main() . /*不必声明它所调用的函数*/letter(a,b); number(1,2); letter(char c1,char c2) /*定义letter函数*/ /*不必声明它所调用的函数*/number(3,4); number(int n1,int n2) /*定义number函数

16、*/ ,7.3 形参与实参的相互作用,函数调用时,将实参的值传递给为形参分配的存储单元,而这种传递是单向的值传递:实参的值传递给形参,而形参的值不会返回给实参变量。,定义函数时形参变量不分配存储单元,只有在调用函数期间才给形参变量分配存储单元,并在调用结束时将其释放。,实参 形参,值,特点:单向值传递,(一)普通变量作为函数参数,实参 形参,值, 当形参是普通变量(非指针变量)时,实参是常量、表达式、普通变量或数组元素。,例题:7.9 P207:单向值传递,int mult(int n) n*=10;retrun(n); main() int number,result;number=668;

17、result=mult(number);printf(“number=%d,result=%d”,number,result); ,输出结果为:number=668,result=6680,举例 对两个数按降序排列(1),void swap(int x,int y) int t;t=x; x=y;y=t; ,main( ) int a,b; scanf(“%d,%d”, ,5,9,x y,以下程序能实现a和b两个变量的交换吗?,这样的程序无法实现a和b两个变量的交换!,t,5,9,5,(二)指针变量作为函数的参数,实参指针 形参指针变量,地址值, 当形参是指向普通变量的指针变量时,实参是普通变

18、量指针。,效果:形参指针所指单元就是实参指针所指单元,定义函数时形参指针不存在,调用函数时创建形参指针并将实参指针值传递给形参指针,于是形参指针指向实参地址所指存储单元,因此,如果改变了形参指针所指单元的值,也就是改变了实参地址所指单元的值。,swap(int *pointer1,int *pointer2) int t;t=*pointer1; *pointer1=*pointer2;*pointer2=t; ,main( ) int a,b; int *p1,*p2;scanf(“%d,%d”, ,pointer1 pointer2t,2000,2002,地址作参数,可以在被调函数中对主调

19、函数中的变量进行操作,从而使主调函数中的变量的值发生变化。,举例 对两个数按降序排列(2),9,5,5,(三) 数组作为函数参数,例7.14,若形参是数组名,实参是数组名,或者数组指针,若形参是变量名,实参可以是数组元素,举例 求一维数组平均值函数的定义与调用,float average( float array 10 ) float aver , sum=0 ; int i ;for ( i=0 ; i10 ; i+ ) sum += array i ;aver = sum / 10 ;return aver ; ,void main ( ) float score 10 , aver ;

20、int i ;for ( i=0 ; i10 ; i+ ) scanf(“%f“ , ,例7.16,#include ,举例 求不定长一维数组平均值函数的定义与调用,float average ( float array 10 ) float aver , sum=0 ; int i ;for ( i=0 ; i 10 ; i+ ) sum += array i ;aver = sum / 10 ;return aver ; ,void main ( ) float score 10 , aver ; int i ;for ( i=0 ; i10 ; i+ ) scanf(“%f“ , ,n,

21、n, 10 ) ;,例7.16,float array ),一维形参数组的大小通常不指定;,#include ,float array , int n ),通常另设一参数用于传递数组元素的个数。,实参数组指针 形参数组指针变量,地址值, 当形参是数组名或指向数组的指针变量时,实参是数组名或数组指针。,效果:形参数组就是实参数组,注:形参数组名不是常量,而当作指向数组的指针变量使用,即,实参数组 形参数组,首地址值,形参与实参的相互作用2,定义函数时指向形参数组的形参指针不存在,调用函数时创建形参指针并将实参数组的首地址传递给形参指针,于是形参指针所指的形参数组结合到实参数组,即形参数组与实参数

22、组共用同一段存储单元,因此,如果改变了形参数组的值,也就是改变了实参数组的值。调用结束,形参数组与实参数组的结合关系也结束。,使用说明: 实参数组与形参数组类型要一致。 实参数组和形参数组大小可以不一致,C编译对形参数组大小不做检查,只是将实参数组的首地址传给形参数组。但为避免形参数组结合不到有效存储单元,形参数组大小应小于等于实参数组。 由于形参数组定义时不分配存储单元,可以不指定第1维大小。但为方便编程,通常另设一参数用于传递数组元素的个数。,形参与实参的相互作用2,一维数组作函数的参数有下面的几种情况: 形参和实参都是一维数组名 形参是一维数组名,实参是一维数组指针 形参是一维数组指针变

23、量,实参是一维数组名 形参是一维数组指针变量,实参是一维数组指针,一维数组指针变量,实参,四、数组名作为函数的参数及 指向数组的指针作为函数的参数,举例 写一个函数,求任意大小的一维数组平均值,float average (float array , int n ) float aver , sum=0 ; int i ;for ( i=0 ; i n ; i+ ) sum += array i ;aver = sum / n ;return aver ; ,main ( ) float score 10 , aver ; int i ;for ( i=0 ; i10 ; i+ ) scanf

24、(“%f“ , ,*p=score;,p,float *array,int n),注:但采用数组名做实参时,实参数组名代表一个固定的地址,或者说是指针型常量,而形参数组名并不是一个固定的地址值,不是常量,而当作指向数组的指针变量使用,也就是说,在函数执行期间,它可以再被赋值。,例: fun(int arr,int n) printf(“%dn”,*arr);arr=arr+3;printf(“%dn”,*arr); ,max,5,max=a0 for(j=1;jmax) max=aj;,9,15,max=a0,k=0; for(j=1;jmax) max=aj;k=j;,for (i=0;i4

25、;i+) /*外层循环控制趟数*/ for(j=i+1;j5;j+) /*内层循环控制 每趟比较的次数*/if(ajai) t=ai; ai=aj; aj=t; ,ak,for( i=0 ; i4 ; i+ ) k=i ;for( j=i+1 ; j5 ; j+ ) if(ajak) k=j ; t=a k ;a k =a i ;a i =t ; ,选择法升序排序过程示例,void sort( int a , int n ) /* n个数:a0an-1 */ int i,j,k,t;for( i=0 ; in-1 ; i+ ) k=i ;for( j=i+1 ; jn ; j+ )if(aja

26、k) k=j ; t=a k ;a k =a i ;a i =t ; ,/* k记下aian-1中最小元素的下标(初值为i )*/,选择法排序(从小到大) 函数的定义,/* aian-1中的最小元素ak与ai交换 */,例5.12(P141),void sort(int a ,int n) int i,j,k,t;for( i=0 ; in-1 ; i+ ) k=i ;for( j=i+1 ; jn ; j+ )if(ajak) k=j ; t=a k ;a k =a i ;a i =t ; ,选择法排序(从小到大) 函数的调用,main( ) int a10, int i;,printf(“

27、Enter the array:n“); for(i=0;i10;i+)scanf(“%d“, -,sort( a , 10 );,printf(“the sorted array: n“); for( i=0; i10 ; i+ )printf(“%d “,ai); printf(“n“);,举例 写一函数用折半查找法查找指定数,折半查找法只能对有序数列进行查找,方法如下: 假设n个数按由大到小的顺序存放在数组a中,两个位置指针top、bot分别指向查找范围的顶部、底部。取查找范围的中间位置mid=(top+mid)/2,将待查找的数x与a(mid)进行比较,分以下三种结果分别处理: (1)

28、x=a(mid):已找到,退出查找; (2)xa(mid):x只可能落在top和mid-1范围之内,将查找范围的底部改为bot=mid-1,顶部top不变; (3)xbot,退出循环。topbot表明尝试过所有可能的范围,但没找到。,折半查找过程示例,int BinarySearch(int a, int n, int key) /*参数key表示要找的数*/ int top,bottom, mid; /*分别为序列的首元素、末元素和中间元素标识*/if (keya0|keykey) top = mid+1;elsebottom = mid-1; return -1; ,折半查找函数的定义,m

29、ain() int a5=5,8,9,10,15, int i,n,k;scanf(“%d”, ,BinarySearch( a, 5, n);,int max_value (int a 4) int i , j , max ;max=a00 ;for( i=0 ; imax ) max = aij ;return ( max ) ;,void main ( ) int a34 = 1, 3, 5, 7, 2, 4, 6, 8, 15, 17, 34, 12 ;printf (“max = %dn“, ) ; ,例7.23,/*形参二维数组的第一维大小可以不指定*/,#include ,举例

30、写一个函数,求34二维数组最大值,max_value(a),main( )函数,. 调用函数fun1,fun1( )函数,. 调用函数fun2,fun2( )函数,结束,7.4 函数的嵌套调用,从什么地方调用函数,就返回到什么地方。,在调用一个函数的过程中,又调用另一个函数,叫做函数的嵌套调用。,函数的嵌套调用举例求c,long fun(int t) int i ; long s=1;for(i=1;i=t;i+) s*=i;return ( s ) ; ,long c ( int m , int n) long f ;f = fun(m) / ( fun(n) * fun(m-n) ); r

31、eturn ( f ) ; ,main( ) int m,n,t; scanf(“%d%d“, ,函数fun:求形参t 的阶乘,函数C:求cnm,7.4.2 函数的递归调用,在调用一个函数的过程中又直接或间接地调用了该函数本身,叫做函数的递归调用。,直接调用本函数: int f(int n)int d,c;d=f(c); ,要实现递归设计,首先要分析问题是否具有递归处理过程,该递归过程是什么。,递归函数应用举例1年龄问题,age( int n ) int c;if ( n=1 ) c = 10; else c = age( n-1 ) + 2 ; return ( c ) ; ,main( )

32、 printf ( “%dn“ , age ( 5 ) ) ; ,函数 age :求第n个人的年龄,例7.32(P233),age(n-1) +2 (n1)10 (n=1),age(5),c=age(4)+2,c=age(3)+2,c=age(2)+2,c=age(1)+2,c=10 (age(1),c=12 (age(2),c=14 (age(3),c=16 (age(4),c=18 (age(5),递归函数应用举例1年龄问题,递归函数应用举例2 求阶乘,float fac ( int n ) /*求阶乘函数*/ float f ;if ( n=0 | n=1 ) f = 1 ;else f

33、 = fac ( n-1 ) * n ;return ( f ) ; main( ) int n; scanf(“%d“, ,例7.31(P232),1 (n=0,1)n*fac(n-1) (n1),递归优点:程序简洁;有时能解决非递归方法不能解决的问题。递归最大缺点:效率低 原因如下: (1) 递归函数会带来大量的重复计算,例如n!程序,每一次递归函数调用都会带来前面的重复计算,大大降低效率 (2) 函数的每一次调用都需进行保留现场、传递参数以及恢复现场等操作,效率低,递归函数的优缺点,7.6 局部变量和全局变量,变量按照其作用范围分为局部变量和全局变量(外部变量)。,7.6.1 局部变量,

34、在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为“局部变量”。如:,float f1(int a) /*函数f1*/ int b,c; ,char f2(int x,int y) /*函数f2*/ int i,j; ,main( ) /*主函数*/ int m,n; ,说明: 主函数main中定义的变量(m、n)也只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效。主函数也不能使用其他函数中定义的变量。不同函数中的局部变量可以同名,它们在内存中占不同的单元,互不混淆。形参也是局部变量,在其他函

35、数中不能用。在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效。,7.6.2 全局变量,在函数之外定义的变量称为外部变量,外部变量是全局变量(也称全程变量)。全局变量可以为本文件中其他函数所共用,它的有效范围从定义变量的位置开始到本源文件结束。,局部变量和全局变量,int a = 3 , b = 5 ;max( int a , int b ) int c ; c = ab ? a : b ; return (c) ; main( ) int a=8 ; printf ( “%dn“, max( a , b ) ) ; ,两点说明: 不同函数中的局部变量可以同名,全局变量与局

36、部变量也可以同名,但它们代表不同的变量,在内存中占有不同的存储空间。 局部变量起作用时,同名全局变量不起作用。,结果:8,全局变量应用举例,int max, min ; float average ( int array , int n ) int i ; float aver , sum = array 0 ; max = min = array 0 ; for( i=1 ; i max ) max=arrayi; else if ( arrayi min ) min=arrayi; sum=sum+arrayi ; aver=sum/n; return ( aver ) ; main( )

37、 float ave ; int score10 , i ;for( i=0 ; i10 ; i+ ) scanf ( “%d“, ,有一个一维数组,内放10个学生的成绩,写一个函数,求出平均分、最高分和最低分。,例8.15(P170):,return语句只返回了aver的值,那么主调函数中如何获得max和min的值?,#includeint m=13;int fun(int x,int y) int m=3; return(x*y-m);main() int a=7,b=5; printf(“%dn”,fun(a,b)/m); A 1 B 2 C 7 D 10,8.9 变量的存储类别,每一个

38、变量都有两种属性:数据类型和存储类别,前者表示了变量所能存放的数据类型和表示范围,后者表示了变量在内存中的存储方式。变量定义格式: 存储类别 数据类型 变量表列; 变量按其生存的时间(生存期)划分为静态存储变量和动态存储变量。,变量的存储类别,局部静态变量应用举例1,f(int a) auto int b=0 ; static int c=3 ; b=b+1;c=c+1;return (a+b+c); main( ) int a=2,i;for(i=0;i3;i+)printf(“%d “,f(a); ,程序运行结果: 7 8 9,局部静态变量应用举例2,fun( ) int a=2;stat

39、ic int b=4;a=a+2;b+=2;printf(“a=%d b=%dn“,a,b); main( ) fun( );fun( );fun( );,a=4 b=6 a=4 b=8 a=4 b=10,局部静态变量应用举例3,int fac ( int n ) static int t = 1 ;t = t * n ;return (t ) ; main ( ) int i ;for ( i=1 ; i=5 ; i+ )printf (“%d! =%dn“ , i , fun ( i ) ) ; ,例8.18(P191),程序运行结果: 1! =1 2! =2 3! =6 4! =24 5

40、! =120,利用静态局部变量求阶乘,变量的分类,作用域与生存期的比较 P181表8.2,作业(一):程序阅读:指导书P115-118 6.17 6.19 6.26 上机: 1)指导书P118 6.25 2)定义函数float fun(int n)求n!,然后调用该函数求组合数:3)指导书P138 7.16,作业(二): 1)写结果:指导书P133-135 7.7, 7.11 2)指导书P140 7.20(将right函数写完整,并编写main函数调用它) 3)指导书P141 7.26 上机: 1)指导书P141 7.24 2)用二维字符数组对输入的5个字符串排序。提示:5个字符串用510的二

41、维字符数组存放,用“选择法”排序。 3)指导书P141 7.26,作业(三):1)写出程序运行结果:指导书P112-1196.18、6.202)课本p186 8.13/指导书P121 6.36 上机:1)用递归法求Fabonacci数列的第n个数。long fabo(int n)2)课本P186 8.16,作业(四):写出程序运行结果:指导书P112-1196.4、6.14、6.15、6.21、6.23、6.24、6.28 上机:1)写一个函数,输入二进制数,输出相应的十进制数。2)将整数转换成字符串,如:345“345”,用函数递归方法。,写一个函数,输入二进制数,输出相应的十进制数。 #i

42、nclude “string.h” #include “stdio.h” htod(char c )int i,n=1,s=0,d;for(i=strlen(c)-1;i=0;i-)d=ci-0; s=s+d*n; n=n*2; return(s);,main() char c20;gets(c);if(c0=-) printf(“decimal number:-%dn“,htod(c+1);else printf(“decimal number:%dn“,htod(c); ,习题课 编写通过指针将一个字符串反向的函数。(指导书P141 7.24),=s,=s+strlen(s)-1,k,t,

43、n,h,void reverse(char *s) char *p,*q,t;for(p=s,q=s+strlen(s)-1;pq;p+,q-)t=*p; *p=*q; *q=t; ,#include “stdio.h” main() char str50;gets(str);reverse(str);puts(str); ,用二维字符数组对输入的5个字符串排序。提示:5个字符串用510的二维字符数组存放,用“选择法”排序。,#include ”string.h” #include “stdio.h” void sortstr(char a 10,int n) int i,j,k;char t

44、10;for( i=0;in-1;i+ ) k=i ;for( j=i+1 ; jn ; j+ )if(strcmp(aj,ak)0) k=j ; strcpy(t,a k ); strcpy(a k ,a i );strcpy(a i ,t) ; ,main() char s510;int i;for(i=0;i5;i+) gets(si);sortstr(s,5);for(i=0;i5;i+) puts(si); ,例:输入十进制正整数,将其转换为十六进制数输出。,7,8,16,0,7,(120)10=(78)16,void trans(char *p, long m) int r;whi

45、le(m!=0) /*用除16取余,逆向取数的方法转换*/ r=m%16;/*将数值转换为相应字符,送入数组相应元素*/if(r10) *p=r+48; /*0的ASCII码为48*/else *p=r+55; /*A的ASCII码为65*/m=m/16;p+;*p=0; /*在串尾加入结束标记*/ ,#include “stdio.h” main() int i; long n; char a20;scanf(“%ld”, ,输入n个整数,将其中最小的数与第一个数对换,最大数与最后一个数对换。(指导书P141 7.26),max=4 min=2,8,1,5,9,max=0 min=2,9,1

46、,5,9,max=2,swap(int a ,int n) int max,min,i,t;max=min=0; /*设最大数和最小数的下标都为0*/for(i=0;iamax) max=i;t=a0; a0=amin; amin=t; /*交换最小数和第一个数*/if(max=0) max=min; t=an-1; an-1=amax; amax=t; /*交换最大数和最后一个数*/ ,/*找出最大数和最小数的下标*/,/*当最大数是第一个数时,改变最大数的下标*/,#define N 6 main() int numN,i;for(i=0;iN;i+) scanf(“%d”, ,例:输入一个十六进制整数, 输出相应的十进制数。 (P186 8.16),(12F)16=1*162+2*161+15*160=(303)10,#include “string.h” #include “stdio.h” htod(char c )int i,n=1,s=0,d;for(i=strlen(c)-1;i=0;i-)if(ci=0,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报