C语言基础知识之一维数组

一维数组

认识一维数组

  • 多个普通变量的集合,并且这些变量的名字是有规律,内存是连续的
  • 不存在数组下标 = 数组长度
  • 数组计数从0开始
  • 数组最大下标是数组长度减1
  • 数组名的含义:整个数组的首地址

数组的创建与自动初始化

//数组的创建
//类型 数组名 [数组长度]
int iArr[5];
float fArr[8];
char cArr[3];
//数组初始化
//全部初始化
int iArr[5] = {1,3,4,5,6};
//部分初始化
int iArr[5] = {1,3,6}; //没有初始化的部分默认为0
//缺省数组长度,数组根据数组元素自动推断
int iArr[] = {1,3,6,5,2,8,9};
//别致的写法
int array['B'];   //等效    int array[66]
//错误写法一
int iArr[5];
iArr[5] = {1,3,4,5,6};
//错误写法二
int iArr[] = {};
//错误写法三
iArr[5] = {1,3,4,5,6,4,6};  //数组元素不能大于数组长度

数组的创建与手动初始化

int iArr[3]={0};
for(int i=0;i<3;i++)
{
    scanf("%d",&iArr[i]);	
    //i=0  scanf("%d",&iArr[0]) 
    //i=1  scanf("%d",&iArr[1]) 
    //i=2  scanf("%d",&iArr[2]) 
}
//错误写法
int  size=0;
scanf("%d",&size);
int array[size];		 //数组长度必须是常量

数组的遍历(打印数组)

int iArr[3]={1,2,3};
for(int i=0;i<3;i++)
{
    printf("%d\t",iArr[i]);
}

字符数组

字符数组创建与初始化

  • 普通字符数组与数字类数组没啥区别

    char cArr[3]={'A','B','C','D'};   //只有在创建数组的时候初始化
    //错误写法
    cArr[3]={'A','B','C'};
    //输入
    for(int i=0;i<3;i++)
    {
        //scanf_s("%c",&cArr[i])
    	scanf_s("%c",&cArr[i],1);    
    }
    //输出
    for(int i=0;i<3;i++)
    {
    	putchar(cArr[i]);
        //printf("%c",cArr[i]);
    }
    

字符串数组

  • 字符串结束标记 :‘\0’
  • 字符串的专有格式空字符: %s
  • %s工作机制: 从一个地址开始 访问到\0 结束 %s对应的是一个地址
char cArr[3]={'A','B','\0'};		//字符串
char cArr[3]="AB";   				//等效 char cArr[3]={"AB"};

字符串注意事项

  • %s 的方式只能打印字符串,不能打印字符数组,如果缺少’\0’ 将会打印乱码

  • 为了有效避免忘记加’\0’ 养成用空的字符串初始化一个字符数组,如

    char str[20]="";
    // char str[]=""; 错误写法
    
  • 字符串输入 scanf 遇到空格时候会截取当前字符,结束输入,

  • 也就是 带有空格的字符串输入要采用字符串处理函数: gets做输入,在其他编译中直接gets ,在vs中用的是:get_s(地址,长度); 与之对应的打印函数是:put_s(要打印的数组名);

  • 字符和字符串输入前,需要清空缓冲区

数组的常规操作

数字类型的数组

  • 数据处理

  • 充当计数器

    	//统计数组元素出现的次数
    	int num[] = { 1,2,3,4,2,3,1,2,4,5,6,5,4,5,7,6,7,8,8,9,7,9 };
    	int nCount[10] = { 0 };
    	for (int i = 0; i < 22; i++)
    	{
    		nCount[num[i]]++;
    	}
    	for (int i = 0; i < 10; i++)
    	{
    		if (nCount[i] != 0) 
    		{
    			printf("%d 出现了 %d\n", i, nCount[i]);
    		}
    	}
    
    • 数组求和
    int iArr[3] = { 1, 2, 3 };
    	int sum = 0;
    	for (int i = 0; i < 3; i++) {
    		sum += iArr[i];
    	}
    	printf("sum = %d\n", sum);
    
    • 数组有序插入

      printf("请输入:");
      			scanf_s("%d", &temp);
      			data[curSize++] = temp;
      			for (int i = curSize - 1; i > 0; i--) {
      				if (data[i] < data[i - 1]) {
      					int temp = data[i];
      					data[i] = data[i - 1];
      					data[i - 1] = temp;
      				}
      			}
      
    • 数组元素删除

      printf("输入要删除的数据:");
      			scanf_s("%d", &temp);
      			for (int i = 0; i < curSize; i++) {
      				if (temp == data[i]) {
      					//printf("%d\t", i);
      					pos = i;
      					break;
      				}
      			}
      			//所有数组的删除都是伪删除,数组内存是栈区内存
      			for (int i = pos; i < curSize; i++) {
      				//移位操作
      				data[i] = data[i + 1];
      			}
      			break;
      
    • 数组 元素查找

      //查找
      			printf("输入要查找找的数据:");
      			scanf_s("%d", &temp);
      			for (int i = 0; i < curSize; i++) {
      				if (temp == data[i]) {
      					printf("%d\t", i);
      				}
      			}
      			printf("\n");
      
    • 数组元素更改

      //修改
      			printf("输入要修改的数据:");
      			scanf_s("%d", &temp);
      			for (int i = 0; i < curSize; i++) {
      				if (temp == data[i]) {
      					//printf("%d\t", i);
      					pos = i;
      					break;
      				}
      			}
      			//修改匹配到的数据
      			printf("请输入新的数据:");
      			scanf_s("%d",&temp);
      			data[pos] = temp;
      			printf("修改成功!\n");
      
    • 打印所有数组元素

      for (int i = 0; i < curSize; i++) {
      				printf("%d\t", data[i]);
      			}
      			printf("\n");
      
  • 一维数组冒泡排序

    //冒泡排序
    	int iArr[] = { 12,23,45,14,67,87,38,57,83,10 };
    	int size = 10;
    	for (int i = 0; i < size - 1; i++) //控制元素从第几个开始冒泡
    	{
    		for (int j = 0; j < size - 1 - i; j++)   //描述比较
    		{
    			//小----->大
    			if (iArr[j] > iArr[j+1])
    			{
    				int temp = iArr[j];
    				iArr[j] = iArr[j + 1];
    				iArr[j + 1] = temp;
    			}
    		}
    
    	}
    	//打印数组
    	for (int i = 0; i < size; i++)
    	{
    		printf("%d\t", iArr[i]);
    	}
    	printf("\n");
    

字符类型的数组

  • 处理字符
  • 字符串处理
//数组计数功能功能
	char cStr[100] = "";
	gets_s(cStr, 100);
	//求输入的字符串的长度  可见长度
	int i = 0;
	while (cStr[i] != '\0')
		i++;
	printf("数组的长度是:%d", i);
	//统计输入的字符串中的字母,数字,其他符号的个数
	i = 0;
	int count[3] = {0};
	while (cStr[i] != '\0')
	{
		if (cStr[i] >= 'A' && cStr[i] <= 'Z') 
			count[0]++;
		else if (cStr[i] >= 'a' && cStr[i] <= 'z')
			count[0]++;
		else if (cStr[i] >= '0' && cStr[i] <= '9')
			count[1]++;
		else 
			count[2]++;
		i++;
	}
	printf("字母:%d,数字:%d,其他字符:%d\n", count[0], count[1], count[2]);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想写代码的懒大王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值