[黑马IOS自学第二篇]C基础(常量,变量,标示符,变量作用域,scanf函数,运算符)

来源:互联网 发布:新红帆网络 编辑:程序博客网 时间:2024/06/14 03:59

一.关键字(32个)

auto局部变量(自动储存)

break无条件退出程序最内层循环

case   switch语句中选择项

char单字节整型数据

const定义不可更改的常量值

continue中断本次循环,并转向下一次循环

default switch语句中的默认选择项

do  用于构成do.....while循环语句

double定义双精度浮点型数据

else构成if.....else选择程序结构

enum枚举

extern在其它程序模块中说明了全局变量

float定义单精度浮点型数据数据

for构成for循环语句

goto构成goto转移结构

if构成if....else选择结构

int基本整型数据

long长整型数据

registerCPU内部寄存的变量

return用于返回函数的返回值

short短整型数据

signed有符号数

sizoef计算表达式或数据类型的占用字节数

static定义静态变量

struct定义结构类型数据

switch构成switch选择结构

typedef重新定义数据类型

union联合类型数据

unsigned定义无符号数据

void定义无类型数据

volatile该变量在程序中执行中可被隐含地改变

while用于构成do...whilewhile循环结构

(goto禁止使用)


二.数据类型 20


  



三.标识符命名原则(字母数字下划线美元符号)


<span style="font-size:18px;"> #include <stdio.h> int main(intargc, const char* argv[]) {     int $a ;    $a= 12; //  int 9night;//不正确    int abcd ;    abcd= 12;    int Abcd ;    Abcd = 12 ;   int _;//合法    _ = 12;   int 中国 ;    中国 =12 ;//从switf开始支持中文,但是底层不一定支持,所以不要用中文变量作为标识符    return 0;}</span>
IOS支持中文,但是不建议这么写。

 

以下常量的写法出现警告


 

补充:

1).标识符规范,可读性要有意义,容易理解,可读性强,驼峰命名(第一个小写,其他首字母大写,或者所有首字母大写),明明长度适当

简洁

2).程序中不得出现仅靠大小写区分的相似的标识符。例如
   int x, X; 变量x 与X 容易混淆
   void foo(int x); 函数foo 与FOO 容易混淆
   void FOO(float x);

3).标识符名分为两部分:规范标识符前缀(后缀) + 含义标识。非全局变量可以不用使用范围限定符前缀。

 

四.进制的书写

十进制10

八进制 045 0开头;

进制 0b(0B)开头

16进制 0x (0X)开头


五.打印HELLOWORLD的几个方法

<span style="font-size:18px;">#include <stdio.h> int main(intargc, const char* argv[]) {        //putchar();ASCII码八进制方式打印字符串    putchar(0110);//H 110、48    putchar(0145);//e 145、65    putchar(0154);//l 154、6c    putchar(0154);//l 154、6c    putchar(0157);//o 157 6f    putchar(040);// 空格  40 20    putchar(0127);//W 127 57    putchar(0157);//o 157 6f    putchar(0162);//r 162 72    putchar(0154);//l 154、6c    putchar(0144);//d 144 64    putchar(041);//!41 21    printf("\n");    puts("Hello World!");//自带空格    puts("Hello" " " "World" "!");        //putchar();ASCII码十六进制方式打印字符串    putchar(0x48);//H 110、48    putchar(0x65);//e 145、65    putchar(0x6c);//l 154、6c    putchar(0x6c);//l 154、6c    putchar(0x6f);//o 157 6f    putchar(0x20);// 空格  40 20    putchar(0x57);//W 127 57    putchar(0x6f);//o 157 6f    putchar(0x72);//r 162 72    putchar(0x6c);//l 154、6c    putchar(0x64);//d 144 64    putchar(0x21);//!4121    return 0;    printf("\n");        //putchar();函数,十六进制用转义字符‘\’进行"Hello World!"打印    putchar('\x68');// '\xhh',16进制数据转换成编号,查找字符    putchar('\x65');    putchar('\x6c');    putchar('\x6c');    putchar('\x6f');    putchar('\x20');    putchar('\x77');    putchar('\x6f');    putchar('\x72');    putchar('\x6c');    putchar('\x64');    putchar('\x21');    printf("\n");    return 0;}</span>

六.注释

1).单行注视快捷键command + /,单行注释 不可以嵌套多行(可以嵌套,必须在同一行,无实际意义)

