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;
}
相关推荐
FoldWinCard2 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
2601_954526753 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
qq_448011163 小时前
C语言中的变量和函数的定义与声明
android·c语言·开发语言
零涂毕业设计3 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
tedcloud1234 小时前
OmniRoute怎么部署?开源AI模型路由平台Linux部署教程
linux·服务器·人工智能·开源·音视频
SakitamaX4 小时前
LVS(Linux Virtual Server)概念详解
linux·运维·lvs
小张同学a.4 小时前
Linux系统管理
linux·运维
阿龙的工作记录5 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
代码村新手5 小时前
Linux的基本指令
linux·运维·服务器
aaaameliaaa6 小时前
指针之总结
c语言·笔记·算法