第六周作业
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/computer-scienceclass4-2018/homework/2890 |
我在这个课程的目标是 | 了解指针的用法 |
这个作业在那个具体方面帮助我实现目标 | 利用指针做题 |
参考文献 | C语言程序设计II |
一、本周完成的作业
基础作业
函数题
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\n", 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).本题调试过程碰到问题及解决办法
a.错误问题截图:
b.问题及其解决办法:
问题:出现编译错误
解决办法:处理的是指针 *a, *b而不是a,b
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 s[],int n,int *a,int *b); int main() { int i,n,max,min; scanf("%d",&n); int s[n]; for(i=0;i<n;i++){ scanf("%d",&s[i]); } max_min(s,n,&max,&min); printf("max = %d\nmin = %d",max,min); return 0; } void max_min(int s[],int n,int *a,int *b){ int max,min; for(int i=0;i<n;i++){ if(i==0){ max=s[i]; min=s[i]; } if(max<s[i]){ max=s[i]; } if(min>s[i]){ min=s[i]; } } *a=max; *b=min; }
2) 设计思路
3).本题调试过程碰到问题及解决办法
a.错误问题截图:
b.问题及其解决办法:
问题:出现编译错误
解决办法:使用函数max_min的时候,输入数组只需要输入一个s,不需要加[]
4).运行结果截图:
思考题:
1.为什么要使用指针?它有什么用?
答:指针就是指向一个特定内存地址的一个变量,指针可以有效地表示复杂的数据结构、动态分配内存、高效地使用数组和字符串
2.指针变量在内存中暂用多大的空间?它的大小由什么决定?
答:不管你定义什么样的指针类型,这个空间只是用来存地址,只占四个字节,而真正该空间所存的地址是哪一段内存的首地址才和所定义的指针类型相关。大小则由你自己的机器是多少位的决定
挑战作业
思路(没有做出来):上一次的也没有做出来,大致想法是通过处理行列下标,使它们相邻的数据来操作,找出子数组,比较迷茫应该怎么做,希望老师在课堂上能够讲一讲做法
预习作业
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=0,min=0,m,x; m=n-1; for(int i=0;i<n;i++){ if(arr[max]<arr[i]){ max=i; } if(arr[min]>arr[i]){ min=i; } } x=arr[0]; arr[0]=arr[min]; arr[min]=x; x=arr[m]; arr[m]=arr[max]; arr[max]=x; } void output(int *arr,int n){ for(int i=0;i<n;i++){ printf("%3d",arr[i]); } }
2) 设计思路
3).本题调试过程碰到问题及解决办法
a.错误问题截图:
b.问题及其解决办法:
问题:出现编译错误
解决办法:函数里的数组不是a[i],而是指针标记的数组,应该是arr[i];
4).运行结果截图:
二、学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
3/15-3/22 | 15小时 | 350左右 | 学会处理数组的数据 | 对于指针还有很多不理解 |
3/22-3/29 | 12小时 | 300左右 | 学会使用字符串 | 对于指针还是有很多不理解 |
3/29-4/5 | 12小时 | 300左右 | 学会使用指针 | 对于指针的用法还有不少不清楚的地方 |
三、学习感悟
这周学习了指针的运用,题目不算难,还温习了一波自定义函数,不过指针的用法好复杂,现在这几道题应该连入门都算不上,接下来的学习才是对于c语言中指针的更加了解和使用
四、结对编程
在这次结对编程的时候,有许多我不清楚的地方是他来帮助的我,出现的都不是什么大问题,总体思路是对的,这次基础题目和预习题目不算太难,但是挑战作业我就只有思路,我的搭档也差不多,等老师在课堂上进行解答
优点和上次说的差不多
这次再补充一点缺点:思路的不同会导致和搭档的代码上有很大的差距,细节处理的地方也会有较大差异,这个时候互相能够提供的帮助就不会很大.
来源:https://www.cnblogs.com/zhuwanxing/p/10658707.html