第六周作业春
这个作业属于哪个课程 | c语言程序设计 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2888 |
我在这个课程的目标是 | 熟悉指针的用法 |
这个作业在哪个具体方面帮助我实现目标 | 预习作业和基础作业涉及了指针与函数还有指针与数组的知识点 |
参考文献 | http://c.harson.co/ |
1.基础作业 函数题:求两数平方根之和
函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。
函数接口定义::
double fun (double *a, double *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)
{
return sqrt(*a)+sqrt(*b);
}
2).设计思路
3).问题和解决方案
无
4).运行结果
2. 基础作业 编程题:利用指针返回多个函数值
读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。
输入格式:
输入有两行: 第一行是n值; 第二行是n个数。
输出格式:
输出最大值和最小值。
输入样例:
在这里给出一组输入。例如:
5
8 9 12 0 3
输出样例:
在这里给出相应的输出。例如:
max = 12
min = 0
1).实验代码
#include<stdio.h>
void max_min(int a[10],int f,int* pmax,int* pmin);
int main(){
int n,i,max,min,f=0;
int *pmax,*pmin;
int a[10];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
f++;
}
max_min(a,f,&max,&min);
printf("max = %d\nmin = %d",max,min);
return 0;
}
void max_min(int a[10],int f,int* pmax,int* pmin){
int i;
*pmax=a[0];
*pmin=a[0];
for(i=1;i<f;i++){
if(*pmax<a[i]) *pmax=a[i];
if(*pmin>a[i]) *pmin=a[i];
}
}
2).设计思路
3).问题和解决方案
在函数定义里面的for语句n没有定义
后来添加一个f变量用来执行函数定义里的for语句
4).运行结果
3. 基础作业 思考题
A.为什么要使用指针?它有什么用?
a.在数据传递时,如果数据块较大(比如说数据缓冲区或比较大的结构),这时就可以使用指针传递地址而不是实际数据,即提高传输速度,又节省大量内存。
b.数据转换,利用指针的灵活的类型转换,可以用来做数据类型转换,比较常用于通讯缓冲区的填充,比如说,一个数据缓冲区char buf[100],如果其中buf[0,1]为命令号,buf[2,3]为类型,buf[4~7]为某一数值,类型为int,就可以使用如下语句进行赋值:
(short)&buf[0]=cmdID;
(short)&buf[2]=type;
(int)&buf[4]=value;
c.字符串指针,是使用最方便,且常用的。
d.函数指针,形如:#define PMYFUN (void*)(int,int),可以用在大量分支处理的实例当中,如某通讯根据不同的命令号执行不同类型的命令,则可以建立一个函数指针数组,进行散转。
e.在数据结构中,链表、树、图等大量的应用都离不开指针。
B.指针变量在内存中占用多大的空间?它的大小由什么决定?
指针变量在内存中占用的空间大小不确定。
它由指针变量所指向的内存空间上所存放的数据类型所决定。
4.预习作业 最小数放前最大数放后
为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。
函数接口定义:
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
裁判测试程序样例:
#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 temp, *max, *min;
max = min = &arr[0];
for(int i = 0; i < n; i++)
{
if(*max < arr[i]) max = &arr[i];
if(*min > arr[i]) min = &arr[i];
}
temp = arr[9]; arr[9] = *max; *max = temp;
temp = arr[0]; arr[0] = *min; *min = temp;
}
void output(int *arr, int n)
{
for(int i = 0; i < n; i++)
{
printf("%3d",arr[i]);
}
}
2).设计思路
3).问题和解决方案
格式错误,没有注意题目要求,改成了%3d
4).运行结果
5. 挑战题
思路:把所有情况一一列出,记录元素和,比较它们的大小,最后输出最大的。
学习总结
| 周/日期 | 这周所花的时间 | 代码行 | 学到的知识点 | 目前比较疑惑的问题 |
| -------- | :-----: | :----: | :-----: | :----------😐:---------😐
|3/11-3/17 | 4.5小时 | 78 | 二维数组 | 对多维数组概念模糊 |
|3/18-3/23 | 6小时 | 145 | 选择排序法,二分排序 | 暂无 |
| 3/24-3/31 | 6小时 | 138 | 字符串 | 暂无 |
| 4/1-4/7 | 4小时 | 138 | 指针 | 暂无 |
学习感悟
把函数,数组,指针等等知识点结合在一起,难度更加大,题目更加绕弯了。
结对感悟
我让我的队友改正了函数那章的错误知识点——自定义函数使用的顺序。