这个作业属于那个课程 C语言程序设计II
这个作业要求在哪里 在这里
我在这个课程的目标是 能够熟练掌握指针的用法
这个作业在那个具体方面帮助我实现目标 对指针的使用更加得心应手
参考文献与网址 C语言程序设计II(第三版) 菜鸟教程中关于指针的教学

编程题一

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

我的代码

double fun (double *a, double *b)
{
double y;
y=sqrt(*a)+sqrt(*b);
return y;
}

编程流程图

解决此题遇见的困难与解决办法

问题截图:

问题原因:我一直想怎么用结构体写出此题,却忘记了题目要求是将尾巴写出来,不是将整个代码全写出来,类似于一种填空题。

问了我的邻居后,他提示我注意看题目要求,遂改之,他的博客:在这,所以说审题还是很重要的

运行结果截图

编程题二

读入n个整数,调用max_min()函数求这n个数中的最大值和最小值。

输入格式:

输入有两行: 第一行是n值; 第二行是n个数。

输出格式:

输出最大值和最小值。

输入样例:

在这里给出一组输入。例如:

5
8 9 12 0 3

输出样例:

在这里给出相应的输出。例如:

max = 12
min = 0

我的代码

#include<stdio.h>
#include<string.h>
void max_min(int a[],int len,int* pmax,int* pmin);
int main ()
{
int n,i,max,min,len;
int *pmax,*pmin;
int a[10];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
len++;
}
max_min(a,len,&max,&min);
printf("max = %d\nmin = %d",max,min);
return 0;
}
void max_min(int a[],int len,int* pmax,int* pmin)
{
int i;
*pmax=a[0];
*pmin=a[0];
for(i=1;i<len;i++)
{
if(*pmax<a[i]) *pmax=a[i];
if(*pmin>a[i]) *pmin=a[i];
}
}

编程流程图

解决此题遇见的困难与解决办法

问题编程截图

问题原因:忘记给两个最大最小指针赋初值了,小的错误不应再犯。

运行结果截图

编程题三

为一维数组输入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 + i));
}
}
void max_min(int *arr,int n){
int idx=0,i,t;
for ( i = 0; i < n; i++ ) {
if ( arr[i] < arr[idx] ){
idx=i; }
}
if(idx!=0){
t=arr[0];arr[0]=arr[idx];arr[idx]=t;
}
idx=0;
for ( i = 0; i < n; i++ ) {
if ( arr[i] > arr[idx] ){
idx=i;}
}
if(idx!=(n-1)){
t=arr[n-1];
arr[n-1]=arr[idx];
arr[idx]=t;}
}
void output(int *arr,int n){
int i;
for(i = 0;i < n;i++){
printf("%3d",*(arr + i));
}
}

编程流程图

解决此题遇见的困难与解决办法

问题截图

问题原因:忘记看题目要求了,它要求输出每个之间空三格。

我是怎么发现这个错误的?

因为它的报错老是格式错误,所以我就把找错的主要目标放在输入与输出上,结果输出的格式不对,遂改之。

运行结果截图

思考题一:为什么要使用指针?它究竟有什么用处?

为了解决这个问题,我们首先要知道指针是用来干嘛的,也就是:

1.它能干什么?

指针实际上就是一个内存地址,比如一个函数指针,就是一个函数的入口地址,通过这个地址,系统就可以找到这个函数的位置并调用它。简单地说指针就是指向变量和对象的地址。指针的用途非常广泛,比如如果你想通过函数改变一个变量的值,就得用指针而不能用值传递。还有在很多时候变量,特别是对象的数据量实在太大,程序员就会用指针来做形参,只需要传递一个地址就行。

其次,当我在选择工具编码时,我完全可以用最简单的,最易理解的工具,所以:

2.我为什么不用其他工具而使用指针?

原因在于:

1.指针允许你以更简洁的方式引用大的数据结构

2.指针使程序的不同部分能够共享数据 **

3.
利用指针,能在程序执行过程中预留新的内存空间 **

3.指针可以用来记录数据项之间的关系

综上,我可以浅显的解释,使用指针,可以便捷的传递值,也可以高效,迅速的实现储存空间的动态分配。作为“C语言之眼”的指针,她能做的,不仅仅是对复杂数据的处理,不仅仅是对计算机内存分配进行控制,在未来,也许会出现比她更加强大的工具,但是,指针的原理与奥妙,在C语言史上,具有划时代的影响力,我相信,这种影响力会一直持续到永远。

思考题二:指针变量在内存中占用多大的空间?它的大小由什么决定?

要解决这个问题,我们要首先去理解“字节”的概念,她就是:

