第六周作业
这个作业属于那个课程 | C语言程序设计 |
这个作业要求在哪里 | |
我在这个课程的目标是 | 了解指针,熟悉指针 |
这个作业在哪个具体方面帮助我实现目标 | 熟悉指针的使用 |
参考文献 | B站 |
一、本周完成的作业:
基础题:
题目1.6-1 求两数平方根之和 (10 分)
函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。
实验代码
#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("%.2f",y); return 0; } double fun (double*a,double*b) { return sqrt(*a)+sqrt(*b); }
设计思路
运行结果截图
题目2.7-1 利用指针返回多个函数值 (30 分)
读入n个整数,调用max_min()函数求这n个数中的最大值和最小值
实验代码
#include<stdio.h> void max_min(int x, int *a); void max_min(int x, int *a) { int c; for(int i = 0;i < x - 1;i++) { for(int y = 0;y < x - i - 1;y++) { if(*(a + y) < *(a + y + 1)) { c = *(a + y + 1); *(a + y + 1) = *(a + y); *(a + y)= c; } } } printf("max = %d\n", *(a)); printf("min = %d\n", *(a + x - 1)); } int main() { int x; scanf("%d", &x); int a[x]; for(int i = 0;i < x;i++) { scanf("%d", (a + i)); } max_min(x, a); return 0; }
运行截图
思考题
为什么要使用指针?它有什么用?
1> 可以动态地在堆上分配空间。当你需要1M时,你可以分配1M,需要1K时,可以只分配1K。
2> 可以允许被调用的函数,修改传入的参数。比如,调用 getName(p_buffer);其中,char* p_buffer。这样,可以让getName函数将所得的内容,写入你指定的地方。
3> 可以降低内存复制的代价。比如,struct BigStruct big_struct. 调用dealWithSomething(big_struct)时,将会复制一份,代价太大。但如果使用 dealWithSomething(&big_struct),就只需要复制一个4字节的指针
指针变量在内存中暂用多大的空间?它的大小由什么决定?
1>4或8字节