数组也学完了,觉得数组挺好用的,尤其是在处理大量数据和少量数据的多次运算时,对了,还有处理矩阵的变换,用二维数组就很好解决。至于字符串,目前我只会用来处理几个单词的关系,比如说有几个不同的单词或者单词都相同不相同。觉得以前学循环时做的画矩形画三角形的题就有一点数组的影子,都是用了二重循环,只不过没有输入到数组里,不过输入到数组中倒是会有些麻烦。
数组的知识点:首先定义数组,可以在main函数外定义也可以在main函数里面定义。再是输入,输入就是用一个循环:
for(int i=1;i<=n;i++)
cin>>a[i];
这就是一维数组的输入形式,注意当你定义a[10]的时候,这个数组最后面的数组数据是a[9],a[10]是不包含于这个数组的。调用数组时,用哪一个就用他的代号a[?],大量调用时还是用循环。输出时用的也是循环:
for(int i=1;i<=n;i++)
cout<<a[i];
二维数组就是用二重循环了,多维数组以此类推,不过多维数组我还处理不了。
下面举几个例子:
1:向量点积的计算:
在线性代数、计算几何中,向量点积是一种十分重要的运算。
给定两个n维向量a=(a1,a2,...,an)和b=(b1,b2,...,bn),求点积a·b=a1b1+a2b2+...+anbn。
输入
第一行是一个整数n。1 <= n <= 1000。
第二行包含n个整数a1,a2,...,an。
第三行包含n个整数b1,b2,...,bn。
相邻整数之间用单个空格隔开。每个整数的绝对值都不超过1000。
输出
一个整数,即两个向量的点积结果。
程序如下:
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int a[1000];
int b[1000];
int main()
{
int n,m,s=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
cin>>b[i];
for(int i=1;i<=n;i++)
{
m=a[i]*b[i];
s=s+m;
}
cout<<s;
return 0;
}
这是一道很简单的题,考验的是数组最基本的用法,输入数组和调用,甚至数组输出都没有考察。
还有一个关于做游戏的问题:有M个小孩子围成一圈做游戏,每个小孩子都有一个初始的号码。游戏有X步,每一步的操作方法都相同:每个小孩子把自己手上的号码改写成自己原来的号码加上右手边的小孩子的号码除以100的余数。请问你:经过X步之后,每个小孩子手上的号码是多少? 比如:有3个初始编号为{1,2,3}的小孩子,第一步操作完成之后,他们的编号变成了{1+2,2+3,3+1}即{3,5,4}。
输入
输入有N组测试数据。每组测试数据有2行: 第一行包含M和X。 第二行包含M个不超过100的整数。
输出
输出数据有N行,每行是一组测试数据的结果。注意:两个数字之间只有一个空格。
程序如下:
#include<iostream>
int a[100];
using namespace std;
int main()
{
int n,m,x,l=1,o;
cin>>n;
while(l<=n)
{
l++;
cin>>m>>x;
for(int i=1;i<=m;i++)
cin>>a[i];
for(int j=1;j<=x;j++)
{
o=a[1];
for(int k=1;k<=m;k++)
{
if(k==m)
a[k+1]=o;
a[k]=(a[k]+a[k+1])%100;
}
}
for(int u=1;u<=m;u++)
cout<<a[u]<<" ";
cout<<endl;
}
}
这个题考察了对数组数据处理的能力,当然还有数组的输出,难度不大但是比较难想,做了好久才做出来,而且做的挺复杂的,不过做出来就好。
经过数组的学习,感觉到c语言的难度开始上升了,一些题目已经有些做不下去了的感觉,头发也开始掉了,难道说真应了那句话:计算机好学,就是头有点凉。虽然难学,但我相信自己能够学好计算机的。