第二周学习总结

一、二维数组

1、二维数组的定义

        二维数组的定义方法和一维数组类似,其一般形式为:

类型说明符 数组名[常量表达式][常量表达式]

例如:float a[3][4];

        C语言中,二维数组在内存中存放的顺序是按行存放的,即在内存中先顺序存放第一行元素,接着再来存放第二行元素。

2、二维数组的初始化

(1)分行给二维数组赋初值;

(2)将所有数据放在一个花括号内;

(3)可以对部分元素赋初值。

3、二维数组的举例

        有一个3*4的矩阵,求出其中的最大值并输出最大值和其所在的行号和列号。

#include <stdio.h>
int main()
{
    int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int i=0,j=0;
    int row,col;
    int max=a[0][0];
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            if(a[i][j]>max)
            {
                max=a[i][j];
                row=i;
                col=j;
            }
        }
    }
    printf("max:%d\n",max);
    printf("row:%d\n",row);
    printf("col:%d\n",col);

    return 0;
}
/*输出结果是
max:12
row:2
col:3
*/

二、字符数组

1、字符数组的定义

        定义字符数组的方法与定义数值型数组的方法类似,例如:

char c[10];

以上就定义了c[]为字符数组,包含10个元素。

2、字符数组的初始化

        把各个字符依次赋给数组中各元素。例如:

char c[10]={'I',' ','l','o','v','e',' ','y','o','u'};

把这10个字符依次赋给c[0]~c[9]这10个元素。

3、字符数组的外部输入读取

#include <stdio.h>
int main()
{
    char c[3][3];
    int i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%c",&c[i][j]);
            printf("%c ",c[i][j]);
        }
        printf("\n");
    }
    return 0;
}

4、字符串外部输入读取

字符串的头文件 #include <string.h>

#include <stdio.h>
#include <string.h>
int main()
{
    char a[3];
    scanf("%s",a);
    printf("%s\n",a);
    return 0;
}

5、字符数组的输入输出

        字符数组的输入输出可以像前面的输入输出数字一样,用格式输入输出控制符。

        逐个字符输入输出,用格式"%c"输入或者输出一个字符。

        将整个字符串一次输入或者输出,用"%s"格式符。

        也可以用puts和gets函数。其一般形式如下:

puts(字符数组):其作用是将一个字符串输出到终端,因此该函数用的不是很多。

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

6、字符串函数

(1)strcat 字符串连接函数

strcat(字符数组1,字符数组2)

其作用是把两个字符数组中的字符串连接起来,把字符串2接到1后面,结果放到字符串1中。

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[30]="China";
    char str2[]="NJ";
    printf("%s\n",strcat(str1,str2));

    return 0;
}
/*输出结果是
ChinaNJ
*/

连接前两个字符串后面都有'\0',连接后只在新串后面保留'\0'。

字符串1必须足够大,以便于容纳字符串2。

(2)strlen 测字符串长度的函数

strlen(字符数组)

它是测量字符串长度的函数。函数的值为字符串中的实际长度。

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[30]="China";
    printf("%ld\n",strlen(str1));

    return 0;
}
                                  
/*输出结果是
5
*/

(3)strcpy 字符串复制函数

strcpy(字符串1,字符串2)

作用是将字符串2复制到字符串1中。

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[30];
    char str2[30]="China";
    strcpy(str1,str2);
    printf("str1:%s\n",str1);
    printf("str2:%s\n",str2);

    return 0;
}
/*输出结果是
str1:China
str2:China
*/

(4)strcmp 字符串比较函数

strcmp(字符串1,字符串2)

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[30]="Beijing";
    char str2[30]="Chengdu";
    printf("%d\n",strcmp(str1,str2));

    return 0;
}
/*输出结果是
-1
*/

结果若小于0,则表示str1小于str2;

结果若大于0,则表示str1大于str2;

结果若等于0,则表示str1等于str2.

 三、函数

1、函数调用

        一个c语言程序可由一个主函数和若干其他函数构成,每个函数实现一个特定的功能。主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或者多个函数调用多次。下图是一个程序中函数调用的示意图。

