《程序设计》课程笔记三——数组


一、知识总结
★数组是按顺序排列的一组具有相同类型的变量的集合。
★一个数组在内存中占一片连续的存储单元。
1、一维数组
①一维数组的定义
存储类型  数据类型  数组名  [整数1][整数2]…… [整数n];
[整数1]数值大小必须是值为正的常量
②一维数组的引用
数组名[下标]
int a[5]  下标的个数表明数组的维数
注意,C语言中数组的下标都是从0开始的,
下标既可以是常量也可以是整形表达式。
注意,引用数组元素时下标可以是整型变量。例如引用score的第i个元素用score[i],但在定义数组时不能使用变量定义数组的大小。
★定义但未初始化的数组元素的值仍然是随机数。对一位数组进行初始化时可用int score[5]={90,80,70,100,95}int score[ ]={90,80,70,100,95}
★引用a[0]数组a中第一个元素  a[5] b[5]
for(i=0;i<=5,i++)    b[i]=a[i]
memset(a,0,size of(a)) 算出a字节,把所有字节赋值为0。仅限赋值(0,1)其他都不准。
★int a [10]
    int main( )
数组定义为全局数组
2、二维数组
①二维数组的定义
一维数组元素的类型也是一维数组时,便构成了“数组的数组”,即二维数组。
二维数组定义的一般格式:
数据类型数组名[常量表达式1][常量表达式2] ;
例如: int a[4][10];
a数组实质上是一个有4行、10列的表格,表格中可储存40
个元素。第1行第1列对应a数组的a[0][0],第n行第m列对应数组元素a[n-1][m-1]。
说明:当定义的数组下标有多个时,我们称为多维数组 ,下标的个数并不局限在一个或二个,可以任意多个,如定义一个三维数组a和四维数组b:
int a[100][3][5];
int b[100][100][3][5];
多维的数组引用赋值等操作与二维数组类似。
②二维数组的引用
二维数组的数组元素引用与一维数组元素引用类似,区别在于二维数组元素的引用必须给出两个下标。
※  引用的格式为:
   <数组名>[下标1][下标2]
例: int a[3][5] 
a是二维数组(相当于一个3*5的表格) ,共有3*5-15个元素,它们是:
a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]
a[2][0] a[2][1] a[2][2] a[2][3] a[2][4] 
因此可以看成一个矩阵(表格) , a[2][3]即表示第3行第4列的元素。
③二维数组的初始化
二维数组的初始化和一维数组类似。可以将每一行分开来写在各自的括号里,也可以把所有数据写在一个括号里。
3、字符数组和字符串类型
字符数组是指元素为字符的数组。字符数组是用来存放字符序列或字符串的。字符数组也有一维、二维和三维之分。
①字符数组的定义格式
字符数组定义格式同于一般数组,所不同的是数组类型是字符型,第一个元素同样是从ch1[0]开始,而不是ch1[1]。具体格式如下:
[存储类型]char数组名[常量表达式1]…
例如:
char ch1 [5];              //数组ch1是一个具有5个字符元素的一维字符数组
char ch2[3][5];         //数组ch2是一个具有15个字符元素的二维字符数组
②字符数组的赋值
(1)用字符初始化数组
例如:
char chr1 [5]={'a','b','c','d','e'}
字符数组中也可以存放若干个字符,也可以来存放字符串。两者的区别是字符串有一结束符('\0')。反过来说,在一维字符数组中存放着带有结束符的若干个字符称为字符串。字符串是一维数组,但是一维字符数组不等于字符串。
例如: 
char chr2[5]=fa',b'c,'d,'\0);即在数组chr2中存放着一个字符串“abcd"。
(2)用字符串初始化数组
(3)数组元素赋值
(4)字符常量和字符串常量的区别③字符串的输入与输出
二、应用知识
四、应用举例
例5.17数字统计 
【问题描述】请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。比如给定范围[2, 22] ,数字2在数2中出现了1次,在数12中出现1
次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。
【算法分析]
枚举[L,R]区间的所有整数,对于每个整数x:
1.将整数x转化成字符串s,可以用sprintf(s,%d",x)来实现;
2.枚举字符串s的每个字符判断是否为2。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char s[10]; 
int main()

int l,rans=0; 
cin>>>r;
for (int i-l; i<r; ++i)

   sprintf(s,"%d",i);
   I-strlen(s);
   for (int j=0; j=1-1; ++i)
   if (s[j]=='2) +tans;
   }
 cout<<ans;
 return 0;

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值