第六周作业
一.作业头内容
这个作业属于那个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | 链接<https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/2889 |
我在这个课程的目标是 | 学会用指针去定义函数和灵活使用数组 |
这个作业在那个具体方面帮助我实现目标 | 指针的使用 |
参考文献 | c语言书 |
二.题目
一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) 代码:
#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;
}
double fun (double *a, double *b)
{
double c;
c=sqrt(*a)+sqrt(*b);
return c;
}
2)解题思路:
3)正确截图:
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 *a,int n,int *max,int *min)//指针变量定义格式int *p
{
for(int i=0;i<n;i++)
{
if(*max<*(a+i)) *max=*(a+i);//引用指针直接进行大小比较,因为指针max是形参,改变形参的指向不会对实参有任何影响,所以对*max进行赋值
if(*min>*(a+i)) *min=*(a+i);
}
}
int main()
{
int a[100],n,i,max,min;
scanf("%d",&n);
puts("输入n个数");//puts函数输出后自动换行
for(i=0;i<n;i++)
scanf("%d",&a[i]);
max=min=a[0]; //对max和min初始化,以便在函数max_min中引出数组a
max_min(a,n,&max,&min) ; //n作为一个数传递给函数,而min和max需要传递地址,故使用&max
printf("max=%d,min=%d",max,min);
return 0;
}
2)设计思路:
3)实验截图:
1)实验代码:
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,a,b ,t;
/*寻找最小值*/
for(i=1;i<n;i++)
if(*(arr+i)<*(arr+a)) /*arr指向数组第一个数字即a[0],所以*(arr+a指向a[a]*/
a=i;
/*最小值和第一个数字交换*/
t=*(arr+a);
*(arr+a)=*arr;
*(arr)=t;
/*寻找最大值*/
for(i=1;i<n;i++)
if(*(arr+b)<*(arr+i)) /*arr指向数组第一个数字即a[0],所以*(arr+a)指向a[a]*/
b=i;
t=*(arr+b);
*(arr+b)=*(arr+9); /* *(arr+9)指向a[9],最大值和最后一个数字交换即a[9] */
*(arr+9)=t;
}
void output(int *arr,int n)
{
int i;
for (i=0;i<10;i++)
printf("%3d",*(arr+i)); /*输出交换后的数组*/
}
2)实验思路:
3)实验结果截图:
三..学习进度统计
四.思考题
- 为什么要使用指针?它有什么用?
- 对于为什么要学习指针,那肯定是因为他要学啊,后面编程用得到啊,哈哈,其实这不是唯一的所在啦,就我现在所学的来说,能够间接的找到变量所在,不需要赋值,简单方便对于一些复杂的程序来说。
- 指针变量在内存中暂用多大的空间?它的大小由什么决定?
- 我记得老师上课讲过是四个字节吧然后百度是这样说的,(https://blog.csdn.net/cool_oyty/article/details/8078632),指针变量本身所占存储空间的大小取决于存储地址值所需的字节数
四. 学习感悟
- 1.注意注意注意 输出格式,申清楚题目 ! ! !
- 2.有发不知勤学早,秃头方悔读书迟。