zoukankan      html  css  js  c++  java
  • 第六周作业

    基础题一:求两数平方根之和
    函数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

    实验代码:
    double fun (double a, double b)
    {
    double sum=0;
    sum=sqrt(
    a)+sqrt(
    b);
    return sum;
    }

    流程图

    本题应解决的问题:

    运行结果截图

    题目二:利用指针返回多个函数值

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

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

    输出格式:
    输出最大值和最小值。

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

    5
    8 9 12 0 3
    输出样例:
    在这里给出相应的输出。例如:

    max = 12
    min = 0

    实验代码

    include<stdio.h>

    void max_min(int *str,int n,int *max,int *min);
    int main()
    {
    int i,n,max,min;
    scanf("%d ",&n);
    int str[n];
    for(i=0;i<n;i++)
    scanf("%d",&str[i]);
    max_min(str,n,&max,&min);
    printf("max = %d min = %d",max,min);
    return 0;
    }
    void max_min(int *str,int n,int max,int min)
    {
    int i;
    max=str[0];
    min=str[0];
    for(i=0;i<n;i++)
    {
    if(
    (str+i)>
    max)
    max=(str+i);
    if(
    (str+i)<
    min)
    min=(str+i);
    }
    return 0;
    }

    流程图及设计思路

    遇到的问题及解决思路

    问题1:为什么有些在dev-c++上面是错的,而在pta上面而是对的。
    解决办法:多次在dev-c++上面编译运行及在pta上面提交,发现其问题由于编译器不同导致。
    问题2:对新函数的不熟悉,不会灵活运用
    解决办法:多查找资料,在网上咨询。

    运行结果截图

    题目三预习题:
    为一维数组输入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)
    {
    for(int i=0;i<n;i++)
    {
    scanf("%d",&arr[i]);
    }
    }
    void max_min(int *arr,int n)
    {
    int i,max,min,temp;
    for(i=1;i<n;i++)
    {
    if(arr[i]>arr[max])
    max=i;
    if(arr[i]<arr[min])
    min=i;
    }
    temp=arr[max];
    arr[max]=arr[9];
    arr[9]=temp;
    temp=arr[0];
    arr[0]=arr[min];
    arr[min]=temp;
    }
    void output(int *arr,int n)
    {
    for(int i=0;i<n;i++)
    {
    printf("%3d",arr[i]);
    }
    }
    流程图及其设计思路

    遇到的问题及解决办法:

    问题:最大的问题是对于新函数的运用不熟练,for循环语句的使用错误。
    解决办法:多次在dev-c++上面运行编译。
    运行结果截图:

    题目四:思考题
    一:为什么要使用指针?指针的好处在哪里
    答:链接https://wenwen.sogou.com/z/q873261172.htm
    由于c/c++开发先与java和c#,c/c++为了给程序员以控制内存的目的而提出了指针。
    一个简单的例子就是垃圾回收机制。在c/c++中,你可以使用delete(free)来释放内存,在c#和java里面就只能靠其自己的内存回收机制来回收了。有些时候,内存吃紧的话是必须要立马释放的。那么这种情况c#和java就做不到了。
    所以说c#和java里面不是不要指针,而是处处是“指针”,只是它给你封装了,不在让你头疼c/c++中指针带来的一些问题了。
    好处:连接https://wenwen.sogou.com/z/q712208116.htm
    1.在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存。
    2.数据转换,利用指针的灵活的类型转换,可以用来做数据类型转换,比较常用于通讯缓冲区的填充,比如说,一个数据缓冲区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;
    3.字符串指针,是使用最方便,且常用的。
    4.函数指针,形如:#define PMYFUN (void*)(int,int),可以用在大量分支处理的实例当中,如某通讯根据不同的命令号执行不同类型的命令,则可以建立一个函数指针数组,进行散转。
    5.在数据结构中,链表、树、图等大量的应用都离不开指针。
    二:指针变量在内存中暂用多大空间?
    链接:https://www.sogou.com/sogou
    答:32位编译器:4个字节;64位编译器:8个字节。
    它的大小由什么决定?
    答:编译器的版本决定

    学习体会:学习了相关的指针函数及其数组之间的关系。
    难点:多组函数的混合使用就不知道灵活使用,同时对于指针的熟练度也不太高。
    解决方法:上网查寻,询问结对同学及听老师讲解
    对于结对编程
    优点:1.有利于相互借鉴、资源的互用。
    2.能更好的发现问题,解决问题。
    3.有利于同伴默契的提高,以便以后参加工作提前适应。
    缺点:各自都有事情,时间不好统一。
    学习心得:对于提高逻辑能力有待加强。多去学习网上优秀博客的解题思路和经验,充实自己。再者加强for语句的灵活运用。继续撸起袖子加油干!!!

  • 相关阅读:
    括号拼接字符串
    递归删除
    ES6实用常用用法
    @RequestBody与@ResponseBody注解
    (node:11224) UnhandledPromiseRejectionWarning: TypeError: this.getResolve is not a function
    npm安装webpack速度太慢解决方法
    Component template requires a root element, rather than just text.
    js操作cookie
    js在函数中发Ajax请求返回undefined问题
    SQL 登录时提示:Server returns invalid timezone. Need to set 'serverTimezone' property.
  • 原文地址:https://www.cnblogs.com/huanglexing/p/10658653.html
Copyright © 2011-2022 走看看