vlambda博客
学习文章列表

C语言程序设计(十)

/**************************************************第七章函数函数可以相互调用一个函数可以被一个或者多个函数调用任意多次函数不能嵌套定义函数分类:(用户角度)1.标准函数:由系统提供2.自定义函数(函数形式)1.无参数函数形式:类型标识符 函数名(){声明部分 语句部分}2.有参数函数:参数传递数据形式:类型标识符 函数名(形式参数){声明部分 语句部分}
空函数类型标识符 函数名(){}
形参:定义函数处的参数,不调用不占空间实参:调用函数处的参数,可是变量,常量,表达式,调用时实参赋值给形参,实参不会因形参改变而改变
函数之间传递数据1.参数2.返回值3.全局变量
函数的返回值是通过函数中的return语句获得,返回值和函数定义类型相同 函数不加类型,默认整型处理*//*void main(){ void printstar();//对函数printstar声明 void print_message();//对函数print_message函数声明 printstar();//调用 print_message();//调用 printstar();//调用}void printstar(){ printf("******************************************\n");}void print_message(){ printf("hoe do you do!\n");}*//*void 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 a,int b){//形参,定义时必须指定类型 if(a>b){ return a; }else{ return b; } //int z; //z= a>b?a:b; //return z;}*//*void main(){ float max(float x,float y);//函数声明 float a,b; int c; scanf("%f,%f",&a,&b); c=max(a,b);//实参 printf("max is %d",c);}float max(float x,float y){//形参,定义时必须指定类型 float z; z= x>y?x:y; return z;}*//**************************************************//参数求值的顺序void main(){//stdcall自右向左 int f(int a,int b); int i=2,p; p=f(i,++i); printf("%d\n",p);}int f(int a,int b){ int c; if(a>b) c=1; else if(a==b) c=0; else c=-1; return c;}*//*函数调用方式1.函数语句:直接调用2.函数表达式:c=2*max(a,b);3.函数参数:m=max(a,max(b,c));*//**************************************************//对被调用函数作声明void main(){ float add(float x,float y); float a,b,c; scanf("%f,%f",&a,&b); c=add(a,b); printf("sum is %f\n",c);}float add(float x,float y){ float z; z=x+y; return z;}*//**************************************************实现xy次方*//*void main(){ int pow1(int x,int y); int a,b,c; scanf("%d,%d",&a,&b); c=pow(a,b); printf("%d的%d次方是%d",a,b,c);}int pow1(int x,int y){ int i; int z; for(i=0;i<y;i++){ z=z*x; } //while(y){z*=x;--y;} return z;}*//**************************************************实现求根号*//*void main(){ int sqrt1(int x); int a,b,c; scanf("%d",&a); c=sqrt(a); if(c==-1){ printf("不存在"); }else{ printf("根号下%d是%d",a,c); }}int sqrt1(int x){ int i; int z; for(i=0;i<x;i++){ if(i*i==x){ return z; }else{ return -1; } }}*//**************************************************统计输入的各个数字,空白符(空格、制表符、换行符)以及其他字符*//*void main(){ int blank=0,other=0,i=0,j,num[10]={0};//关键初始值都必须为0 char c; while((c=getchar())!='*'){//f6:EOF if(c==' '||c=='\t'||c=='\n'){blank++;} else if((c>='0')&&(c<='9')){++num[c-'0'];}//0对应的asc码为48 else{other++;} } printf("%d,%d\n",blank,other); for(j=0;j<10;j++){ printf("%d出现%d\n",j,num[j]); }}*//**************************************************//函数的嵌套调用void main(){ a();}a(){ b();}b(){ return;}*//**************************************************计算s=2的平方的阶乘+3的平方的阶乘*//*void main(){ int a,b,c; int jc(int x); printf("输入两个数"); scanf("%d,%d",&a,&b); c=jc(a*a)+jc(b*b); printf("%d",c);}int jc(int x){ int z=1,i; for(i=1;i<=x;i++){ z=z*i; } return z;}*///递归,递归中必须有一个退出的条件,是效率低下的算法/*void main(){ int a,b,c; int jc(int x); printf("输入两个数"); scanf("%d,%d",&a,&b); c=jc(a*a)+jc(b*b); printf("%d",c);}int jc(int x){ int z; if(x==1||x==0){ z=1; }else{ z=x*jc(x-1); } return z;}*//**************************************************//思路:1将 n-1个盘子先放到B座位上// 2.将A座上地剩下的一个盘移动到C盘上// 3、将n-1个盘从B座移动到C座上//函数声明void move(char x, char y);void hannuo(int n,char one ,char two,char three){//将n个盘从one座借助two转移到three void move(char x,char y); if(n==1)move(one, three); else{ hannuo(n-1,one ,three,two); move(one,three); hannuo(n-1,two,one,three); }}void move(char x,char y){ printf("%c--->%c",x,y);5r
} void main(){ int n;printf("input your number");scanf("%d",&n);hannuo(n,'A','B','C');return 0; }*//**************************************************数组作为函数参数的两种形式1.把数组元素(下标变量)作为实参使用2.把数组作为函数的形参和实参使用,类型必须相同,是地址传递,传首地址形参数组不定义长度*//**************************************************判别一个整数数组a[10]={1,2,3,4,-1,-2,-3,-4,2,3}中各种元素的值,若大于0则输出该值,若小于等于0则输出0*//*void main(){ int a[10]={1,2,3,4,-1,-2,-3,-4,2,3},i; void test(int x); for(i=0;i<10;i++){ test(a[i]); }}void test(int x){ if(x>0){ printf("%d",x); }else{ printf("%d",0); }}*//*void test(int b[10]);void main(){ int a[10]={1,2,3,4,-1,-2,-3,-4,2,3}; test(a);}void test(int b[10]){ int i; for(i=0;i<10;i++){ if(b[i]>0){ printf("%d",b[i]); }else{ printf("%d",0); } }}*//**************************************************一维数组score,内放10个学生成绩,求平均值*//*void main(){ int a[10]={1,2,3,4000,-1,-2,-3,-4,2,3}; int averages(int b[10]); printf("%d",averages(a));}int averages(int b[10]){//形参数组不定义长度 int total=0,i; for(i=0;i<10;i++){ total=total+b[i]; } return total/10;}*//**************************************************局部变量(形参也是局部变量)和全局变量(函数外部定义的变量,有效范围从定义开始到结束)主函数定义的变量也只在主函数有效不同函数中可以使用相同名字的变量可以在程序块/分程序/符合语句中定义变量,只在其内部有用*//**************************************************输入正方形的长宽高l,w,h。求体积记忆三个变电面积*//*void main(){ int l,w,h,v,s1,s2,s3; printf("输入正方形的长宽高"); scanf("%d,%d,%d",&l,&w,&h); v=l*w*h; s1=l*w; s2=l*h; s3=w*h; printf("体积:%d,面1:%d,面2:%d,面3:%d",v,s1,s2,s3);
}*//*int s1,s2,s3;//结束后销毁void main(){ int l,w,h,v;//调用完销毁 printf("输入正方形的长宽高"); scanf("%d,%d,%d",&l,&w,&h); v= vs(l,w,h); printf("体积:%d,面1:%d,面2:%d,面3:%d",v,s1,s2,s3);}int vs(int l,int w,int h){ int v; v=l*w*h; s1=l*w; s2=l*h; s3=w*h; return v;}*//**************************************************10个学生,求扣积分,最高分,最低分*//*int ave=0,max=0,min=0;void main(){ int a[10]={1,2,3,4,5,6,7,8,9,10}; void qiu(int b[10]); qiu(a); printf("%d,%d,%d",ave,max,min);}void qiu(int b[10]){ int total=0,i; for(i=0;i<10;i++){ total=total+b[i]; if(max<b[i]){max=b[i];} if(min>b[i]){min=b[i];} } ave=total/10;}*/