标签:格式 实验 好的 随机数 冒泡排序 步骤 break 需要 冒泡
题目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)主思路
注解:数组前两个数要事先赋初值,还有要注意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)主思路
注解:用所有所给数字组最小数首位非零。
(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)主思路
注解:冒泡排序需要注意的是循环结构的判定条件和冒泡方向,本题还应注意输出格式末尾没有空格。
(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)主思路
注解:本题需要注意的是“如果有并列,则输出编号最大的那个”。
(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)主思路
注解:本题思路的构建在于多层循环的排位使用。
(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)主思路
注解:输出注意要求正三角,所以在最后的循环里除了注意换行,还要注意每一行前面的空格多少。
(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)主思路
注解:本题构建的二维平面数组行列长度都是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/)(1楼)
1、学习总结做的非常到位全面,如果可以更多的用自己的语言总结就完美了;
2、在同学评论使用引用功能特别好,我也要学习使用;
3、第一张流程图画的太草率了,流向线尽量规避交叉现象,交叉代表有关系。
②胡俊鲜(http://www.cnblogs.com/123456hjx/)(3楼)
③张乐(http://www.cnblogs.com/1999-09-22/)(1楼)
1、看样子我可能来早了,图片还没有上传,不过从排版上看内容齐全;
2、学习总结是有效梳理归纳的手段,我觉得可以更系统地写总结和感想;
3、“世上无难事,只怕有心人”,只要肯用心,无论程序复杂与否就都能学懂。
2.学习进度条(11/19 13:00~12/4 8:00)
标签:格式 实验 好的 随机数 冒泡排序 步骤 break 需要 冒泡
原文地址:http://www.cnblogs.com/cyq66992152/p/7946077.html
2、流程图有一个小问题,就是循环的流向线箭头回到判断框上方应该并入,而不是有两个箭头;
3、错误截图太小了,可以把两张错误截图并列放置并放大到极限。