本周题目
这个作业属于哪个课程 | C语言程序设计II |
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/2888 |
我在这个课程的目标是 | 我希望能够通过学习指针的内容,解决各种复杂数据的处理 |
这个作业在哪个具体方面帮助我实现目标 | 出现了求平方根新的函数语句,不同的方法求最大值最小值,帮助我查资料 |
参考文献 | C语言程序设计教材 |
求两数平方根之和
函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。
其中 a和 b是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。
输入样例:
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
", y );
return 0;
}
double fun (double *a, double *b)
{
double y;
y=sqrt(*a)+sqrt(*b);
return y;
}
2)设计思路
3)调试过程中遇到的问题
真的很郁闷,一直以全代码形式提交,一直编译错误,崩溃,在C++运行又是对的 后面返回去看题目要求直接写后面答案
4)正确截图
最小数放前最大数放后
为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。
输入样例:
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)////形参arr为指针变量
{
int i;
for(i=0;i<10;i++)
scanf("%d",arr+i);
}
//进行处理函数
void max_min(int *arr,int n)
{
int max,min,p,count;
max=min=arr[0]; //使max和min都指向arr[0]
int i;
for(i=0;i<n;i++)
{
if(arr[i]>max) //将大数地址赋给max
max=i;
else if(arr[i]<min) //将小数地址赋给min
min=i;
}
count=arr[max];
arr[max]=arr[9];
arr[9]=count;//将最大数与最后一个数交换
count=arr[0];
arr[0]=arr[min];
arr[min]=count;//将最小数与第一个数互换
}
//输出函数
void output(int *arr,int n)
{
int p;
for(p=0;p<n;p++)
printf("%3d",arr[p]);
}
2)设计思路
3)运行过程遇到的问题
题目要求将其中最小的数与第一个数对换,将最大的数与最后一个数对换,我却相反的 所以输出答案错误 在c++运行发现的
4)正确截图
利用指针返回多个函数值
读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。
输入样例:
在这里给出一组输入。例如:
5
8 9 12 0 3
输出样例:
在这里给出相应的输出。例如:
max = 12
min = 0
1)实验代码
#include<stdio.h>
#include<string.h>
void max_min(int a[],int len ,int *max,int *min);//函数声明
int main()
{
int n,i,max,min;//定义最大值最小值
int a[10];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
int len=0;
len=len+1;
}
max_min(a,n,&max,&min);
printf("max = %d
min = %d",max,min); //输出最大值最小值
return 0;
}
void max_min(int a[],int len,int*max,int *min){ //寻找最大值最小值
int i;
*max=a[0];
*min=a[0];
for(i=1;i<len;i++)
{
if(*max<a[i])
*max=a[i];
if (*min>a[i])
*min=a[i];
}
} //查找成功结束
2)设计思路
3)在运行中遇到的问题
格式问题没注意
4)正确截图
学子进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
3/4-3/11 | 七小时 | 37行 | 1、文件建立 2、对文件加密 | 1、if读取的文件是否必须存在,以“W”的方式写还是“a的方式”,两者性质是否相同 (这是做题中迷惑的,目前已解决) c语言允许同时打开多个文件吗?在关闭前再次打开? |
3/12-3/16 | 九小时 | 53行 | 二维数组的基本定义 | 矩阵术语与二维数组下标的关系表需要老师详解 |
3/18-3/22 | 十小时 | 28行 41行 27行 | 冒泡法排序 选择法排序 二维数组的应用 | 冒泡排序法老师在课上提的不多,所以当时做还是思考很久 |
3/23-3/29 | 十小时 | 23行 43行 41行 | 排序法巩固 文件储存的巩固 判断回文 | 一些排序题的算法思路不清晰,还有流程图 |
3/30-4/5 | 十五个小时 | 6行 30行 36行 | 指针 数组 | 加 * 号和不加 * 的差别 |
学习感悟
这周也是围绕数组和指针展开,做的题也是出不多的,就是用各种新学的知识解决,其次就是这周的预习题还是有难度,翻来覆去的看书看题型,然后构造思路,从编译错误到答案错误再到格式错误最后答案正确,过程真是痛并快乐着,没做完一题都是慢慢的成就感,而且我觉得只有自己挑战成功才有动力,才会更想做下一次,挫败感影响学习质量。只有坚持不懈,才会得到自己想要的答案。
结对编程感悟
这周结成编程是室友,很方便讨论。就是分享自己的思路,然后说一下中途出现的问题,做完之后还是错误就给对方检查。我觉得这种学习方式还是不错,一起进步,快速解答疑惑。
思考题
一、为什么要使用指针?它有什么用?
1、使用指针可以对复杂数据进行处理,能对计算机内存分配进行控制,在函数调用中使用指针还可以返回多个值。
2、指针是内存的标签
3、指针可以访问权限允许访问范围内的任意变量(有点抽象我也没明白)
4、用指针函数可以简写switch
//参考链接:https://www.zhihu.com/question/38864414/answer/81448294
二、指针变量在内存中暂用多大的空间?它的大小由什么决定?
在编译器里定义一个指针变量,编译器会给这个指针变量分配一个空间,这个空间里存放的是一段内存的首地址,先解释一段内存,一段内存的大小是与你所定义的指针类型相关的,比如int,这段内存占四个字节(当然要看你的机器是多少位的了),则这段内存的首地址是第一个字节的地址,如char类型,占一个字节,这段内存的首地址就是这个字节的地址,还如结构体类型,此时内存大小要看该结构体的所有属性所占内存之和。
编译器给指针分配的空间大小是和CPU的寻址长度相关的,比如32位的CPU,它的寻址长度为32位,那么这个空间也就占四个字节,其实不管你定义什么样的指针类型,这个空间只是用来存地址,只占四个字节,而真正该空间所存的地址是哪一段内存的首地址才和所定义的指针类型相关。
折线图
时间 | 代码行数 | 博客字数 |
第一周 | 39 | 292 |
第二周 | 37 | 465 |
第三周 | 75 | 1099 |
第四周 | 96 | 1230 |
第五周 | 107 | 1039 |
第六周 | 66 | 1881 |