2019春第六周作业

这个作业属于哪个课程 c语言程序设计
这个作业要求在哪 2019年春第六周作业
我在这个课程的目标是 掌握指针的相关知识
这个作业在哪个具体方面帮助我实现目标 通过PTA作业学习指针使用方法并对代码进行检测
参考文献 C语言程序设计

基础作业

1.函数题:求两数平方根之和

函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。

函数接口定义:

double fun (double *a, double *b); 

其中 a和 b是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。

裁判测试程序样例:

#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
", y );
return 0;
}


/* 请在这里填写答案 */

输入样例:

12 20

输出样例:

y=7.94

1).实验代码

double fun (double *a, double *b)
{
  double z;
  z=sqrt(*a)+sqrt(*b);
  return z;
}

2).设计思路

第一步:用double定义一个双精度浮点型变量z。
第二步:用sqrt函数计算输入值的平方根,把两个结果相加并赋入z。
第三步:将结果返回z。

3).本题调试过程碰到的问题以及解决办法


第一行最后面不需要分号。

4).运行结果截图

2.编程题:利用指针返回多个函数值

读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。

输入格式:

输入有两行: 第一行是n值; 第二行是n个数。

输出格式:

输出最大值和最小值。

输入样例:

在这里给出一组输入。例如:
5
8 9 12 0 3

输出样例:

在这里给出相应的输出。例如:
max = 12
min = 0

1).实验代码

#include<stdio.h>
int max_min(int *n,int*max,int*min);
int main()
{
  int i,m,n,a,max,min;
  scanf("%d",&n);
  for(i=0;i<n;i++){
  	scanf("%d",&a);
  	if(i==0){
  	  max=a;min=a;
  	}
  	max_min(&a,&max,&min);
  	m++;
  }
  printf("max = %d
min = %d",max,min);
}
int max_min(int *n,int*max,int*min)
{ 
  if(*max<=*n){
    *max=*n;
  }
  if(*min>=*n){
    *min=*n;
  }
}

2).设计思路

第一步:用scanf输入n的值表示需要输入的整数的个数。
第二步:用for循环逐个输入整数,调用自定义函数返回多个值。
第三步:定义函数:当输入值大于或等于指针max的值赋入指针max返回到变量max中,当输入值小于或等于指针min的值赋入指针min返回到变量min中。
第四步:输出max,min的值。

3).本题调试过程碰到的问题以及解决办法


定义函数中用到的指针没有定义,把所有max_min(int n);改为max_min(int n,intmax,intmin)后error:0。

检查后发现指针初始值为0,造成第一次判别错误,所以要先将第一次输入的值赋给max和min,在第8行后加上if(i==0){max=a;min=a;}即可实现。

4).运行结果截图

思考题:(分值等同于编程题)

  1.为什么要使用指针?它有什么用?
使编程更容易实现数据的读取和计算和赋值,指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数中使用指针还可以返回多个值。
  2.指针变量在内存中暂用多大的空间?它的大小由什么决定?
在不同的操作系统及编译环境下,指针类型所占用的字节数是不同的。

预习作业:6-3 最小数放前最大数放后

为一维数组输入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).实验代码

void input(int *arr,int n)
{
	int i;
	for(i=0;i<n;i++,arr++){
		scanf("%d",arr);
	}
}
void max_min(int *arr,int n)
{
	int i,min,max,m,h;
	for(i=0;i<n;i++,arr++){
		if(i==0){
  	  max=*arr;min=*arr;
  	}
		if(max<=*arr){
		max=*arr; m=i;
	}
	    if(min>=*arr){
	    min=*arr; h=i;
		}
}
    arr=arr-10;
    *(arr+h)=*arr;*arr=min;
    *(arr+m)=*(arr+9);*(arr+9)=max;
}
void output(int *arr,int n)
{
	int i;
	for(i=0;i<n;i++,arr++){
		printf("%3d",*arr);
	}
}

2).设计思路

第一步:定义函数void input(int *arr,int n):定义整型变量i,用for循环逐个改变指针位置并逐个赋值,实现逐个把值返回到一维数组中。
第二步:定义函数void max_min(int *arr,int n):定义整型变量i、min、max、m、h,分别用来控制循环次数、记录最小值、记录最大值、记录取到最大值时数组下标、记录取到最小值时数组下标。通过算法将最大值与最后一个数交换,将最小值与第一个数交换。
第三步:定义函数void output(int *arr,int n):定义整型变量i,用for循环控制指针依次输出一维数组中的数。

3).本题调试过程碰到的问题以及解决办法



从运行结果可以看出应该是指针指的地址有错误,检查代码发现循环结束时指针指到了最后一个数据的后一个地址,所以要重新把指针指向第一个数据应该时arr=arr-10而不是arr=arr-9。

4).运行结果截图

二、学习进度统计

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
3/2-3/8 2h 23行 数组
3/9-3/11 3h 29行 读取文件数据
3/12-3/18 5h 70行 用数组输出矩阵
3/19-3/25 8h 140行 多种排序方法
3/26-4/1 5h 82行 字符(串)数组的相关知识

三、学习感悟

这周学习了指针的相关知识,新知识的学习提升了我的能力,以后可以更有效率的解决问题了。

四、结对编程过程和结对编程的优缺点

照片忘拍了,你信我。
队员优点:1.对不懂的问题善于寻求帮助2.有灵性3.冷静不浮躁
缺点:不主动和队友交流
结对编程的优点:(1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
(2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
(3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
(4)在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。
总之,如果运用得当,结对编程能得到更高的投入产出比(Return of Investment)。
不适合结对编程的情况:
并不是所有的项目都适合结对编程,下面是一些不适合使用的例子。
1)处于探索阶段的项目,需要深入地研究,在这种情况下,一个人长时间的独立钻研是有必要的。
2)在做后期维护的时候,如果维护的技术含量不高,只需要做有效的复审即可,不必拘泥于形式,硬拉一个人来结对唱二人转。
3)如果验证测试需要运行很长时间,那么两个人在那里等待结果是有点浪费时间。

原文地址:https://www.cnblogs.com/hlywzj/p/10649990.html