函数声明的作用:把有关函数的信息(函数名、函数类型、函数参数的个数和类型)告诉编译器。

2、函数的定义

(1)定义无参函数

        无参函数的函数名后的括号中是空的,没有任何参数。其一般形式为

类型名  函数名(){

    函数体

}

(2)定义有参函数

一般形式为

类型名 函数名(形式参数列表){

    函数体

}

#include <stdio.h>
int main()
{
    int max(int x,int y);//声明max函数
    int a=10,b=20;
    int c;
    c=max(a,b);//调用max函数
    printf("%d\n",c);
    return 0;
}   
int max(int x,int y)
{
    int z;
    z=x>y?x:y;
    return z;
}
/*输出结果是
20
*/

        在上述的函数调用过程中,主调函数和被调函数之间存在数据传递的关系。在定义函数的时候函数名后面括号的变量名成为“形式参数”(简称“形参”)。在调用语句c=max(a,b)中,a和b称为“实际参数”(简称“实参”)。

        在C语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • 返回类型
  • 函数名称
  • 参数
  • 函数主体

3、函数声明

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

在函数声明中,参数的名称并不重要,只有参数的类型是必需的。

4、函数参数

        如果函数需要使用参数,则必须声明接受参数值的变量,这些变量被称为函数的形式参数。

当调用函数时,有两种向函数传递参数的方式:

5、函数的嵌套调用 

输入四个整数,找出其中最大的整数。

#include <stdio.h>
int max2(int a,int b)
{
    if(a>=b)
    {
        return a;
    }
    else
    {
        return b;
    }
}
int max4(int a,int b,int c,int d)
{
    int max;
    max=max2(a,b);
    max=max2(max,c);
    max=max2(max,d);
    return max;
}
int main()
{
    int a,b,c,d;
    int max;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    max=max4(a,b,c,d);
    printf("%d\n",max);
    return 0;
}

7、函数的递归调用

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

用递归的方法求阶乘:

#include <stdio.h>
int fun(int n)
{
    if(n<=1)
    {
        return 1;
    }
    else
    {
        return n*fun(n-1);
    }
}
int main()
{
    int n;
    int ret;
    scanf("%d",&n);
    ret=fun(n);
    printf("%d!=%d\n",n,ret);

    return 0;
}

斐波那契数列:

F (0)=0,F (1)=1, F (n)=F (n - 1)+F (n - 2)(n ≥ 2,n ∈ N*)

#include <stdio.h>
int fib(int i)
{
    if(i==0)
    {
        return 0;
    }
    if(i==1)
    {
        return 1;
    }
    return fib(i-1)+fib(i-2);
}
int main()
{
    int i;
    scanf("%d",&i);
    printf("%d\n",fib(i));

    return 0;
}

四、数组与函数

1、数组元素作为函数实参

        数组元素可以作为函数实参,不能作为函数形参。在用数组元素作为函数实参时,把实参的值传给形参,是“值传递”的方式。

输入10个数,要求输入其中值最大的元素和该数是第几个数。

#include <stdio.h>
int max(int a[],int x)
{
    int m=0,n,i;
    m=a[0];
    for(i=1;i<10;i++)
    {
        if(m<a[i])
        {
            m=a[i];
            n=i;
        }
    }
    printf("%d\n%d\n",m,n+1);
}
int main()
{
    int a[10]={0};
    int i=0;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    max(a,10);

    return 0;
}

2、数组名作为函数参数

输入4位数字,要求输出这4个数字字符,每两个数字间空一个空格。

#include <stdio.h>
#include <string.h>
void insert(char str[])
{
    int i;
    for(i=strlen(str);i>0;i--)
    {
        str[2*i]=str[i];
        str[2*i-1]=' ';
    }
    printf("%s\n",str);
}
int main()
{
    char str[40];
    scanf("%s",str);
    insert(str);

    return 0;
}
/*输入1990
结果为1 9 9 0
*/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值