第二次作业
作业要求
https://edu.cnblogs.com/campus/hljkj/Cprogramming_2018Autumn_CST2018_4/homework/2502
函数6-1统计个位数字
1实验代码
1 #include <stdio.h> 2 3 int Count_Digit ( const int N, const int D ); 4 5 int main() 6 { 7 int N, D; 8 9 scanf("%d %d", &N, &D); 10 printf("%d\n", Count_Digit(N, D)); 11 return 0; 12 } 13 int Count_Digit ( const int N, const int D ) 14 { 15 int x,count=0,y; 16 x=N; 17 if(x<0) 18 { 19 x=-x; 20 } 21 do{ 22 y=x%10; 23 if(y==D) 24 { 25 count++; 26 } 27 x=x/10; 28 }while(x>0); 29 return count; 30 }
2解题思路
1如果给出的N是负数要转化为正数
2将该数N不断除以10得出每一位的数值y
3得出的数值y如果等于D,那么该数D出现的次数就+1
流程图
3.本题调试过程碰到问题及解决办法
1一次就过
2调试
数组1 7-4 求一组数中的最大值和次最大值
实验代码
1 #include<stdio.h> 2 int main () 3 { 4 int a[11]; 5 int max,cmax,i,j,k,temp; 6 for(i=1;i<=10;i++) 7 { 8 scanf("%d",&a[i]); 9 } 10 for(j=1;j<10;j++) 11 { 12 for(i=1;i<10;i++) 13 { 14 k=i+1; 15 if(a[k]<a[i]) 16 { 17 temp = a[i]; 18 a[i] = a[k]; 19 a[k] = temp; 20 } 21 } 22 } 23 printf("max=%d,cmax=%d",a[10],a[9]) ; 24 return 0; 25 }
2解题思路
将所给的数据进行排序,最后一个数是最大值,倒数第二个数是最小值。
流程图
3.本题调试过程碰到问题及解决办法
1答案错误
解决办法,数组应该是从a[0]开始存储数据
单步调试
数组2 7-1 简化的插入排序
1插入代码
1 #include<stdio.h> 2 int main () 3 { 4 int a[11]; 5 int n,max,cmax,i,j,k,temp; 6 scanf("%d",&n); 7 for(i=1;i<=n;i++) 8 { 9 scanf("%d",&a[i]); 10 } 11 scanf("%d",&a[n+1]); 12 for(j=1;j<n+1;j++) 13 { 14 for(i=1;i<n+1;i++) 15 { 16 k=i+1; 17 if(a[k]<a[i]) 18 { 19 temp = a[i]; 20 a[i] = a[k]; 21 a[k] = temp; 22 } 23 } 24 } 25 for(i=1;i<=n+1;i++) 26 printf("%d ",a[i]); 27 return 0; 28 }
2解题思路
定义一个数组a[n+1],其中n为题中所给的非负整数,将第三行给的X赋值给a[n+1],然后进行排序。
流程图
3.本题调试过程碰到问题及解决办法
解决办法:错误提示中提到最大N,最大N为10,但是数组只能到10,也就是说不存在a[11]来存储X的值,所以,将数组扩大为a[11].
个人总结:相对于前一段时间来讲,我认为学习简单了许多,就好像是一种突然开窍的感觉,这几周学习了函数,数组及其相关知识点,学会了怎样储存数据,怎样去定义函数。
对我来讲的话,函数部分的如何去定义函数是一个难点,因为我们所接触的语句,还有函数相关的题目并不多,措施就是尽力去理解每个函数题目是如何展开的。数组的排序法
是个难点,经常整不明白轮数与趟数,所以平时在课下可以自己去定义一个数组然后去排序,不懂的话找资料问老师与同学。
点评
表格
折线图