第二周总结

二维数组

1.定义

<存储类型><数据类型><数组名>[常量表达式][常量表达式]

特别注意的是,在C语言中,二维数组内存中存放的顺序是按行存放的,就是先顺序存放第一行再存放第二行,以此类推。同时,要注意的是二维数组可以省略行。

2.二维数组初始化

(1)降维给二维数组赋初值,即按行初始化:

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};

(2)按线性存储形式给二维数组赋初值:

int a[3][3]={1,2,3,4,5,6,7,8,9};

(3)省略左边下标范围的方式:

int a[][3]={{1,2,3},{1,2,3},{1,2,3}};

典型例题:有一个3x4的二维数组,要求输出其最大的元素的值和该元素值的行号和列号。

 字符串数组

1.定义

字符串指的是以'\0'作为结束字符的一组字符,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。特别要注意的是,在字符串中,'\0'作为字符串的结束符标志。

2.字符串的初始化

char a[6]={'a','b','c','d','e','\0'};

 

 外部输入读取:

字符串外部输入读取时候,字符串的头文件  #include<string.

3.字符串的输入输出

逐个字符输入输出,用格式符%c输入或者输出一个字符。整个字符串一次性输入或者输出,用%s格式符。

char c[ ]="nanjing";

printf("%s",c);

 也可以用puts和gets函数:

gets(字符数组):其作用是将一个字符串输出到终端。

puts(字符数组):其作用是从终端输入一个字符串到字符数组,并得到一个函数值。

 4.strcat函数

strcat函数又被称为是字符串追加/连接函数,它的功能就是在一个字符串后面追加上另外一个字符串。

 特别要注意的是明确实现的思路:找到目标字符串中的‘\0’以及将字符串src追加过去(包含’\0’)

5.strlen函数

 该函数从第一个字符开始计算字符串中字符数,直到遇到空字符即'\0'为止,然后返回计算字符数的长度,包括'\0'。

 

 

6.strcmp函数

 strcmp函数语法为“int strcmp(char *str1,char *str2)”,其作用是比较字符串str1和str2是否相同,如果相同则返回0,如果不同,前者大于后者则返回1,否则返回-1。

 

 

函数

1.函数的定义

函数是一个完成特定功能的代码模块,通常有参数,也可以没有参数,通常要求返回值,也可以是空值。

<数据类型><函数名称>(<形式参数说明>)

{

        语句序列;

        return  (表达式);

}

函数名称:这是函数的实际名称,函数名和参数列表一起构成函数签名。

参数:参数经销商占位符,当函数被调用时,向参数传递一个值,这个值被称为实际参数。

2.函数的声明

函数的声明会告诉编译器函数名称及如何调用函数,函数的实际主体可以单独定义。

函数类型 函数名(参数类型1,参数类型2...);

函数类型 函数名(参数类型1, 参数名,参数类型2,参数名2...);

3.函数的调用

函数的使用也叫函数的调用:

函数名称(<实际参数>)

函数名称是一个标识符,符合标识符的命名规则;

实际参数:需要确切的数据,也可以具有确定值的表达式。

4.函数的嵌套调用

C语言的函数定义是互相平行的,独立的,也就是说,在定义函数时,一个函数内不能定义另一个函数,也就是不能嵌套函数定义,但是可以嵌套调用函数,也就是说,在调用一个函数的过程中,可以调用另一个函数。

 5.函数的递归调用

递归调用:在调用一个函数的过程中又出现直接或间接的调用该函数本身,称为函数的递归调用。

这种调用都是无终止的调用,显然程序中不可能出现这种状况,而是应该出现有限次数的、有终止的递归调用、这可以用if语句来控制。

经典例题:

#include <stdio.h>
int fun(int m)
{
    if(m<0)
    {
        return -1;
    }
    else if(m==0||m==1)
    {
        return 1;
    }
    else
    {
        return m*fun(m-1);
    }
    
}

int main()
{
    int m;
    printf("input m: ");
    scanf("%d",&m);
    ret=fun(m);
    printf("1!+2!+...+%d!=%d\n",m,ret);

    return 0;
}

斐波那契数列:

#include<stdio.h>
int fun(int n)
{
    if(n==0||n==1)
    {
        return 1;
    }
    else
    {
        return fun(n-2)+fun(n-1);
    }
}

int main()
{
    int n,ret;
    printf("input n: ");
    scanf("%d",&n);
    for(i=0;i<=m;i++)
    {
        ret=fun(i);
        printf("fun(%d)=%d\n",i,ret);
    }

    return 0;
}

6. 数组与函数

数组元素作为函数实参:数组元数可以作为函数实参,不能作为函数形参。因为形参是在函数被调用时临时分配的存储单元,不可能作为一个数组元素单独分配存储单元(数组是一个整体,在内存中连续的一段存储单元)。在用数组元素作为函数实参时,把实参的值传给形参,是值传递的方式。

经典例题:输入10个数,要求输出其中最大的元素和该数是第几个数。

#include<stdio.h>
void fun(int b[],int n)
{
    int max=b[0],row=0;
    for(int j=0;j<n;j++)
    {
        if(max<b[j])
        {
            max=b[j];
            row=j+1;
        }
    }
    printf("最大值数在第%d个,max=%d\n",row,max);
}


int main()
{
    int a[10];
    for(int i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    fun(a,10);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值