当前位置: 首页 > news >正文

第七章 用函数实现模块化程序设计

例子
递归求年龄
#include<stdio.h>
//	int age(int a);
//	int main(){
//	int xue1=10;
//	int xue2=age(xue1);
//	int xue3=age(xue2);
//	int xue4=age(xue3);
//	int xue5=age(xue4);
//	printf("%d\n",xue5);
//
//		return 0;
//	}
//	int age(int a){
//		return a+2;
//	}int age(int a);int main(){int xue5=age(5);printf("%d",xue5);}int age(int a){if(a==1)return 10;else if(a>=2)return age(a-1)+2;}
递归求n!
#include<stdio.h>int resort(int n); int main(){int n=0;scanf("%d",&n);printf("%d!=%d",n,resort(n));return 0;}int resort(int n){if(n==0||n==1)return 1;else if(n>=2)return resort(n-1)*n; }
汉诺塔
#include<stdio.h>int main(){void hanoi(int n,char one,char two,char three);int m;printf("input the number:");scanf("%d",&m);printf("move %d\n",m);hanoi(m,'A','B','C');return 0;}void hanoi(int n,char one,char two,char three){//将n个盘从one借助two转移到threevoid move(char x,char y);if(n==1)move(one,three);else{hanoi(n-1,one,three,two);//通过三将1的东西移到2 move(one,three);//将一的最后一块移到三 hanoi(n-1,two,one,three);//继续移动 } }void move(char x,char y){printf("%c->%c\n",x,y);} 
求十个人的平均成绩
#include<stdio.h>int main(){//100 56 78 98 67.5 99 54 88.5 76 58float average(float arr[10]);//函数声明float score[10],aver;int i=0;printf("input 10 scores:\n");for(i=0;i<10;i++){scanf("%f",&score[i]);} printf("\n");aver=average(score);printf("average score is %5.2f\n",aver);return 0;}float average(float arr[10]){int i=0;float sum=0;for(i=0;i<10;i++){sum+=arr[i];}return sum/10;}
选择法排序
#include<stdio.h>
//45 2 9 0 -3 54 12 5 66 33int main(){void sort(int arr[],int size);int  arr[10],i,size;printf("enter array:\n");size=sizeof(arr)/sizeof(arr[0]);for(i=0;i<10;i++){scanf("%d",&arr[i]);}sort(arr,size);printf("排序后的数组:\n");for(i=0;i<10;i++){printf("%d ",arr[i]); }printf("\n");return 0; 
}void sort(int arr[],int size){int min=arr[0];int i,j,flag;for(i=0;i<size;i++){min=arr[i];flag=i;//标记一下最小值的位置 for(j=i+1;j<size;j++){if(min>arr[j]){min=arr[j];flag=j;}}arr[flag]=arr[i];arr[i]=min;}}
二维数组找最大值
#include<stdio.h>int main(){int max_value(int arr[][4]);int arr[3][4]={1,3,5,7,2,4,6,8,15,17,34,12};printf("Max value is %d\n",max_value(arr));return 0; }int max_value(int arr[3][4]){int i,j,max;max=arr[0][0];for(i=0;i<3;i++){for(j=0;j<4;j++){if(arr[i][j]>max)max=arr[i][j];}}return max;}
作用域 总结

 

习题
最大公约数和最小公倍数
#include<stdio.h>int main(){int gcd(int x,int y);int m,n;scanf("%d %d",&n,&m);int num1=gcd(n,m);int num2=n*m/num1;printf("%d,%d的最大公约数为:%d\n",n,m,num1);printf("%d,%d的最小公倍数为:%d\n",n,m,num2);return 0; 
}int gcd(int x,int y){return y==0?x:gcd(y,x%y);}
求解一元二次方程
#include<stdio.h>
#include<math.h>double x1,x2,p,q;int main(){void dayu_zero(double b,double disk,double a);void xiaoyu_zero(double b,double disk,double a);void dengyu_zero(double b,double disk,double a);double a,b,c;scanf("%lf,%lf,%lf",&a,&b,&c);double disk=b*b-4*a*c;if(disk>0){dayu_zero(b,disk,a);printf("实数解x1=%lf\n",x1);printf("实数解x2=%lf\n",x2);} else if(disk==0){//两个相等实数解dengyu_zero(b,disk,a); printf("实数解x1=%lf\n",x1);printf("实数解x2=%lf\n",x2);}else{xiaoyu_zero(b,disk,a); printf("虚数解x1=%lf+%lfi",p,q);printf("虚数解x2=%lf-%lfi",p,q);} return 0;}void dayu_zero(double b,double disk,double a){//两个实数解x1=(-b+sqrt(disk))/(2*a);x2=(-b-sqrt(disk))/(2*a);}void xiaoyu_zero(double b,double disk,double a){p=-b/(2*a);q=sqrt(-disk)/(2*a);}void dengyu_zero(double b,double disk,double a){//两个相等实数解x1=(-b+sqrt(disk))/(2*a);x2=x1;}
判断素数
#include<stdio.h>
#include<math.h>int main(){int panduan(int a);int a=0;scanf("%d",&a);if(panduan(a)){printf("%d为素数\n",a);}else{printf("%d不是素数\n",a);	}return 0;}
int panduan(int a){int i=0; if(a<=3){return a!=1;}for(i=2;i<=sqrt(a);i++){if(a%i==0)return 0;}return 1;
}
行列互换
#include<stdio.h>
//1 2 3
//4 5 6
//7 8 9int main(){void fanzhuan(int arr[3][3]);int arr[3][3],i,j;for(i=0;i<3;i++){for(j=0;j<3;j++){scanf("%d",&arr[i][j]);} }printf("翻转前的数组\n");for(i=0;i<3;i++){for(j=0;j<3;j++){printf("%d ",arr[i][j]);} printf("\n");}  fanzhuan(arr); printf("翻转后的数组\n");for(i=0;i<3;i++){for(j=0;j<3;j++){printf("%d ",arr[i][j]);} printf("\n");} }void fanzhuan(int arr[3][3]){int i,j,t;for(i=0;i<3;i++){for(j=i+1;j<3;j++){t=arr[i][j];arr[i][j]=arr[j][i];arr[j][i]=t;} }  }
逆序字符串
#include<stdio.h>
#include<string.h>int main(){void reverse(int left,int right,char arr[]);char arr[100];scanf("%s",arr);printf("顺序->%s\n",arr); int right=strlen(arr)-1;//减一是因为数组索引到不了 reverse(0,right,arr);printf("逆序->%s\n",arr);return 0; 
}void reverse(int left,int right,char arr[]){char temp;if(left<right){temp=arr[left];arr[left]=arr[right];arr[right]=temp;reverse(left+1,right-1,arr);}}
连接字符串
#include<stdio.h>int main(){void lianjie(char* str1,char* str2);char str1[100],str2[100];printf("输入字符串str1:");scanf("%s",str1);printf("输入字符串str2:");scanf("%s",str2);lianjie(str1,str2); printf("%s\n",str1);return 0;} void lianjie(char* str1,char* str2){while(*str1!='\0') str1++;while(*str2!='\0')*str1++=*str2++;*str1=*str2;}
复制元音字母带另一个字符串
#include<stdio.h>int main(){void panduan(char* str1,char* str2);char str1[100];char str2[100];scanf("%s",str1);panduan(str1,str2);printf("%s\n",str2);return 0;}void panduan(char* str1,char* str2){while(*str1!='\0'){if(*str1=='a'||*str1=='e'||*str1=='i'||*str1=='o'||*str1=='u'||*str1=='A'||*str1=='E'||*str1=='I'||*str1=='O'||*str1=='U'){*str2++=*str1; }str1++;} *str2=*str1;}
数字空格
#include<stdio.h>int main(){char arr[8];int i=0;for(i=0;i<=7;i++){if(i%2==0)scanf("%c",&arr[i]);elsearr[i]=' ';}printf("%s\n",arr);return 0;}
#include<stdio.h>
#include<string.h>int main(){void add_space(char arr[],int sz);char arr[8];scanf("%s",arr);int sz=strlen(arr)-1;add_space(arr,sz); printf("%s\n",arr);return 0;}void add_space(char arr[],int sz){int i=0;for(i=sz;i>=0;i--){arr[i+i]=arr[i];arr[i+i+1]=' ';}}
输出最长单词
#include<stdio.h>
#include<string.h>int main(){int alpha(char);int longest(char[]);int i;char line[100];printf("input one line:\n");gets(line);printf("The longest word is:");for(i=longest(line);alpha(line[i]);i++)printf("%c",line[i]);printf("\n");return 0;	} int alpha(char c){if((c>='a'&&c<='z')||(c>='A'&&c<='z')){return 1;}else{return 0;}} int longest(char string[]){int len=0,i,length=0,flag=1,place=0,point;for(i=0;i<=strlen(string);i++){if(alpha(string[i])){if(flag){point=i;//标记单词起始位置flag=0; }elselen++;}else{flag=1;if(len>=length){length=len;place=point;len=0; }}}return place;}
#include<stdio.h>
#include<string.h>int main(){int panduan(char);char str[100];gets(str);int place=0,point;//标记最长单词起始位置int maxlen=0;//最长的长度int len=0,i,flag=1;for(i=0;i<=strlen(str);i++){if(panduan(str[i])){if(flag){point=i;flag=0;} len++;}else{flag=1;if(maxlen<len){place=point;maxlen=len;}//判断结束 len=0; }} for(i=place;i<place+maxlen;i++)printf("%c",str[i]);printf("\n");}int panduan(char c){if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){return 1; }elsereturn 0;}
冒泡排序字符
#include<stdio.h>int main(){void sort(char arr[]);char arr[10];scanf("%s",arr);printf("%s\n",arr);sort(arr);printf("%s\n",arr);return 0;}void sort(char arr[]){int i,j; char cc;for(i=1;i<10;i++){for(j=0;j<10-i&&arr[j]!='\0';j++){if(arr[j]>arr[j+1]){cc=arr[j];arr[j]=arr[j+1];arr[j+1]=cc;}}}}

