第二次作业

作业要求:

https://pintia.cn/problem-sets/1070792121586212864/problems/1070792159947317250

第一题:函数

解题思路: 大部分函数我认为难点都是构造函数 但是原题给出了原函数 所以下面只是一个简单的比较大小 因为只有两个整数所以连循环都不用。 直接if语句比较就完事了。

我选择这个题主要是我第一次做出现了编译错误 错误原因是实现函数处那以一行结束是没有引号的。

#include <stdio.h>

int max( int a, int b );

int main()
{    
    int a, b;

    scanf("%d %d", &a, &b);
    printf("max = %d\n", max(a, b));

    return 0;
}

int max( int a, int b )
{
    int max;
    if(a>b)
    {
        max = a;
    }else if(b>a)
    {
        max= b;
    }
    return max;
}

就是 int max(int a,int b) 这一句后面是没有分号的!这是要注意的点。

就会编译错误。在实现函数语句后面加分号就好啦。

流程图:

 

数组一

 

 思路:这道题是让求最大值和最小值。最大值非常简单一个简单的循环比较就可以了。但是怎么输出第二大的值就是难点了。我开始的想法是能不能输出最大值都将最大值break出循环 后来自习想想用我现在的知识好像不太可能 所以我想到可以将他们从大到小排序后再输出第一和第二个值就行了嘛。

#include<stdio.h>
int main()
{
    int i,j,t;
    int a[10];
    int max;
    int cmax;
    
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for(j=0;j<9;j++)
    {
    
       for(i=0;i<9-j ;i++)
       {
       
          if(a[i]<a[i+1])
      
         {
         t=a[i]; 
         a[i]=a[i+1];
          a[i+1]=t;
        }
    }
}    
    max = a[0];
    cmax = a[1];
    printf("max=%d,cmax=%d",max,cmax);
    return 0;
}

我选择了冒泡排序法。

第一步 定义变量 两个循环变量 一个临时交换用的变量 还有最大值和次二大值,还有一个数组。

第二步 输入数组的值

第三步 写循环注意循环次数。

第四步 将a[0],[1]的值赋给max 和cmax

我犯了一个很低级的错误就是 没有用临时变量交换而是直接将a[i+1] 赋给了a[i]

 

 

 

 这就导致输出的所有结果都是最大值;

流程图:

 

数组二:

 

 选择这个题是他使用了两个数组,我看到出现最多的整数我想到选择一个计数器,但是单纯一个计数器没法达到题意,所以得用一个数组来计数

/*7-3 求整数序列中出现次数最多的数 (15 分)
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。
输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。
输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。
输入样例:
10 3 2 -1 5 3 4 3 0 3 2
输出样例:
3 4      */
#include<stdio.h>
int main()
{
int i,j,t,n;
int a[1000];
int count[1000] = {0};
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
if(a[j] == a[i])
{
count[j]++;
} 
}
}
t=count[0];
int index = 0;
for(j=0;j<n;j++)
{
if(count[j]>t)
{
t = count[j];
index = j;
}
}
printf("%d %d",a[index],t);
return 0;
} 

第一步 还是先定义几个变量还有两个数组

第二步 输入a[i]的值

第三步 用两个循环每经过一个循环换一个计数器

第四步 比较计数器的大小

第五步 输出

这一题错在我没有将最大的错误是count【j】赋给一个变量直接就输出,所以出错。还有index = i;一直就没出来答案;

出现了这种情况只有部分正确;

流程图

这几周上课主要学习了数组,数组的一维数组和二维数组。还是不太牢固,总是在做题方面出现小问题但是自己就是找不到哪里出错了。思路和前几个周相比有一些题能自己想上来了,可以说进步了一些。课下主要是做pta里的题和复习一些c中的基础知识,做一些课后习题。

难点我觉得还是选择排序法和冒泡排序法经常让我混淆还是没有理解明白他们的意思,还有二分查找法。解决方法就是找一些题自己独立完成,现在已经差不多能够将这两个排序法分清并自己打出代码 但还是有些不太熟练,应该加强练习。

评论

https://www.cnblogs.com/mcba22/p/10133371.html

https://www.cnblogs.com/wsaldh/p/10127051.html

https://www.cnblogs.com/4399yt/p/10139089.html

学习变化:

 

 

posted on 2018-12-20 18:42  丛梓祺  阅读(344)  评论(9编辑  收藏  举报

导航