学习C语言第三天

发布时间 2023-03-30 23:00:29作者: 林奇老师

  前一天学习的数组,接下来要学习的是二维数组和函数。

一.二维数组

1.1引入场景

  有三个小队,每个小队都有10个人,对小队进行一些操作。

1.2二维数组的定义和表达形式

  二位数组通常称为矩阵  类型说明符 数组名[常量表达式][常量表达式]  例:

int arr[3][3];    //一个三行三列的二维数组

1.3二维数组的遍历

#include<stdio.h>

int main()
{
    int arry[2][3] = {{5,4,3},{3,8,9}};
    int i,j;
    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("%d,%d,%d \n",i,j,arry[i][j]);
        }
    }
    
    return 0;
}

1.4一些注意事项

  二维数组可以不写列,但是一定要写行

1.5练习题

  有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号

#include<stdio.h>

int main()
{
    int i;
    int j;
    int hang;
    int lie;
    
    int arry[3][4] = {1,8,12,2,3,67,4,5,6,5,90};
    int max = arry[0][0];
    for(i=0;i<3;i++){
        for(j=0;j<4;j++){
            if(max < arry[i][j]){
                max = arry[i][j];
                hang = i;
                lie = j;
            }
        }
    }
    printf("%d %d %d",max,hang+1,lie+1);
    
    return 0;
}

二.函数

2.1为什么要用函数

  2.1 1.避免代码冗长
  2.1.2.模块化的设计思路
  2.1.3.按功能划分,每个函数代表一个功能
2.2函数三要素

   函数名 参数列表 返回值   c语言要求,再程序中用到的所有函数,必须“先定义,后使用”

2.3函数的定义和调用

  类型名 函数名(){ 函数体 }

  2.3.1定义无参函数

#include<stdio.h>

void printWelcome()
{
    printf("=======\n");
    printf("欢迎\n");
    printf("=======\n");
}

int main()
{
    printWelcome();
    return 0;
}

  2.3.2定义有参数返回值的函数

#include<stdio.h>

int getDataFromX(int data)
{
    return 2*data + 1;
}

int main()
{
    int x;
    int y;
    puts("请输入一个数:");
    scanf("%d",&x);
    y = getDataFromX(x);
    printf("x = %d,y = %d",x,y);
    return 0;
}

  2.3.3定义空参数

    占坑用

2.4形式参数和实际参数

  传递参数,传递是值 形参和实参值相同,但是地址空间不同。形式参数的生命周期:栈空间,被调用的时候才为形式参数申请内存,调用结束,内存才被释放。编程案例:输入两个函数,要求输出其较大值,用函数实现

#include<stdio.h>

int getMaxFromTwoData(int data1,int data2)//形式参数
{
    return data1>data2?data1:data2;
}
 
int main()
{
    int a;
    int b;
    int max;
    puts("请输入两个数:");
    scanf("%d %d",&a,&b);
    max = getMaxFromTwoData(a,b);//实际参数
    printf("a = %d,b = %d,max = %d",a,b,max);
    return 0;
}

2.5函数调用过程

2.6函数调用的条件

  1.函数已被定义2.调用库函数3.函数的声明

2.7函数的嵌套

   案例:输入四个数,函数的方式找出最大值

#include<stdio.h>

int getMaxFromTwoData(int data1,int data2)
{
    return data1>data2?data1:data2;
}

int getMaxFromThreeData(int data1,int data2,int data3)
{
    int ret = getMaxFromTwoData(data1,data2);
    return ret>data3?ret:data3;
}

int getMaxFromFourData(int data1,int data2,int data3,int data4)
{
    int ret = getMaxFromThreeData(data1,data2,data3);
    return ret>data4?ret:data4;
}

 
int main()
{
    int a;
    int b;
    int c;
    int d;
    int max;
    puts("请输入四个数:");
    scanf("%d%d%d%d",&a,&b,&c,&d);
    max = getMaxFromFourData(a,b,c,d);//实际参数
    printf("a = %d,b = %d,c = %d,d = %d,max = %d",a,b,c,d,max);
    return 0;
}

2.8函数的递归

  工作时应该尽量减少递归的使用。

  编程案例:用递归法求n!

#include<stdio.h>

int factorial(int data)
{
    if(data == 0){
        return -1;
    }else if(data ==1){
        data = 1;
        return data;
    }else{
        return data*factorial(data-1);
    }
}

int main()
{
    int data;
    int res;
    
    puts("请输入一个数");
    scanf("%d",&data);
    
    res = factorial(data);
    
    printf("阶乘为%d",res);
}