第六周作业春

这个作业属于哪个课程 c语言程序设计
这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2888
我在这个课程的目标是 熟悉指针的用法
这个作业在哪个具体方面帮助我实现目标 预习作业和基础作业涉及了指针与函数还有指针与数组的知识点
参考文献 http://c.harson.co/

1.基础作业 函数题:求两数平方根之和

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

函数接口定义::

double fun (double *a, double *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\n", y );
return 0;
}


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

输入样例:

12 20

输出样例:

y=7.94

1).实验代码

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

2).设计思路

3).问题和解决方案

4).运行结果

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

读入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[10],int f,int* pmax,int* pmin);
int main(){
  int n,i,max,min,f=0;
  int *pmax,*pmin;
  int a[10];
  scanf("%d",&n);
  for(i=0;i<n;i++){
    scanf("%d",&a[i]);
    f++;
  }
  max_min(a,f,&max,&min);
  printf("max = %d\nmin = %d",max,min);
  return 0;
}
void max_min(int a[10],int f,int* pmax,int* pmin){
  int i;
  *pmax=a[0];
  *pmin=a[0];
  for(i=1;i<f;i++){
    if(*pmax<a[i]) *pmax=a[i];
    if(*pmin>a[i]) *pmin=a[i];
  }
}

2).设计思路



3).问题和解决方案


在函数定义里面的for语句n没有定义
后来添加一个f变量用来执行函数定义里的for语句

4).运行结果

3. 基础作业 思考题

A.为什么要使用指针?它有什么用?

a.在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存。
b.数据转换,利用指针的灵活的类型转换,可以用来做数据类型转换,比较常用于通讯缓冲区的填充,比如说,一个数据缓冲区char buf[100],如果其中buf[0,1]为命令号,buf[2,3]为类型,buf[4~7]为某一数值,类型为int,就可以使用如下语句进行赋值:
(short)&buf[0]=cmdID;
(short)&buf[2]=type;
(int)&buf[4]=value;
c.字符串指针,是使用最方便,且常用的。
d.函数指针,形如:#define PMYFUN (void*)(int,int),可以用在大量分支处理的实例当中,如某通讯根据不同的命令号执行不同类型的命令,则可以建立一个函数指针数组,进行散转。
e.在数据结构中,链表、树、图等大量的应用都离不开指针。

B.指针变量在内存中占用多大的空间?它的大小由什么决定?
指针变量在内存中占用的空间大小不确定。
它由指针变量所指向的内存空间上所存放的数据类型所决定。

4.预习作业 最小数放前最大数放后

为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。

函数接口定义:

void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);

裁判测试程序样例:

#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)
{
    for(int i = 0; i < n; i++)
    {
        scanf("%d",&arr[i]);
    }
} 

void max_min(int *arr, int n)
{
  int temp, *max, *min;
  max = min = &arr[0];
    for(int i = 0; i < n; i++)
    {
        if(*max < arr[i]) max = &arr[i];
        if(*min > arr[i]) min = &arr[i];
    }
    temp = arr[9]; arr[9] = *max; *max = temp;
  temp = arr[0]; arr[0] = *min; *min = temp;
}

void output(int *arr, int n)
{
    for(int i = 0; i < n; i++)
    {
      printf("%3d",arr[i]);
    }
}

2).设计思路

3).问题和解决方案

格式错误,没有注意题目要求,改成了%3d

4).运行结果

5. 挑战题

思路:把所有情况一一列出,记录元素和,比较它们的大小,最后输出最大的。

学习总结

| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点 | 目前比较疑惑的问题 |
| -------- | :-----: | :----: | :-----: | :----------😐:---------😐
|3/11-3/17 | 4.5小时 | 78 | 二维数组 | 对多维数组概念模糊 |
|3/18-3/23 | 6小时 | 145 | 选择排序法,二分排序 | 暂无 |
| 3/24-3/31 | 6小时 | 138 | 字符串 | 暂无 |
| 4/1-4/7 | 4小时 | 138 | 指针 | 暂无 |

学习感悟

把函数,数组,指针等等知识点结合在一起,难度更加大,题目更加绕弯了。

结对感悟

我让我的队友改正了函数那章的错误知识点——自定义函数使用的顺序。

posted @ 2019-04-05 15:12  laozhupeiqi  阅读(157)  评论(2编辑  收藏  举报