2017寒假作业一

前言

第一篇随笔就用Markdown编辑,虽然很别扭,但能学到新技术还是很开心。

在人生技能道路上,你有没有专长的高超技能获取的成功经验?

(阅读参考 北京电子科技学院 娄嘉鹏 老师的博客,关于“做中学”获得高超技能 http://www.cnblogs.com/rocedu/p/5826362.htmlhttp://www.cnblogs.com/rocedu/p/6124349.html

你有什么技能比大多人(超过70%以上)更好?针对这个技能的获取你有什么成功的经验?

如果非要说我有什么技能比70%的人好,那应该要算我的英语。

首先是口语

我一直觉得我的英语发音比较标准,应该是缘于我背单词的方式:从初中开始学英语开始,我一直都是跟着录音来边背边念。往往一个单元的单词我要重复念上十几遍,直到我记住为止。因此即使老师没教过音标,通过这种方式我也能准确掌握音标的用法。除了反复念单词,我还会不断朗读课文,以寻求语感。上大学之后有了自己的智能手机,我会通过videos来进一步提升语感,在这里我给大家推荐一款APP,叫有道词典

该款APP功能强大,包括:

  • 翻译(英日韩法德西葡俄)
  • 精选外语视频
  • 英文朗读
  • 英文歌曲
  • 话题圈子
  • 应试干货(四六级、考研、专四专八,雅思托福)
  • 收录有朗文,柯林斯等英文辞典
  • 还会提供一些免费的教学课程,授课老师非常用心

我经常会在空闲时间盲听视频内容,然后再跟读。看视频时不经意间能学到老外的表情和动作,这些有助于调动面部肌肉群,使发音更标准,也更有讲英语的感觉。刻意记忆的话还能学到一些地道的表达。
与之效果相仿的是看英美剧。不过我觉得和后者效果较差,因为看剧时注意力主要集中在剧情上,很少会注意语言的使用。所以一部剧至少要看三遍才会对英语学习有所帮助。

其次是阅读

阅读需要大量的词汇基础,否则阅读能力很难进一步提升,对文章的大体内容也会理解偏差。我用来背单词的是有道旗下的另一款APP——有道四六级

其采用联想记忆,还不错。
但是如果想单纯利用背大量单词来提高阅读能力,只能是白费力气。就比如我,单词一直是我的硬伤,我无法通过“背”来记住单词,但是我发现凡是在阅读中遇到的我曾经背过得单词,我总会记得更牢。因此在背单词之余,我会阅读大量的文章,每遇到我有印象却又词义模棱两可的单词,我都会马上查字典,以免混乱。多查几次就熟记于心了。不过这个方法比较费时,适合长期学习却不适合短期记忆。
总的的来说,学好英语是一段漫长艰辛的旅程,但我乐在其中。

有关C语言学习的调查

1.你是怎么学习C语言的?与你的高超技能相比,C语言的学习有什么经验和教训?

我主要是在老师的统一授课中学习C语言,通过编程作业练习熟悉C语言。和英语相比,C语言显然更容易掌握,当时要同样不容易。学好C语言首先要熟悉各种语法,基本的运行原理和思维逻辑,然后就是编写大量程序来训练思维逻辑,总结规律,寻求最佳算法。C语言要求逻辑思维要好,数学也要好,不然有些算法会连原理都搞不明白,因此我建议一定要重视数学学习。
而学C语言最惨重的教训莫过于思路不清晰,没有总体框架。我初学的时候经常会搞不清目的,导致得非所求。后来我会先找最终目的,再考虑中间过程,学了函数之后更是学会了分块处理的技巧,大大提高了效率,思路也会更清晰。
还有就是编写程序的时候千万不能为了迎合答案来写程序,虽然调试程序是一件很痛苦的事,但是还是要坚持寻求“通法”,而不是只满足那十个数据的特解。我们最总要得到的应该是适用于此类问题的算法。

2.目前为止估算自己写过多少行C代码?理解的情况如何?

大概两千行而已,不算多,因为只有作业题我才会写代码。就作业完成情况来说,总体理解程度还行吧,就是应用的时候还不够灵活。好在我每一道题都会把原理弄明白,所以就算我没有背代码,只要稍微想一下也能写出来,只不过每次都不太一样罢了。

3.学过了C语言,你分的清数组指针,指针数组;函数指针,指针函数这些概念吗?

  • 数组指针:即指向数组的指针,例如 int(*p)[10]; 中p是一个指向有10个整型元素的指针
  • 指针数组:即元素是指针的数组,例如 int *p[10];则指数组里含有p(1)、p(2)...p(10)这10个指针
  • 指针函数:即返回值是指针的函数,例如 int *p(int x);中p是一个指向整型变量的指针,返回值是p所指向整形变量的地址
  • 函数指针:即指向函数的指针变量,即本质是一个指针变量,例如 int (*f) (int x);

4.你明白文件和流的区别和联系吗?

我不知道什么是文件和流,就百度了一下:

  • 文件是计算机管理数据的基本单位,同时也是应用程序保存和读取数据的一个重要场所。文件是指在各种存储介质上永久储存的数据的有序集合,它是进行数据的写操作的基本对象。每个文件都有文件名、文件所在路径、创建时间及访问限制等属性。
  • 流是字节序列的抽象概念,例如文件、输入输出设备、内部进程通信管道等。流提供一种向后备存储器写入字节和从后备存储器读取字节的方式。除了和磁盘文件直接相关的文件流以外,流还有多种类型。流可以分布在网络中、内存中或者是磁盘中。

5.如何区分文本文件和二进制文件?如何编程操作这两种文件?

我觉得可以参考这位大佬的博客http://www.cnblogs.com/zhangjiankun/archive/2011/11/27/2265184.html

6.你知道什么叫面向过程程序设计吗?它解决问题的方法是什么?

面向过程(Procedure Oriented)是一种以过程为中心的编程思想。就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。也就是先写main()函数对整个系统进行一个概括的描述,再以此为起点,逐步细化出整个应用程序。这和我现在写程序的方法类似。

7.什么是模块?你写过多个源文件的程序吗?

我不知道什么是模块,我应该也没写过多个源文件的程序。

8.你知道什么是“高内聚,低耦合”吗?这个原则如何应用到高质量程序设计中?

同样没学过“高内聚,低耦合”,但是可以参考这篇博客http://www.cnblogs.com/robnetcn/archive/2012/04/15/2449008.html

9.学过了C语言,你如何把数组A的内容复制到数组B中?

#include<stdio.h>              //假设数组A是字符数组,长度暂定为10
#include<string.h>
int main()
{ 
    char A[10],B[10];
    gets(A);
    strcpy(B, A);
    puts(A);
    puts(B);
    return 0;
}                              //输出数组B,数组A,内容相同
#include<stdio.h>
int main()                     //此法适用任意内容的数组A,假设A的长度不确定且小于100
{
	int A[100],B[100],i,n;     //如果是字符数组,则 char A[100],B[100];int i,n;
        scanf("%d",&n);
	for(i=0;i<n-1;i++)
	{
		scanf("%d",&A[i]);
		B[i]=A[i];
		printf("%d",B[i]);
	}
	return 0;
}

10.如何查找整数数组A中有没有数字5?

#include<stdio.h>                  //先按纯数字数组处理
int main()                        //假设a的长度不确定且小于100
{
	int a[100],i,n,t=0;
        scanf("%d",&n);
	for(i=0;i<n-1;i++)
	{
		scanf("%d",&a[i]);
		if(a[i]==5)
			t++;
	}
	if(t==0)
		printf("no");     //数组a里面没有5
	else
		printf("yes");    //数组a里面有5
	return 0;
}
#include<stdio.h>                 //字符数组
int main()
{
	char a[100],i,t=0;
	int n;
	scanf("%d",&n);
	for(i=0;i<n-1;i++)          
	{
		scanf("%c",&a[i]);
		if(a[i]=='5')     //也可以用ASCII码
			t++;
	}
	if(t==0)
		printf("no");
	else
		printf("yes");
	return 0;

//上述两个程序也可以用指针代替,这里就不列举了

11.如何对整数数组A进行排序(从小到大,从大到小)?写出相应的程序。

//从小到大
for(i=0;i<n-1;i++)
		for(j=0;j<n-i-1;j++)
			if(a[j]>a[j+1])
			{t=a[j+1];a[j+1]=a[j];a[j]=t;}

//或者
for(i=0;i<n-1;i++)
                for(j=n-1-i;j>0;j--)
                         if(a[j]<a[j-1])
                         {t=a[j-1];a[j-1]=a[j];a[j]=t;}
//从大到小
for(i=0;i<n-1;i++)
		for(j=0;j<n-i-1;j++)
			if(a[j]<a[j+1])
			{t=a[j+1];a[j+1]=a[j];a[j]=t;}

12.写一个程序,统计自己C语言共写了多少行代码。

13.你知道什么是断点吗?给出自己调试程序的例子。(可以截图贴图说明)

那个红点就是断点。

14.对比C语言的学习,你对《面向对象程序设计》的学习有什么具体目标?如何通过刻意训练提高程序设计能力和培养计算思维?如何通过“做中学”实现你的目标?

具体目标应该还是要透彻理解每一个程序。要提高程序设计能力和培养计算思维肯定要多练习,多分析,想的多了自然想得深。

15.毕业后大多数人从事的工作的要求是“提笔能写,开口能说,问策能对,遇事能办”,非常重要的技能是公文写作能力,你觉得自己写作能力如何?要怎么提高?

我觉得我写文学不行,但公文这类有明确要求的文章我还算擅长,毕竟我的逻辑能力比较好。多看别人怎么写,学习方法,总结思路,列提纲,自己多写多练,这样应该会有所提高。

后记

最后我想说,我还是太嫩,有好多问题我都不知道该怎么回答,我还以为和C语言有关的知识我已经学完了呢,但其实还有很多知识我还没学到。我觉得我还得多看一些书,不然什么都不懂真的好难受。还有就是英语要好好学,不然连Github的页面都看不懂。

原文地址:https://www.cnblogs.com/s0316026/p/6265006.html