有问题的题
#include<stdio.h>int main(){int x,n;double p(int n,int x);printf("input x&n :");scanf("%d %d",&n,&x);printf("%.2lf\n",p(n,x));return 0; 
}double p(int n,int x){if(n==0)return 1;else if(n==1)return x;else if(n>1){return (2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x)/n;}}
递归 数字转换为字符串
#include<stdio.h>int main(){void panduan(int n);int n=0;scanf("%d",&n);if(n<0){putchar('-');putchar(' ');n=-n;}panduan(n); return 0;}void panduan(int n){int i;if((i=n/10)!=0){panduan(i);}putchar(n%10+'0'); //强转 3+'0'putchar(' '); }
累加月份
#include<stdio.h>int main(){int year,month,day,sum=0;scanf("%d %d %d",&year,&month,&day);sum=day;int month_day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(year%400==0||(year%4==0&&year%100!=0))month_day[2]=29; int i=1;for(i=1;i<month;i++)sum+=month_day[i];printf("%d",sum);return 0;}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 扭矩传感器计量校准常会有哪些问题出现?具体处理办法是什么?
  • 什么软件可以用平板远程控制电脑?
  • PHP一键创建全球参与探索现代在线投票系统
  • 如何通过Spring Cloud Consul增强微服务安全性和可靠性
  • 代码随想录---算法训练营---总结
  • 苹果M4芯片Mac全面曝光 或10月发布
  • 泰克Tektronix TDP1500,TDP3500,TDP4000差分探头
  • 静息态功能连接笔记
  • 重新修改 Qt 项目的 Kit 配置
  • Error when attempting to add data source to Azure OpenAI api
  • 驱动下载——RICOH MP C3503打印机
  • ‌JavaScript 数据类型转换
  • uniapp 封装uni.login 实现全局调用
  • Redis过期键监听
  • 【mysql】mysql之日志
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 08.Android之View事件问题
  • Apache的基本使用
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • input的行数自动增减
  • java中的hashCode
  • mysql中InnoDB引擎中页的概念
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Phpstorm怎样批量删除空行?
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Swift 中的尾递归和蹦床
  • vue-loader 源码解析系列之 selector
  • 闭包--闭包之tab栏切换(四)
  • 读懂package.json -- 依赖管理
  • 分享一份非常强势的Android面试题
  • 给github项目添加CI badge
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 区块链分支循环
  • 如何实现 font-size 的响应式
  • 微服务核心架构梳理
  • 延迟脚本的方式
  • 最近的计划
  • 大数据全解:定义、价值及挑战
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 数仓建模:如何构建主题宽表模型?
  • (+4)2.2UML建模图
  • (06)Hive——正则表达式
  • (1)(1.11) SiK Radio v2(一)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (19)夹钳(用于送货)
  • (21)起落架/可伸缩相机支架
  • (c语言)strcpy函数用法
  • (pycharm)安装python库函数Matplotlib步骤
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (初研) Sentence-embedding fine-tune notebook
  • (分布式缓存)Redis分片集群
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (简单) HDU 2612 Find a way,BFS。
  • (六)Flink 窗口计算