1. 程式人生 > >《IOS_C語言》函式分類、函式宣告和定義、函式呼叫、形參實參、函式巢狀呼叫

《IOS_C語言》函式分類、函式宣告和定義、函式呼叫、形參實參、函式巢狀呼叫


#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檔案