字长:在同一时间中处理二进制数的位数叫字长。通常称处理字长为8位数据的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。二进制的每一个0或1是组成二进制的最小单位,称为一个比特(bit)。

  一般说来,计算机在同一时间内处理的一组二进制数称为一个计算机的“字”,而这组二进制数的位数就是“字长”。字长与计算机的功能和用途有很大的关系,是计算机的一个重要技术指标。字长直接反映了一台计算机的计算精度,为适应不同的要求及协调运算精度和硬件造价间的关系,大多数计算机均支持变字长运算,即机内可实现半字长、全字长(或单字长)和双倍字长运算。在其他指标相同时,字长越大计算机的处理数据的速度就越快。早期的微机字长一般是8位和16 位,386以及更高的处理器大多是32位。目前市面上的计算机的处理器大部分已达到64位。

  字长由微处理器(CPU)对外数据通路的数据总线条数决定。

  最小可寻址单位:内存的最小可寻址单位通常都是字节。也就是说一个指针地址值可对应内存中一个字节的空间。

  寻址空间:寻址空间一般指的是CPU对于内存寻址的能力。CPU最大能查找多大范围的地址叫做寻址能力,CPU的寻址能力以字节为单位 (字节是最小可寻址单位),如32位寻址的CPU可以寻址2的32次方大小的地址也就是4G,这也是为什么32位寻址的CPU最大能搭配4G内存的原因,再多的话CPU就找不到了。

  这里CPU的寻址位数是由地址总线的位数决定,32位CPU的寻址位数不一定是32位,因为32位CPU中32的意义为字长。

  有关寻址范围计算解释,对于32位寻址的CPU,其地址值为32位的二进制数,所以可以表示的最大地址为2的32次方(即4G,最大内存空间为4GB,这里G表示数量、GB表示容量)。同时我们不难看出,一个指针的值就是一个32位的二进制数,32位对应4字节(Byte)。所以,指针的大小实际上是由CPU的寻址位数决定,而不是字长。

指针的大小与处理器和操作系统关系如下图所示:

处理器与操作系统 指针占用
32位处理器上32位操作系统的32位编译器 指针大小4字节
32位处理器上32位操作系统的16位编译器 指针大小2字节
32位处理器上16位操作系统的16位编译器 指针大小2字节
16位处理器上16位操作系统的16位编译器 指针大小2字节

以上内容和来自百度百科并由本人整理排版

所以,我们所讲的指针占用空间,就是将占用字节的数量,而具体限制她占用空间的具体因素,在计算机界仍然存在争议,大多数人认为指针大小是由当前CPU运行模式的寻址位数决定,另一部分则认为与之无关,具体要看系统方面对于指针的自适应。

个人学习感悟

写在前面:这周还是蛮忙的,当然学到的东西也是不在少,每一周我们的课就一节,所以大部分知识只能自己学,我总不能自己编出一些我学的什么东西吧,手动滑稽,我对我目前的学习状况来看,还是比较不满意的,具体在于:

1.知识储备太少。脑子里一顿骚操作,问题是脑子里装的东西不允许

2.学艺不精。做作业和高中的完成任务差不多,自己所能学到的,少之又少

3.不思考。学到什么东西,就单单是学到,完全不在思考一下,做题目也是,必须思考

4.动手。干我们这行,一天不打代码就会一秒变小白,正是应了那句:“学如逆水行舟,不进则退”

结对编程感悟

这次的结对编程,总体而言比上一次也就是第一次要好得多,体现在:

1.我是充分理解了再教我的搭档,避免上次的情况。

2.突出重点,上次讲了太多废话

这次的问题与矛盾也依然存在,体现于:

1.硬本领不足

2.敷衍了事

3.学习的态度还没有端正过来

4.自己定制的计划没有充分实行

基于上述问题与毛病,将尽全力去改正,多做事,少空想,华为设计师不是靠想就可以当的上的学艺尚未成精,同志们仍需努力

学习进度表

| 时间|代码行数|这周所花的时间|学到的知识点简介|目前比较疑惑的问题|

| ------------: | ------------: | ------------: | ------------: |

| 3/2-3/19 |35|两天|通过代码读取文件里的数据,并且在屏幕上打印|为什么文件的使用还要进行关闭

|3/9-3/19 |65|三十分钟|没有学到任何知识点|想知道指针与数组之间的内在联系|

|3/19-3/22|186|五个小时|二维数组的用法加上二分法找元素|需要多打代码多多练习|

| 3/22-3/28 | 31 | 一天 | 字符串的使用 | 数组排序的内部原理 |

|3/28-4/5| 108 | 一天 | 指针初步 | 行参与实参如何相互影响 |

