C语言基础——一维数组

本文详细介绍了C语言中数组的特性,如内存连续性、数据类型一致性、索引、初始化、遍历、清零函数以及字符数组的区别。同时涵盖了冒泡排序和选择排序的实现示例,展示了数组在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组

特点:

内存连续
数据类型相同

分类:

一维数组

格式:存储类型 数据类型 数组名[元素个数]
auto int arr[5];

1.访问时,索引从0开始
2.char a[5]={97,98,99,100,101};

输出是a,b,c,d,e(自动与ascii码联系)

3.数组名也是首地址
4.字节大小:

例int a[5]; 字节数4*5=20
sizeof(a);

5.初始化:

完全初始化: int a[5]={2,3,5,8,9};
部分初始化:
int a[5]={9},其余部分为0;
int a[5]={};全为0;
未初始化:
int b[33];值为随机值;

6.数组遍历
for(int i=0;i<5;i++)
{
    printf("%d\n",a[i]);
}
7.清零函数

7.1bzero
#include <strings.h>
void bzero(void *s, size_t n);
功能:清空数组
参数:数组首地址,n:清空的字节大小
返回值:无
7.2memset
#include <string.h>
void *memset(void *s, int c, size_t n);
功能:清空数组
参数:数组首地址,c替换的数据,n:清空的字节大小
返回值:数组首地址

8.字符数组

字符数组存放字符串
字符串结束标志’\0’ 而单纯字符则没有’\0’(重要)
如char a1[]={‘a’,‘b’,‘c’} 数据类型是字符型,sizeof(a1)==3
而char a2[]={“abc”} 数据类型是字符串型,sizeof(a2)==4 要加上’\0’
char a[6]={“hello”}; //sizeof(a) 6
char b[6]=“hello”; // 6
char c[]=“hello”; //6
char d[33]=“hello”; //33
数组的空间大小:若已明确数组大小,则空间就为多大。若没明确如c[],则输入字符串就多一个’\0’,但字符不多;

9.输入输出

输入方法:

char a[99];
1.scanf("%s",a);//输入的字符串不包括空格
改进:scanf("%[^\n]",a);//可以输入空格
2.gets(a);//可以输入空格
        //功能:从终端输入字符串
        //参数:目标字符串的首地址
        //返回值:目标字符串的首地址

3.char a[]="abc jkasd";//直接定义输入;

输出方法:

1.for(int i=0;i<sizeof(a);i++)
    printf("%c",a[i]);//单个输出字符
2.printf("%s",a);//整个输出字符串
3.puts(a); //功能:向终端输出字符串
            //参数:字符串首地址
            //返回值:输出字符个数

strcpy(s,“string”) (实现将字符串添加到字符数组中,从首地址开始);

10.计算字符串实际元素个数

strlen
#include <string.h>
size_t strlen(const char *s);
功能:计算字符串实际元素个数
参数:字符串首地址
返回值:实际元素个数
sizeof和strlen的区别:

  1. sizeof是关键字,strlen是函数
  2. sizeof计算实际开辟的空间大小,strlen计算字符串实际元素个数
  3. sizeof计算包括’\0’,strlen不包括,chara[]=“hello”;
    注意 strlen中‘\t’算字符,'\‘表示\字符。。。’\0’才不计算
重要应用

冒泡排序:

#include<stdio.h>
#include<string.h>
#define N 5
int main(int argc, char const *argv[])
{
    int n,a[100];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
   for(int i=0;i<n-1;i++)//循环n-1次
    for(int j=0;j<n-i-1;j++)
    {
        if(a[j]>a[j+1])     //当数组中前一个大于后一个时交换
        {
            int t;
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
        }
    }
     for(int i=0;i<n;i++)   //输出数组元素
    printf("%d ",a[i]);
 return 0;

}

冒泡2(效率更高,全部排完结束即停止,不用再多循环):

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int n,a[100],bound,exchange;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);
        bound=n;
   while(exchange!=0)
   {
        exchange=0;
    for(int i=0;i<bound-1;i++)
    {int t;
        if(a[i]>a[i+1]){
        t=a[i];
        a[i]=a[i+1];
        a[i+1]=t;
        exchange=i+1;
        }
    }
    bound=exchange;
   }
    for(int i=0;i<n;i++)
    printf("%d ",a[i]);
    return 0;
}

选择排序:

#include<stdio.h>
int main(int argc, char const *argv[])
{
    int n,a[999];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    scanf("%d",&a[i]);          //输入数据
    for(int i=0;i<n-1;i++)
    {   int flag=i;             //标记最小值位置
        for(int j=i+1;j<n;j++)
        {
            if(a[flag]>a[j])flag=j;  //若出现更小值,标记更新
        }
        if(flag!=i)  //判断最小值位置是否变化,若有变化则交换                   //若有变化 ,则交换
        {
            int t;
            t=a[i];
            a[i]=a[flag];           
            a[flag]=t;       //最小值与当前值交换
        }
    }                              
    for(int i=0;i<n;i++)
    printf("%d ",a[i]);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值