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

    这个作业属于那个课程 C语言程序设计II
    这个作业要求在哪里 <写上作业的链接>
    我在这个课程的目标是 在实践中培养程序设计的基本能力
    这个作业在那个具体方面帮助我实现目标 学会掌握利用指针编程
    参考文献 C语言程序设计II
    6-1 求两数平方根之和 (10 分)
     

    函数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;
    }
    double fun (double *a, double *b)
    {
        double result;
        result=sqrt(*a)+sqrt(*b);
        return result;
     } 

    截图

    思路

    这道题就是以前学的使用数学函数,只不过把其中的变量或常量变成了指针变量


    7-1 利用指针返回多个函数值 (30 分)
     

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

    输入格式:

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

    输出格式:

    输出最大值和最小值。

    输入样例:

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

    5
    8 9 12 0 3
    

    输出样例:

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

    max = 12
    min = 0
    
    代码


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

    截图

    问题:首先题目没有要求数组大小,只要求输入n个数,所以一开始不知道定义成a[n],其次在比较大小时,本想和前面数组使用的比较一样,但在pta上不行,只好使用别的方法。

    解决:网上查找发现可以定义a[n],和前面数组比较其实差不多,只不过指针是把第一个数用指针代替,然后进行比较。

    流程图


    6-3 最小数放前最大数放后 (10 分)
     

    为一维数组输入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;
    }
    void input(int *arr,int n){
        int i;
        for(i=0;i<10;i++)
            scanf("%d",&arr[i]);
    } 
    void max_min(int *arr,int n){
        int k;
        int temp,mi,ma;
        int min=arr[0];
        int max=arr[0];
            for(k=0;k<n;k++)
                 if(min>=arr[k]){
                     min=arr[k];
                   mi=k;
                   
                   }
                temp=arr[mi];arr[mi]=arr[0];arr[0]=temp;
                 
            for(k=0;k<n;k++)
                 if(max<arr[k]){
                     max=arr[k];
                 ma=k;
                 }
                
            temp=arr[ma];arr[ma]=arr[n-1];arr[n-1]=temp;               
    }
    void output(int *arr,int n){
    int i;
        for(i=0;i<10;i++)
            printf("%d ",arr[i]);    
    }

    截图

    流程图

    问题:开始不知道,当实参为数组,形参为指针时,不知道在后面的定义函数中,就是用指针名代替数组名来进行输入与输出等操作

    解决:还是要看书本,在二分法查找中就是这样使用的。


    思考题:(分值等同于编程题)
      1.为什么要使用指针?它有什么用?
      2.指针变量在内存中暂用多大的空间?它的大小由什么决定?

    1、指针能对复杂数据进行处理,能对计算机的内存分配进行控制,在函数中可以返回多个值。

    2、指针变量用于存放变量的地址,由于不同类型的变量在内存中占用不同大小的存储单元,所以大小由所指的变量或常量的大小决定。

    学习感悟

    首先在现在的学习中,最重要的是把基础知识巩固

    其次能在脑海中形成系统的知识导图

    最后能进行深入的学习以及算法的学习

    学习进度

  • 相关阅读:
    书本第十三章课后习题4、5、6
    软件工程一班第五小组知识树系统-软件测试计划
    第八周作业
    第七周作业——用面向对象方法分析研究书中习题2第3题中描述的机票预订系统,试建立它的对象模型、动态模型和功能模型。
    第六周作业——建立订货系统的用例模型
    第五周作业——用状态转换图描绘复印机的行为
    第四周作业——在你的实际项目旅游网站中,网页主页面主要有哪些模块?
    第三周作业—— 在软件开发的早期阶段为什么要进行可行性研究?应该从哪些方面研究目标系统的可行性?
    第二周作业——面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?请根据自己的理解简明扼要的回答。
    有学生提到,在大学选课的时候,可以写一个“刷课机”的程序,利用学校选课系统的弱点或漏洞,帮助某些人选到某些课程。或者帮助用户刷购票网站,先买到火车票。这些软件合法么?符合道德规范么?是在“软件工程”的研究范围么? 请大家讨论。
  • 原文地址:https://www.cnblogs.com/xu23/p/10658091.html
Copyright © 2011-2022 走看看