本次作业要求:https://edu.cnblogs.com/campus/hljkj/Cprogramming_2018Autumn_CST2018_4/homework/2502

一:函数6-1 统计个位数字:

实验代码:

int Count_Digit ( const int N, const int D )
{
  int i,j,b=0;
  i=N;
  if(i<0)
  i=-i;
  do
  {
    j=i%10;
    if(j==D)
    b++;
    i=i/10;
  }while(i>0);
  return b;
}

解题思路:判断每一位数字是否与给出的数的个位数相同并统计其出现次数。

步骤一:输入要处理的数字i,j为存放个位的数,b初始值为0。

步骤二:判断i的正负当i<0时,执行i=-i。

步骤三:执行循环体语句数字对10取余若得到需得的末尾数则b=b+1。数字/10则得到每一位。

步骤四:判断得到的i>0?若是执行循环,反之返回函数b。

流程图:

单步调试:

 

 

本题调试过程碰到问题及解决办法:无

运行成功截图:

 

二:数组一7-4交换最小值和最大值

实验代码:

#include<stdio.h>
int main()
{
  const int N=10;
int i, x, n;
int min, max;    
int p, q, temp;    
int a[N];    
scanf("%d", &n);    
for (i = 0; i < n; i++)
{    
scanf("%d", &a[i]);
}    
min = a[0];    
for (i = 0; i < n; i++)    
{    
if (min > a[i])    
{    
min = a[i];    
p = i;    
}    
}    
temp = a[0];
a[0] = a[p];    
a[p] = temp;    
max = a[0];    
for (i = 0; i < n; i++)    
{    
if (max < a[i])    
{    
max = a[i];    
q = i;    
}    
}    
temp = a[n - 1];
a[n - 1] = a[q];    
a[q] = temp;    
for (i = 0; i < n; i++)    
{    
printf("%d ", a[i]);    
}    
return 0;
}

解题思路:输出最小值和它的下标,将最小值与第一个数交换,输出交换后的n个数。在从中输出最大值和他的下标,将最大值与最后一个数交换。

步骤一:定义一个数组(数组长度),以及变量。

步骤二:读入数组,将其初始化,假设a[0]是最小值,即下标为0的元素最小。

步骤三:如果a[i]比假设的最小值还小,再假设a[i]是新的最小值,即下标为i的元素最小。然后将最小值和第一个数交换。

步骤四:在剩余的n-1个数中按照与寻找最小值的方法寻找最大值,并与最后一个数交换。

流程图:

单步调试:

本题调试过程碰到问题及解决办法:无

运行成功截图:

三:数组2 7-4选择排序法

实验代码:

#include <stdio.h>
int main()
{
  int i;
  int a[10];
  int index,temp;
  int k;
  for(i=0;i<10;i++)
  {
    scanf("%d",&a[i]);
  }
  for(k=0;k<3;k++)
  {
    index = k;
    for(i=k;i<10;i++)
    {
      if(a[i]<a[index])
    {
      index = i;
    }
    }
      temp = a[index];
      a[index]=a[k];
      a[k]=temp;
  }
  for(i=0;i<10;i++)
  {
  printf("%5d",a[i]);
  }
}

解题思路:输入一个正整数n,在输入n个整数,将他们从小到大排序后输出。

在未排序的n个数中找到最小数,将它与a[0]交换,在剩余未排序的n-1个数中找到最下数将它与a[1]交换。以此类推.....

for(k=0;k<3;k++)对轮数进行控制。

步骤一:定义一个整形数组,将输入数依次赋给数组a的n个元素。

步骤二:对n个数排序, index存放最小值的下标,利用for循环寻找最小值的下标,最小元素与下标k的元素交换。

步骤三:输出n个数组的值。

流程图:

单步调试:

本题调试过程碰到问题及解决办法:要求排序进行三轮,但写成了for(k=0;k<4;k++),此处or(k=0;k<n-1;k++)使得进行了四轮

 

 

 

解决方案,重新进行调试,更改。

个人总结:

(1):本周做了很多练习,加强了对语句的了解,也基本达到了熟练的程度,然后就是对一维数组的练习,二维数组也了解了一些。课下时间做了书上的习题,从程序段得出一个结果,或者填写程序。

解决数组问题时候数组的定义十分重要,数组名的命名规则与变量的命名相同,但在同一过程中数组名不能与变量名同名否则会出错,下标的最大值和最小值分别为下界和上界,元素在中连续。

(2):数组的学习还是难点,当你真正需要运用的时候,却不知应如何调用,书上的习题有的做不明白,不知道怎样得出的结果。

解决方法:上网查找,反复练习理解。

互评和学习进度:

王恩临https://www.cnblogs.com/wangtiezhu666/p/10127789.html

周文豪https://www.cnblogs.com/promise-781465023/p/10133773.html

闫慧欣https://www.cnblogs.com/yanhuixin/p/10158447.html

学习进度:

表格:

折线图:

 

posted on 2018-12-21 23:43  刘昱淞  阅读(248)  评论(4编辑  收藏  举报