• 2019年春季学期第六周作业


    A Q
    这个作业属于那个课程 C语言程序设计II
    这个作业要求在哪里 2019春第六周作业
    我在这个课程的目标是 尽可能了解并且应用指针及文件和数组的知识
    这个作业在那个具体方面帮助我实现目标 大致掌握了数组的简单编程及应用,了了解了文件和指针的基础知识和简单应用
    参考文献 C语言chap11C语言chap10

    一、本周完成的作业

    题目1.6-1 求两数平方根之和

    函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。**

    函数定义接口

    double fun (double *a, double *b); 
    

    其中 ab是用户传入的参数。函数求 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) .设计思路

    mermaid
    flowchat
    st=>start: 定义函数声明和头文件,定义变量
    io=>inputoutput: 输入a,b
    sub=>subroutine: 利用自定义函数计算两数平方根之和
    io1=>inputoutput: 输出y
    e=>end: return 0;
    
    
    st->io->sub->io1->e
    

    子程序:

    mermaid
    flowchat
    st=>start: 定义y
    op=>operation: 调用sqrt直接计算
    e=>end: return y;
    st->op->e
    

    3).本题调试过程碰到问题及解决办法

    问题:本以为很简单的题目,没想到提交之后竟然编译错误。

    解决方法:仔细阅读了书本和参考文献之后发现原来是a,b前面少了指针标志*

    4).运行结果截图

    题目2.7-1 利用指针返回多个函数值

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

    输入格式:

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

    输出格式:

    输出最大值和最小值。
    

    输入样例:

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

    5
    8 9 12 0 3
    

    输出样例:

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

    max = 12
    min = 0
    

    1).实验代码

    #include<stdio.h>
    void max_min(int *arr,int n,int* pmax,int* pmin);
    int main(){
      int i,max,min,n;
      int *pmax,*pmin;
      int a[1000];
      scanf("%d
    ",&n);
      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 *arr,int n,int* pmax,int* pmin){
      int i;
      *pmax=arr[0];
      *pmin=arr[0];
      for(i=1;i<n;i++){
        if(*pmax<arr[i]) {
        	*pmax=arr[i];
    	}
        if(*pmin>arr[i]) {
        		*pmin=arr[i];
    	}
      }
    }
    
    

    2) 设计思路

    mermaid
    flowchat
    st=>start: 定义头文件小恒名自定义函数,定义变量
    io=>inputoutput: 输入n,并且利用for输入数组
    sub=>subroutine: 利用max_min函数进行寻找最大值最小值
    io1=>inputoutput: 分两行输出max和min
    e=>end: return 0;
    
    st->io->sub->io1->e
    

    子程序:

    mermaid
    flowchat
    st=>start: 申明自定义函数,定义i
    op=>operation: *pmax=arr[0];和*pmin=arr[0];
    cond=>condition: i<n
    cond1=>condition: *pmax<arr[i]
    cond2=>condition: *pmin>arr[i]
    op1=>operation: *pmax=arr[i];
    op2=>operation: *pmin=arr[i];
    e=>end: 结束函数
    
    st->op->cond
    cond(no,left)->e
    cond(yes)->cond1
    cond1(yes,)->op1->cond2
    cond1(no,)->cond
    cond2(yes,)->op2(left)->e
    cond2(no,)->cond
    

    3).本题调试过程碰到问题及解决办法

    问题:第一次提交碰到答案错误,软件上运行也不如意,多次调试。

    解决方法:在反复调试中和查看书后发现原来是没有给pmax和pmin赋初始值。

    4).运行结果截图

    题目3.挑战作业

    接着上周的挑战作业继续,本周, 我们需要考虑如果 “子数组” 并不要求是一个矩形, 而是联通的元素即可 (上下或左右相邻即视为联通), 那解法会是怎么样呢?
    具体要求请参看邹欣老师博客 现代程序设计作业

    1) 设计思路

    1.我会尝试按点来进行拓展成面的计算
    2.一数组中一个数为基点,计算上下左右和本身之和,逐个累加,,然后再以联通的其中一个元素为基点在计算
    3连续增加则继续,连续减少则停止,直指最大和
    

    题目4.预习作业:最小数放前最大数放后

    为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。。

    函数接口定义

    void input(int *arr,int n);
    void max_min(int *arr,int n);
    void output(int *arr,int n);
    

    三个函数中的 arrn 都是用户传入的参数。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) {
    	int i;
    	for (i=0;i<n;i++)	{	
    		scanf("%d",&arr[i]);	
    		}
    	}
    	
    void max_min(int *arr,int n) {	
       int temp1=0,temp2=0,b,s,i;	
       int max,min;
       min=max = arr[0];	
       for (i=0;i<n;i++) {
       	if (max<arr[i]) {
                max = arr[i]; 
    			 b= i;		 
    	 }
           }
    	temp2=arr[9];	
    	arr[9]=arr[b];	
    	arr[b]=temp2;		
    	for (i=0;i<n;i++)	{
    	 if(min>arr[i]){
                min= arr[i]; 
                s= i;
    			}		 
    	}
    	temp1=arr[0];	
    	arr[0]=arr[s];	
    	arr[s]=temp1;
    
        }
        
     void output(int *arr,int n) {	
    	 for (n=0;n<10;n++)	{		
    	 printf("%3d",arr[n]);	
    	 }	
    	 printf("
    ");
    	 }
    

    2) 设计思路

    第一函数:

    mermaid
    flowchat
    st=>start: 申明自定义函数,定义i
    io=>inputoutput: 利用for循环输入数组
    e=>end: 结束函数
    
    st->io->e
    

    第二函数:

    mermaid
    flowchat
    st=>start: 申明自定义函数,定义相关变量
    op=>operation: 初始赋值min=max=arr[o];
    cond=>condition: i<n
    cond2=>condition: min>arr[i]
    cond1=>condition: max<arr[i]
    op2=>operation: temp1=arr[0];arr[0]=arr[s];
    arr[s]=temp1;
    op1=>operation: temp2=arr[9];arr[9]=arr[b];arr[b]=temp2;
    e=>end: 结束函数
    
    st->op->cond
    cond(no)->e
    cond(yes,left)->cond1
    cond1(yes)->op1->cond
    cond1(no)->cond2
    cond2(yes,Right)->op2(right)->cond
    

    第三函数:

    mermaid
    flowchat
    st=>start: 申明自定义函数
    op=>operation: 利用printf输出数组
    cond=>condition: n<10?
    e=>end: 结束函数
    st->cond
    cond(no)->e
    cond(yes)->op->cond
    

    3) 本题调试过程中碰到问题及解决办法

    问题:由于对指针的定义数组不熟悉导致了很多错误的出现,预习作业是出挑战作业里面最有难度的题目了。

    解决方法:仔细阅读题目,加上重新浏览书本,重新编写了一套代码

    4) 运行结果截图

    题目5.思考题

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

    指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。

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

    教科书上说指针大小和机器字长相同,即32位机指针长度为4字节!那么只是唯一回答吗?在网上浏览了下,我怕发现答案不一!在查看了众多关于指针变量的回答之后,我从其中最全面的分析中得出结论(参考自指针变量占用内存大小):指针大小是由当前CPU运行模式的寻址位数决定!

    1).学习进度统计

    2).学习感悟

    (1)本周你学习哪些内容?有哪些收获?
    本周学习了数组的进阶和自定义函数的简单应用,我觉得这些对我来说都是很有难度的,我只能从书本中不过和网络上多多汲取知识。我再这次可中收获了许多编程的小技巧。

    (2)本周所学内容中你觉得哪些地方是难点?对此你做了哪些措施去客服这些难点?
    第六周的预习和挑战作业很难,基础作业加强版在观看书本文件类似案例之后,难度也还行,挑战作业是真的只是有点思路呀!克服这些困难,我觉得只有多多向大佬们和网络讨教学习啦。

    三、结对编程的过程及优缺点

    关于结对编程
    本次结对编程地点在教室,本次结对与熟人搭档,过程还是很愉快的,结对编程中我们讨论了第六周预习作业中的代码修改问题,双方讨论的气氛不错,题目的思路各有不同,难以统一。两个人编程果然还是远不如一个人自在。
    结对编程的优缺点
    优点:1.结对编程可以提高动手合作;2.结对编程有利于吐纳对的友好合作能力,搭档合作可以提升做题的效率;3.结对编程省时省力。
    缺点:这种合作刚不是不习惯,结对编程远不如一个人编程自在,而且还相当于两人份题目难度和枯燥伴随。

  • 相关阅读:
    docker run 参数含义
    java——数组队列 ArrayQueue
    java——数组栈 ArrayStack
    java——时间复杂度、动态数组
    java——异常类、异常捕获、finally、异常抛出、自定义异常
    java——变量
    java——虚拟机、线程
    java——内部类
    java——object类
    java——抽象类、接口、二者区别
  • 原文地址:https://www.cnblogs.com/LfanWyuXooo/p/10658636.html
Copyright © 2020-2023  润新知