学习基础和c语言学习心得
一、技能学习
??我觉得在男生中,我做饭应该算不错的。我是小学四年级开始学做饭,从刚开始的学煮饭,到后来的蒸馒头,到最后的炒家常菜真的很有成就感。首先,我觉得做任何事情兴趣很重要,因为小时候喜欢美食,所以特别喜欢做东西给别人吃;其次我觉得别人的鼓励也非常重要,它会是你坚持下去的动力。因为受到爸爸对我做饭的鼓励,做晚饭从一开始的西红柿鸡蛋面到后来的三菜一汤,虽然做饭花的时间越来越多,但自己的成就感也越来越强。看着别人吃自己做的东西,自己感到很开心。所以这和娄老师下面这段话谈到的是一样的。
我认为给学生具体的, 能实践的, 能马上看到因果关系的教材和练习, 是激发学生兴趣, 好奇心, 求知欲的好方法。 我就是这样学习编程和软件开发的。 所以我对「习而学」的方法很有好感。软件工程有理论的部分, 有工程的部分; 有艺术的部分,有手艺的部分; 在同学们达到理论/艺术的阶段之前, 大量的练习是必须的。
--引用自《优秀的教学方法---做教练与做中学》
??所以,在以后的Java学习中要培养自己对Java编程的兴趣,通过对现实中简单问题实现编程化,提高成就感。例如之前概率论有许多计算方差的题,自己利用c语言编程实现了计算方差的功能。再之、坚持在理解的基础上每天敲一些代码,每周对自己敲的代码进行归类总结,优化,以提高编程能力。
二、c语言学习
1、如何学习c语言
??多数情况下,是通过自己看书理解(不会的通过请教老师、同学搞懂),通过模仿例题、作业系统进行练习。通过一学期的学习,觉得自己在独立思考上做的还可以,但是练习太少,没有坚持下来。一学期下来大概写了3000多代码,但是只是为了刷分,没有理解透彻,很多不是独立完成的。我觉得学习的效率是非常重要的,你所花的时间不等于你投入的时间,投入时间的量变才会引起质变。所以,学习关键是要提高效率,提高有效投入时间,这样收获才能大于投入。
2、c语言的一些知识点
数组指针 | 数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[10]; p即为指向数组的指针,又称数组指针。本质为指针 |
---|---|
指针数组 | 指针数组是数组元素为指针的数组(例如 int *p[3],定义了p[0],p[1],p[2]三个指针),其本质为数组。 |
函数指针 | 函数指针是指向函数的指针变量。 因而"函数指针"本身首先应是指针变量,只不过该指针变量指向函数。int (*f)(int x) /声明一个函数指针 / |
指针函数 | 首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受。int *pf(int a); /声明一个指针函数 |
- 文件和流的区别和联系
??流:数据的流动。(数据流动总是和设备或外部介质有关);
??文件:与数据流动有关的设备和介质统称为文件。
?? 其实在c语言中流等价于文件指针
- 文本文件和二进制文件的区分和操作
??区别:文本文件是基于字符编码的文件(常见的编码有ASCLL);二进制编码是基于值编码的文件;可以看出文本文件基本上是定长编码而二进制文件可看成是变长编码
??操作:以记事本为例,它首先读取文件物理上所对应的二进制比特流,然后按照你选择的解码方式来解释这个流,然后将解释结果显示出来。例如对于文件流“01000000010000010100001001000011”第一个8比特“01000000”按ASCLL码来解码,对应的字符“A”,同理其他三个8比特可解码为“BCD”,即这个文件流可解释为“ABCD”,然后显示在记事本上。
- 面向过程程序设计
??1、理解:面向过程是具体化的,流程化的。解决一个问题,需要一步一步分析需要怎样,然后需要怎样,一步一步实现的。
??1、解决问题的方法:面向过程是一种基础的方法,它考虑的是实际的实现,一般情况下,面向过程是自顶向下逐步求精,其最重要的是模块化的思想方法。
- 模块、源文件。
??1、对模块的理解:实现某一功能的程序作为一个整体来处理的一级独立的、可识别的程序指令。
??2、关于源文件:只在字符串的过程中了解过一些源文件。例如求“字符长度”,“字符串的复制”,“字符串的连接、比较”等。
- 一些c语言程序
#include <stdio.h>
#define N 40
void adg(int A[],int n); //升序排列
void ddg(int A[],int n);//降序排列
int main()
{
int i,n;
int A[N],B[N];
int flag;
int t=0;
printf("please enter A of number:\n");
scanf("%d",&n);
printf("please enter A:\n");
for(i=0;i<n;i++) {
scanf("%d",&A[i]);
B[i]=A[i];//把数组A复制给数组B
printf("%d",B[i]);
} printf("\n");
printf("选择数组A的排序方式,升序输入1,降序输入0\n");
scanf("%d",&flag);
if(flag) {
adg(A,n);
for(i=0;i<n;i++) {
printf("%d",A[i]);
}
}
else {
ddg(A,n);
for(i=0;i<n;i++) {
printf("%d",A[i]);
}
} printf("\n");
for(i=0;i<n;i++) {
if(A[i]==5) t=1;
}
if(t==1) printf("数组A中存在“5”\n");
else printf("数组A中不存在“5”\n");
}
void adg(int A[],int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++) {
if(A[j]>A[i]) {
k=j;
}
}
if(k != i) {
temp=A[k];
A[k]=A[i];
A[i]=temp;
}
}
}
void ddg(int A[],int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++) {
k=i;
for(j=i+1;j<n;j++) {
if(A[j]<A[i]) {
k=j;
}
}
if(k != i) {
temp=A[k];
A[k]=A[i];
A[i]=temp;
}
}
}
- 统计一共写了多少行代码的程序
这个自己不会写,但找到了参考答案详细见以下链接
- 断点:指在程序调试过程中,让程序运行到某一位置停止,这一位置便是断点。
??以上面的排序程序为例
-
关于Java学习
??充分利用博客等网络资源进行自觉学习,坚持每天都敲一些代码,每周对所学知识利用博客写随笔形式进行总结归纳,通过请教老师和同过和同学讨论交流不断提高编程能力。
原文地址:https://www.cnblogs.com/ltl123/p/8375730.html