C语言(一维数组)

如果对你有帮助,请点个免费的赞吧,谢谢汪。(点个关注也可以!)\n\n如果以下内容需要补充和修改,请大家在评论区交流~

思维导图

1.数组

由一个或多个相同的数据类型组成的集合

特点:

数据类型相同

内存连续

1 . 1 一维数组

格式 :

存储类型 数据类型 数组名元素个数

int arr5;

nn:只有在定义时,表示元素个数;其他任何情况下都表示索引

访问 :

数组名索引索引从0开始

a0 第一个元素

a4 第五个元素

int a5={5,6,7,8,9};

printf("%d %d %d\n",a0,a2,a4);

char b5={'h','e','l','l','o'};//数据类型保持一致

数组名 :

数组名也是数组的首地址,是一个地址常量,不能为左值(=左边),不能被修改

int a5={5,6,7,8,9};

printf("%p %p\n",a,&a0); //地址编号一样

数组大小 :

int a5={5,6};

数据类型*元素个数 4*5=20

sizeof

printf("%ld\n",sizeof(a));

元素个数:决定数组最多存储数据个数

初始化:

  1. 全部初始化

int a5={5,6,7,8,9};

  1. 部分初始化

int a5={5,6};//56000

未赋值的部分,值默认为0

int a5={}; //00000

  1. 未初始化

inta5;

值为随机值

a0=5;

a1=6;

循环遍历 :

int a5={};

for(int i=0;i<5;i++)

scanf("%d",&ai);

for(int i=0;i<5;i++)

printf("%d\n",ai);

打印出输入的这五个数中的最大值

思路:输入完五个数后,假设第一个数最大,暂时为max

把max和剩下的四个依次比较

比较过程中遇见了更大值,对max重新赋值

比较结束,打印max

问题:打印出输入的这五个数中的最大值,及位置,亲们可以试试

内存分配 :

内存连续,地址编号差值取决于数据类型的大小

char 地址差1

int 地址差4

清0函数:

1.bzero

#include <strings.h>

void bzero(void *s, size_t n);

功能:数组元素清零

参数:s:要清零的数组的首地址 n:字节大小

返回值:无

2.memset

#include <string.h>

void *memset(void *s, int c, size_t n);

功能:数组元素清零

参数:s:要清零的数组的首地址 n:字节大小c:要设置的值,设置为0

返回值:清零的数组的首地址

1.2字符数组

用来存储字符串,用" "包裹,以'\0'为结束标志

输入输出 :

  1. for

for(int i=0;i<5;i++)

scanf("%c",&bi);

for(int i=0;i<5;i++)

printf("%c",bi);

  1. %s

    char b[6]={};
    scanf("%s",b);
    printf("b:%s\n",b);
    //输入helloworld时,只有hello赋值成功
    //scanf默认遇到空格或回车认为赋值结束
    // scanf("%[^\n]",b);

  2. gets puts

get:

char *gets(char *s);

功能:终端输入字符串

参数:数组首地址

返回值:数组首地址

puts:

int puts(const char *s);

功能:终端输出字符串

参数:数组首地址

返回值:输出字符个数

char b33={};

gets(b);

puts(b);

特别的输入输出

复制代码
#include<stdio.h>

int main(int argc, char const *argv[])
{
    char b[33] = {};
    int i = 0,num = 0;
    scanf("%[^\n]",b);
    while (b[i] != '\0')
    {
       // printf("%c ",b[i]);
        if (b[i] == 'y')
        {
            num++;
        }
        i++;
    }
    printf("%d\n",num);
    return 0;
}

题目:

3.输出数组中的最大值

1.

复制代码
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a[5] = {};
    for (int i = 0; i < 5; i++)
    {
        scanf("%d", &a[i]);
    }
    int max = a[0], min = a[0];
    for (int i = 1; i < 5; i++)
    {
        max = max > a[i] ? max : a[i];
        min = min < a[i] ? min : a[i];
    }
    printf("%d\n", max);
    return 0;
}

7.打印斐波那契数列前10位:

1.先赋值再打印

复制代码
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a[10] = {1, 1};
    for (int i = 2; i < 10; i++)
    {
        a[i] = a[i - 1] + a[i - 2];
    }
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", a[i]);
    }

    printf("\n");

    return 0;
}

2.一边赋值一边打印

优化版:

复制代码
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a[10] = {1, 1};
    for (int i = 0; i < 10; i++)
    {
        if (i>=2)
        {
            a[i] = a[i - 1] + a[i - 2];
        }
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}

启发:

如果遍历同一个数组遍历2次范围是包含关系,可以内嵌if条件,if内条件为交集的反集

8.bzero(清0的运用)

复制代码
#include<stdio.h>
#include<strings.h>
int main(int argc, char const *argv[])
{
    int a[5] = {99,88};
    for (int i = 0; i < 5; i++)
    {
        printf("%d\n",a[i]);
    }
    putchar(10);
    bzero(a,sizeof(a));//bzero清0
    for (int i = 0; i < 5; i++)
    {
        printf("%d\n",a[i]);
    }
    
    return 0;
}

9.memset

复制代码
#include<stdio.h>
#include<string.h>
int main(int argc, char const *argv[])
{
    int a[5] = {22,33};
    memset(a,0,sizeof(a));
    for (int i = 0; i < 5; i++)
    {
        printf("%d",a[i]);
    }
    putchar(10);
    memset(a,'c',sizeof(a));
    for (int i = 0; i < 5; i++)
    {
        printf("%c",a[i]);
    }
    putchar(10);

    memset(a,'1',sizeof(a));
    for (int i = 0; i < 5; i++)
    {
        printf("%c",a[i]);
    }

    putchar(10);
    return 0;
}

11。判断如果定义字符串错过后,以下定义方法是否正确

复制代码
 例:判断以下三种赋值方式是否正确
char a[10];
1)a[10]="hello";
2)a="hello";
3)strcpy(a,"hello");

12.练习:

终端输入一个字符串,打印其中'a'出现的次数

复制代码
#include<stdio.h>

int main(int argc, char const *argv[])
{
    char b[33] = {};
    int i = 0,num = 0;
    scanf("%[^\n]",b);
    while (b[i] != '\0')
    {
       // printf("%c ",b[i]);
        if (b[i] == 'y')
        {
            num++;
        }
        i++;
    }
    printf("%d\n",num);
    return 0;
}
相关推荐
代码村新手8 小时前
Linux-环境变量
linux
kmomo..8 小时前
Linux 驱动开发学习笔记:I2C 子系统从入门到实践
linux·驱动开发·学习
敲上瘾8 小时前
分布式系统——Redis哨兵:自动故障转移与选举原理
linux·数据库·redis·分布式·缓存·微服务
卢锡荣8 小时前
乐得瑞Type-c接口产品描述
c语言·开发语言
倔强的石头1068 小时前
【Linux指南】进程通信系列(二):匿名管道 —— pipe 的本质、fork 继承与四种读写规则
java·linux·运维
一条破秋裤8 小时前
09-读写多个sys属性文件
linux
Shadow(⊙o⊙)8 小时前
仿muduo实现高并发服务器——时间轮timewheel.cpp
c语言·c++
小张成长计划..8 小时前
【Linux】25:线程概念和控制
java·linux·jvm
硅基手札8 小时前
【Linux 内核专栏 18】进程间通信 IPC(下)— Socket·Netlink·fd 三件套·futex·线程同步
linux·运维·驱动开发·单片机·嵌入式硬件·mcu·架构
djjjx.8 小时前
Linux进程篇(二):深入浅出 [进程概念与进程父子关系]:从底层原理到实战应用
linux·运维·服务器