带你学C带你飞 | 数组 | 可变长度数组 | 字符串处理函数 | 二维数组

这篇博客详细介绍了C语言中的数组,包括数组的定义、初始化、访问及课后作业。接着讲解了可变长度数组的概念,以及字符串处理函数,如strlen、strcpy等,还提供了相关的课后作业。最后,探讨了二维数组的定义、初始化和使用,包括二维数组的课后作业。博客旨在帮助读者深入理解C语言中数组的使用和处理。
摘要由CSDN通过智能技术生成

一、数组

1.数组

  有些时候,我们需要保存类型一致、数量庞大的数据,这时就需要引入数组。数组的定义:存储一批同类型数据的地方。数组的语法:

数据类型 数组名[元素个数]

  • 元素个数只能是常量或者常量表达式
int a[6];
char b[24];
double c[3];

  数组是不能动态定义的,也就是说C语言不允许在程序运行过程中去修改数组空间大小的。
  那么,如何访问数组中的元素呢?使用方括号。语法格式:数组名[下标]。数组的第一个元素是从下标0开始的。关于下标,程序员可能经常会出现数组越界的问题。
  循环与数组的关系:因为我们常常需要使用循环来访问数组,因此,循环中的初始值一般为0。
在这里插入图片描述
举个栗子:用数组存放班里10位同学的数学成绩,并计算出平均数。

#include <stdio.h>
#define NUM 10

int main()
{
          
        int s[NUM];
        int i,sum = 0;
        
        for (i=0;i<NUM;i++)
        {
          
                printf("请输入第%i位同学的成绩:",i+1);
                scanf("%d",&s[i]);
                sum += s[i];
        }       

        printf("成绩录入完毕,该次考试的平均分是:%.2f\n",(double)sum/NUM);
        return 0;
} 
[liujie@localhost sle17]$ gcc test.c && ./a.out
请输入第1位同学的成绩:79
请输入第2位同学的成绩:89
请输入第3位同学的成绩:88
请输入第4位同学的成绩:100
请输入第5位同学的成绩:98
请输入第6位同学的成绩:56
请输入第7位同学的成绩:78
请输入第8位同学的成绩:99
请输入第9位同学的成绩:95
请输入第10位同学的成绩:82
成绩录入完毕,该次考试的平均分是:86.40

  在数组定义时,就给其赋值,称之为数组的初始化

  • 将数组中所有元素初始化为0,可以这么写:

    int a[10] = {
         0};//事实上这里只是将第一个元素赋值为0
    
  • 如果是赋予不同的值,那么用逗号分隔开即可:

    int a[10] ={
         1,2,3,4,5,6,7,8,9,0};
    
  • 你还可以只给一部分元素赋值,未被赋值的元素自动初始化为0

    int a[10] ={
         1,2,3,4, 5,6};
    //表示为前边6个元素赋值,后边4个元素系统自动初始化为0
    
  • 有时候还可以偷懒,可以只给出各个元素的值,而不指定数组的长度(因为编译器会根据值的个数自动判断数组的长度):

    int a[] = {
         1,2,3,4, 5,6,7,8, 9, 0};
    

2.数组的课后作业

  1. 假设有数组初始化为 int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 请问表达式 (a[1] + a[7]) / a[2] 的值应该是多少?
    答:(a[1] + a[7]) / a[2] == (2 + 8) / 3 == 3。
  2. 如果需要定义一个字符数组来存放字符串 “FishC”,这个数组的长度至少应该定义多少个元素合适?
    答:至少需要 6 个元素,依次存放 ‘F’, ‘i’, ‘s’, ‘h’, ‘C’ , ‘\0’。
  3. 用户是否可以自己直接输入字符串结束标志 ‘\0’?
    答:不可以!因为 ‘\0’ 代表 ASCII 码为 0 的字符,它不是一个可以显示的字符,而是一个“空操作符”,表示什么也不做。因此用它来作为字符串结束标志不会产生什么副作用。
  4. 有一个数组占用了 13 个字节的内存空间,你知道它是什么数组吗?
    答:字符数组,因为只有 char 类型的数组才可能存在奇数(个字节)的空间。
  5. 用户输入年份,打印该年每个月的天数。
#include <stdio.h>

int main()
{
   
        int days[] = {
   31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int i, year;
        printf("请输入一个年份:");
        scanf("%d", &year); 

        if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
        {
   
                days[1] = 29;
                                                                                                }

         for (i = 0; i < sizeof(days) / sizeof(days[0]); i++)
         {
   
                 printf("%2d月份:%d天\n", i+1, days[i]);
         }

                 return 0;
}
[liujie@localhost sle18]$ gcc test4.c && ./a.out
请输入一个年份:2020
 1月份:312月份:293月份:314月份:305月份:316月份:307月份:318月份:319月份:3010月份:3111月份:3012月份:31

二、可变长度数组

1.可变长度数组

  在C99中定义,当数组的长度在运行的时候才被决定,就是用变量作为数组的长度,就是可变长度数组。
举个栗子:

#include <stdio.h>

int main()
{
          
        int n,i;
        
        printf("请输入字符的个数:");
        scanf("%d",&n);
        
        //定义数组
        char a[n+1];
        
        printf("请开始输入字符:");
        getchar();
        
        for (i=0;i<n;i++)
        {
          
                scanf("%c",&a[i]);
        }       
        
        a[n] = '\0';
        printf("你输入的字符串是:%s\n",a);
        return 0;
} 
[liujie@localhost sle17]$ gcc test1.c && ./a.out
请输入字符的个数:17
请开始输入字符:I love Fishc.com!
你输入的字符串是:I love Fishc.com!

三、字符串处理函数

1.字符串处理函数

  前面已经知道,C语言是没有字符串这一数据类型的。那么,C语言是如何存放和表示字符串的呢?有下面两种方式:

  • 字符串常量(一旦确定下来,就没有办法改变)

    "FishC","小甲鱼","鱼C工作室"
    
  • 字符类型数组(灵活的方式)
    数组中的每一个元素表示一个字符,最后添加一个表示字符串结束的结束符’\0’

定义字符类型数组有如下方式:

  • 先定义指定长度的字符数组,再给每个数组单独赋值,这种方式比较笨!

    int main
    {
         
    	char str[10];
    	str[0] = 'F';
    	str[1] = 'i';
    	str[2] = 's';
    	str[3] = 'h';
    	str[4] = 'C';
    	str
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值