Linux C基础(7)

本文详细介绍了二维数组的概念、定义、初始化方法(部分和全部),以及字符数组的使用。此外,还涵盖了函数的基础知识,如函数的概念、分类(库函数和自定义函数)、声明和调用,以及字符串排序和简易计算器的示例实现。
摘要由CSDN通过智能技术生成

1、二维数组

1.1 概念

本质:元素为一堆数组的数组(数组的数组)

数组的特点:(1)数据类型相同 (2)地址连续

1.2 定义

 数组:存储类型 数据类型 数组名[元素个数]
 二维数组:存储类型 数据类型 数组名[行数][列数];
 行数:表示有几个一维数组
 列数:一维数组中有多少个元素
 int a[2][3]://定义了一个长度为2的二维数组,该数组有两个元素,每一个元素又是一个长度为3的int型数组;该二维数组的大小为24字节

1.3 初始化

1.3.1 部分初始化

 int a[2][3] = {1,2,3};
 int a[2][3] = {0};//清零

1.3.2 全部初始化

 (1)降维给二维数组赋初值,即按行初始化。每一组的初始值都用{}括起来。
     int a[2][3] = {{1,2,3},{4,5,6}};//按降维给a数组元素全部初始化
     int a[3][3] = {{1},{4}};//只初始化了部分数组元素,其他元素为0.第一行为 1 0 0,第二行4 0 0.
 (2)按线性存储的形式给二维数组赋初值。
     int a[2][3] = {1,2,3,4,5,6};//线性存储全部初始化
     int a[3][3] = {1,2};//只初始化了部分数组元素,其他元素为0。第一行为 1 2 0,第二行为 0 0 0.
 (3)可以省略左边下标范围的方式,给二维数组赋初值。
     int a[2][] = {1,2,3,4};//error 列数是不能省略的
     int a[][3] = {1,2,3,4};
     注意:二维数组的行数是可以省略的,由所赋值决定,但是列数不能省略

1.4 数组的访问

1.5 数组的输入输出

案例

 #include <stdio.h>
 #define N 8
 ​
 int main(void)
 {
         int a[N][N]={0};
         int i,j=0;
         for(i=0;i<N;i++)
         {
                 for(j=0;j<=i;j++)
                 {
                         if(j==0||j==i)
                         {
                                 a[i][j]=1;
                         }
                         else
                         {
                                 a[i][j]=a[i-1][j-1]+a[i-1][j];
                         }
                         printf("%d\t",a[i][j]);
                 }
                 printf("\n");
         }
         return 0;
 }

2、二维字符数组

定义一个长度为6的字符数组,数组中的每个元素都是char型的

 char str[6] = "hello";
 char str[6] = {'h','e','l','l','o'};
 //输入
 scanf("%s",str);
 //输出
 printf("%s",str);

输入输出

3、函数

3.1 概念

一个独立的概念模块

3.2为什么要使用函数

3.2.1 使程序模块化

3.2.2 提高代码的复用率

3.3 函数的分类

3.3.1 库函数

 (1)引入头文件
 #include <stdio.h>      #include <string.h>
 (2)调用函数
 printf();
 注意:a、入参的个数,数据类型  b、返回值(可以没有,如果有的话有且仅有一个)
 函数名(实际参数列表)//函数定义的是形式参数,我们传入的为实际参数

3.3.2 自定义函数

3.3.2.1 函数定义
 存储类型 数据类型 函数名(形式参数列表)
 {
     函数体;
     返回值;
 }
 存储类型:auto(局部变量,栈)、static(局部和全局)、extern、register;
 数据类型:函数返回值的类型(如果不写,默认为int);
 函数名:见名知意;
 形式参数列表:要实现功能所需要的值,需要调用者传入;
 函数体:具体功能的实现;
 返回值:可以没有返回值,有返回值的话有且仅有一个;
3.3.2.2 调用函数
 函数名(实际参数列表);

注意

1、需要将实参的值传递给形参,实参的个数和数据类型必须和形参的一致
2、实参的值可以是变量、常量,也可以是表达式,必须是一个确定的数
3、实参和形参是两块独立的内存空间
4、传参实际上是将实参的值拷贝给形参
5、形参是局部变量,在函数调用开始的时候定义,函数调用结束时释放空间

调用时

调用结束

3.3.3 函数声明

如果不是在main函数之前定义的,就需要添加函数声明

声明:将函数头拷贝过来然后加上分号

没加声明之前

加上声明之后

注意:声明的作用帮助语法进行检查

作业

1、实现字符串的排序
2、编写一子函数,实现简易计算器
1、实现字符串的排序
#include <stdio.h>
#include <string.h>
#define N 5

int main()
{
        char arr[N][N] = {0};
        int i, j, k = 0;
        char tmp[N] = {'\0'};
        printf("请输入%d个字符数组", N); 
        for(i = 0; i < N; i++)
        {
                scanf("%s", arr[i]);    
        }
        for(i = 1; i < N; i++)
        {
                for(j = 0; j < N-i; j++)
                {
                        k = strcmp(arr[j], arr[j+1]);
                        if(k>0)
                        {
                                strcpy(tmp, arr[j]);
                                strcpy(arr[j], arr[j+1]);
                                strcpy(arr[j+1], tmp);
                        }
                }
        }
        printf("---------------------------\n");
        for(i = 0; i < N; i++)
        {
                printf("%s\n", arr[i]);
        }    
        return 0;
}

2、编写一子函数,实现简易计算器
#include <stdio.h>
#include <string.h>

void menu();
int add(int m, int n); 
int subtract(int m, int n); 
int multiply(int m, int n); 
double except(int m, int n); 

int main()
{
        int x, y, tmp=0;
        printf("输入两个整数");
        scanf("%d",&x);
        scanf("%d",&y);
        menu();
        scanf("%d",&tmp);
        switch(tmp)
        {
                case 1:printf("%d\n",add(x, y));
                       break;
                case 2:printf("%d\n",subtract(x, y));
                       break;
                case 3:printf("%d\n",multiply(x, y));
                       break;
                case 4:printf("%.2lf\n",except(x, y));
                       break;
        }
        return 0;
}
void menu()
{
        printf("选择计算方式\n");
        printf("1、加法\n");
        printf("2、减法\n");
        printf("3、乘法\n");
        printf("4、除法\n");
}
int add(int m, int n)
{
        int num = m + n;
        return num;
}
int subtract(int m, int n)
{
        int num = m - n;
        return num;
}
int multiply(int m, int n)
{
        int num = m * n;
        return num;
}
double except(int m, int n)
{
        double num =(double) m / n;
        return num;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值