第二次作业

作业要求【https://edu.cnblogs.com/campus/hljkj/Cprogramming_2018Autumn_CST2018_3/homework/2503

函数-1<统计个位数字>

1,实验代码

 1 int Count_Digit ( const int N, const int D )
 2 {
 3     int n,a,cnt=0;
 4     if(N!=0)
 5     {
 6     
 7     a=N;
 8     while(a!=0)
 9     {
10         n=a%10;
11         if(n<0)
12         {
13             n=-n;
14         }
15         if(n==D)
16         {
17             cnt++;
18         }
19         a=a/10;
20     }
21     }
22     else
23     {
24         if(D==0)
25         {
26             cnt=1;
27         }
28     }
29     return cnt;
30  } 

2,实验思路

第一步:根据不同情况,判断DN中出现的次数

第二步:返回主函数

3,流程图

 4,试题编译过程中遇到的问题及解决方法

 设置断点

 遇到的问题:

  忽略N=0的情况;忽略N<0的情况。

解决办法:

  加入语句,对情况N=0时进行特殊处理。

数组一-1<交换最小值最大值>

1,实验代码

 

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int N;
 5     scanf("%d",&N);
 6     int   a[N];
 7     int i;
 8     if(N==1)
 9     {
10         scanf("%d",&a[1]);
11         printf("%d ",a[1]);
12     }else
13     {
14         for(i=1;i<=N;i++)
15         {
16             scanf("%d",&a[i]);
17         }
18         int x,y;
19         x=a[1];
20         for(i=2;i<=N;i++)
21         {
22             if(x>a[i])
23             {
24                 x=a[i];
25                 y=i;
26             }
27         }
28         a[y]=a[1];
29         a[1]=x;
30         x=a[2];
31         for(i=3;i<=N;i++)
32         {
33             if(x<a[i])
34             {
35                 x=a[i];
36                 y=i;
37             }
38          } 
39          a[y]=a[N];
40          a[N]=x;
41          for(i=1;i<=N;i++)
42          {
43              printf("%d ",a[i]);
44          }
45     }
46          return 0; 
47  } 

 

2,解题思路

第一步:输入N。

第二步:如果N1,输入一个整数,并将它输出,程序结束。

              如果N不为1;输入N个整数。

第三步:找到数组中的最大数,使之与最后一项交换数值;找到数组中的最小数,使之与第一项交换数值。

第四步:输出结果。

3,程序流程图

 4,遇到的问题及解决办法

 

 

 设置断点:

 遇到的问题:

  忽略了N等于一的情况,测试点“最小N”不能通过。

解决办法

  加上了N等于一时的处理方法。

if(N==1)
    {
        scanf("%d",&a[1]);
        printf("%d ",a[1]);
    }

 数组二-1<简化的插入排序>

1,实验函数:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int N;
 5     scanf("%d",&N);
 6     int i,a[N+1];
 7     for(i=0;i<N+1;i++)
 8     {
 9         a[i]=0;
10     }
11     for(i=0;i<N;i++)
12     {
13         scanf("%d",&a[i]);
14     }
15     int x;
16     int f,j;
17     scanf("%d",&x);
18     if(x>a[N-1])
19     {
20         a[N]=x;
21     }else
22     {
23         
24         for(i=0;i<N+1;i++)
25     {
26         if(x<a[i])
27         {
28             for(j=N;j>i;j--)
29             {
30                 a[j]=a[j-1];
31             }
32             a[i]=x;
33             break;
34         }
35        
36 } 37 } 38 39 for(i=0;i<N+1;i++) 40 { 41 printf("%d ",a[i]); 42 } 43 44 }

 2,解题思路

第一步:输入N,继而输入N个整数

第二步:输入x

第三步:将x插入数组中

第三步:输出插入x后的数组

3,流程图

 

4,遇到的问题及解决办法

  插入断点

遇到的问题:

break”放置错误

解决方法:

break”放入if语句中,实现判断判断语句中内容与“break”同步实现。

个人总结:

(1),最近这段时间学习了数组的有关知识,对两种排序方法冒泡排序法、选择排序法有了一定的了解掌握,对二维数组也有了一些了解

       收获:两种排序方法,数组知识及其他一些C语言知识。

(2),困难:对两种排序方法思路不够清晰,时长把两种排序方法思路记混

       通过上网查资料,向同学请教和看老师发的代码解决了问题。

互评和学习进度:

(1)

评论梁德辉同学的作业;

 评论苏欣同学的作业;

评论王文琪同学的作业;

(2)

posted on 2018-12-21 23:11  张广super  阅读(128)  评论(8编辑  收藏  举报

导航