【C语言学习笔记】基础语法及基本运算

第一部分 基础语法

一、关键字

C语言默认提供的有特殊含义的符号,并且都是小写,不能再将它们用作标识符。在Xcode中颜色显示为玫红色

二、标识符

1、程序员自己定义的一些符号和名称。

2、标识符命名

(1)规则:

1> 只能由26个引文字母的大小写、10个阿拉伯数字0~9、下划线_组成。

2> 严格区分大小写,比如test和Test2是两个不同的标识符。

3> 不能以数字开头,不能使用关键字作为标识符。

(2)规范:

1> 名称要有意义,比如完整的英文或者拼音。

2> 如果标识符中有多个单词,尽量使用驼峰标识,即从第二个单词开始,首字母大写,如果是拼音用_分隔。

三、注释

1、用来解释某一段程序的或者某一段代码的含义,方便程序员之间交流,在xcode中,注释默认的颜色是豆绿色,我们可以通过颜色直观的来分辨出是否是注释。

2、注释只要不影响到程序的运行,位置是不固定的,函数内或者函数外都可以。并且只要被注释掉的内容,不参与编译,通过查看.o目标文件的字节数就可以知道。

3、单行注释//和多行注释/**/

    //单行注释:这里是注释!!
    
    /*多行注释:
     这里是注释!!
    printf("itcast\n");
    */
4、注释的作用

(1)利用注释分析代码含义

先运行整个程序,查看总体结果,然后把想了解的代码注释之后再运行程序,查看结果和总体结果的区别,那么就分析出代码的含义了。

(2)利用注释查找代码错误

把可疑代码注释掉之后运行程序,确定这行代码是否有错。

5、总结:

//正确用法
//1.单行嵌套多行形式的单行
//it/*cast*/

//2.单行嵌套单行
//it//cast

//3.多行嵌套单行
/*//itcast
 */

//错误用法
//1.单行嵌套多行
//it/*
cast*/

//2.多行嵌套多行
/*
 /*itcast*/
 */
(1)把/**/写在一行,其实应当看成单行注释

(2)单行注释可以被嵌套

(3)多行注释不可以被任何形式的注释嵌套

四、数据

数据有大小,数据越大说明包含的0和1就越多,每一个比特位bit保存一个0或者一个1,一个字节保存8位bit。单位转换:1B = 8bit、1KB = 1024B、1MB = 1024KB、1GB = 1024MB、1TB = 1024GB。

1、常量:固定不变的值

(1)整型常量,比如1、3、5、0

(2)浮点型常量

1> 单精度float,数据都是以f结尾的,小数点后有6位。比如2.5f、0.0f

2> 双精度double,小数点后有位13。比如1.3、2.5

(3)字符常量,单引号括起来的单个字符,只能括住一个字符,不能是汉字。比如'a'、'$'

(4)字符串常量,双引号括起来的字符,字符数不限制。比如"itcast"、"as"

2、变量:当一个数据的值经常改变或者不确定,就需要定义为变量

(1)变量的定义

    //数据类型 变量名
    int score;

    //连续定义3个char变量
    char d, e, f;
(2)变量的赋值

    score = 100;
    //初始化:定义变量同时第一次赋值
    char c = 'A';

(3)变量的输出

    //%d %i输出整数,格式符(占位符)
    printf("分数是%d\n", score);

    //%f输出小数,默认是6位小数
    printf("身高是%.2f\n", height);

    //%c输出字符
    printf("积分等级是%c\n", c);
(4)变量使用注意

1> 变量的作用域:从定义变量的那一行代码开始,一直到所在代码块结束

    int b;
    b = a;    //报错,a未定义
    int a = 10;
2> 代码块的作用域

    {
        int a = 10;
    }
    //报错,a是未定义的变量,因为a的作用域在代码块里面
    printf("a = %d\n", a);
代码块的作用:及时回收不再使用的变量的存储空间,为了提升性能

3> 一个变量没有经过初始化,就不要使用该变量

    int c;
    int d = c + 1;
    printf("d的值是%d\n", d);
//输出结果是
//d的值是1756581943
(5)变量小练习(用于面试)
//不利用第三方变量来实现两个变量值的交换
    int a, b;
    a = b - a;
    b = b - a;
    a = b + a;
(6)变量的存储细节

int main(void)
{
    int a = 10; 
    int b = 20;
    //输出a的地址,地址是0x7fff58b0ac08
    printf("a的地址是%p\n", &a);
    
    //b的地址是0x7fff58b0ac04
    printf("b的地址是%p\n", &b);
   
    return 0;
}

1> 不同数据类型所占据的存储空间也不同

2> 变量a和变量b怎么存储的,看下面示意图

【C语言学习笔记】基础语法及基本运算_第1张图片 
* 内存寻址由大到小,优先分配内存地址大的字节给变量,变量数据类型决定了分配的字节数。

* 变量越先定义,内存地址就越大。

* 取得变量的地址:&变量名,变量的地址是字节最小的那个。

* 输出地址:%p。

五、scanf()函数

1、基本使用

