C_Language_07

C_Language_07

函数:函数是具有特定功能的代码段。
    printf("hello world!\n");//不调用函数
//1.无参,无返回值
示例:
void hello(){
    printf("hello world!\n");
}
int main(int argc, const char * argv[]) {
    hello();
    return 0;
}
int main(int argc, const char * argv[]) {
    for (int i = 0; i < 10; i++) {
        hello();//无参无返回值
    }
    return 0;
}

//2.无参,有返回值
示例:
int peopleCount(){
    return 20;
}
int main(int argc, const char * argv[]) {
    int a = peopleCount();//无参有返回值
    printf("%d\n",a);
//    一个人有两只手,定义变量r = 2;
    int r = 2;
    int hands = r * peopleCount();
    printf("%d ",hands);
    return 0;
}

//3.有参,有返回值
示例:
int max(int a,int b){
    return a > b ? a : b;
}
int main(int argc, const char * argv[]) {
    int a = max(20,30);//有参有返回值
    printf("%d ",a);
    return 0;
}
int max1(int a,int b){
    if (a > b) {
        return a;
    }else{
        return b;
    }
}
int main(int argc, const char * argv[]) {
    int a = max1(20,30);
    printf("%d\n",a);
    return 0;
}

//4.有参,无返回值(打印一个数)
示例:
void number(int a){
    printf("%d\n",a);
}
int main(int argc, const char * argv[]) {
    number(5);//有参无返回值
}

函数调用中,形参会拷贝实参内容,传递参数是给函数传送信息的一种⽅方法。即形参的改变不会改变实参的值,形参只拷贝了实参的副本
对其进行操作,实参不会改变,形参则会改变
示例:
void cheng5(int a, int b){
    printf("a = %d b = %d\n",a,b);
    a = a * 5;
    b = b * 5;
    printf("a = %d b = %d\n",a,b);
}
int main(int argc, const char * argv[]) {
    int x = 4, y = 6;
    cheng5(x, y);
    printf("x = %d y = %d\n",x,y);
    return 0;
}

数组作为参数
示例:
void changArray(int a[]){
    for (int i = 0; i < 5/2; i++) {
        int temp = a[i];
        a[i] = a[5 - 1 -i];
        a[5 -1 -i] = temp;
    }
    for (int i = 0; i < 5; i++) {
        printf("%d ",a[i]);
    }
}
int main(int argc, const char * argv[]) {
    int a[5] = {1,2,3,4,5};
    changArray(a);
    printf("\n");
    for (int i = 0; i < 5; i++) {
        printf("%d ",a[i]);
    }
    return 0;
}

示例:
void swap(int *a, int *b){
    printf("a = %d b = %d\n",*a,*b);
    int i = 0;
    int *temp = &i;
    *temp = *a;
    *a = *b;
    *b = *temp;
    printf("a = %d b = %d\n",*a,*b);
}
int main(int argc, const char * argv[]) {
    int a[5] = {1,2,3,4,5};
    swap(&a[1], &a[3]);
    for (int i = 0; i < 5; i++) {
        printf("%d ",a[i]);
    }
    return 0;
}

递归函数:C语⾔允许函数实现体内再次调用函数本⾝身。这种调⽤方式称为递归调用,这个函数称为递归函数。
注意:递归⼀定要有出口。
示例:
int factorial(int n){
    if (n == 1) {
        return 1;
    }else{
        return n * factorial(n - 1);
    }
}
int main(int argc, const char * argv[]) {
    int n = 0;
    printf("请输入:");
    scanf("%d",&n);
    printf("%d! = %d\n",n,factorial(n));
    return 0;
}

变量作用域:即变量的有效范围
局部变量与全局变量:函数体内定义的变量是局部变量,函数体外定义的变量是全局变量。
注意:外部变量和局部变量可重名,但是在局部变量作⽤域内只能访问局部变量。
示例:
int main(int argc, const char * argv[]) {
    int a1 = 5;
    if (a1 > 0) {
        int a11 = 3;
        printf("%d\n",a1);
    }
    printf("%d\n",a1);
    if (a11 > 0) {
        printf("%d\n",a11);
    }
    return 0;
}


练习1.编写函数int sumValue(int n):计算1到n的和。
示例:
int sumValue(int n){
    int sum = 0;
    for (int i = 1; i <= n; i++) {
        sum += i;
    }
    return sum;
}
int main(int argc, const char * argv[]) {
    int n = 0;
    printf("请输入:");
    scanf("%d",&n);
    printf("%d ",sumValue(n));
    return 0;
}
练习2.编写函数int sumValudmn(int m, int n):计算m-n的和
int sumValudmn(int m, int n){
    int sum = 0;
    for (int i = m; i <= n; i++) {
        sum += i;
    }
    return sum;
}
int main(int argc, const char * argv[]) {
    int a,b;
    printf("请输入起始值和终止值:");
    scanf("%d%d",&a,&b);
    printf("%d \n",sumValudmn(a, b));
    return 0;
}

posted @ 2015-11-28 14:29  DH_Fantasy  阅读(87)  评论(0)    收藏  举报