第六周的作业

这个作业属于那个课程c语言课本
这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2888
我在这个课程的目标是理解变量、内存单元和地址之间的关系;掌握如何定义指针变量,怎样使用指针变量,怎样进行指针变量的初始化
这个作业在哪个具体方面帮助我实现目标让我初步了解了指针,能简单的利用指针完成一些简单的代码

题目1. 6-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

一.实验代码

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

二.设计思路流程图

三.本题调试过程碰到的问题及解决方法

这道题不难一次就写对了

四.运行结果图

 

 

 

 

题目2. 7-1 利用指针返回多个函数值

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

输入格式:

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

输出格式:

输出最大值和最小值。

输入样例:

在这里给出一组输入。例如:

5
8 9 12 0 3

输出样例:

在这里给出相应的输出。例如:

max = 12
min = 0

一.实验代码

#include<stdio.h>
#include<string.h>
void max_min(int a[],int len,int* pmax,int* pmin);
int main(){
  int n,i,max,min,len=0;
  int *pmax,*pmin;
  int a[1000];
  scanf("%d",&n);
  for(i=0;i<n;i++){
    scanf("%d",&a[i]);
    len++;
  }
  max_min(a,len,&max,&min);
  printf("max = %d\nmin = %d",max,min);
  return 0;
}
void max_min(int a[],int len,int* pmax,int* pmin){
  int i;
  *pmax=a[0];
  *pmin=a[0];
  for(i=1;i<len;i++){
    if(*pmax<a[i]) *pmax=a[i];
    if(*pmin>a[i]) *pmin=a[i];
  }
}

二.设计思路流程图

三.本题调试过程碰到的问题及解决方法

一开始我不是这样写的,在pta上一直出现编译错误改了好几遍还是不对后来问了下我的室友他把他的代码给我讲解了一遍我就放弃了之前的用他的思路写完了

四.运行结果图

 

 

 

预习作业 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

一.实验代码

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,max,min,t,p;
  max=min=*arr;
  for(i=0;i<n;i++)
  {
    if(max<*(arr+i))
    {
      max=*(arr+i);
      t=i;
    }
    if(min>*(arr+i))
    {
      min=*(arr+i);
      p=i;
    }
  }
  int j;
  j=*(arr+t);
  *(arr+t)=*(arr+n-1);
  *(arr+n-1)=j;
  int k;
  k=*(arr+p);
  *(arr+p)=*arr;
  *arr=k;
}
void output(int *arr,int n)
{
  int i;
  for(i=0;i<n;i++)
  {
    printf("%3d",*(arr+i));
  }
}

二.设计思路流程图

三.本题调试过程碰到的问题及解决方法

在写代码的时候感觉自己对数组指针和自定义函数的时候掌握不够容易搞混起来,搞来搞去总是出错,后面在参考了百度读完别人的代码思路才清晰起来

四.运行结果图

思考题

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

 

答:.指针具有速度快,节约内存等优点,指针能够有效的表示数据结构,能动态分配内存,能较方便的使用字符串,有效的使用数组。指针直接与数据等的储存地址有关,是比较重要的。比如,值传递不如地址传递高效,因为值传递先从实参的地址中提出值,再赋值给形参带入函数计算;而指针则把形参的地址直接指向实参地址,使用时直接提出数据,使效率提高,特别在频繁赋值等情况下。

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

 

答:

占用空间大小跟当前CPU的寻址位数 和编译器的 位数有关;
C指针3种:指向简单变量,指向结构体变量,指向函数;
指向类型, 基本都等于址宽度.
16位地址系统, 用段、偏移表示一个地址,
当只用偏移的时候(段内)称NEAR指针, 当段、偏移都用的时候(跨段), 称FAR指针,
FAR指针占用空间大于NEAR指针.

学习进度条

周/日期

这周所花的时间

代码行数

学到的知识点简介

目前比较迷惑的问题

3/3-3/9

四个小时

32

这周学习了文件

不太理解文件的运用和一些符号的意义导致打代码进度很慢

3/10-3/15

四个小时

130

这周虽然没上课但完成了上周的一部分挑战作业,还预习了二维数组并且完成了一个题目

对于二维数组还是不太理解

3/16-3/22

五小时

153

这周学习了二维数组还学习了两种排序方法

对于两种排序方法的不同还不太清楚

3/23-3/29

六小时

67

学习了字符数组的概念和简单运用,

在写程序的时候总是在输入文件的时候出现问题,无法在文件中打印出想要的结果

3/30-4/7

六小时

166

本周学习了指针,掌握如何定义指针变量,怎样使用指针变量,怎样进行指针变量的初始化等比较基本的东西

在刚接触指针感到有点难对于指针的理解还不够好写起题目来有点力不从心

 

三、学习感悟

这周的学习让我有点难受,对于指针的一些东西掌握的不够好,写题目有思路但是一写起来就出现各种各样的错误,这说明我对这部分的学习学的不够好同时也体现出了打代码的熟练程度,避免一些低级错误的产生,同时要在网上多看些这章的内容来完善自己。

结对编程感想

这周结对编程是和我的搭档李文龙一起的,我在打代码时出现的一些错误能帮我看出来及时提醒我我觉得这是很好的,能避免一些时间上的浪费,同时在写题目的思路上能互相讨论,也会发生一些争执,但总的来说结对编程还是有收获的。

表格-折线图

 

 

转载于:https://www.cnblogs.com/zhangweiyouxiu/p/10659993.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!改善深层神经网络的方法有很多,以下是一些常见的方法: 1. 使用更好的激活函数:传统的激活函数如Sigmoid、tanh等可能存在梯度消失或爆炸的问题。可以尝试使用ReLU、Leaky ReLU、ELU等激活函数,以减轻这些问题。 2. 使用批标准化(Batch Normalization):批标准化对网络的输入进行标准化,有助于加快网络的训练速度,并且可以缓解梯度问题,使得更深层的网络也能够训练得更好。 3. 使用残差连接(Residual Connections):残差连接可以帮助信息在网络中更好地流动,从而减轻梯度消失的问题。通过将某些层的输出与输入相加,可以使得网络更易于训练。 4. 使用更好的优化算法:传统的梯度下降算法如随机梯度下降(SGD)可能存在训练速度慢、易陷入局部最优等问题。可以尝试使用更高级的优化算法如Adam、RMSprop等,以加快模型的收敛速度。 5. 添加正则化:过拟合是深层神经网络常见的问题之一。可以通过添加正则化项如L1正则化、L2正则化等来限制模型的复杂度,防止过拟合的发生。 6. 数据增强:通过对训练数据进行一些随机的变换,如平移、旋转、缩放等,可以增加模型的泛化能力,防止过拟合。 这些方法只是改善深层神经网络的一部分,具体的选择和调整需要根据具体问题和数据集来进行。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值