《2017年10月23日》【连续013天】
标题:学习有关一维数组的部分知识
内容:A.观看MOOC5.1,5.2,5.3,5.4;
B.(a).通过观看5.1,学习了数组的定义,数组是可以用来表达类型相同的元素的集合,集合名就是数组名。数组里元素的编号叫下标,
定义方法 类型名 数组名[元素个数];(元素个数(数组的长度)必须是常量或常量表达式且为正整数);T a[ N ],(T为类型名)a数组占用大小为N*sizeof(T)。
数组下标一般是0~N-1,若数组a的地址为p,则变量a[i]的地址就是p+i*sizeof(T);
输入10个整数,输出它们的倒序(运用数组);
using namespace std;
#define NUM 10 //使用常量符号便于修改
int a[NUM];//数组一般不要定义在main中,尤其是大数组;
int main ()
{
for(int i=0;i<NUM;++i)
cin>>a[i];
for(int i=NUM-1;i>=0;--i)
cout<<a[i]<<" ";
return 0;
}输入1 2 3 4 5 6 7 8 9 8,输出8 9 8 7 6 5 4 3 2 1;
(b).观看5.2,学习了筛法求n以内素数;
#define MAX_NUM 20
char isPrime[MAX_NUM + 10];//+10可以防止数组越界;最终如果isPrime[i]为1,则i为素数;
int main ()
{
for(int i=2;i<=MAX_NUM;++i)
isPrime[i] =1;
for(int i=2;i<=MAX_NUM;++i){
if(isPrime[i])
for(int j=2*i;j<=MAX_NUM; j+=i)
isPrime[j] = 0;//将i的倍数标记为非素数;
}
for(int i=2;i<=MAX_NUM;++i)
if(isPrime[i])
cout<< i <<endl;
return 0;
}输入20,输出2 3 5 7 11 13 17 19;
(c).观看5.3,5.4;学习了数组初始化和数组越界;
数组初始化 类型名 数组名[常量表达式]={值,值………………};{ }中的数据技即是各元素的初值;
({ }中的值的数量可少于元素个数,未被赋值的元素自动赋0值;当给全部元素赋值时,[ ]中可不填)
通过部分程序了解了如何用数组取代复杂分支结构;
其一:输入1~7,输出"Monday"~"Sunday",其他情况输出“Illegal"
#include<iostream>
#include<string>//使用string必备的“头文件”
using namespace std;
string weekdays[]={ //string是字符串类型
"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
int main()
{
int n;
cin>>n;
if(n>7 || n<1)
cout<<"Illegal";
else
cout<<weekdays[n-1];
return 0;
}
数组越界即元素下标超出范围,但编译器不会报错,是经常出现的大BUG,可能会导致运行出错,元素下标可以是任何整数,导致了越界,
如:int a[10]; a[-2]=10;a[10]=100;可能会写入别的变量的内存空间,或者写入指令的内存空间;
明日计划:学习二维数组;