程序设计课程笔记3数组结构—2018212747—朱文静—数学3班

一、数组结构知识点总结

(一)一维数组

   1.定义    数据类型 数组名[整数1][整数2]…[整数n]

                  eg:int a[5];

注: ①下标从零开始且数组大小必须是值为正的常量,不能为变量;

         ②数组定义后的初值仍为随机数一般需要初始化;

         ③下标越界是大忌;

  2.容错处理

     例:编程实现显示用户输入的月份(不包括闰年的月份)拥有的天数

#include<stdio.h>
#define MONTHS 12
int main()
{
    int DAYS[MONTHS]={31,28,31,30,31,30,31,31,30,31,30,31};
    int month;
    do{
        scanf("%d",month);
      }while(month<1||month>12);
    printf("The number of days is %d\n",days[months-1];
    return 0;
}

 3.c++ sort函数

   #include<algorithm>

   using namespace std;

   默认的sort函数是按升序排的

   sort(a,a+m);//两个参数分别为待排序数组的首地址和尾地址

 4.例题

 (1)约瑟夫问题

 (2)求10个数中的最大值,并记录在数组中的位置

#include<iostream>
using namespace std;
int main()
{
    int a[100000];
    cin>>n;
    for(i=1;i<n;i++)
    {
        cin>>a[i];
    }
    max=a[0];l=0;
    for(i=1;i<n;i++)
    {
        if(max=a[i])
        {
            max=a[i];
            l=i;
        }
        cout<<l<<endl;
    }
    return 0;
}

 (3)数组的选择排序

#include<iostream>
using namespace std;
int main()
{
    int a[100000];
    int i,j,max,l;
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    for(j=0;j<n-1;j++)
    {
        l=j;
        for(i=1;i<n;i++)
        {
            if(a[l]<a[i])
                l=l;
            if(l!=j) i=a[l],a[l]=a[j],a[j]=i;
        }
    }
    return 0;
}

(二)二维数组

 1.定义    数据类型 数组名[常量表达式1][常量表达式2]

               eg: int a[4][10];(a数组实质上是一个有4行10列的表格,可储存40个元素)

注:二维数组存储若干段文字、字符节 

 2.引用

    与一维数组引用类似,区别在于二维数组元素的引用必须给出两个下标

    格式为  <数组名>[下标1][下标2]

 3.初始化

    和一维数组类似,可以将每一行分开来写在各自的括号里,也可以把所有数据写在一个括号里

    eg: int direct[4][2]={{1,0},{0,1},{-1,0},{0,-1}}

 4.例题

    杨辉三角

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int a[11][11];
        a[1][1]=1;
    for (int i=2; i<=10; ++i)
    {
        a[i][1]=1; a[i][i]=1;
        for (int j=2; j<=i-1; ++j)
        {
            a[i][j]=a[i-1][j-1]+a[i-1][j];
        }
    }
    for (int i=1; i<=10; i++)
    {
        if(i!=10) cout<<setw(30-3*i)<<" ";
        for(int j=1;j<=i; j++) cout<<setw(6)<<a[i][j];
        cout<<endl;
    }
    return 0;
}

(三)字符数组和字符串类型

 1.字符数组的定义及格式

    定义:是指元素为字符的数组,用来存放字符序列或字符串的,也有一维、二维之分

    格式: char 数组名[常量表达式1]…

 2.字符数组的赋值

    (1)存放字符:char chr[5]={'a','b','c','d','e'}

              存放字符串: char chr[5]={'a','b','c','d','\0'}

   (2)赋值 char chr[3];

                      chr[0]='a';chr[1]='b';chr[2]='c';

注:字符常量只能是单个字符,字符串常量可以是多个字符

 3.字符串的输入输出

(1)输入

          ①scanf语句   scanf("%s",字符数组名);

          ② gets语句    gets(字符数组名);

(2)输出

          ①printf语句    printf("%s",字符数组名);

          ②puts语句     puts(字符数组名);

二、数组结构可以解决的问题

 1.数组逆序重放

 2.倒置排序

 3.数学中的逻辑运算问题

 4.与矩阵有关的问题

 5.扫雷游戏地雷数的计算

三、学习的感受

       在一开始接触到数组结构,做练习题的前几个的时候还感觉挺容易的,到后面的练习题就感觉越来越难了,数组结构涉及到的知识面也不亚于循环结构,知识点也很广泛,也更考察学生的数学逻辑判断能力和运算能力。对于我来说,还是有些力不从心的,有时候就只会写个开头结尾,最核心的程序写不出来,不知道怎么用程序去表达。还是要坚持,不坚持怎么知道你行不行,一定不要放弃,所以我会经常问同学问题,问学习c语言厉害的同学。所以要通过多做题去提高自己,丰富自己。加油吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值