编程必背100个代码公式?初学编程100个代码
很多朋友对于编程必背100个代码公式和初学编程100个代码不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
三种人学不会编程(初学编程100个代码)
三种人学不会cnc学不会编程的3种人。分别是
1、不爱接受新事物、不爱动脑筋。
2、学历起点低、基础薄弱。
3、喜欢安逸、缺乏坚持。cnc就是cnc编程。
为什么我就是学不会编程我也不会编程啊。我是19岁开始学的。现在26了。
跟你聊聊这些年的编程生涯。
第一次接触编程是因为没有工作,没有收入。然后我就想通过学习一门计算机技能,解决我的工作和收入问题。有的人以为我得了网瘾,天天在网吧玩游戏。其实我会玩的游戏,除了飞车就是玩个cs。然后,我跟着别人做网站。但是代码是一点都不懂得。但是还是在电脑前面敲一些代码。我当时都不知道那是什么代码。后来才知道,我敲得那些是javascript。然后,自己的目标很简单,就是先做一个网站。慢慢地就了解到PS。flash,。还有html。等等。但是我只是在了解,其实我一行代码都不会写。连html都不会。任务很紧,我浏览了所有的net硅谷教程,几乎是没有一套能够看懂。连ps教程,都看了十多个,但是水平还是初级。w3c也被我翻烂了,但是还是没有写出一些有用的东西。
慢慢地我终于熬到了2015年,这是一个人人编程年。然后,我又找了一些教程,慢慢地跟着敲代码。最后,在几个月的时间里,我总结了以前的的学习。大部分就是上网看教程了,自己做的东西很少。根本看不懂算法导论。基本的算法都理解不了。一旦代码过长,就有点头晕。
终于,到2016年,注册了玉米,开通了自己的网站。但是还有一个月就到期了。我只是尝试了下做站长的感觉。但是,自己的能力有限,基本的编程能力都没有。
现在,编程能力几乎为零。而我学编程已经有8年了。现在唯一会的东西就是,安装一些现成的开源程序,给自己的电脑重装系统。
基本上,我什么都不会。从来都不写技术博客,从来也不爱写文章。有时候,自己一个人默默地待着就是一整天。
但是我学会了怎么搜资料。怎么搜问题。然后,我找到了一些好书,比如大话java,让我进入java的门槛。
我也找到了w3c,一有记不住的都可以翻开看一看。我也找到了很多免费视频教程,没事就看看。
现在是2017年。我的目标就是跟着时代前进。
虽然我还不会编程,但是从我的进步来看,我已经知道了一些东西。我想通过我的不停琢磨,总有一日,我要获得计算机博士学位。
为什么有的人学不会C语言?相对于其他编程语言,C语言还是比较难的。初学者需要注意一下几点:
一是学习顺序
先从熟悉简单的C语言语法开始入门,然后再循序渐进,学习C++语法,WIN32、MFC、QT、网络编程,数据库、数据结构、算法、COM、STL等。构建一个完整的C语言知识体系。这需要一个比较漫长的学习积累的过程。语法入门部分大概2-3个月,其他部分需要学习和工作中慢慢理解和消化了。
二是学习方法
人的知识80%是通过眼睛获取的,但是学习编程有所不同,除了看书、看视频之外,关键是要勤动手,勤动脑。通过做大量的练习、项目实战不断积累代码量。只有代码量足够多了,项目做的多了,才能算是真正学会了。项目能否完成,就是衡量是否学会的唯一标准。后期就是代码的质量和优化问题了,这个只能在项目工作中慢慢积累经验了。
最后强调一点,很多人学不会编程是因为掉坑里了。就是教程或者书上的知识点之间跨越太大,作为一个初学者很难自己摸索出来,前面的知识点没有掌握,接着学习后面的知识,肯定是学不会了。目前绝大多数编程书籍和教程或多或少都有这样的弊端。自学能力比较强的人可以通过各种方法,参考各种网上的资料自己解决。但是大多数自学能力不是很强的人,只能依赖老师、同学、同事或者朋友帮忙指导,或者报名培训机构,老师指导完成了。学习编程通常需要一些好的学习资料,包括纸质的书籍,视频教程,课件,项目练习,代码。零基础入门的书籍推荐《明解C语言》、《CPrimerPlus》,还有一本非常特别的汇编和C语言正向逆向结合的书编程达人内部教材《汇编、C语言基础教程》也非常不错,讲解汇编和C语言的本质非常透彻,非常细致。视频资料也是特别多了,各种视频网站、论坛、自媒体都有,比如网易课堂、腾讯课堂、慕客网这些。还有一些论坛,比如CSDN、编程中国等。最重要的一点就是答疑服务,推荐爱达人的网站也很不错,从零基础入门到应用课程,配套的视频、课件、代码、项目、答疑服务都有,还可以兼职接单,学以致用。
为什么我死活学不会编程?死活学不会编程主要是犯了以下的错误:
1、专注力不够,没有恒心
有很多人开始学编程热度很强,刚刚入门时候相对比较简单觉得写代码这就是这么回事,开始有点小浮躁,到了后边学到难理解的,又开始怀疑人生。基本上来回几下就被弄得焦头烂额了,慢慢也就距离放弃不远了,编程对定力和耐心的要求很高,正在自学的或者想学编程的准备好这份耐心了没。
2、不讲究学习方法
大多数学编程的基本上学习之初都会下载很多的资料,大量的视频和电子书,很多很多个G。然后搞一个视频就开始了自己编程学习之路,看了一段时间有点听不懂了,换个视频继续,又遇到不懂得,开始电子书的学习之路。这样下去基本上几个月过去了,弄得自己思维都乱了方寸。
学习编程基本上需要制定一个大纲,这个需要大纲需要限定时间和目标,建议以书本为主线,视频为辅助,这样更容易建立自己的知识体系。
3、不懂得实践
编程是一个熟练工种,不动手写代码啥也搞不定,也就别异想天开做属于自己的产品了,实践不是对着视频得代码在电脑上敲一遍就万事大吉了,需要自己独立去完成书本或者视频上的代码,还要举一反三。
4、不打造自己的知识体系
学习过程中难免枯燥乏味,就要讲究点策略,或者找点什么能够激励下自己。其实可以找点榜样得力量,这就是为什么要找个带自己的,起码在心理有个期盼会觉得什么时候能达到像谁一样厉害,有时候榜样的力量是很强大的,所以在学习过程中要设置这样的榜样。
如何优化C++程序代码编写
第一招:以空间换时间计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值:
方法A:通常的办法
#defineLEN32
charstring1[LEN];
memset(string1,0,LEN);
strcpy(string1,"Thisisaexample!!");
方法B:
constcharstring2[LEN]="Thisisaexample!";
char*cp;
cp=string2;使用的时候可以直接用指针来操作。
从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执行的高效率。
如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。
第二招:使用宏而不是函数。这也是第一招的变招。函数和宏的区别就在于,宏占用了大量的空间,而函数占用了时间。大家要知道的是,函数调用是要使用系统的栈来保存数据的,如果编译器里有栈检查选项,一般在函数的头会嵌入一些汇编语句对当前栈进行检查;同时,CPU也要在函数调用时保存和恢复当前的现场,进行压栈和弹栈操作,所以,函数调用需要一些CPU时间。而宏不存在这个问题。宏仅仅作为预先写好的代码嵌入到当前程序,不会产生函数调用,所以仅仅是占用了空间,在频繁调用同一个宏的时候,该现象尤其突出。
举例如下:
方法C:
#definebwMCDR2_ADDRESS4
#definebsMCDR2_ADDRESS17
intBIT_MASK(int__bf)
{
return((1U<<(bw##__bf))-1)<<(bs##__bf);
}
voidSET_BITS(int__dst,
int__bf,int__val)
{
__dst=((__dst)&~(BIT_MASK(__bf)))|
(((__val)<<(bs##__bf))
&(BIT_MASK(__bf))))
}
SET_BITS(MCDR2,MCDR2_ADDRESS,ReGISterNumber);方法D:
#definebwMCDR2_ADDRESS4
#definebsMCDR2_ADDRESS17
#definebmMCDR2_ADDRESSBIT_MASK(MCDR2_ADDRESS)
#defineBIT_MASK(__bf)
(((1U<<(bw##__bf))-1)
<<(bs##__bf))
#defineSET_BITS(__dst,__bf,__val)
((__dst)=((__dst)&~(BIT_MASK(__bf)))
|
(((__val)<<(bs##__bf))
&(BIT_MASK(__bf))))
SET_BITS(MCDR2,MCDR2_ADDRESS,
RegisterNumber);D方法是我看到的最好的置位操作函数,是arm公司源码的一部分,在短短的三行内实现了很多功能,几乎涵盖了所有的位操作功能。C方法是其变体,其中滋味还需大家仔细体会。
第三招:数学方法解决问题
现在我们演绎高效C语言编写的第二招--采用数学方法来解决问题。数学是计算机之母,没有数学的依据和基础,就没有计算机的发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。举例如下,求 1~100的和。
方法E:
intI,j;
for(I=1;I<=100;I++)
{
j+=I;
}方法F
intI;
I=(100*(1+100))/2这个例子是我印象最深的一个数学用例,是我的计算机启蒙老师考我的。当时我只有小学三年级,可惜我当时不知道用公式 N×(N+1)/ 2来解决这个问题。方法E循环了100次才解决问题,也就是说最少用了100个赋值,100个判断,200个加法(I和j);而方法F仅仅用了1个加法,1次乘法,1次除法。效果自然不言而喻。所以,现在我在编程序的时候,更多的是动脑筋找规律,最大限度地发挥数学的威力来提高程序运行的效率。
第四招:使用位操作使用位操作。减少除法和取模的运算。在计算机程序中数据的位是可以操作的最小数据单位,理论上可以用"位运算"来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率。举例如下:
方法G
intI,J;
I=257/8;
J=456%32;方法H
intI,J;
I=257>>3;
J=456-(456>>4<<4);在字面上好像H比G麻烦了好多,但是,仔细查看产生的汇编代码就会明白,方法G调用了基本的取模函数和除法函数,既有函数调用,还有很多汇编代码和寄存器参与运算;而方法H则仅仅是几句相关的汇编,代码更简洁,效率更高。当然,由于编译器的不同,可能效率的差距不大,但是,以我目前遇到的MS C,arm C来看,效率的差距还是不小。
对于以2的指数次方为"*"、"/"或"%"因子的数学运算,转化为移位运算"<<>>"通常可以提高算法效率。因为乘除运算指令周期通常比移位运算大。
C语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的应用,而且十分广泛地正在被使用着的是位间的与(&)、或(|)、非(~)操作,这跟嵌入式系统的编程特点有很大关系。我们通常要对硬件寄存器进行位设置,譬如,我们通过将AM186ER型80186处理器的中断屏蔽控制寄存器的第低6位设置为0(开中断2),最通用的做法是:
#define INT_I2_MASK 0x0040
wTemp= inword(INT_MASK);
outword(INT_MASK, wTemp&~INT_I2_MASK);
而将该位设置为1的做法是:
#define INT_I2_MASK 0x0040
wTemp= inword(INT_MASK);
outword(INT_MASK, wTemp| INT_I2_MASK);
判断该位是否为1的做法是:
#define INT_I2_MASK 0x0040
wTemp= inword(INT_MASK);
if(wTemp& INT_I2_MASK)
{
…/*该位为1*/
}
运用这招需要注意的是,因为CPU的不同而产生的问题。比如说,在PC上用这招编写的程序,并在PC上调试通过,在移植到一个16位机平台上的时候,可能会产生代码隐患。所以只有在一定技术进阶的基础下才可以使用这招。
第五招:汇编嵌入在熟悉汇编语言的人眼里,C语言编写的程序都是垃圾"。这种说法虽然偏激了一些,但是却有它的道理。汇编语言是效率最高的计算机语言,但是,不可能靠着它来写一个操作系统吧?所以,为了获得程序的高效率,我们只好采用变通的方法--嵌入汇编,混合编程。嵌入式C程序中主要使用在线汇编,即在C程序中直接插入_asm{}内嵌汇编语句。
举例如下,将数组一赋值给数组二,要求每一字节都相符。
char string1[1024],string2[1024];
方法I
int I;
for(I=0;I<1024;I++)
*(string2+ I)=*(string1+ I)
方法J
#ifdef _PC_
int I;
for(I=0;I<1024;I++)
*(string2+ I)=*(string1+ I);
#else
#ifdef _arm_
__asm
{
MOV R0,string1
MOV R1,string2
MOV R2,#0
loop:
LDMIA R0!, [R3-R11]
STMIA R1!, [R3-R11]
ADD R2,R2,#8
CMP R2,#400
BNE loop
}
#endif
再举个例子:
/*把两个输入参数的值相加,结果存放到另外一个全局变量中*/
int result;
void Add(long a, long*b)
{
_asm
{
MOV AX, a
MOV BX, b
ADD AX, [BX]
MOV result, AX
}
}
方法I是最常见的方法,使用了1024次循环;方法J则根据平台不同做了区分,在arm平台下,用嵌入汇编仅用128次循环就完成了同样的操作。这里有朋友会说,为什么不用标准的内存拷贝函数呢?这是因为在源数据里可能含有数据为0的字节,这样的话,标准库函数会提前结束而不会完成我们要求的操作。这个例程典型应用于LCD数据的拷贝过程。根据不同的CPU,熟练使用相应的嵌入汇编,可以大大提高程序执行的效率。
虽然是必杀技,但是如果轻易使用会付出惨重的代价。这是因为,使用了嵌入汇编,便限制了程序的可移植性,使程序在不同平台移植的过程中,卧虎藏龙,险象环生!同时该招数也与现代软件工程的思想相违背,只有在迫不得已的情况下才可以采用。
第六招,使用寄存器变量当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,从而提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者。
(1)只有局部自动变量和形参才可以定义为寄存器变量。因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量都不能定义为寄存器变量,包括:模块间全局变量、模块内全局变量、局部static变量;
(2) register是一个"建议"型关键字,意指程序建议该变量放在寄存器中,但最终该变量可能因为条件不满足并未成为寄存器变量,而是被放在了存储器中,但编译器中并不报错(在C++语言中有另一个"建议"型关键字:inline)。
下面是一个采用寄存器变量的例子:
/*求1+2+3+….+n的值*/
WORD Addition(BYTE n)
{
register i,s=0;
for(i=1;i<=n;i++)
{
s=s+i;
}
return s;
}
本程序循环n次,i和s都被频繁使用,因此可定义为寄存器变量。
第七招:利用硬件特性首先要明白CPU对各种存储器的访问速度,基本上是:
CPU内部RAM>外部同步RAM>外部异步RAM>FLASH/ROM
对于程序代码,已经被烧录在FLASH或ROM中,我们可以让CPU直接从其中读取代码执行,但通常这不是一个好办法,我们最好在系统启动后将FLASH或ROM中的目标代码拷贝入RAM中后再执行以提高取指令速度;
对于UART等设备,其内部有一定容量的接收BUFFER,我们应尽量在BUFFER被占满后再向CPU提出中断。例如计算机终端在向目标机通过RS-232传递数据时,不宜设置UART只接收到一个BYTE就向CPU提中断,从而无谓浪费中断处理时间;
如果对某设备能采取DMA方式读取,就采用DMA读取,DMA读取方式在读取目标中包含的存储信息较大时效率较高,其数据传输的基本单位是块,而所传输的数据是从设备直接送入内存的(或者相反)。DMA方式较之中断驱动方式,减少了CPU对外设的干预,进一步提高了CPU与外设的并行操作程度。
以上就是我总结的如何优化C代码的方法了。
急!请C++高手帮忙编程。100分送上。
/*(1)定义一个函数 int count(int a[],int n)在n个元素的数组a中,统计出大于零的元素个数,此个数作为函数返回值。在main()函数中,对数组b做如下初始化
int b[]={15,16,-23,7,-5,19,-2,0,28,11};
然后调用你定义的函数,在主函数中输出数组b中小于零元素的个数。
*/
#include"iostream.h"
int z=0;//零的个数
int count(int a[],int n)
{
int dl=0;//大于0的个数
int i;
for(i=0;i<n;i++)
{
if(a[i]>0)
dl++;
else if(a[i]==0)
z++;
}
return dl;
}
void main()
{
int n,x;
int b[]={15,16,-23,7,-5,19,-2,0,28,11};
n=10;
x=n-count(b,n);
x=x-z;
cout<<"less than zero number="<<x<<endl;
}
/*(2)写两个函数,分别求两个整数的最大公约数和最小公倍数,
用主函数调用这两个函数并输出结果。两个整数由键盘输入。
利用最大公约数求最小公倍数
由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。这就是说,求两个数的最小公倍数,可以先求出两个数的最大公约数,再用这两个数的最大公约数去除这两个数的积,所得的商就是两个数的最小公倍数。
例求105和42的最小公倍数。
因为105和42的最大公约数是21,
105和42的积是4410,4410÷21=210,
所以,105和42的最小公倍数是210。
*/
#include"iostream.h"
int gys,gbs;
int gy(int a,int b)
{
int r;
r=a%b;
if(r!=0)
{
a=b;
b=r;
r=a%b;
}
return b;
}
int gb(int a,int b)
{
int r;
r=a*b/gys;
return r;
}
int main()
{
int a,b,t;
cout<<"Input a"<<endl;
cin>>a;
cout<<"Input b"<<endl;
cin>>b;
if(a==0|| b==0)
{
cout<<"Input Error"<<endl;
return 0;
}
if(a<b)
{
t=a;a=b;b=t;
}
gys=gy(a,b);
gbs=gb(a,b);
cout<<"gys="<<gys;
cout<<"gbs="<<gbs;
}
/*(3)求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0、
等于0和小于0时的根,并输出结果。从主函数出入a、b、c的值,
编程求解该方程的根。
*/
#include"iostream.h"
#include<math.h>
void dy(double a,double b,double c,double derta)
{
double d;
double x1,x2;
if(a==0)
{
x1=-c/b;
x2=-c/b;
}
else
{
d=pow(derta,0.5);
x1=(-b+d)/2/a;
x2=(-b-d)/2/a;
}
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
}
void deng(double a,double b,double c, double derta)
{
dy(a,b,c,derta);
}
void xiao(void)
{
cout<<"no answer!"<<endl;
}
int main()
{
double a,b,c;
double derta;
cout<<"Input a"<<endl;
cin>>a;
cout<<"Input b"<<endl;
cin>>b;
cout<<"Input c"<<endl;
cin>>c;
derta=b*b-4*a*c;
if( derta>0)
{
dy(a,b,c,derta);
}
else if(derta==0)
{
deng(a,b,c,derta);
}
else// derta<0
{
xiao();
}
}
/*(4)写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息
*/
#include"iostream.h"
#include<math.h>
int compare(int n)
{
int b=1;
int i;
if(n==2|| n==1)
{
}
else
{
for(i=2;i<=n;i++)
{
if(n%i==0)
{
b=0;
break;
}
}
}
return b;
}
int main()
{
int n;
cout<<"Input n"<<endl;
cin>>n;
if(compare(n)==1)
{
cout<<"this number is prime number!"<<endl;
}
else
{
cout<<"this number is not prime number!"<<endl;
}
}
/*(1)编写一个函数,实现两个整数的交换。如:主调函数中
int a=10;
int b=20;
使用引用作为函数的参数,交换后为:
a=20;
b=10;
*/
#include"iostream.h"
void change(int&a,int&b)
{
int t;
t=a;
a=b;
b=t;
}
void main()
{
int a=10;
int b=20;
change(a,b);
cout<<"a="<<a<<"\nb="<<b<<endl;
}
/*(2)编程实现两个字符串的交换。如:
char*p1=”hello”
char*p2=”good”
使用引用作为函数的参数,交换后为:
p1:” good”
p2:” hello”
*/
#include"iostream.h"
#include"stdio.h"
#include"string.h"
void change(char*&p1,char*&p2)
{
char*t1;
t1=p1;
p1=p2;
p2=t1;
}
void main()
{
char*p1="hello";
char*p2="good";
change(p1,p2);
cout<<"p1="<<p1<<"\np2="<<p2<<endl;
}
关于编程必背100个代码公式到此分享完毕,希望能帮助到您。