2).多行没有快捷健,多行不可以嵌套多行注释

 

七.数据计量单位

1B (Byte字节)  = 8bit ()

1KB1024B

1MB = 1024KB

1G=1024MB

1T=1024GB

注: 硬盘的制造厂商是1G 1000MB

注:苹果的操作系统都是64




 

八.实数常量

单精度实数以f or F 结尾

双精度常量默认没有跟字母.

字符型常量' '单引号括起来

 


九.变量

1.代表内存的某个空间,取值可以改变的

2.变量定义,初始化,引用

3.没有初始化的值可能是

1).系统的数据

2).上一个程序遗留的数据

3).垃圾数据

4.变量一定要初始化

1.完全初始化

2.部分初始化

5.变量的作用域

全局变量

局部变量

6.在代码快内部可以定义和外部同名的变量

 7.申请存储空间,代码快结束后,内存全部释放

<span style="font-size:18px;">#include <stdio.h>float score = 59.2f;int main(int argc, const char * argv[]) {    // insert code here...        //age 1 和 age2 都是局部变量    int age1 =1;    int age2 ;    printf("age2 = %d \n",age2);        {        int age1 =10;        printf("age1 = %d \n",age1);                age2 =100;//age2相对于代码快 是外部变量,可以理解为代码快外的全局变量            }        printf("age2 = %d ********* \n",age2);//结果为1        printf("score = %f \n",score);//全局变量    return 0;}</span>
打印结果:

 

8. 全局变量作用域,从定义开始到文件末尾都可以调用

Printf();标准的库函数

9.%f只能输出实数型小数,不能输出整型,默认输出6位小数

%d默认是输出

10.%%输出一个%

 

九.Scanf () (阻塞式函数)

1.&取地址符

2.Scanf注意事项

1).接收单个变量,输入值之前如果有空格回车tab都会被忽略

2).%d%d形式时可以用空格和回车隔开

当输入为 1234结果输出第二个%d将为默认值 00.0000不会接收到数据

3)混合输入会出现问题

 

<span style="font-size:18px;">#include <stdio.h>int main(int argc, const char * argv[]) {        int age ;    printf("%d \n",age);//默认是0    float f1;    printf("%f\n",f1);//0.00000        scanf("%d",&age);//不允许 %.nf 可以 %mf 小数点也算一个有效位    printf("%d \n",age);            int num1 =12 ,num2=-1;    char ch ;   // scanf("%d%c%d",&num1,&ch,&num2); // 12 空 -1        //printf("num1 = %d ,ch = %c ,num2 = %d\n",num1,ch,num2);    scanf("%d,%c,%d",&num1,&ch,&num2);    printf("num1 = %d ,ch = %c ,num2 = %d\n",num1,ch,num2);        int a ,b;    scanf("%d%*d%d",&a,&b);//%*d 表示跳过        //scanf 尽量不要使用 \n    scanf("%d\n",&a);//输入数字后要继续输入回车才能正确赋值        return 0;}</span>
补充:运行原理

<span style="font-size:18px;">#include <stdio.h>void test(){    int num1 =12 ,num2=-12;    char ch=' ' ;    // scanf("%d%c%d",&num1,&ch,&num2); // 12 空 -1        //printf("num1 = %d ,ch = %c ,num2 = %d\n",num1,ch,num2);        scanf("%d%c%d",&num1,&ch,&num2);// 空格 也是字符 , 然后 输入的 字符c 被存入 %d 所以结果输出 错误    //"%d%c%d" 用 "%d,%c,%d" 逗号隔开    printf("num1 = %d ,ch = %c ,num2 = %d\n",num1,ch,num2);    //如果格式不一致 ,不修改变量的值    //内容存放到scanf的输入缓冲区}int main(int argc, const char * argv[]) {        int a = 1,b =2 ;    char ch = a ;    scanf("%d",&a);    scanf("%c",&ch);    scanf("%c",&ch);    scanf("%d",&b);    printf("%d,%c,%d",a,ch,b);//输入结果就为12 a 15       return 0;}</span>


十.输出函数

