c笔记1

c语言书写规范:

*标识符,变量、函数、宏、其他实体的名称
 1 以字母、下划线开头
 2 可以包含字母、下划线、shuzi
 3 大小写敏感
 4不能和关键字冲突
 5 限长:c89声称可以任意,但编译器只记住前31个
  c99是63个

*关键字
 有特殊含义的字符串
 全部小写
 标准库中的函数名全部小写

*语句可以分开放在任意多行
 空格使我们更容易区分缩进有助于轻松识别程序嵌套
 空行可以把程序划分成逻辑单元
 驼峰命名方式(从第二个单词开始,每个单词首字母大写)和下划线区分方式(单词间加下划线)

*基本类型
c中,基本类型只有char int float double四种
有符号signed(默认)--float、double是有符号的
无符号unsigned
char和int分有、无符号
unsiged int i;无符号   %u
signed int i;有符号
int i;有符号
char c;是否有符号取决于编译器

short和long ( int )
short int i;短整型
long  int i;长整型

二进制位bit  字节Byte  1Byte=8bit
      int   16位 2字节/32位 4字节....取决于计算机
unsigned short int  0~65535  %hd
short int   16位  2字节  -32768~32767        %hd
long  int   32位 最少 4字节
unsigned  0~4294967295
int -2147483648~2147483647

c99增加的类型:
long long int i;
unsigned lng long int i;
有些编译器支持非标准的128位整数

sizeof();

字面值和常量:
1  整数常量(字面值):
3  int
3.4   double
4.5f  float
4.5l   long int
56ll  long long
 
#include<stdio.h>
int main()
{
 int i;
 i=10;
 printf("i=%d ",i);
 i=1010;//八进制
 printf("i=%d /n",i);
 i=0x10;//十六进制
 printf("i=%d /n",i);
 return 0;
}

各进制之间的转换


三种浮点数:
float:单精度
double:双精度
long double:扩展双精度

float:38
double:308

浮点常量:
57.0e+/-n

char各ASCLL
A 65
a 97
0   48

c标准没有说明普通char是有符号还是无符号
c语言对字符类型视为整数类型

特殊字符
/a响铃
/b退格
/n换行
/r回车,回到行首
/t水平制表符
/v垂直制表符
//斜线
/?问号
/'单引号
/"双引号

printf()和scanf():
%i%d    int
%f&lf   float/double
%hd%ld  short int/long int
%u      无符号十进制
%c      字符
%s      字符串
%p      地址
%o      八进制
%x%X    十六进制
%g      float/double 去尾零
%e%E    科学计数法
%%                 %

scanf中的 %c前加一个空格,可以忽略空白

sizeof(类型/变量名/表达式)
只关心类型,不会对括号内的表达式进行运算

作业:打印所有类型所占内存空间

() []  ->
! ~  ++ --  +  - * &(type)sizeof()
* /
当运算符/和%用于操作负数,其结果未定义
C89中,操作数的其中之一是负数,结果可以向上取整,也可以向下取整。如-9/7的结果可以是-1,也可以是-2。
 如果i和j其中一个是负数,i%j的结果依赖具体实现
C99中, 除法的结果总是向零截取,因此 -9/7的结果是-1,i%j的结果符号与i相同。

13位
奇数和偶数分别相加a b
a+3*b-1再对10取余n
9-n

左值:表示存储在计算机内存中的对象
赋值运算要求左操作数必须是一个左值

 

 

逻辑运算:
#include<stdio.h>
int main()
{
   int a,b,c,d;
   a=2;
   b=3;
   c=4;
   d=5;
   if(a>b && b++>c && c++>a)
      puts("OK");
//短路运算
   int r=a>b && b++>c&& c++>a;
   printf("a=%d,b=%d,c=%d,r=%d/n",a,b,c,r);
   r=a>b++ || b>c++ || c>a++;
   printf("a=%d,b=%d,c=%d,r=%d/n",a,b,c,r);
}

!a>b  0大于b

按位运算:
按位与 &
56&23=?
111000&010111=010000=16
//可以将指定二进制位 置0
0xBD & 0xF7
1011   1   101  & 1111   0   111

//可以知道指定的位是1还是0
0xB5 & 0x8
1011   0   101      &    0000    1   000

按位或 |
-18:
原码->反码-> 补码
18的原码:0 0 0 00 0 0 0   00010010
18的反码:1 1 1 1 1 1 1 1     1 1101101
18的补码:(反码加1)
补码的反码加1:00000000     00010001+1=00000000    00010010
-18为18的反码除符号位取反:10000000  00010010

//把指定的二进制位  置1
0xB5 | 0x8
1011  0 101    |    0000  1  000
//可以知道指定的位是1还是0
0xBD | 0xF7
1011   1  101    |     0000   0   111


按位异或:^ 加1 反转符号
// 把指定的位反转
11011   0  11    ^    00000  1  00=11011   1  11

按位取反:~

移位运算:
<< 左移:最低位补0
>> 右移:最高位补符号位,无符号数补零
在没有丢掉有效数时,左移n位相当于*2^n,右移n位相当于/2^n

x=0xABCDEF
x&0xFF
(x>>=8)&0xFF
(x>>=8)&0xFF
(x>>=8)&0xFF

地址运算符:
&取地址
*     根据变量取地址         间接寻址运算符
*&x==x


各类型的转换


int i;
int n=50
printf("i=%d/n",i);
if(0<=i<=n)//  0<=i  => 1 ,1<=n =>1
printf("ok");//结果能出来。

for(1;2;3)语句;
1--初始化
2--条件判断,没有时,出现死循环
3--步进,没有时可能出现死循环
for(;;) while(1)--死循环


/*数组:含有多个数据值的数据结构,每个数据值具有相同的数据类型,这些数据称为元素*/
#include<stdio.h>
int main()
{
 int x=100;
 int a[5];//a数组,有5个元素,5个int变量
 int i=200,j=300;
 a[0]=10;
 a[1]=20;
 a[3]=30;
 a[4]=50;
//a[5]=60; 下标越界,可能破坏其他内存里数据,可能出现段错误
/*段错误:使用的逻辑地址没有对应的物理空间(逻辑内存空间与物理空间没有形成映射)*/
 printf("x=%d,i=%d,j=%d/n",x,i,j);
 printf("&x=%p,&a[5]=%p/n",&x,a[5]);
 for(int i=0;i<5;i++)
  printf("%d ",a[i]);
 printf("/n");
}

#include<stdio.h>
int main()
{
 int i,num[5];
 printf("Please input some number:/n");
 for(i=0;i<=4;i++)
  scanf("%d",&num[i]);
 printf("反向输出数:");
 for(i=4;i>=0;i--)
  printf("%d",num[i]);
 printf("/n");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值