美文网首页
C语言基础函数

C语言基础函数

作者: 酸菜牛肉 | 来源:发表于2016-12-19 20:40 被阅读14次

    函数:

    • 优点:
      提高代码的简洁性;
      提高代码的重用性;
      有利于程序的维护;
    • 函数的分类:
      系统函数:
      printf(),scanf(),gets(),puts()
      数学函数math.h:
      sqrt(num):对num进行开根号处理
      pow(num1,num2)num1^num2;
      toupper('q');小写字母---->大写字母;
      tolower('Q');大写字母---->小写字母;
      <stdlib.h>:
      rand()%num;随机产生一个0~num的整数(srand(time(0))必须以这个作为种子,<time>);
    • 有参函数和无参函数:
      参数可以任意多个!
    • 函数的定义,函数的声明以及函数的调用:
      1)函数的定义:
      DataType FunctionName(参数列表){

    }
    2)函数的声明:
    DataType FunctionName(参数列表);
    主:
    声明时,参数列表一定要和定义时的参数列表一致!!!!
    3)函数的调用:
    FunctionName(value);
    value:数值
    注:
    函数调用时,实参值的类型,一定要和函数定义是的类型一致;
    函数名表示函数的入口地址;
    形参在调用时分配空间;
    调用时系统会默认将形参的值赋给实参。

    • 函数的返回值:
      void:无返回值
      又返回值类型
      函数遇到return则函数结束。

    全局变量:
    在函数体之外定义的变量;
    作用域:在变量定义处开始,一直到函数结束。
    局部变量:
    在函数体之内的局部变量;
    函数结束时,局部变量自动释放内存。
    若全局变量和局部变量同名,局部变量优先级要高。。
    关键字:
    auto:可省略,动态局部变量,auto int i = 5

    • static:声明静态变量;
      静态变量若定义时没有初始化,系统默认为0;
      静态变量只初始化一次。
      静态变量修饰函数:则此函数只能用于本文件,其他文件无使用。。
      static可以修饰三个:静态局部变量,静态全局变量,静态函数
    • extern:声明外部变量extern int sum;
      修饰函数:extern int test();
      声明变量或函数在外部已经定义;
    //number_compare.c
    #include<stdio.h>
    int arr[20] = {0};
    extern void randArr(int arr[]);
    int main(int argc,char *argv[]){
        randArr(arr);
        return 0;
    }
    
    //compare.c
    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    extern int arr[20];
    void randArr(int arr[]){
        int i = 0;
        srand(time(NULL));
        for(i = 0;i < 20;i++){
            arr[i] = rand()%100;
            printf("arr[%d] = %d\n",i,arr[i]);
        }
        return ;
    }
    
    
    

    需要将两个函数放在不同的文件里边,但是进行编译的时候将两个文件的进行同时编译,但是变量和函数都需要extern进行声明

    • register:寄存器变量:变量直接存放在寄存器中,CPU的寄存器个数有限,不可以定义多个寄存器变量。
      速度快。
      const:常量,不可更改其值。
      只读变量。。
      const int num = 5;
      int const num = 5;
      const int *p;
      int const *p; //值不可更改
      int *const *p; //址不可更改
      const int* const p; //值和址都不可更改。
      **
    • 指针函数和函数指针
      指针函数:
      int *test();
      返回一个局部地址是不允许的;返回的是一个地址。。
      函数指针:
      下列中说明了调用函数指针的两种方式。
    #include<stdio.h>
    int test(){
        int a = 5;
        a += 6;
        printf("a = %d\n",a);
        return a;
    }
    int main(){
        //指针的类型:int (*)();
        int (*pa)() = test;
        pa();//函数指针的两种调用方式
        (*pa)();
        return 0;
    }
    

    ** 指针的类型:int ()();*

    总结:今天需要强化的知识主要有externstatic,指针函数和函数指针,感觉尤其需要掌握extern,以前不知道extern如何使用。

    作业:

    自定义函数实现:
    1.练习使用自定函数,实现比较两个数的大小,并且返回输出最大数

    #include<stdio.h>
    int numMax(int a,int b);
    int main(int argc,char *argv[]){
        int num1 = 0;
        int num2 = 0;
        printf("input two numbers of compare:");
        scanf("%d %d",&num1,&num2);
        numMax(num1,num2);
        return 0;
    }
    int numMax(int a,int b){
        int max = a>b?a:b;
        printf("max = %d\n",max);
        return max;
    }
    

    2.练习传值和传址

    #include<stdio.h>
    void swap(int a,int b){
        int temp = a;
        a = b;
        b = temp;
        return;
    }
    void swap_pointer(int *p1,int *p2){
        int temp = *p1;
        *p1 = *p2;
        *p2 = temp;
        return;
    }
    int main(int argc,char argv[]){
        int num1 = 0;
        int num2 = 0;
        printf("input two number of exchange:");
        scanf("%d %d",&num1,&num2);
        swap(num1,num2);
        printf("swap****(num1,num2) = (%d,%d)\n",num1,num2);
        swap_pointer(&num1,&num2);
        printf("swap_pointer*******(num1,num2) = (%d,%d)\n",num1,num2);
        return 0;
    }
    

    3.编写一个程序,用于产生20个0~10之间的随机数,将这20个随机数存入数组,并通过函数统计这些随机数中某个数出现的次数。

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    #define NUM 20
    void randMath();
    void arrCount(int arr[],int buf[]);
    void printfBuf(int arr[],int index);
    int main(int argc,char *argv[]){
        srand(time(0));
        int arr[20] = {0};
        int buf[10] = {0};
        randMath(arr);
        arrCount(arr,buf);
        printfBuf(buf,10);
        return 0;
    }
    //产生随机数组
    void randMath(int arr[]){
        int i = 0;
        for(i = 0;i<NUM;i++){
            arr[i] = rand()%10;
            printf("arr[%d] = %d\n",i,arr[i]);
        }
    //  printf("arr[%d] = %d",)
    }
    //将统计的数组放入另一个数组中
    void arrCount(int arr[],int buf[]){
        int i = 0;
        int j = 0;
        for(i = 0;i < 10;i++){  
            for(j = 0;j < 20;j++){
                if(arr[j] == i)
                    buf[i]++;
            }
        }
        return;
    }
    //输出这个存放个数的数组
    void printfBuf(int arr[],int index){
        int i = 0;
        for(i = 0;i < index;i++){
            printf("数组中为'%d'的数有%d个\n",i,arr[i]);
        }
        return;
    }```
    4.由小到大输出三个输入3个数,按由小到大的顺序输出,要求两个数的值交换的功能用函数实现。
    

    include<stdio.h>

    void swapPointer(int *p1,int *p2);
    int main(int argc,char *argv[]){
    int num1 = 0;
    int num2 = 0;
    int num3 = 0;
    printf("input three number:");
    scanf("%d %d %d",&num1,&num2,&num3);
    swapPointer(&num1,&num3);
    printf("num1 = %d,num2 = %d,num3 = %d\n",num1,num2,num3);
    return 0;
    }
    void swapPointer(int *p1,int *p2){
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
    return;
    }

    相关文章

      网友评论

          本文标题:C语言基础函数

          本文链接:https://www.haomeiwen.com/subject/hhxtvttx.html