<span style="font-size:18px;">#include <stdio.h>int main(int argc, const char * argv[]) {    // insert code here...    int a1 = 100;    float f1 = 334.1434f;    printf("a1 = %f\n",a1);//%f 只能输出实数型小数,不能输出整型    //输出结果为0.000000    //域宽问题    //%md 问题    //0md问题    int num1 =4;    printf("num1 = %5d\n",num1);//补起空格 num1 =     4        printf("num1 = %05d\n",num1);//num1 = 00004    printf("f1 = %-8.2f \n",f1);//m.n m代表一共有多少列,少的左边补空格 //n 表示有效数小数字位            printf("%3d\n",1000);//>域宽 按实际输出        printf("%5d\n",1200);//<域宽 ,左变开始补起空格               double d1 = 2.3232358555322222;    printf("d1 = %.10f \n",d1);//    // - 代表从右边开始补位    return 0;}</span>

十一.运算符

结合性

算数运算符都是双目运算符,必须有两个参数

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[整型表达式]

左到右

 

 

()

圆括号

(表达式)/函数名(形参表)

 

 

 

.

成员选择(对象)

对象.成员名

 

 

 

->

成员选择(指针)

对象指针->成员名

 

 

2

-

负号运算符

-表达式

右到左

单目运算符

 

(类型)

强制类型转换

(数据类型)表达式

 

 

 

++

自增运算符

++变量名/变量名++

 

单目运算符

 

--

自减运算符

--变量名/变量名--

 

单目运算符

 

*

取值运算符

*指针表达式

 

单目运算符

 

&

取地址运算符

&左值表达式

 

单目运算符

 

!

逻辑非运算符

!表达式

 

单目运算符

 

~

按位取反运算符

~表达式

 

单目运算符

 

sizeof

长度运算符

sizeof 表达式/sizeof(类型)

 

 

3

/

表达式/表达式

左到右

双目运算符

 

*

表达式*表达式

 

双目运算符

 

%

余数(取模)

整型表达式%整型表达式

 

双目运算符

4

+

表达式+表达式

左到右

双目运算符

 

-

表达式-表达式

 

双目运算符

5

<<

左移

表达式<<表达式

左到右

双目运算符

 

>>

右移

表达式>>表达式

 

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

 

>=

大于等于

表达式>=表达式

 

双目运算符

 

<

小于

表达式<表达式

 

双目运算符

 

<=

小于等于

表达式<=表达式

 

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

 

!=

不等于

表达式!= 表达式

 

双目运算符

8

&

按位与

整型表达式&整型表达式

左到右

双目运算符

9

^

按位异或

整型表达式^整型表达式

左到右

双目运算符

10

|

按位或

整型表达式|整型表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1? 表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

 

 

/=

除后赋值

变量/=表达式

 

 

 

*=

乘后赋值

变量*=表达式

 

 

 

%=

取模后赋值

变量%=表达式

 

 

 

+=

加后赋值

变量+=表达式

 

 

 

-=

减后赋值

变量-=表达式

 

 

 

<<=

左移后赋值

变量<<=表达式

 

 

 

>>=

右移后赋值

变量>>=表达式

 

 

 

&=

按位与后赋值

变量&=表达式

 

 

 

^=

按位异或后赋值

变量^=表达式

 

 

 

|=

按位或后赋值

变量|=表达式

 

 

15

,

逗号运算符

表达式,表达式,…

左到右

从左向右顺序运算

 

举例:

intsum0i 0

While(i++ <=5) sum+=i;

结果为 1+2+3+4+5+6  21


十二.强制转换类型

<span style="font-size:18px;">     // insertcode here...   //求余        printf("result =%d!\n",3%0);//除数不能为0    //result =1606416528!            printf("result =%d!\n",3%-10);         printf("result =%d!\n",-3%10);    //结果-3 正负取决于前者            printf("result =%f\n",3455 + 0.00003);    //因为float的有效数为只能为7位    //result =3455.000030        printf("result = %d\n",(int)23.4);//此处是临时转换 ,如果是变量,并不会改变原来的值        printf("result =%f\n", 23.4);//result = 23.400000    </span>

十三.赋值语句

1.赋值运算符 左侧一定为变量,不能为常量

2.表达式一定有返回值,是有意义的式子

<span style="font-size:18px;">    int a1, a2 ,a3;    a1 = a2 = a3 =10 ;    //(a1= (a2 =(a3 = 10 )));//结合性由右向左        //int a4 = a6 = a8 =10 ; 错误书写,a8没有定义 无法赋值        //复合运算符    printf("a1 = a1 + a2 = %d \n",a1+=a2);       return 0;</span>



关系运算符  左结合性 ,非0即真
 
