登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

明月凉

再不记录,就忘了

 
 
 

日志

 
 

C语言_基本1  

2011-09-28 17:22:45|  分类: 计算机 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

源文件先编译成01串,这种01文件叫目标程序文件.obj格式的,然后链接(内部子函数和外部的)生成可执行文件.exe。

运算符:*   /   %      +     -

他们的两个运算对象只要有一个是浮点的,结果就是浮点的(除了取模),取模结果都是整数,2%3结果是2(test)

要注意整数相除,2/3是等于0的,因为结果是整的,要得到正确结果,用浮点就行,浮点数小数点后有6位哦(test)

自反运算,它的优秀级灰常低,c=b*=a+2相当于b=b*(a+2),c=b。

自加自减,前缀式int i=5; x=++i; y=i;是先i=i+1再x=i的,所以如果输出x,i,y是6,6,6。

                 后缀式int i=5; x=i++; y=i;是先x=i再i=i+1的,所以如果输出x,i,y是5,6,6(test)。

数据类型,这里说基本类型,其它如指针,数组这些数据类型不说。

实数(浮点型)都是有符号的,不能用unsigned修饰。

不同数据类型的长度是不同的,char 1B,short 2B,int 4B,long 4B,float  4B,double 8B,这个在不同的C系统中是不同的。

三种进制,0开头的是8进制,0x开头的16进制,其它的为10进制。

数据类型转换,隐式转换:如赋值,表达式,输出时都可能

显式转换:如i=(int)3.1+5.5;      i的结果是8.5。

完后,prinft();中的运算顺序:

a=1,b=1;
printf("x= %d,y= %d\n",++a+b,++b+a);

输出是x=4,y=3。在printf()中,是从右向左运算的,先计算++b+a,所以先有b=b+1=2了,然后计算++a+b时,这里的b 是2。

又是运算符,大于小于这些关系运算符优先级都低于加减这些算术运算符,&&和||也是低于的

但是:“!”优先级是比运算符高的

switch(),它的判断表达式只能对整数、字符求值,不能用浮点式

switch( )只是测试是不是相等,不能整大于小于这么些

case后面的表达式应该是整型常数表达式,像5+8这样子的,不能有变量、函数

条件表达式,表达式1?表达式2:表达式3;这是C语言中唯一的三元运算符

迭代和穷举

迭代,Fibonacci数列1,1,2,3,5,8,13,。。。这种东东

也就是

int   fib1=1,  fib2=1;  fib;  i=3;      //从3才开始是前两个相加的

while(i<n)          //n 是我输入的值

{fib  =  fib1  +  fib2;

   fib1=fib2;          //现在的数1是上一个的数2

   fib2=fib;           //现在的数2是上一步迭代的值

   i ++ ;

  }

穷举,百鸡问题,要先确定三个变量的范围,cocks:0~19、hens:0~33、chicks:0~100。

然后当然是:当cocks分别取0到19时,再hens也从0取到33,来找个合适的值(chicks可以减出来)

for(cocks=0;cocks<=19;cocks++)
{
 for(hens=0;hens<=33;hens++)
 {
 chicks=100-cocks-hens;
 if(5*cocks+3*hens+chicks/3.0==100)
  printf("%d   %d    %d\n",cocks,hens,chicks);
 }
}

循环结构中的break和continue,break会直接结束循环,continue到开头再次循环。

C中的call by balue(传值调用),函数中对形参的操作不会影响到调用函数中的实参,即形参的值不能回传给实参。

对这个问题的解决:

可以把要调用的数据设成全局变量,然后在函数里面直接用它。

也可以在函数中 return回这个经过函数处理了的变量。

当局部变量与全局变量同名时,局部变量会屏蔽掉全局变量。

程序在内存中分为代码区和数据区:数据区有静态存储区、自动存储区、动态存储区。

局部变量,函数内部的那种,就是按栈结构放在自动存储区的,函数跳出,它也就撤销了。

全局变量分配在静态存储区,它只有当程序结束时它才撤销。

所以就自然引出变量的存储类型:

1,局部自动类型:分配在自动存储区,auto或register声明的,默认是auto。

2,静态局部类型:也是局部变量,但是声明时加了static,这样,就算函数跳出来了,这个变量也还是存在的,只是外部不能用它,但下次再次执行这个函数时,这个值就会用到,而不是初值。

3,全局类型:直接在函数外部定义的,也就是外部变量,整个程序都能用。

4,静态全局类型:也是在函数外部定义,但加了一个static,这样,只能在当前文件中使用。

extern声明的外部变量:一般来说,变量声明在前面,函数才能用它,但是extern可以让变量声明在函数后面;另一方面,在一个文件中用extern声明变量,表明是去外部的其它文件中去找这些变量,这是两个文件的一个通道。

const声明,是将变量放在只读区,只读嘛,当然是不能改变的了。

宏的定义中,带参数时,要将宏体和形参都括起来,像((x)*(x))这种

  评论这张
 
阅读(289)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018