• 第六周


    这个作业属于那个课程 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、指针变量用于存放变量的地址,由于不同类型的变量在内存中占用不同大小的存储单元,所以大小由所指的变量或常量的大小决定。

    学习感悟

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

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

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

    学习进度

  • 相关阅读:
    实验十四 线程设计
    实验十三 窗口设计
    实验十二 swing图形界面设计
    实验十一 图形界面二
    实验十 图形用户界面设计
    实验九 异常的抛出,捕获并处理
    实验八 接口与实现接口的类
    实验六 类的封装
    实验五:任意输入10个int类型数据,排序输出,再找出素数
    实验四:采用一维数组输出等腰三角形的杨辉三角
  • 原文地址:https://www.cnblogs.com/xu23/p/10658091.html
Copyright © 2020-2023  润新知