#include 
int main(void)
{
    int number;

    scanf("%d", &number);
    
    printf("用户输入的值是%d\n", number);
    
    return 0;
}
(1)scanf函数只接收变量的地址。

(2)scanf函数是一个阻塞式函数 ,会卡在scanf那行代码,等待用户输入。

(3)用户输入完毕后,会把输入的值赋值给变量number

2、其他用法及使用注意

// 1.输入字符
    char myc;
    scanf("%c", &myc);

// 2.一次性输入多个数值,并且以某些符号隔开
    int num1, num2;
    scanf("%d#%d", &num1, &num2);
    
// 3.如果scanf参数中以空格隔开,实际输入可以空格、回车、tab键作为分隔符
    int num1, num2;
    scanf("%d %d", &num1, &num2);

// 4.scanf中不能写\n
// 错误写法
    int a;
    scanf("%d\n", &a);  
    


第二部分 基本运算

一、算术运算

1.基本使用

    int a = 10 + 2 + 5 + 7;
    int b = -5;
    int c = 10 * b;
    int d = 1 / 5;
    int e = 24 % -5;    //取余

(1)运算顺序:从左向右。

(2)取余运算符%两边的值都是整数,并且取余运算结果的正负只和%左边的值相关。

2.使用注意

(1)自动类型转换

    int = 10.8;    //double转换为int
(2)强制类型转换
    int a = (int) 10.8;    //double转换为int

(3)自动类型提升

    double c = 10 + 6.6;
    double e = (double)3 / 2;
1> 参与计算的数据是什么类型,那么最终的结果就是什么类型。

2> 其中占内存字节数小的类型转换成大字节类型。

二、赋值运算符

#include 
int main(void)
{
    int a = 10;
    
    //复合赋值运算符
    a += 5;    //a = a + 5;
    
    a *= 5;    //a = a * 5;
    
    a += 5 + 6 + 4;    //a = a + (5 + 6 + 4);
    printf("a = %d\n", a);  
    return 0;
}
三、自增自减运算符

1、基本使用

int main(void)
{   
    int a = 10;
    a = a + 1;  //11
    a += 1; //12
    a++;    //13
    ++a;    //14
    a--;    //a -= 1;   13
    printf("%d\n", a);
}
(1)单独使用时,不管++和--是在前还是在后,最终的结果都是+1或-1。

int main(void)
{
    int b;
    int a = 10;

    b = (a++) + (++a);
    printf("a = %d, b = %d\n", a, b);    // a = 10, b = 22;
}
(2)a++或a--:先使用a的值,再+1或者-1赋值给a。

        ++a或者--a:先把a的值+1或者-1之后赋值给a,再使用

2、注意:自增自减运算符不能用于常量

四、sizeof

1、用来计算一个变量或者一个常量、一种数据类型所占据的字节数。

2、基本形式:

// 1.正确形式
    sizeof(变量\常量);
    sizeof 变量\常量;
    sizeof(数据类型);

// 2.错误形式
    sizeof 数据类型;

五、关系运算符(比较运算符)

int main(void)
{
    int result = 3 + 4 > 8 - 2;
    printf("%d\n", result);
    
    return 0;
}
1、任何数值都有真假性,任何非0值为真,0为假

2、如果条件成立则为真,返回1;如果条件不成立为假,返回0。

3、6种关系比较符,其中>、>=、 <=、 <高于==、!=,结合方向是从左到右。

六、逻辑运算符

1、逻辑与:条件A && 条件B 

两个条件都成立时,结果才是1,为真

    int a = 10 && 0;
    printf("a = %d\n", a);    // a = 0
    //左边成立,才判断右边,如果左边不成立,右边不做判断
    int a =10;
    int b = 10;
    int c = (a<5) && (++b>=11)
    
    printf("a=%d, b=%d, c=%d\n", a, b, c);    // a = 10, b = 10, c = 0

2、逻辑或:条件A || 条件B 

两个条件有一个成立时,结果是1,为真,两个条件都不成立时,返回0。

    int c = (1>8) || 0;
    printf("c = %d\n", c);    // c = 0
    //左边成立,不判断右边,如果左边不成立,再判断右边
    int a = 10;
    int b = 10;
    int c = (a>5) || (b++ - 10);
    printf("a=%d, b=%d, c=%d\n", a, b, c);    //a = 10, b = 10, c = 1

3、逻辑非:!条件A  

条件A为成立,返回0;如果条件成立,就返回1

    int a = !(10<8);
    printf("a=%d\n", a);    // a=1
七、三目运算符

1、格式:条件 ? 数值1 : 数值2;

2、利用三目运算符计算两个值中的最大值

//提示用户输入两个整数,输出最大值
#include 
int main(void)
{    
    // 1.保存输入的两个整数
    int num1, num2;
    
    // 2.提示用户输入
    printf("请输入两个整数,以空格隔开:\n");
    
    // 3.接收输入
    scanf("%d %d", &num1, &num2);
    
    // 4.比较俩数,输出最大值
    int max = (num1 > num2) ? num1 : num2;
    printf("%d和%d的最大值是%d\n", num1, num2, max);
    

    return 0;
}
运行结果:



你可能感兴趣的:(【C语言学习笔记】)