2019春第六周作业

本周作业头

这个作业属于那个课程 C语言程序设计
这个作业要求在哪里 https://www.cnblogs.com/lwmzei6/p/10657271.html
我在这个课程的目标是 <掌握指针的定义及其运用>
这个作业在那个具体方面帮助我实现目标 <了解指针的定义及其运用,区别指针和数组的关系>
参考文献 <无>

A基础作业

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


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

输入样例:

12 20

输出样例:

y=7.94

1)我的代码

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

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,int n,int *max,int *min)
{
  int max1=*a,min1=*a;
  for(int i=0;i<n;i++)
  {
    if(*(a+i)>max1)
    max1=*(a+i);
    if(*(a+i)<min1)
    min1=*(a+i);
  }
  *max=max1;
  *min=min1;
}
int main()
{
  int n,i,max,min;
  scanf("%d",&n);
  int shu[n];
  for(i=0;i<n;i++)
  scanf("%d",&shu[i]);
  max_min(shu,n,&max,&min);
  printf("max = %d\nmin = %d",max,min);
}

2)我的思路

3)遇到的问题及解决

问题1:对于指针数组还不是特别会用
解决方法:搜了一下百度,看了专门讲指针数组的视频

B思考题:

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

指针就是地址,另外还有指针变量,也就是存放地址的变量。
指针是存放内存地址的,使编程更容易实现数据的出去和计算。
平时使用的别的变量(指的指针变量以外的变量),就是用变量名字代表了它所在的空间,本质还是到这个地址去访问;而用指针变量访问,就是直接访问这个空间了,因此更高效。

2.指针变量在内存中暂用多大的空间?它的大小由什么决定?

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

指针变量本身所占存储空间的大小取决于存储地址值所需的字节数

C预习作业

为一维数组输入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)我的代码

{
  for(int i=0;i<n;i++)
  scanf("%d",arr+i);
}
void max_min(int *arr,int n)
{
  int min1=0,max1=n-1,min=*arr,max=*(arr+n-1),i,z;
  for(i=0;i<n;i++)
  {
    if(min>*(arr+i))
    {
      min1=i;
      min=*(arr+i);
    }
    if(max<*(arr+i))
    {
      max1=i;
      max=*(arr+i);
    }
   }
  z=*arr;
  *arr=*(arr+min1);
  *(arr+min1)=z;
  z=*(arr+n-1);
  *(arr+n-1)=*(arr+max1);
  *(arr+max1)=z;
}
void output(int *arr,int n)
{
  for(int i=0;i<n;i++)
  printf("%3d",*(arr+i));
}

2)我的思路

4本题调试过程中遇到的问题及解决方法

问题1:一开始编译出来的数直接是从小排到大
解决方法:多次调试之后就找到错的地方然后就改了
问题2:缺少中间替换的变量,导致编译结果为1 1 4 8 2 3 9 5 12 12
解决方法:看了一下其他同学的博客然后就懂了

D学习进度表

周/日期 这周所花的时间 代码行数 学到的知识点简介 目前比较迷惑的问题
2/25-3/3 三天 45 数组的认识及用法 数组长度的理解
3/4-3/10 两天 37 编写程序时处理文件 fscanf与fprintf的具体用法
3/11-3/17 三天 53 二维数组的使用及文件插入 二维数组的用法、上三角的判断及文件的处理
3/18-3/24 两天 113 判断回文、一维字符数组的用法、使用字符串编程 使用字符串编程
3/25-3/31 两天 78 判断回文、一维字符数组的用法、使用字符串编程 使用字符串编程
4/1-4/7 两天 88 指针变量的基本运算,内存单元和地址之间的关系 不太了解指针数组

E学习感悟

长风破浪会有时,直挂云帆济沧海!

F结对编程

我太辣鸡了不想耽误队友直接问的别人。

posted @ 2019-04-04 22:03  李为民  阅读(270)  评论(1编辑  收藏  举报