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

    第六周作业

    这个作业属于那个课程 C语言程序设计Ⅱ
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/MS/homework/2893
    我在这个课程的目标是 学会使用指针
    这个作业在哪个具体方面帮助我实现目标 利用指针返回多个函数值
    参考文献 《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
    ", 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
    ", y );
    return 0;
    }
    double fun (double *a, double *b)
    {
    	double sum;
    	sum=sqrt(*a)+sqrt(*b);
     
    	return sum;
     } 
    

    2.设计思路

    3.本题遇到的问题及解决办法
    没有问题

    4.结果截图

    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 * pmin, int * pmax, int * a, int n);
    int main(void) 
    {
    	int i, n, max=0, min=0;
        int a[1000];
    
        scanf("%d", &n);
        for(i=0;i<n;i++)
        {
    	    scanf("%d", &a[i]);
        }
        max_min(&min,&max,a,n);     
    
        printf("max = %d
    min = %d",max,min);
        return 0;
    }
    
    void max_min(int * pmin, int * pmax, int * a, int n)
    {
    
        int temp;
         int i,j,index;
        for ( i=0 ; i< n-1 ; i++)
        {
            index=i;
            for (j=i+1 ; j < n ; j++)
                {
                    if (a[j] < a[index] )
                     index=j;
                }
            if ( index!=i)
                {
                     temp     = a[i];
                     a[i]     = a[index];
                     a[index] = temp;
                }
         }
    
    
        *pmax=a[n-1];
        *pmin=a[0];
    
    }
    

    2.设计思路

    3.运行遇到的问题及解决办法

    问题:1.函数的调用这一部分知识忘记了好多,导致这里max_min(&min,&max,a,n);出现了错误。
    解决办法:在我自己找不到错误后,我请教了同学,并且重新温习了函数的调用。
    4.实验结果截图

    6-3 最小数放前最大数放后 (10 分)
    为一维数组输入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.实验代码

    #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;
    }
    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, *min, *max, b;
    	min = max = &arr[0];
    	for(i=1;i<10;i++)
        {
             if(*min > arr[i])  
            {
             min = &arr[i]; 
            } 
    
    	    if(*max < arr[i])
    	    {
    	    	max = &arr[i];
        	}
    	
        }
        	b = arr[0];
        	arr[0] = *min;
        	*min = b;
    	
    	    b = arr[9];
        	arr[9] = *max;
        	*max = b;
    }
    
    void output(int *arr,int n)
    {
      int i;
    
        for (i=0;i<n;i++)  
        {      
        	printf("%3d", arr[i]);
        }
    
    }
    

    2.设计思路

    3.运行时所遇到的问题及解决办法

    问题:说到底是太菜了呀,之前一直编译错误,我最开始的是写成这样,输出的结果全部是1

    void input(int *arr,int n)
    {
        int i;
        for(i=0;i<n;i++)
        {
            scanf("%d", &a[i]);
            int*arr=&a[i];
        }   
    }
    

    解决办法:询问了同学,后来想起老师上课时说的以及结合函数的调用
    百度了一下:
    函数指针:返回的是函数的类型数据

    指针函数:返回的是一个指针地址

    函数名和数组名一样都是一个指针;即是地址
    问题:最后修改后还是格式错误
    解决办法:请教了助教,发现%3d前 加了个空格
    4.运行结果截图

    思考题:

      1.为什么要使用指针?它有什么用?
      2.指针变量在内存中暂用多大的空间?它的大小由什么决定?
    首先:指针就是地址
    指针变量存放地址的变量
    1.使用指针型变量在很多时候占用更小的内存空间。
    指针通过地址传递参数,可以双向传递值。

    指针的作用
    1)处理堆中存放的大型数据
    2)快速访问类的成员数据和函数
    3)以别名的方式向函数传递参数

    2.指针的大小与CPU的寻址长度相关

    指针占用的内存空间大小与指针指向的内容和内容的大小无关。
    在不同的操作系统及编译环境中,指针类型占用的字节数是不同的。一般而言,
    编译生成16位的代码时,指针占2个字节
    编译生成32位的代码时,指针占4个字节
    编译生成64位的代码时,指针占8个字节

    结对编程

    本周结对编程时请假回家了,故没有与队友一起结对编程,以及与队友之间差距过大,一般都请教大佬了

    结对编程的优点:
    (1)在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
    (2)对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
    (3)在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
    缺点:有的时候两个人会有不同的思路,将会导致一些分歧,这时会有些麻烦,一个人的时候更利于静下心来仔细思考

    学习进度条

    周/日期 这周所花的时间 代码行数 学到的知识点简介 目前比较迷惑的问题
    2/27-3/7 4h 220 文件 这次作业没有
    3/8-3/14 4h 230 二维数组 感觉还好,就是学习指针后面还是有点蒙
    3/15-3/24 8h 250 数组,冒泡排序法和选择法排序 指针
    3/24-3/29 5h 180 字符串 函数的使用
    3/30-4/5 8h 224 指针 调用函数忘记了很多

    博客字数和代码函行数

  • 相关阅读:
    织梦安装
    讲解版的自动轮播(新手福利)样式和js就不分离了为了看的方便
    APP制作过程
    细线边框
    APP常用模块
    PC-JS小技巧
    PC-CSS-多浏览器支持HTML5
    jQuery瀑布流实例无限滚动加载图片
    25个Java机器学习工具&库(收藏)
    java中的动态代理----自己手动实现
  • 原文地址:https://www.cnblogs.com/muxixixixi/p/10651509.html
Copyright © 2011-2022 走看看