第六周编程总结
这个作业属于哪个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/computer-scienceclass1-2018/homework/2892 |
我在这个课程的目标是 | 学会指针 |
参考文献 | C语言程序设计II |
函数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
答案:
double fun (double *a, double *b) { double A,B,c; A=*a; B=*b; c=sqrt(A)+sqrt(B); return c; }
流程图思路:
遇到的问题及其解决方式:刚开始没有最后一步也就是返回从的值没有,搭档帮我找了出来。
读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。
输入格式:
输入有两行: 第一行是n值; 第二行是n个数。
输出格式:
输出最大值和最小值。
输入样例:
在这里给出一组输入。例如:
5 8 9 12 0 3
输出样例:
在这里给出相应的输出。例如:
max = 12 min = 0
#include<stdio.h> void max_min(int *pmax,int *pmin); int n; int a[1000]; int main () { int i,max,min; int *pax=&max,*pin=&min; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); } max_min(pax,pin); printf("max = %d\n",max); printf("min = %d",min); return 0; } void max_min(int*pmax,int*pmin) { int I,c=0; *pmax=a[c]; for(I=0;I<n;I++) { if(a[c]<a[I]) { *pmax=a[I]; c=I; } } c=0; *pmin=a[c]; for(I=0;I<n;I++) { if(a[c]>a[I]) { *pmin=a[I]; c=I; } } }
流程图:
遇到的问题及其解决方法:
刚开始由于输入了一个新的数组在子函数里并且没有赋值,所以出现了乱码。后来搭档指出使用全局变量及数组,删除子函数中的数组。
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
void input(int *arr,int n) { int i; for(i=0;i<n;i++) { scanf("%d",arr++); } } void max_min(int *arr,int n) { int i,t,k=0; for(i=0;i<n;i++) { if(arr[k]>arr[i]) { k=i; } if(i==n-1) { t=arr[0]; arr[0]=arr[k]; arr[k]=t; } } k=9; for(i=0;i<n;i++) { if(arr[k]<arr[i]) { k=i; } if(i==n-1) { t=arr[9]; arr[9]=arr[k]; arr[k]=t; } } } void output(int *arr,int n) { int i; for(i=0;i<n;i++) { printf("%3d",arr[i]); } }
流程图![]()
思考题
1.为什么要使用指针?它有什么用?
答:有些函数定义了形参,而形参是得用指针接收实参的,所以这可能就是为什么要使用指针,使我们更清楚易懂,并且很方便。
2.指针变量在内存中暂用多大的空间?它的大小由什么决定?
在查阅资料得知C++, 指向简单变量, 简单结构体对象, 和简单函数的指针C是一样的. , 对于继承对象, 指针可能能需要记录些额外信息, 会更大一些。
挑战题:
学习进度条
周/日期 | 这周所花的时间 | 代码行数 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|
3/30-4/5 | 14h | 300 | 数组与指针的关系如何更好的使用指针 | 指针的使用,及其意义还有一点不清楚 |
结对编程:因为是室友所以在一起编程的时间会更多一点,也更方便与问问题及其讲解。
学习总结:从开始到现在,学习到的不仅是c语言,还有学习的归纳与总结。这两方面都得到了提升。