输入两个学生的成绩,我们可以定义两个变量来存储,可是如果输入全班的学生的成绩,怎么存放呢?全校学生的成绩呢?这时,我们需要用到数组.
数组:是相同数据类型组成的集合。
一维数组声明:数据类型数组名[大小]
声明和定义:数据类型数组名[大小]={数组元素}
例子:
inta[6]={10,20,30,40,};数组下标数组元素随机值取数组值a[0]a[1]a[2]a[3]a[4]a[5]a[x]越界
测试代码:
#includeiostreamusingnamespacestd;intmain(){ inta[6]={10,20,30,40}; for(inti=0;i=10;i++){ couta""; } return0;}
最重要特性:连续!连续!连续!的一块内存
这样对吗?
intn;cinn;inta[n];//对吗?
constintN=;inta[N];
c++不支持变量定义数组长度,虽然c支持
选择题:
c++中数组a[10],下面表述正确的是()
A:a代表了是a[1]的地址B:a代表了整个数组的元素C:a代表了数组的首地址D:a的值可以改变一维数组的初始化
依次赋值inta[3]={1,2,3};
部分赋值inta[3]={1,};
单个赋值inta[3];a[0]=1;a[1]=2;
这样对吗?为什么
inta[10]={10,1,};intb[10];b=a;//对吗?c++为什么不支持呢?数组大小
sizeof(a)//返回a占用内存的字节数.注意不是数组元素的个数.
数组的越界数组下标不能是负数
下标应该在数组长度之内
inta[N];//数组元素的下标值为0-(N-1)for(inti=0;in;i++){if(aa[i-1]){//不小心就越界了,还有可能是a[n+1];}}
每次写完数组的循环,都要带入数组下标的边界值确认是否越界
内存操作函数memcpy
void*memcpy(void*destin,void*source,unsignedn);
从存储区source复制n个字节到存储区destin
inta[10]={10,1,};intb[10];memcpy(b,a,sizeof(b));
memset
void*memset(void*buffer,intch,size_tn);
buffer是指针或者数组,ch是要初始化的变为的字符,count是buffer的长度
//清零inta[];memset(a,0,sizeof(a));//极大值memset(a,0x7f,sizeof(a));//-1memset(a,-1,sizeof(a));数组类型
inta[];charstr[];longlonglla[];
一维数组的应用模板输入,输出和遍历
inta[0];intn;scanf("%d",n);for(inti=0;in;i++){scanf("%d",a);//依次读入每个元素}for(inti=0;in;i++){printf("a[%d]=%d",i,a);//打印数组,用于调试}
删除
删除第i个,后面的元素要前移
插入
i下标插入x,原来i和i之后的元素要后移动.
例题1题目描述一个学校有个教室,每个教室有一盏灯,开关控制,拉一下,是开,再拉一下是关.教室编号从1-.开始时,所有的灯都是关的.第一个学生把所有的灯的开关都拉一下,第二个学生把所有编号是2的倍数的教室的灯开关都拉1下.第三个学生把所有编号是3的倍数的灯都拉1下...以后每个学生都是如此.当第个学生拉完开关后,哪些灯是亮的呢?
分析灯开关状态怎么表示?教室怎么表示?
#includeiostream#includecstringusingnamespacestd;intmain(){ inta[]; memset(a,0,sizeof(a)); for(inti=1;i=;i++){ for(intj=1;j*i=;j++){ if(a[i*j]==1) a[i*j]=0; else a[i*j]=1; } } for(inti=1;i=;i++){ if(a==1) couti""; } return0;}例题2
P旗鼓相当的对手
题目描述现有N(N≤0)名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过的自然数)。如果某对学生i,j的每一科成绩的分差都不大于5,且总分分差不大于10,那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。
输入格式第一行一个正整数N。
接下来N行,每行三个整数,其中第i行表示第i名同学的语文、数学、英语成绩。最先读入的同学编号为1。
输出格式输出一个个整数,表示“旗鼓相当的对手”的对数。
输入输出样例
08091
输出2
输入
分析数据怎么存储呢?怎么进行两两比较呢?
参考代码
#includeiostream#includecstdio#includecmathusingnamespacestd;constintMAXN=2;intn,a[MAXN],b[MAXN],c[MAXN],sum[MAXN];intans;intmain(){ cinn; for(inti=1;i=n;i++){ cinabc; sum=a+b+c; } for(inti=1;i=n;i++){ for(intj=i+1;j=n;j++){ if(abs(a-a[j])=5 abs(b-b[j])=5 abs(c-c[j])=5 abs(sum-sum[j])=10) ans++; } } coutans; return0;}作业
作业1:
P小鱼比可爱
P校门外的树
P梦中的统计
P珠心算测验
作业2:
P小鱼的数字游戏
P旗鼓相当的对手
P[AHOI]彩票摇奖
P开灯
云帆编程老师联系方式:
云帆老师