写在最后:这次的编程总结确实赶了点,因为刚好碰见清明节,开了一上午高速,扫墓到四点,简单整理了一下就吃晚饭,可以说是时间紧迫了,但是呢,即便如此紧迫,作业还是要写要交的,我在尽量保证质量的情况下,勉强完成了作业,突然觉得我好屌

2019春第六周作业Compile Summarize的更多相关文章

  1. 2019春第五周作业Compile Summarize

    这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够精通关于数组内部运作原理 这个作业在哪个具体方面帮助我实现目标 如何输出一行的连续字符 参考文献与网址 ...

  2. 2019春第十周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能够对C语言的编写更加得心应手 这个作业在那个具体方面帮助我实现目标 结构体更进一步 参考文献与网址 C语言 ...

  3. 2019春第八周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能更加进一步的够熟练掌握指针的用法 这个作业在那个具体方面帮助我实现目标 指针对于高阶题目的做法 参考文献与 ...

  4. 2019春第七周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 在这里 我在这个课程的目标是 能更加进一步的够熟练掌握指针的用法 这个作业在那个具体方面帮助我实现目标 指针对于基础题目的做法 参考文献与 ...

  5. 2019春第十一周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 这里 我在这个课程的目标是 能按自己的想法解出题目 这个作业在那个具体方面帮助我实现目标 能朝着软件工程师方向发展 参考文献与网址 C语言 ...

  6. 2019春第十二周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 这里 我在这个课程的目标是 能按自己的想法解出题目 这个作业在那个具体方面帮助我实现目标 能朝着软件工程师方向发展 参考文献与网址 C语言 ...

  7. 2019春第九周作业Compile Summarize

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 这里 我在这个课程的目标是 能更加进一步的够熟练掌握指针的用法 这个作业在那个具体方面帮助我实现目标 能解更多的题 参考文献与网址 C语言 ...

  8. 2019-2020-1 20199329《Linux内核原理与分析》第六周作业

    <Linux内核原理与分析>第六周作业 一.本周内容概述: 学习系统调用的相关理论知识,并使用库函数API和C代码中嵌入汇编代码两种方式使用getpid()系统调用 学习系统调用syste ...

  9. 2018-2019-1 20189221 《Linux内核原理与分析》第六周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第六周作业 实验五 实验过程 将Fork函数移植到Linux的MenuOS fork()函数通过系统调用创建一个与原来 ...

随机推荐

  1. 《剑指offer》连续子数组的最大和

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:

  2. 酷痞运行于openwrt路由系统

    欢迎你进入酷痞的物联网世界.这里有着自由的空气和自然的气息.接下来我将告诉你如果一步步建立一个自己专属的物联网平台. 酷痞官网地址:http://icoolpy.com   由于openwrt系统复杂 ...

  3. Redis数据结构之intset

    本文及后续文章,Redis版本均是v3.2.8 上篇文章<Redis数据结构之robj>,我们说到redis object数据结构,其有5中数据类型:OBJ_STRING,OBJ_LIST ...

  4. %E6%9D%8E%E9%9B%B7是什么编码

    在这个网站上可以进行解码http://tool.chinaz.com/Tools/URLEncode.aspx

  5. docker - 容器lxc

    容器:是在用户空间进行隔离的组件叫做容器 常用的容器有lxc ----libcontainer---runc 需要隔离的资源有: Rootfs:每个容器对应的一个目录做为根目录 User: Hostn ...

  6. Linux下IPC中的信号量PV操作

    代码如下所示,两边对照查看程序!(左图为先运行进程 右图为后运行进程)    运行的效果就是:当左边的进程检测到EOF,释放资源V操作之后,右边的进程会迅速的执行对应的printf的操作! 所有代码文 ...

  7. SpringCloud使用Nacos服务发现实现远程调用

    本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. ...

  8. Urozero Autumn 2016. BAPC 2016

    A. Airport Logistics 根据光路最快原理以及斯涅尔定律,可以得到从定点$P$进入某条直线的最佳入射角. 求出每个端点到每条线段的最佳点,建图求最短路即可. 时间复杂度$O(n^2\l ...

  9. d4-01

    一.字典 1.1 var dict = {"name":"zhangsan"}  定义字典 1.2 dict.name     取得name的值 1.3 del ...

  10. UIdynamic系列认知

    1.刚上来就遇到的大坑 按照前辈们的代码码上了一段重力效果,结果不管怎么折腾都没有任何效果,不由心塞. 开始怀疑是不是模拟器不支持呀?是不是必须拖动到视图上的空间才可以呀? 结果试了各种方法还是没效果 ...