十四、自增自减

<span style="font-size:18px;">#include <stdio.h>int main(int argc, const char * argv[]) {       int a =3 ;    //int result = ++(a+3);//assignable 可分配    // (a+3) 是表达式 ,表达式返回的是常量 无法自增运算        // ++x --x 先自增,再用x作为表达式的值 ++x表达式的值 和 x 值一样    //x++ x-- 先自减,再进行自增自减1运算  x++ 表达式的值 如果为3 x的值 为4 相差1    int result = a++;    printf("result = %d ,a =%d\n",result,a);    //a =4 ,result =3    int b = 3 ;    result = ++b;    printf("result = %d ,b =%d\n",result,b);        //       4/5 4/5    result =a+++b++;    printf("result = %d ,\n",result);            int i = 5 ,q ;    q= i+++i+++i++;    printf("result = %d ,i = %d\n",q,i);    //result = 18 ,i = 8        return 0;    }</span>

十五、sizeof运算符

1.Sizeof( ) 并不是一个函数,而是一个运算操作符号

<span style="font-size:18px;">int main(int argc, const char * argv[]) {        //单目运算符 sizeof()    int a =1;    printf("%d\n",(int)sizeof(a));//计算常量在内存中所占用的常量的字节数 4        printf("%d\n",(int)sizeof(1.2f));//计算常量在内存中所占用的浮点数字节数 4        printf("%d\n",(int)sizeof(1.2));//计算常量在内存中所占用的double浮点数的字节数 8        printf("%d\n",(int)sizeof('a'));//计算常量在内存中所占用的字符常量的字节数 4    // char变量是占用一个字节 类型 常量存储是4字节 'a'所对应的ascii码97以int形式存储        char  ch ='a';    printf("%d\n",(int)sizeof(ch));//字节数 为 1                //注意事项 :字符常量和字符变量的区别            //使用方法2        printf("%d\n",(int)sizeof ch);//字节数 为 1            //使用方法3     printf("%d\n",(int)sizeof(int));//字节数 为 4        int result = sizeof('a');    printf("result = %d \n",result);        return 0;}</span>


 十六、逗号运算符

<span style="font-size:18px;">#include <stdio.h>int main(int argc, const char * argv[]) {    int b =5 ,a =5 ,result = 0;    result =(a+3,b+5,a+b);    //结果为10        //逗号表达式逐个求值    printf("result = %d!\n",result);            result =(a=a+b,b+=b);    printf("result = %d ,a = %d ,b = %d\n",result,a,b);        int z =0 ;    result =(a=a++,(b+=b,z=a+b));//逗号运算符的嵌套使用    printf("result = %d ,a = %d ,b = %d\n",result,a,b);            return 0;}</span>


十七、逗号运算符
<span style="font-size:18px;">int main(int argc, const char * argv[]) {       int a = 3 , b = 4 ,result = -1 ;    result = a > b < 3;    //a > b 为假 0 < 3 为真        printf("result = %d!\n",result);            result = 1>a+b<100;    //先算a+b 1>7<100;    result = !!!a; // 0        result = a > 2 || b<4 && a>5 ;//1 && 优先级 比 || 高        int x , y , z ;    x = y = z = 0;    result = ++x || ++y &&  ++z; // result  = 1 ;       // 看到 || 有一个假 后面的表达式 不再执行,y = 0;    printf("result = %d,y = %d\n",result,y);    return 0;}</span>


十八、三目运算符

<span style="font-size:18px;">int main(int argc, const char * argv[]) {            int a = 3 , b =4 ,result;        int num1 = 23 , num2 =5 ,num3 = 123;        result = a>b?4:5;        //way 1    result = (num1>num2)?((num1>num3)?num1:num3):((num2>num3)?num2:num3);            // way2    result = num1 > num2 ? num1 : num2 ;    result = result > num3 ? result : num3 ;    printf("result = %d\n",result);    return 0;}</span>

十九、断点调试


往空白地方拖 就可以删除断点


跳到下一个断点

 

二十、显示行号 

1.在Xcode的偏好设置中


 

/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/ProjectTemplates/Mac/Application/Command Line Tool.xctemplate

hello去掉。



 

修改开头的注释

/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/FileTemplates/Core Data/NSManagedObject subclass.xctemplate

 


 


 



 

 

 

 

 

 

 

 

 

 

 

 



关系运算符  左结合性 ,非0即真
0 0