第二次作业
要求一
[https://edu.cnblogs.com/campus/hljkj/Cprogramming_2018Autumn_CST2018_3/homework/2503]
要求二
判断奇偶性
1.实验代码
int even (int n)
{
if(n%2 == 0)
return 1;
else
return 0;
}
2.解题思路
(1)算法
第一步:定义判断奇偶性的函数even(int n)。
第二步:输入n。
第三步:当n%2为0时,返回真;当n%2不为0时,返回假。
第四步:当返回真时输出"%d is even.\n",当返回假时输出"%d is odd.\n"。
(2)流程图
3.本题调试过程碰到问题及解决办法
(1)错误提示截图
(2)单步调试截图
(3)遇到的问题及解决办法
代码编写没有错误,但是在pta提交的时候没有注意函数接口定义,于是出现了编译错误,将定义的接口之前的部分代码去掉后提交就正确了。
交换最小值和最大值
1.实验代码
#include<stdio.h>
int main()
{
int i, n, index, a[10], c, d, min, max;
scanf("%d", &n);
for(i = 0; i < n; i ++)
{
scanf("%d", &a[i]);
}
min = max = a[0];
for(i = 0; i < n; i ++)
{
if(a[i] <= min)
{
min = a[i];
index = i;
}
}
c = a[0];
a[0] = min;
a[index] = c;
for(i = 0; i < n; i ++)
{
if(a[i] >= max)
{
max = a[i];
index = i;
}
}
d = max;
a[index] = a[n - 1];
a[n - 1] = d;
for(i = 0; i < n; i ++)
{
printf("%d ", a[i]);
}
return 0;
}
2.解题思路
(1)算法
第一步:定义变量i, n, index, c, d, min, max以及数组a[10]。
第二步:第一行中输入一个正整数N(≤10),第二行给出N个整数。
第三步:用比较的方法寻找最小值和最大值,将找到的最小值与数组的第一个数进行交换,然后将找到的最大值与数组中的最后一个数交换。
第四步:输出交换后的整数序列。
(2)流程图
3.本题调试过程碰到问题及解决办法
(1)错误提示截图
(2)单步调试截图
(3)遇到的问题及解决办法
为段错误。在进行比较的过程中出现取值范围错误,将比较中的"<"和">"分别改为"<="和">="即正确。
选择法排序
1.实验代码
#include<stdio.h>
int main(void)
{
int i, index, k, temp;
int a[10];
for(i = 0; i < 10; i++)
{
scanf("%d", &a[i]);
}
for(k = 0; k < 3; k++)
{
index = k;
for(i = k + 1; 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]);
}
return 0;
}
2.解题思路
(1)算法
第一步:定义变量i, index, k, temp以及数组a[10]。
第二步:输入十个无序整数。
第三步:题目要求排序只排三轮,因此条件k<3。
第四步:输出变化后的数组。
注意:注意格式要求每个整数输出占5列。
(2)流程图
3.本题调试过程碰到问题及解决办法
(1)错误提示截图
(2)单步调试截图
(3)遇到的问题及解决办法
一开始没有注意到题目排三轮的要求,后来将条件"k<9"改为"k<3",答案正确。
要求三
个人总结
(1)学到的内容:这几周主要学习了函数和数组,主要包括了寻找最大值和最小值,数字金字塔,冒泡排序法,选择排序法等题型。
收获:我学会了运用数组寻找最大值最小值,还学会了用两种方法排序。通过学习我知道了如何定义排序轮数,以及整数输出占五列用"%5d"。
(2)对于我来说,刚刚接触数组的时候,排序问题是一个难点,通过课上听讲以及课下查找资料,我慢慢地理解了排序的思路,并学会了定义排序的次数。在做作业的时候,数组流程的的绘画也成了我的一大难关,但我希望通过上网查找资料,我能够攻克这个难题。