赞
踩
2019215268
程序设计第五单元
第1课 一维数组的定义
一、数组概念数组就是一组相同类型的变量,他们往往都是为了表示一批对象的统一属性。数组可以是一维的,也可以是二维的或多维的。使用一堆数组时,一般是从0开始编号。
示例:for(int i=0;i<=49;i++)cin>>h[i];
数组经常应用在大批量、同一类型的数据处理任务中。
二、一维数组的定义
1.定义一维数组的格式:类型标识符 数组名 [常量表达式];
2.注意:
①类型标识符可以是任何基本数据类型,也可以是结构体等构造类型,相同类型的数组可以一起定义。
②数组名必须是合法的标识符。
③常量表达式的值即为数组元素的个数。
示例:int[50] 就表示定义一个维数组,其有50个元素,它们的编号儿0开始到49,每个元素都是int类型。
3.定义特例:
int d[50],g[100];
int a[510];
#define N 50;
int b[N];
如果要定义两个大数据,可定义两个数组。
示例:int score[10000];//或者float score[10000];
bool xb[10000];//或者char xb[10000];
三、因为数组的元素引用数组定义好后,就可以“引用”数组中的任意一个元素。引用格式为“数组名[下标]”,如h[5]、h[i2+1 ]等。
其中,下标只能为整型常量或整型表达式,值必须在数组定义的下标范围内,否则会出现“下标越界错误”。需要注意的是,不能一次引用整个数组,只能逐个引用数组的单个元素。例如,对于一个数组a来说,语句"cout <<a;"是不合法的。即数组只提供元素。
四、一维数组的存储结构
数组在计算机内存单元中式连续存储的,程序一旦执行到数组的定义,语句就会开辟出若干字节的内存单元。示例:对于以定义的数组,假设系统给它分配的内存单元,地址从1000开始,则1000就称为该数组在内存中的“首地址”。可通过此规律计算数组所占用的空间。
也就是说,整个数组所占的内存大小等于数组元素类型的大小乘以数组元素的个数。若已知数组在内存单元中的首地址和数组类型,可以计算出该数组中任意第i个元素的起始地址。
第2课 一维数组的输入与输出
一、一维数组的输入与输出流程
1.输入方法因为对数组的操作只能逐个引用单个元素,所以一维数组的输入、输出等操作,都是采用循环语句结合下标变化逐个元素进行的。
示例:
int h[100];
for(i=0;i<100;i++)cout<<h[i];
①键盘读入int h[100];for(i=0;i<100;i++) cin>h[1];
②直接赋值int h[100],a[20];for(i=0;i<100;i++)h[i]= 0;for(i=0;i<20;i++) a[i]=i2+1;
③整体赋值
(1)memset函数memset函数是给数组“按字节”进行赋值,一般用在char型数组中,如果是int类型的数组,一般赋值为0和-1。使用前需要包含头文件: #include 例如,“memset (h,0,sizeof(h));“就是将h数组所有元素均赋值为0。(2)fill函数fill函数是给数组“按元素”进行赋值可以是整个数组.也可以是部分连续元素,可以赋任何值。使用前需要包含头文件: #inelude 例如:“fill(a,a+10.5);” 就是将a数组的前10个元素赋值为5。另外C++还支持在定义四数组的同时,给所有或者部分元素赋值。
示例:
int a[10]={0,1,2,3,4,5,6,7,8,9};
int a[10]={0,1,2,3,4};//部分复初值,后面的元素自动初始化为零
int a[ ]={0,1,2,3,4,5};
注意:
①一般来说,memset函数只管数组元素清零。fill函数一般用来赋值。
②对于memset函数来说,一般只用于是0的情况,如000000000000若赋值为1,则会出现000100010001的情况,合在一起并不是1。
③若局部元素进行赋值,则其他元素值不确定,区分直接定义数组元素并赋值,除赋值元素之外,其他元素自动初始化为零。
2.应用:幸运数的划分。
【问题描述】判断一个正整数n是否能被一个“幸运数”整除。幸运数是指一个只包含4或7的正整数, 如7、47、477等都是幸运数,17、42则不是幸运数。【输入格式】一行一个正整数n,1≤n≤1000。
【输出格式】一行一个字符串, 如果能被幸运数整除输出“YES” ;否则,输出“NO"。
【输入样例】47
【输出样例】YES
【问题分析】分析发现,1~1000范围内的幸运数只有14个。于是,将这14个幸运数直接存储到一个数目lucky中,再穷举判断其中有没有一个数能整除n
#include
using namespace std;
int main(){
int n,lucky[14]={4,7,44,47,74,77,444,447,474,477,744,747,774,777};//在数组定义时,给数组赋值 scanf("%d",&n);
bool flag=false;
for(int i=1;i<14;i++){if(n%lucky[i]0) flag=true;}
if(flag) printf(“YES\n”);
else printf(“NO\n”);
return 0;}
第3课 一维数组的插入删除
一、插入与删除概念
1.在实际操作中,如果需要在数组中插入一个元素或删除某个元素,则该操作称为数组的插入操作或删除操作。
2.插入一个元素,需要先找到插入的位置(假设下标为x),将这个元素及其之后的所有元素依次往后移一位(注意要从后往前进行操作),再将给定的元素插入(覆盖)到位置x。
3.删除某一个元素,也需要先找到删除的位置(假设下标为x),将下标为x+1及其之后的所有元素依次向前移一位, 覆盖原来位置上的元素4.插人或者删除一个区间 (连续若干个数),只要重复以上单个元素的操作即可。另外,插入操作需要注意把数组下标定义的足够大。(防止越界)
二、应用举例
【题目描述】有 n 个人(每个人有一个唯一的编号,用 1~n 之间的整数表示)在一个水龙头前排队准备接水,现在第 n 个人有特殊情况,经过协商,大家允许他插队到第 x 个位置。输出第 n 个人插队后的排队情况。
【输入】第一行 1 个正整数 n,表示有 n 个人,2<n≤100。第二行包含 n 个正整数,之间用一个空格隔开,表示排在队伍中的第 1~ 第 n 个人的编号。第三行包含 1 个正整数 x,表示第 n 个人插队的位置,1≤x<n。
【输出】一行包含 n 个正整数,之间用一个空格隔开,表示第 n 个人插队后的排队情况。
【输入样例】77 2 3 4 5 6 13
【输出样例】7 2 1 3 4 5 6
#include
using namespace std;
int main(){
int a[101],n,x,t;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
scanf("%d",&x);
t=a[n];
for(int j=n;j>=x+1;j–)
a[j]=a[j-1];
a[x]=t;
for(int i=1;i<=n;i++)
printf("%d “,a[i]);
return 0;}
第4课 一维数组的查找统计
一、查找方法
一维数组的查找操作,就是在一维数组中查找有没有某个元素,它的值等于指定的值x。查找操作的结果可能是一个没找到 找到一个或者找到很多个。常见的查找算法有“顺序”查找和“二分”查找。
①顺序查找就是按照从前往后的顺序,将数组中的元素依次与要查找的数x进行比较。如果数组中的元素是有序的(递增或者递减),也可以采用二分查找。
②二分查找又称“折半”查找,其优点是比较次数少、查找速度快。若数据无序,则不能使用二分查找
③假设数组a[n]是严格递增的,每个元素都是int型,现在要查找x这个元素.则二分查找的算法框架可以写成:int left = 0, right = n-1;int find = n;//find 标记找到的位置,初始化为n,表示没找到while(left <= right) {int mid = (left + right) / 2;if(a[mid] == x){// 找到了,就标记位置,并退出循环find = mid;break;if(x < a[mid]) right =]mid - 1;//x 只能在左半部分if(a[mid]< x) left = mid + 1; //x只能在右半部分}if (find != n) printf (”%d\n" , find);else printf(“not find\n”) ;
二、应用举例
【题目描述】有 N 个人排成一排,假设他们的身高均为正整数,请找出其中符合以下条件的人:排在他前面且比他高的人数与排在他后面且比他高的人数相等。
【输入】第一行为一个正整数 N,1<N<1000,表示有多少个人。下面 N 行,每行一个正整数,表示从前往后每个人的身高,假设每个人的身高≤10000。
【输出】一行一个整数,表示满足这个条件的人数。
【输入样例】41213
【输出样例】2
【样例说明】第 3、第 4 个人满足条件。
#include
using namespace std;
int i,j,k,s=0,t1,t2,n,a[1001];
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
t1=t2=0;
for(j=1;j<i;j++)
{
if(a[j]>a[i])
t1++;
}
for(k=i+1;k<=n;k++)
{
if(a[k]>a[i])
t2++;
}
if(t1t2)
s++; }
printf("%d",s);
return 0;}
第5课 一维数组的元素排序
一、排序概念“排序”就是按照某个关键字的大小,将若干对象从小到大或者从大到小进行重新排列。关键字是对象的某一个属性,它可以是任何基本数据类型,甚至结构体等。
二、排序分类最基本的三种:选择排序、冒泡排序和插入排序。它们本质上都是通过数组中的元索比较和交换来实现的,所以关键是数组下标的分析。应用举例站队
【问题描述】给出n个同学的身高,请根据他们的身高升序排列并输出排序结果。
【输入格式】第一行1个正整数n,表示有n个同学的身高,2<n≤100第二行包含n个正整数,之间用一个空格隔开,表示n个同学的身高。每个同学的身高都在150-200厘米之间。
【输出格式】一行n 个正整数,之间用一个空格隔开 ,表示n个同学根据身高升序排列的结果。
【输人样例】7180 170 176 160 155 150 160
【输出样例】150 155 160 160 170 176 180
【问题分析】算法1 选择排序选择排序的基本思想是:每一趟从待排序的数据中,通过“打擂台”比较选出最小元素,放在这些数据的最前面。这样,第一趟把 n个数中(第1个到第”个)最小的放在第一个位置.第二趟把剩余的n-1个数中(第2个到第n个)最小的放在第二个位置,第三趟把剩余的n-2个数中(第3个到第n个)最小的放在第三个位置,…1越把剩下的2个数中(第1n-1个到第n个)最小的放在第n 1个位置,剩下的最后一个数(第n个)一定最大,自然落在了第n个位置。
选择排序
#include
using namespace std;
int main(){int n,i,j,k, temp,h[101];
cin >> n;
for(i=1;i<=n;i++)cin>>h[i];
for(i=1;i<=n;i++)
{k=i;
for(j = i+1; j <= n; j++)if(h[j] < h[k]) k = j;// 在i-n之间的最小元素temp = h[i];h[i] = h[k] ;h[k] = temp;// 将i~n之间的最小元素放到第i个位置 for(i=1;i<n;i++)cout<<5h[i]<<" “;cout << h[n] << endl;return 0;}
算法2 冒泡排序
冒泡排序的基本思想是:从第一个数开始 ,依次不断比较相邻的两个元素换。这样,一趟排序结束后,最大的元素就放在了第n个位置了。#includeusing namespace std;int main(){int n,i,j,temp,h[101];cin>>n;for(i = 1; i<=n; i++)cin >> h[i];for(i= 1;i< n; i++)for(j = 1;j<=n-i; j++)if(h[j] > h[j+1]){temp = h[j];h[j]=h[j+1];h[j+1] = temp;}for(i= 1: i< n; i++)cout << h[n] <<” “;cout<< h[n] << endl; return 0;}
对于冒泡排序.还可以做些算法“优化”。如果-趟排序下来,都没有任何“逆序”数对,即没有发生“交换”操作,则说明已经排好序了。此时,就可以立刻退出循环。
算法3 插入排序
插入排序的基本思想是:把所有待排序元素分成前后两段,前一段是已经排好序的,后一段是待排序的。每一趟都是把后一段的第个数“插人”到前段的某一个位置,保证前一段仍然是有序的。
开始时,第1个数作为前一段肯定是有序的;第一趟,把第 2个数插人进去,保证前2个数有序;第二趟,把第3个数插入进去,保证前了人个数有;第n-1趟把第n个数插入进去,保证n个数都有序
#include
using namespace std;
int main(){int n, i,j,k,temp,h[101];
cin>>n;for(i = 1; i<= n; i++) cin>>h[i];
for(i=2;i<=n;i++){temp = h[i];k=1;while(h[k] <= temp && k < i) k++;for(j = i-1; j >= k; j–) h[j+1] = h[j];h[k]= temp;} for(i=1;i<n;i++)cout<<h[i]<<” “;cout << h[n] << endl ;return 0;}
三、函数用法sort 函数用法
#include
using namespace std;
默认的sort函数是按升序排列sort(a,a+n);//两个参数分别为代排序数组的首地址和尾地址降序,
自己写cmp函数,按特定意图进行排序#include
#include
using namespace std;
int main(){
bool complare(int a;int b)
{return a>b;}
第6课 一维数组的应用举例
一、应用举例
【题目描述】某商场的仓库中有 n 件商品,每件商品的价格在 0~1000 之间(价格为 0 的商品为赠品)。现在商场经理要求将这 n 件商品按价格由低到高排序。请编程输出 n 件商品排序后的情况。
【输入】第一行一个正整数 n,表示有 n 件商品,1≤n≤100000。接下来的 n 行,每行一个整数,表示第 i 件商品的价格。
【输出】n 行,每行输出一个整数。
【输入样例】518122
【输出样例】11228分析:本题最多有00000件商品.三种排序都需要两层循环近套。其实,分析数据发现一个重要特征:数据虽然很多,但是数据范围比较小。这种情况下,可以使用另外一种排序算法——桶排序。
定义个int型数组num[1001],nun[x]记录整数x出现的次数,初始化都为0,每读到一个数,就执num[x]=num[x]+1。输出时,从0-1000穷举x,每个x输出num[x]次。
#includeusing namespace std;int main(){int a[1001],t,n,i,j; scanf(”%d",&n); for(i=1;i<=n;i++){scanf("%d",&t); a[t]++; } for(i=0;i<1001;i++) {for(j=1;j<=a[i];j++) printf("%d\n",i); } return 0;}
二、程序调试
为了更好地理解和调试程序,下面介绍C+中的“单步跟踪”。即跟踪程字中的变量值的变化,包括数组元素值的变化。首先,需要设置“断点”。如果在某一行代码处添加了斯点、那么程序运行到断点处就会暂停,不再继续往下运行,直到接到继续运行的命令.断点设置好后,所在行的背景色会变为红色。然后,就可以设置需要“跟踪”的变量。
如果要跟踪整个数组,假设int a[100],那么直接输入数组名“a”;如果要跟踪数组a的前10个元素,那么输入“a[0]@10" ;如果要跟踪数组a的第10-30个元素,则输入“a[9]@21" 最后,单步调试程序,跟踪变量值的变化。
第7课 二维数组的定义和操作
一、二维数组的定义和初始化
1.二维数组的定义如果一维数组的每 个元素又是一个一维数组,则称这种数组为“二维数组。
2.定义二维数组的一般格式为:类型标识符 数组名[常量表达式1][常量表达式2];常量表达式1的值表示第一维大小,常量表达式2的值表示第二维大小,常量表达式1和常量表达式2的乘积就是二维数组的元素个数。
例如:int h[4][5];表示数组h有4x5=20个元素,每个元素都是int型。可以把h[0]~h[ 3]作为-维数组的名字,数组h[0]又有5个元素h[0][O].h[0][1].h[0][2]h[0][3]和h[0][4]。形式上可以把二维数组看作一张表格或一个矩阵。
在二维数组定义的同时,可以进行初始化赋值。
例如:int a[2][3] ={{1,2,3},{4,5,6}};//分行初始化int a[2][3] ={1.2.3.4.5.6};//不分行初始化以上两种初始化都相当于下面6个语句:程序设计第五单元2a[0][0]=1; a[0][1]= 2; a[0][2]=3;a[1][0]=4; a[1][1]= 5; a[1][2]=6;也可以给数组中的部分元素初始化。例如:int a[2][3] = {{1,2},{4}};第一行只有2个初值,按顺序分别赋值给a[0][0]和a[0][1].第二行的初值4赋给a[1][0],其他元素默认为0。在定义二维数组时,可以省略第维的大小,但是第二维的大小不能省略。 例如,"int a[ ][5];“是允许的,被省略的第维大小根据初值的个数由系统来确定。二、二维数组的存储及元素引用二维数组的存储方式是“行优先”。先逐个存储第0行上的所有元素,再逐个存储第1行上的所有元素,依此类推。
应用举例:矩阵交换行
给定一个55的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。输入输入共6行,前5行为矩阵的每一行元素,元素与元素之间以一个空格分开。第6行包含两个整数m、n,以一个空格分开。(1 <= m,n <= 5)输出输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。
样例输入
1 2 2 1 25 6 7 8 39 3 0 5 37 2 1 4 63 0 8 2 41 5
样例输出
3 0 8 2 45 6 7 8 39 3 0 5 37 2 1 4 61 2 2 1 2
#include
#include
using namespace std;
int main(){
int a[6][6],n,m;
for(int i=1;i<=5;++i)
{for(int j=1;j<=5;++j) cin>>a[i][j];}
cin>>n>>m;
for(int i=1;i<=5;++i){
for(int j=1;j<=5;++j)
swap(a[n][j],a[m][j]); }
for(int i=1;i<=5;++i)
{for(int j=1;j<=5;++j)
cout<<a[i][j]<<" “;
cout<<endl;}
cout<<endl;
有一个N x N(N为奇数,且1 <= N <= 10)的矩阵,矩阵中的元素都是字符。这个矩阵可能会按照如下的几种变幻法则之一进行变幻(只会变幻一次)。 现在给出一个原始的矩阵,和一个变幻后的矩阵,请编写一个程序,来判定原始矩阵是按照哪一种法则变幻为目标矩阵的。 1. 按照顺时针方向旋转90度; 如: 1 2 3 7 4 14 5 6 变幻为 8 5 27 8 9 9 6 32. 按照逆时针方向旋转90度; 如:1 2 3 3 6 94 5 6 变幻为 2 5 87 8 9 1 4 7 3. 中央元素不变(如下例中的 5),其他元素(如下例中的3)与“以中央元素为中心的对应元素”(如下例中的7)互换; 如:1 2 3 9 8 74 5 6 变幻为 6 5 47 8 9 3 2 1 4. 保持原始矩阵,不变幻;
5. 如果 从原始矩阵 到 目标矩阵 的变幻,不符合任何上述变幻,请输出5输入第一行:矩阵每行/列元素的个数 N;第二行到第N+1行:原始矩阵,共N行,每行N个字符;第N+2行到第2N+1行:目标矩阵,共N行,每行N个字符;输出只有一行,从原始矩阵 到 目标矩阵 的所采取的 变幻法则的编号。
样例输入5a b c d ef g h i jk l m n op q r s tu v w x yy x w v ut s r q po n m l kj i h g fe d c b a
样例输出3
#include
using namespace std;
int main(){
int n,flag[5]={0};char a[12][12],b[12][12];char x[12][12],y[12][12],z[12][12];cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>a[i][j];x[j][n-i+1]=a[i][j];y[n-j+1][i]=a[i][j];z[n-i+1][n-j+1]=a[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>b[i][j];if(!flag[0]&&b[i][j]!=x[i][j]){flag[0]=1;}if(!flag[1]&&b[i][j]!=y[i][j]){flag[1]=1;}if(!flag[2]&&b[i][j]!=z[i][j]){flag[2]=1;}if(!flag[3]&&b[i][j]!=a[i][j]){flag[3]=1;}}}for(int i=0;i<5;i++){if(flag[i]==0){cout<<i+1<<endl;break;}}}
第九课 数字方阵
数字方阵就是一个行列数相等的二维数组,其中的每个元素都是数字。解决数字方阵问题,一般有两种方法:解析法和模拟法。解析法就是找出每一个 方阵元素f[i][j]与i、j和数组规模n的通项公式,然后直接用两重循环给数组元素赋值,相对比较容易,一般用在初始化等场合。模拟法就是把数字方阵看成一个动态的填数过程,把n2个数依次填入数组中,每填好一个数,就定位好下一个数的位置i和j应用举例:给定一个55的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。11 3 5 6 912 4 7 8 1010 5 6 9 118 6 4 7 215 10 11 20 25输入输入包含一个5行5列的矩阵输出如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,
输出"not found”
样例输入11 3 5 6 912 4 7 8 1010 5 6 9 118 6 4 7 215 10 11 20 25
样例输出4 1 8
#include
#include
using namespace std;
int main(){ int a[5][5]; int m[5],q[5];int p[5]={1,1,1,1,1};for(int i=0;i<5;i++){q[i] = 0;for (int j =0 ; j<5 ; j++){cin >> a[i][j];if (a[i][j] > q[i]){q[i] = a[i][j]; m[i] = j;}} }for(int b = 0;b <5;b++){for (int c = 0; c< 5;c++) {if (a[c][m[b]] < a[b][m[b]]) {p[b] = 0; break; } }}string x = “not found”;for(int d = 0;d<5;d++){if (p[d] == 1) {printf("%d %d %d", d+1,m[d]+1,a[d][m[d]]); x = “found”; }}if (x == “not found”){cout << x;}return 0;}
第10课 字符数组
应用举例:述Mo和Larry发明了一种信息加密方法。他们首先决定好列数,然后将信息(只包含字母)从上往下依次填入各列,并在末尾补充一些随机字母使其成为一个完整的字母矩阵。例如,若信息是“There’s no place like home on a snowy night”并且有5列,Mo会写成:t o i o yh p k n ne l e a ir a h s ge c o n hs e m o tn l e w x注意Mo只会填入字母,且全部是小写形式。在这个例子中,Mo用字母“x”填充了信息使之成为一个完整的矩阵,当然他使用任何字母都是可以的。Mo根据这个矩阵重写信息:首先从左到右写下第一行,然后从右到左写下第二行,再从左到右写下第三行……以此左右交替地从上到下写下各行字母,形成新的字符串。这样,例子中的信息就被加密为:toioynnkpheleaigshareconhtomesnlewx。你的工作是帮助Larry从加密后的信息中还原出原始信息(包括填充的字母)。输入第一行包含一个整数(范围2到20),表示使用的列数。第二行是一个长度不超过200的字符串。输出一行,即原始信息。样例输入5toioynnkpheleaigshareconhtomesnlewx样例输出theresnoplacelikehomeonasnowynightx#include#include#include<stdio.h>#include<string.h>int main() {int n;scanf("%d", &n);char s[201];scanf("%s", s);int len_s = strlen(s);int row = len_s / n;for (int j=0;j<n;j++)for (int i=0;i<row;i++){if(i%2==0)printf("%c",s[i*n+j]);elseprintf("%c",s[(i+1)*n-j-1]);}return 0;}
收获:①理解数组的含义,并学会数组的定义,掌握一维数组的元素,引用和物理存储方式②学会一位数组元素的插入和删除操作,并应用一维数组解决一些实际问题③掌握了一维数组的输入与输出操作④学会在一维数组中进行顺序查找和二分查找,并应用查找和统计解决一些实际问题⑤学会选择排序、冒泡排序、插入排序⑥用排序算法解决一些实际问题⑦学会跟踪数组元素调试程序,并应用一维数组的基本操作解决一些实际问题⑧理解二维数组的储存结构,并掌握二维数组的初始化,输入输出等基本操作⑨用二维数组解决一些实际问题。用二维数组解决一些方阵问题
感想:感觉进入本单元之后程序设计的难度上了一个台阶,其实数组的基本定义及内涵并不难理解,但数组的概念学习之后,就有更多高难度的题可以被解决了,另外,二维数组还会涉及矩阵的变化与计算。就更更更更难了(题目更难解决,总是把自己绕进去)。之前的学习中,难点重点是在循环结构上,但是在学习了数组之后重点难点变成了数组,而循环结构变成了辅助性手段,所以感觉题目更复杂,其实感觉基础真的非常非常重要,昨天又回过头去翻了循环结构,补了一些遗忘的知识点。在数组的题目中,对于循环嵌套先做到得心应手才能对数组的题有明确的目的以及正确的逻辑性,在刚开始做数组的题目时,就感觉头脑一团乱麻,满心都是“它好难,它好难,它好难”,但是深入思考后结合课本例题就发现题目会渐渐有头绪,感觉对于程序设计,在深刻理解的基础上大量刷题是很有必要的!我认为,随着学习的难度不断增加,一定一定要把现在学的基础打好!然后在做题的时候需要有紧张感但是不能慌!绝对不能怕,不能慌,根据题目多思考就能逐渐有思路,不能心急。希望自己也能沉下心来不浮躁,把现有的知识学好,少留或不留知识漏洞。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。