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

    2019春季第六周作业

    这个作业属于哪个课程 C语言程序设计ll
    这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2888
    我在这个课程的目标是 希望对指针的运用更熟练
    这个作业在哪个具体方面帮助我实现目标 作业涉及到了指针以及函数调的运用,使我对新知识的消化吸收更加容易
    参考文献 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.代码

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

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

    2.思路总结

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

    问题一:将代码放入c++软件中运行出现乱码
    解决办法:重新检查代码,发现未正确定义数组a,后将a[n]改为a[921]
    问题二:定义好数组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.代码

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

    2.思路总结

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

    问题一:代码初次提交检查时,编译错误
    解决办法:重新检查代码,发现忘了定义中间变量,而后定义了N,H两个中间变量
    问题二:改正后再次提交,仍无法得出正确答案
    解决办法:查阅书籍,重新检查代码,发现弄错了变量交换的顺序,改正后正确

    4.运行结果截图


    思考题:

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

    答:指针是用来存放内存地址的变量,其有利于大型数据的管理,尽可能减少程序的时间复杂度与空间复杂度,虽然有些复杂,但能节省较多的空间,而且使用指针来读取数据,在重复性操作的状况下,可以明显改善程序性能

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

    答:指针变量在内存中一般占用四个字节,它的大小一般由编译器的版本决定

    5.学习进度条

    周/日期 这周所花时间 代码行数 知识点简介 目前比较迷惑的问题
    3/4-3/10 五个多小时 30 编写程序时处理文件 fprintf语句和fscanf语句的运用有些地方还有稍许疑惑
    3/11-3/15 四天 65 二维数组的运用 二维数组的运用还存在稍许疑惑
    3/17-3/22 三天 108 二维数组的定义及运用,选择排序法和冒泡排序法的运用 冒泡排序法的运用还存在稍许问题
    3/25-3/29 五天 72 学习了判断回文,使用字符串编程以及一维数组的灵活使用 对于一维数组的使用还有稍许疑惑
    4/1-4/5 五天 78 学习了指针的基本运用,以及如何使用指针实现函数调用返回多个值等 对指针的运用仍有点不熟练

    6.结对编程感想

    在本次结对编程中,我感觉我自己的编程能力上升了一点,当然这也离不开搭档的指导,在以后的学习里我一定会更加努力的,加油!

    7.学习感悟

    在本周的学习中,我学到了有关指针的运用以及对函数调的使用,感觉收获很大,当然在编程过程中我也发现了自身存在的一个缺点,那就是太粗心,总是出现一些不必要的小错误,在以后的学习中我一定要纠正这个缺点,避免出现这些小错误,并且要多阅读一些相关新知识的材料文献,不能只局限于教材,学无止境,要拓宽视野,更加努力

    8.表格和折线

    时间 代码行数 博客字数
    第一周 0 0
    第二周 30 318
    第三周 65 840
    第四周 108 1200
    第五周 72 1337
    第六周 78 1635
  • 相关阅读:
    606. Construct String from Binary Tree
    696. Count Binary Substrings
    POJ 3255 Roadblocks (次短路)
    POJ 2823 Sliding Window (单调队列)
    POJ 1704 Georgia and Bob (博弈)
    UVa 1663 Purifying Machine (二分匹配)
    UVa 10801 Lift Hopping (Dijkstra)
    POJ 3281 Dining (网络流之最大流)
    UVa 11100 The Trip, 2007 (题意+贪心)
    UVaLive 4254 Processor (二分+优先队列)
  • 原文地址:https://www.cnblogs.com/linkedashewaixueyuan/p/10653862.html
Copyright © 2011-2022 走看看