这个作业属于的课程

第六周编程总结

我在这个课程的目标是

学习二维数组和指针

这个昨天在哪个具体方面帮我实现目标

学习指针的用作用和用法并解决问题

参考文献

C语言程序设计

6-1 求两数平方根之和 (10 分)
 

函数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\n", y );
return 0;
}


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

输入样例:

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)设计思路

3)本题做对过程碰到问题及解决办法

本题没有遇到问题。

正确截图

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 *p,int n,int *max,int *min);

int main()
{
    int i,n,max,min;
    scanf("%d",&n);
    int a[n];
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    max_min(a,n,&max,&min);
    printf("max = %d\nmin = %d",max,min);

    return 0;
}
void max_min(int *p,int n,int *max,int *min)
{
    int max1=*p,min1=*p;
    int  i;
    for(i=0;i<n;i++)
    {
        if(*(p+i)>max1)
        max1=*(p+i);
        if(*(p+i)<min1)
        min1=*(p+i);
     } 
     *max=max1;
     *min=min1;
}

 

2)设计思路

 

3)本题做对过程碰到问题及解决办法

在自定义函数声明没有加分号,后面又要加分号。 

正确截图


 
6-3 最小数放前最大数放后 (10 分)
 

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

函数接口定义:

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

三个函数中的 arrn 都是用户传入的参数。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++){
    scanf ("%d",&arr[i]);
  }
}
void max_min(int *arr,int n)
{
  int i,t,*min,*max;
  min=max=&arr[0];
  for(i=0;i<n;i++)
  {
     if(*min > arr[i]) 
         min = &arr[i]; 
        } 
      t = arr[0];
        arr[0] = *min;
        *min = t;
  for(i=0;i<n;i++)
  {
    if(*max < arr[i])
      max=&arr[i];
  }
    t=arr[n-1];
    arr[n-1]=*max;
    *max=t;
}
void output(int *arr,int n)
{
  int i;

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

 

2)设计思路

3)本题做对过程碰到问题及解决办法

在输出结果的格式中使用了空格,导致出现了格式错误,后再助教的提醒下使用了“%3d”的输出格式。

正确截图

思考题

1.简单地说指针就是指向变量和对象的地址,平时使用的别的变量(指的指针变量以外的变量),就是用变量名字代表了它所在的空间,本质还是到这个地址去访问;而用指针变量访问,就是直接访问这个空间了,因此更高效。

可以大大提高传送数据的效率。

2.指针所占用的空间与指针指向的内容和内容的大小无关,在不同的操作系统及编译环境下,指针类型所占用的字节数是不同的

 在编译器里定义一个指针变量,编译器会给这个指针变量分配一个空间,这个空间里存放的是一段内存的首地址,先解释一段内存,一段内存的大小是与你所定义的指针类型相关的,比如int,这段内存占四个字节(当然要看你的机器是多少位的了),则这段内存的首地址是第一个字节的地址,如char类型,占一个字节,这段内存的首地址就是这个字节的地址,还如结构体类型,此时内存大小要看该结构体的所有属性所占内存之和。现在解释这个空间,编译器给指针分配的空间大小是和CPU的寻址长度相关的,比如32位的CPU,它的寻址长度为32位,那么这个空间也就占四个字节,其实不管你定义什么样的指针类型,这个空间只是用来存地址,只占四个字节,而真正该空间所存的地址是哪一段内存的首地址才和所定义的指针类型相关。
--------------------- 
作者:cooloyty 
来源:CSDN 
原文:https://blog.csdn.net/cool_oyty/article/details/8078632 
 

作业评价

本次作业并没有太大的难度,在结对编程时就完成了俩道题。预习题也就是编写函数,但挑战题还是没能完成。

结对编程

本周我和结对的队员在一起进行了编程,完成了俩道题。俩个人在一起讨论能有不一样的思路,不一样的解决方法,也能通过对方了解自己的不足,更好的完善自己。但两个人有时也会限制自己或者对方的思路。

学习进度条

这周所花的时间

代码行

学到的知识点

遇到的问题

第二周

8h

100

文件指针的定义

指针的具体用法

第三周

12h

120

二维数组的定义和用其编程

如何使用指针对二维数组进行处理。

第四周

12h

134

利用数组对一组数进行排序

把一些简单的问题复杂化,不能找到最佳的方法。

第五周

10h

125

综合利用指针和数组解决问题

指针在编程中的作用

第六周

12h

120

学习指针的定义和作用

指针在问题中如何体现出简便

posted on 2019-04-05 19:24  lizhiyang  阅读(171)  评论(1编辑  收藏  举报