2019春第六周作业
这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | 第六周作业要求 |
我在这个课程的目标是 | 熟练运用指针做函数参数,学会运用指针返回多个值 |
这个作业在哪个具体方面帮助我实现目标 | 这些题目使我联系到了数组,指针的理解更深刻了 |
参考文献 | C语言程序设计II第八章 |
6-1 求两数平方根之和 (10 分)
函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。
函数接口定义:
double fun (double a, double b);
其中 a和 b是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。
/* 请在这里填写答案 */
输入样例:
12 20
输出样例:
y=7.94
1)实验代码
#include<stdio.h>
#include <math.h>
double fun (double *a, double *b);
int main ( )
{ double a, b, y;
scanf ("%lf%lf", &a, &b );
y=fun(&a, &b); printf ("y=%.2f\n", y );
return 0;
}
double fun (double *a,double *b)
{
double y;
y=sqrt(*a)+sqrt(*b);
return y;
}
2)设计思路
由于时间比较紧所以没来得及去画流程图,由于自己不打算带电脑回去,11点中的车,所以下周会继续流程图,抱歉。
3)本题做对过程碰到问题及解决办法
本题由于简单,那是在床上,所以直接拿手机写了,然后就发现一个问题,那就是我在编译的过程中发现明明思路正确,为什么会编译错误,后来发现是一个中文逗号的原因,其他的都没问题。
4)正确截图
7-1 利用指针返回多个函数值 (30 分)
读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。
输入格式:
输入有两行: 第一行是n值; 第二行是n个数。
输出格式:
输出最大值和最小值。
输入样例:
在这里给出一组输入。例如:
5
8 9 12 0 3
输出样例:
在这里给出相应的输出。例如:
max = 12
min = 0
1)实验代码
#include<stdio.h>
void max_min(int *a,int n,int *max,int *min);
int main()
{
int max,min,i,n;
scanf("%d",&n);
int b[n];
for(i = 0;i<n;i++)
scanf("%d",&b[i]);
max_min(b,n,&max,&min);
printf("max = %d\nmin = %d",max,min);
}
void max_min(int *a,int n,int *max,int *min)
{
int maxl=*a,minl=*a;
for(int i=0;i<n;i++){
if(*(a+i)>=maxl)
maxl=*(a+i);
if(*(a+i)<=minl)
minl=*(a+i);
}
*max=maxl;
*min=minl;
}
2)设计思路
3)本题做对过程碰到问题及解决办法
本题碰到的问题还是挺多的,首先没怎么看书,然后对于这个题目不是特别理解,就出现不知道指针如何去正确地指定某个地址,所以一直是编译错误和答案错误,最后经历了重重修改,最终对了,做了好几个小时,真的是学艺不精,加油!
4)正确截图
思考题:(分值等同于编程题)
1.为什么要使用指针?它有什么用?
使编程更容易实现数据的读取和计算和赋值,指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数中使用指针还可以返回多个值。
2.指针变量在内存中暂用多大的空间?它的大小由什么决定?
在不同的操作系统及编译环境下,指针类型所占用的字节数是不同的。
预习题
6-3 最小数放前最大数放后 (10 分)
为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。。
函数接口定义:
void input(int arr,int n);
void max_min(int arr,int n);
void output(int *arr,int n);
三个函数中的 arr和n 都是用户传入的参数。n 是元素个数。
input函数的功能是输入 n个元素存到指针arr所指向的一维数组中。
max_min函数的功能是求指针arr所指向的一维数组中的最大值和最小值,其中最小的数与第一个数对换,将最大的数与最后一个数对换。
output函数的功能是在一行中输出数组元素,每个元素输出占3列。
裁判测试程序样例:
include<stdio.h>
void input(int arr,int n);
void max_min(int arr,int n);
void output(int arr,int n);
int main()
{ int a[10];
input(a,10);
max_min(a,10);
output(a,10);
return 0;
}
/ 请在这里填写答案 */
输入样例:
5 1 4 8 2 3 9 5 12 7
输出样例:
1 5 4 8 2 3 9 5 7 12
1)实验代码
#include<stdio.h>
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
int main()
{ int a[10];
input(a,10);
max_min(a,10);
output(a,10);
return 0;
}
void input(int *arr,int n)
{
int i;
for(i=0;i<10;i++)
scanf("%d",arr+i);
}
void max_min(int *arr,int n)
{
int i,index=0,flag=0,t;
for(i=1;i<n;i++)
if(*(arr+i)<*(arr+index))
index=i;
t=*(arr+index);
*(arr+index)=*arr;
*arr=t;
for(i=1;i<n;i++)
if(*(arr+flag)<*(arr+i))
flag=i;
t=*(arr+flag);
*(arr+flag)=*(arr+9);
*(arr+9)=t;
}
void output(int *arr,int n)
{
int i;
for(i=0;i<10;i++)
printf("%3d",*(arr+i));
}
2)设计思路
3)本题调试过程碰到的问题以及解决办法
这个题目做起来感觉比上一个题目的思路还要清晰一点,可能是做了上一个题目之后感觉到这两个题目还是有很多相似的地方,没什么错误,就是刚开始没看清楚他已经有了头文件和一些定义的变量,后来撤掉之后就一遍对了。
4)正确截图
二、学习进度统计
|周/日期 这周所花的时间 |代码行 |学到的知识点简介| 目前比较迷惑的问题|
|:---😐:---😐:---😐:---😐:---😐
|3/26-4/21|七小时|100行左右|学会使用指针定义函数,然后就是学会使用指针返回多个函数值|对于比较复杂的转化还存在困难|
三、学习感悟
通过不断地学习我发现虽然自己进步得很慢,但是比起不去做要好的多,即使不会做也要把这个题目搞懂,学习专业是需要多花时间的去学习,只有努力才有突破,所以要不断的朝着自己的目标前进,当那一天真的恍然大悟了,可能那时候就学起来会轻松很多了,加油!
四、结对编程过程和结对编程的优缺点
队员优点:1.对不懂的问题善于寻求帮助2.有主见3.冷静不浮躁
缺点:在交流的过程中讨论不是很积极。
结对编程的优点:(1)在团队合作中,结对编程能提供更好的设计质量和代码质量,团队合作能有更强的解决问题的能力。
(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你会非常的想要学到更多东西,从而提高了积极性。
(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
总之,如果运用得当,结对编程能得到更高的投入产出比。
不适合结对编程的情况:
并不是所有的项目都适合结对编程,下面是一些不适合使用的例子。
1)处于探索阶段的项目,需要深入地研究,在这种情况下,一个人长时间的独立钻研是有必要的。
2)在做后期维护的时候,如果维护的技术含量不高,只需要做有效的复审即可,不必拘泥于形式,硬拉一个人来结对唱二人转。
3)如果验证测试需要运行很长时间,那么两个人在那里等待结果是有点浪费时间。