《IOS_C語言》函式分類、函式宣告和定義、函式呼叫、形參實參、函式巢狀呼叫
阿新 • • 發佈:2019-01-04
#import "Operator.h"
//函式定義
//定義求和函式(返回和,並且返回值在主函式裡面有用,如果有函式宣告則可以防於後面)
int sum(int a){
int sum=0;
sum+=a;
return sum;
}
//定義取最大值,並且最大值在主函式中有用,
int max_value(int a,int b)
{
int max=0;
max=a>b?a:b;
//printf("%d",max);//這種就只是顯示,max在主函式中並沒有用。
//return 0;
return max;
}
//課上練習1
//1、編寫函式int sumValue(int n):計算1到n的和
int sumValue(int n)
{
int sum=0;
for (int i=0; i<=n; i++) {
sum+=i;
}
return sum;
}
//2、編寫函式dayOfYear(year, mouth,day),使得函式返回由這三個引數確定的那⼀一天是⼀一年中的第⼏幾天
int dayOfYear(int year,int month,int day)
{
int date=0;
int TodayYear;
printf("Please input TodayYear:");
scanf("%d",&TodayYear);
//判斷合法性
for (int i;;i++ ) {
printf("Please input a date:");
scanf("%d%d%d",&year,&month,&day);
if (year<=TodayYear) {
if (year%400==0||(year%4==0&&year%10!=0)) {
if (month==2) {
if (day>=1&&day<=29) {
printf("您輸入的是潤年的2月份,輸入的日期合法\n");
break;
}else{
printf("您輸入的是潤年的2月份,輸入的日期不合法!請輸入的日期範圍是1~29\n");
}
}else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
if (day>=1&&day<=31) {
printf("您輸入的是大月份,輸入的日期合法\n");
break;
}else{
printf("您輸入的是大月份,輸入的日期不合法!請輸入的日期範圍是1~31\n");
}
}else if(month==4||month==6||month==9||month==11){
if (day>=1&&day<=30) {
printf("您輸入的是小月份,輸入的日期合法\n");
break;
}else{
printf("您輸入的是小月份,輸入的日期不合法!請輸入的日期範圍是1~30\n");
}
}else{
printf("請輸入合法的月份,範圍1~12月\n");
break;
}
}else {
if (month==2) {
if (day>=1&&day<=28) {
printf("您輸入的是平年的2月份,輸入的日期合法\n");
break;
}else{
printf("您輸入的是平年的2月份,輸入的日期不合法!請輸入的日期範圍是1~28\n");
}
}else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
if (day>=1&&day<=31) {
printf("您輸入的是大月份,輸入的日期合法\n");
break;
}else{
printf("您輸入的是大月份,輸入的日期不合法!請輸入的日期範圍是1~31\n");
}
}else if(month==4||month==6||month==9||month==11){
if (day>=1&&day<=30) {
printf("您輸入的是小月份,輸入的日期合法\n");
break;
}else{
printf("您輸入的是小月份,輸入的日期不合法!請輸入的日期範圍是1~30\n");
}
}else{
printf("請輸入合法的月份,範圍1~12月\n");
}
}
}else{
printf("請輸入合法的年份,必須小於等於今年%d\n!",TodayYear);
}
}
int a[][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};
if (month==1&&day>0&&day<31) {
date=day;
}else if(month>1&&month<13){
for (int i=1; i<month; i++) {
if (year%400==0||(year%4==0&&year%100!=0)) {
date+=a[0][i];
}else{
date+=a[1][i];
}
}
date+=day;
}else{
printf("error!");
}
printf("date=%d\n",date);
return date;
}
//3、編寫函式,返回三個整數的中間數
int middle(int a,int b,int c)//或者命名getMidValue,駝峰命名法首個單詞的首字母小寫,其他單詞首字母大寫
{
int max=a>b?a:b;
max=max>c?max:c;
int min=a<b?a:b;
min=min<c?min:c;
int mid=a+b+c-max-min;
return mid;
}
//4、編寫函式,返回正整數n中的數字的個數
int number(unsigned int n)
{
int count=1;
while (n/10!=0) {
n=n/10;
count++;
}
return count;
}
//練習2:建立⼀一對⽂檔案:operator.h operator.m實4個函式,分別求兩個整型數的加、減、乘、除
//和
int getsum(int a,int b)
{
return a+b;
}
//減
int getjian(int a,int b)
{
return a-b;
}
//乘法
int getcheng(int a,int b)
{
return a*b;
}
//除法
float getchu(int a,int b)
{
if(b!=0){
return a/b*1.0;//由整型強制變成浮點型或者a/(float)b
}else{
printf("除數不能為0!");
return -1;//表示程式出問題
}
}
//練習3:氣泡排序(無需返回值)
void sortArray(int a[],int n)
//形參傳的是(陣列名+[]即"a[]",陣列元素個數)
//實參傳送的是(陣列名aray,陣列元素個數)
{
for (int i=0; i<n-1; i++) {
for (int j=0; j<n-1-i; j++) {
if (a[j]>a[j+1]) {
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
//練習4(函式巢狀呼叫)
//求兩個數的最⼤大值!
//!求三個數的最⼤大值!
//!求四個數的最⼤大值!
int getTwoMax(int a,int b)
{
int max=a>b?a:b;
return max;
}
int getThreeMax(int a,int b,int c)
{
int max=getTwoMax(a, b);
max=getTwoMax(max, c);
return max;
}
int getFourMax(int a,int b,int c,int d)
{
int max=getThreeMax(a,b, c);
max=getTwoMax(max, d);
return max;
}
int getFiveMax(int a,int b,int c,int d,int e)
{
int max=getFourMax(a, b, c, d);
max=getTwoMax(max, e);
return max;
}
//計算s = (1*1)!+(2*2)! + (3*3)!
//1、整型數的平⽅方sql
//2、⼀一個整型數的階乘factorial
int sql(int a)
{
int result=a*a;
return result;
}
//int factorial(int n)//方法1用for迴圈實現求階乘
//{
// int result=1;
// for (int i=1; i<=n; i++) {
// result*=i;
// }
// return result;
//}
int factorial(int n)//方法2用遞迴實現求階乘
{
//if條件是遞迴的出口,不然是死迴圈
if(n<=1){//負數沒有階乘,n=0時,0的階乘是1,1的階乘也是1
return 1;
}
return factorial(n-1)*n;//如n=5,5Xfactorial(4)=5X4Xfactorial(3)=5X4X3Xfactorial(2)=5X4X3X2Xfactorial(1)=5X4X3X2X1
}
int getSqlFact(int n){
int s=0;
// int a=0;
for (int i=1; i<=n; i++) {
// a=sql(i);
// s+=factorial(a);
s+=factorial(sql(i));//遞迴呼叫,方法二
}
return s;
}
main.m檔案