- 要求二
题目7-4 fibonacci数列
1.实验代码
1 #include<stdio.h>
2 int main()
3 {
4 int i,f[12]={1,1};
5 for(i=2;i<=11;i++)
6 f[i]=f[i-1]+f[i-2];
7 for(i=0;i<=11;i++)
8 {
9 printf("%6d",f[i]);
10 if((i+1)%3==0)
11 printf("\n");
12 }
13 return 0;
14 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量i(循环变量)和整数型数组f(长度为12);
- 第二步:使用循环结构为数组f赋初值;
- 第三步:使用循环按格式输出数组f,循环内嵌套条件语句判断换行。
注解:数组前两个数要事先赋初值,还有要注意fibonacci数列的计算式。
(2)流程图

3.本题调试过程碰到问题及解决办法
换行判断条件为"i%3==0",导致错误,因为数组是从0开始计数的。

将判断条件改为"(i+1)%3==0"即可,也可以定义数组长度为13,然后从1开始计数。
题目7-14 组个最小数
1.实验代码
1 #include <stdio.h>
2 int main()
3 {
4 int count[10],i,x;
5 for(i=0;i<10;i++)
6 {
7 scanf("%d",&count[i]);
8 }
9 for(i=1;i<10;i++)
10 {
11 if(count[i]!=0)
12 {
13 printf("%d",i);
14 count[i]--;
15 break;
16 }
17 }
18 for(i=0;i<10;i++)
19 {
20 for(x=count[i];x>0;x--)
21 {
22 printf("%d",i);
23 }
24
25 }return 0;
26 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量i和x(循环变量)、数组count(长度为10);
- 第二步:使用循环为数组count赋初值;
- 第三步:使用循环判定第一个最小非零数并输出,再令该数下标对应的数组值减一;
- 第四步:使用双循环结构顺序输出所给数字即可。
注解:用所有所给数字组最小数首位非零。
(2)流程图

3.本题调试过程碰到问题及解决办法
本题首次编程陷入了惯性误区,将输入10个数顺势思考为输出最多也为10个数,所以在输出循环的时候只给了10次输出,导致错误。

将输出双循环上限取消,分别以10个数字i变量和每个数字的次数x变量为循环变量控制输出。
题目7-15 冒泡法排序
1.实验代码
1 #include <stdio.h>
2 int main()
3 {
4 const int n;
5 int i,j,x,k;
6 scanf("%d %d",&n,&k);
7 int a[n];
8 for(i=0;i<n;i++)
9 scanf("%d",&a[i]);
10 for(j=0;j<k;j++)
11 {
12 for(i=0;i<n-j;i++)
13 {
14 if(a[i]>a[i+1])
15 {
16 x=a[i];
17 a[i]=a[i+1];
18 a[i+1]=x;
19 }
20 }
21 }
22 for(i=0;i<n-1;i++)
23 printf("%d ",a[i]);
24 printf("%d",a[n-1]);
25 return 0;
26 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量i和j(循环变量)、x(交换变量)、k(扫描次数)、整数型常量n(数组长度)和整数型数组a(长度为n);
- 第二步:读入n以确定数组a的长度;
- 第三步:使用循环为数组a赋初值;
- 第四步:用双循环再加以判断结构在数组中进行k次的最大值沉底;
- 第五步:使用循环输出k次冒泡排序之后的数组。
注解:冒泡排序需要注意的是循环结构的判定条件和冒泡方向,本题还应注意输出格式末尾没有空格。
(2)流程图

3.本题调试过程碰到问题及解决办法
本题为课堂老师重点所讲所以提交没有错误,不过对于这道可控制扫描次数的冒泡排序,我用编译器编译的时候在循环条件上停留了一会,而且针对末尾无空格进行了调整。
题目7-20 点赞
1.实验代码
1 #include<stdio.h>
2 int main()
3 {
4 int n,i,j,k,x,max;
5 static int f[1001];
6 scanf("%d",&n);
7 for(i=1;i<=n;i++)
8 {
9 scanf("%d",&k);
10 for(j=1;j<=k;j++)
11 {
12 scanf("%d",&x);
13 f[x]++;
14 }
15 }
16 max=f[1];
17 x=1;
18 for(i=1;i<=1000;i++)
19 {
20 if(max<=f[i])
21 {
22 max=f[i];
23 x=i;
24 }
25 }
26 printf("%d %d",x,max);
27 return 0;
28 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量n(点赞的博文数量)、i和j(循环变量)、k(博文特征数量)、x(中间转载变量)、max(特征最大值数)和静态数组f(长度为1001);
- 第二步:读入n以确定接下来的外循环循环数量;
- 第三步:使用双层f循环结构读入每一篇博文的特征数量,并将每一个特征编号对应f数组下标的位置计数;
- 第四步:使用循环并判断条件句获得f数组中最大的值以及对应的下标;
- 第五步:按照题目格式输出即可。
注解:本题需要注意的是“如果有并列,则输出编号最大的那个”。
(2)流程图

3.本题调试过程碰到问题及解决办法
本题在进行if条件判断时,忽视了“并列则输出编号最大标签”的要求,所以在进行例题代入时发现错误。

改正将if判断条件的“max<f[i]”改成“max<=f[i]”即可。
题目7-23 判断上三角矩阵
1.实验代码
1 #include<stdio.h>
2 int main()
3 {
4 int i,j,k,x;
5 const int n;
6 scanf("%d",&x);
7 for(i=0;i<x;i++)
8 {
9 int flag=0;
10 scanf("%d",&n);
11 int a[n][n];
12 for(j=0;j<n;j++)
13 for(k=0;k<n;k++)
14 scanf("%d",&a[j][k]);
15 for(j=0;j<n;j++)
16 {
17 for(k=0;k<j;k++)
18 {
19 if(a[j][k]!=0)
20 {
21 flag=1;
22 break;
23 }
24 }
25 }
26 switch(flag)
27 {
28 case 0:printf("YES");break;
29 case 1:printf("NO");break;
30 }
31 if(i<x-1)
32 printf("\n");
33 }
34 return 0;
35 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量i、j和k(循环变量)、x(待测矩阵个数)和常数n(矩阵边长);
- 第二步:读入x确定最外层循环次数,并构建一个以x为判断条件的最外层循环(接下来所有步骤都在其循环内);
- 第三步:定义整数型变量flag=0(用于标记);
- 第四步:读入n确定接下来的矩形大小,定义整数型二维数组a(行列长度都为n)并使用双循环结构为数组a赋初值;
- 第五步:使用双循环和判定结构判断矩阵下三角(不包括主对角线)所有数都为0,若出现不为0则改变flag变量并跳出循环;
- 第六步:以标记变量flag的值判断上三角矩阵并后跟判断是否换行的结构。
注解:本题思路的构建在于多层循环的排位使用。
(2)流程图

3.本题调试过程碰到问题及解决办法
本题在进行下三角为0与否的判断时,没有考虑到主对角线在本题应属于上三角范围,下三角没有主对角线,而直接判断了带主对角线的下三角,导致判定出错。

改正方案就是将控制下三角的for循环条件里的“j<=k”改为“j<k”这样就不判断主对角线了。
题目7-27 打印杨辉三角
1.实验代码
1 #include<stdio.h>
2 int main()
3 {
4 int i,j,n,a[10][10]={1};
5 scanf("%d",&n);
6 for(i=1;i<10;i++)
7 {
8 a[i][0]=1;
9 a[i][i]=1;
10 for(j=1;j<i;j++)
11 {
12 a[i][j]=a[i-1][j-1]+a[i-1][j];
13 }
14 }
15 for(i=0;i<n;i++)
16 {
17 for(j=n-i-1;j>0;j--)
18 printf(" ");
19 for(j=0;j<=i;j++)
20 printf("%4d",a[i][j]);
21 printf("\n");
22 }
23 return 0;
24 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量i和j(循环变量)、n(打印行数)和整数型二维数组a(行列长度都为10且杨辉三角首行赋初值);
- 第二步:读入n以确定杨辉三角打印行数;
- 第三步:使用双循环结构对每行杨辉三角的非首位和非尾位进行运算赋初值,首位和尾位另赋初值;
- 第四步:以n为行数上限使用循环结构按格式输出杨辉三角。
注解:输出注意要求正三角,所以在最后的循环里除了注意换行,还要注意每一行前面的空格多少。
(2)流程图

3.本题调试过程碰到问题及解决办法
杨辉三角数学上用二项式求得,所以开始编程我的思路就是用二项式定理,进行阶乘的时候我用的fact函数,但这个函数我没有研究过,只是记得老师用过一次,所以拿来用编译出错了。


后本想用for循环代替阶乘,但是觉得麻烦,不如加法简单粗暴,所以就改成了加法式,等我解决了阶乘问题再更改代码。
题目7-30 大炮打蚊子
1.实验代码
1 #include<stdio.h>
2 int main()
3 {
4 int m,n,i,j,k,x,y,count;
5 scanf("%d %d\n",&m,&n);
6 static char a[22][22];
7 for(i=1;i<=m;i++)
8 {
9 for(j=1;j<=n;j++)
10 {
11 a[i][j]=getchar();
12 }
13 getchar();
14 }
15 scanf("%d",&k);
16 for(i=1;i<=k;i++)
17 {
18 count=0;
19 scanf("%d %d",&x,&y);
20 if(a[x+1][y+1]!='0')
21 {
22 count++;
23 a[x+1][y+1]='0';
24 }
25 if(a[x+1][y]=='#')
26 a[x+1][y]='1';
27 else if(a[x+1][y]=='1')
28 {
29 count++;
30 a[x+1][y]='0';
31 }
32 if(a[x+1][y+2]=='#')
33 a[x+1][y+2]='1';
34 else if(a[x+1][y+2]=='1')
35 {
36 count++;
37 a[x+1][y+2]='0';
38 }
39 if(a[x][y+1]=='#')
40 a[x][y+1]='1';
41 else if(a[x][y+1]=='1')
42 {
43 count++;
44 a[x][y+1]='0';
45 }
46 if(a[x+2][y+1]=='#')
47 a[x+2][y+1]='1';
48 else if(a[x+2][y+1]=='1')
49 {
50 count++;
51 a[x+2][y+1]='0';
52 }
53 printf("%d\n",count);
54 }
55 return 0;
56 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量m和n(二维平面的行列长度)、i和j(循环变量)、k(发射炮弹数量)、x和y(炮弹坐标)、count(消灭蚊子数);
- 第二步:定义静态字符型数组a(行列长度均为22);
- 第三步:确定二维平面行列长度并用双循环为其赋初值;
- 第四步:确定炮弹的数量并以此构建循环框架;
- 第五步:在循环框架内确定炮弹的坐标并判断其坐标和周围四个位置,根据所对应字符进行相应赋值变化或计数,判定结束输出消灭蚊子数即可。
注解:本题构建的二维平面数组行列长度都是22,空出最外层的行列,这样数组在循环时就不会发生越界。
(2)流程图

3.本题调试过程碰到问题及解决办法
在count计数之后没有令该坐标归零,导致出现错误。

解决办法就是在所有的count计数之后给该坐标赋值为‘0’即可。
- 要求三
上传成功后coding.net项目的截图

Git地址:https://git.coding.net/cyq1076926262/14_15-week.git
- 要求四
个人总结
(1)本周你学习了哪些内容?收获了什么?
①学习了指定数据输出宽度的表达;
②学习了一维数组的构建、赋初值等有关知识点;
③学习了选择排序法的排序思想(以冒泡排序为例);
④学习了二维数组的构建、赋初值、行列、主副对角线、上下三角等有关知识点;
⑤学习了rand函数和srand函数(位于头文件stdlib.h),需要注意的是srand只需要在所有rand调用前,被调用一次即可,没必要调用多次;
⑥学习了调用srand(time(NULL))设置随机数种子(time函数位于头文件time.h)。
(2)本周所学内容中你觉得哪些是难点?有哪些知识点还不明白?
①通过两周PTA练习(尤其指附加题),我认为编程之前充分理解题目非常重要,所谓难度也是来自于这里,只有把题目读透才能更好的构建思路;
②time函数没有学透,近一段时间抽空仔细研究一下。
- 要求五
1.点评作业
①曹琪(http://www.cnblogs.com/blueblog6/)

②胡俊鲜(http://www.cnblogs.com/123456hjx/)

③张乐(http://www.cnblogs.com/1999-09-22/)

2.学习进度条(11/19 13:00~12/4 8:00)



来源:https://www.cnblogs.com/cyq66992152/p/7946077.html