作业——7

这个作业属于哪个课程 C语言程序设计Ⅱ
这个作业的要求在哪里 C语言作业评价标准
我在这个课程的目标是 学会运用指针并复习数组的使用
这个作业在哪个具体方面帮助我实现目标 用指针和数组
参考文献 指针的作用

第六周作业

一 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\n", y );
return 0;
}


/* 请在这里填写答案 */

输入样例:

12 20

输出样例:

y=7.94

实验代码

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

设计思路

本题调试过程碰到问题及解决方法

无。

运行结果截图

2 、利用指针返回多个函数值

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

输入格式:

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

输出格式:

输出最大值和最小值。

输入样例:

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

5
8 9 12 0 3

输出样例:

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

max = 12
min = 0

实验代码

#include<stdio.h>
void max_min(int a[], int n, int *max, int *min);

int main(void)
{
    int n, i, max, min, a[100];
    scanf("%d" ,&n);
    for(i = 0; i<n; i++){
    scanf("%d", &a[i]);
    }
    max = min = a[0];
    max_min(a, n, &max ,&min);
    
    printf("max = %d\nmin = %d", max, min);
    
    return 0;
}
void max_min(int a[],int n,int *max,int *min){
    
    int i;
    
    *max = *min = a[0];
    for(i = 1; i < n; i++){
        if(*max < a[i]){
            *max = a[i];
        }
        if(*min > a[i]){
            *min = a[i];
        }
    }
}

设计思路

本题调试过程碰到问题及解决方法

愚蠢的问题,我在输出结果的等于号前后打了空格,然后一直格式错误,放进devc++运行结束后发现的......

运行结果截图

3 、第六周预习作业:最小数放前最大数放后

为一维数组输入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

实验代码

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

设计思路

本题调试过程碰到问题及解决方法

无。

运行结果截图

预习的主要内容

●变量、内存单元和地址之间的关系;定义指针变量,使用指针变量,进行指针变量的初始化;指针变量的基本运算;指针作为函数参数的作用;如何使用指针实现函数调用返回多个值。

思考题

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

● 指针只是一个变量,它存储一个内存地址。如果传入一个地址,比传入一个struct效率要高,因为少了一个拷贝过程。
● 指针能够有效的表示数据结构,能动态分配内存,能较方便的使用字符串,有效的使用数组。
● 值传递不如地址传递高效,因为值传递先从实参的地址中提出值,再赋值给形参带入函数计算;而指针则把形参的地址直接指向实参地址,使用时直接提出数据,使效率提高,特别在频繁赋值等情况下。

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

● 指针变量是保存一个变量地址的变量,它里面保存的是一个特殊的东西:地址,即内存单元。一个内存单元要用32个状态来表示,(32个0和1),一个0或1占用1个位,8个位是一个字节,所以当然要占用32/8=4个字节的空间。
● 因机器不同所占的字节数也有所不同。在32位的机器上,一个指针变量占4个字节,在64位的机器上,一个指针变量占8个字节。

二、学习进度条

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
第二周 4 hours 35 用c语言程序读取电脑中的文本文件并对其进行基础操作 ...
第三周 4 hours 69 初步使用二维数组,如何写入一个矩阵 ...
第四周 5 hours 102 认识了选择排序法、二分查找法和冒泡排序法以及在二维数组的定义、引用、初始化和其矩阵。 ...
第五周 5 hours 98 用到二维数组,初用头文件<string.h>中的strlen函数和strcpy函数 ...
第六周 5 hours 96 了解了变量、内存单元和地址之间的关系;了解了如何定义指针变量,怎样使用指针变量,怎样进行指针变量的初始化;了解了指针变量的基本运算;了解了指针作为函数参数的作用;了解了如何使用指针实现函数调用返回多个值。 ...
...

三、学习折线图

四、学习感悟&结对编程

  • 由于在上课时因为自身原因困意太深在课后完成作业时有些吃力,但大多书上的题目还是有流程和大纲的,给出的题目就是会有一些条件限制,这些是要注意的点。然后本周的结对编程又没有如期完成,因为个人有事,无法同同学一起结对编程,结对编程优劣参半吧,看个人情况了。
posted @ 2019-04-05 00:46  苏大龙  阅读(262)  评论(0编辑  收藏  举报