文章目录
前言
内容来自千锋教育公开教程,
 个人学习笔记,如有错误,望指正。
`
一、第一个C语言程序
#include <stdio.h>		//头文件
int main(int argc, char *argv[])	//主函数,一个C语言程序有且只有一个main函数
{
    printf("Hello World!\n");		//	输出内容 Hello World!
    return 0;
}
运行结果:
 
 #include <> 头文件包含
 main()主函数,在一个C语言程序中有且只有一个main函数
 每一句语句需要以 ; 结尾
 //两个斜杠以后的内容为注释, 或者/* 这里的内容也是注释 */
二、关键字
关键字就是c语言已经定义好的名字,直接可以拿过来使用。
2.1 数据类型相关的关键字
用于定义变量或者类型
 定义变量的语法结构:
 类型 变量名;
 拓展:变量名属于标识符,标识符(变量名、函数名、重命名和取别名)有命名规则
 标识符的命名规则:
 标识符只能以数字、字母和下划线命名
 首字母不能是数字
 不能与关键字相同
 char 、short、int 、long 、 float、double、
 struct、union、enum 、signed、unsigned、void
 1、char 字符型 ,用char定义的变量是字符型变量,占1个字节
 有符号:-2^7 ~ 2^7-1
 无符号:0 ~ 2^8-1
 2、short 短整型 ,使用short 定义的变量是短整型变量,占2个字节
 有符号:-2^15 ~ 2^15-1
 无符号:0 ~ 2^16-1
 3、int 整型 ,用int定义的变量是整型变量,在32位以上的系统下占4个字节
 有符号:-2^31 ~ 2^31-1
 无符号:0 ~ 2^32 - 1
 4、long 长整型 用long 定义的变量是长整型的,在32位系统下占4个字节,在64位系统下
 占8个字节
 5、 float 单浮点型 (实数),用float定义的变量是单浮点型的实数,占4个字节
 6、double 双浮点型 (实数),用double定义的变量是双浮点型的实数,占8个字节
 7、struct 这个关键字是与结构体类型相关的关键字,可以用它来定义结构体类型,以后讲
 结构体的时候再讲
 8、 union 这个关键字是与共用体(联合体)相关的关键字,以后再讲
 9、 enum 与枚举类型相关的关键字 以后再讲
 10、signed 有符号(正负)的意思
 在定义char 、整型(short 、int、long) 数据的时候用signed修饰,代表咱们定义的
 数据是有符号的,可以保存正数,也可以保存负数
 注意:默认情况下 signed 可以省略 即 int a=-10;//默认a就是有符号类型的数据
 11、unsigned 无符号的意思
 在定义char 、整型(short 、int、long) 数据的时候用unsigned修饰,代表咱们定
 义的数据是无符号类型的数据
 无符号类型的变量只能保存正数和0。
 12、void 空类型的关键字
 char、int 、float 都可以定义变量
 void不能定义变量,没有void类型的变量
 void是用来修饰函数的参数或者返回值,代表函数没有参数或没有返回
数据类型所占内存大小
#include <stdio.h>
//测试基本数据类型的所占内存大小
int main(int argc, char *argv[])
{
    char a;
    short b;
    int c;
    long d;
    float e;
    double f;
    //sizeof:是一个运算符,可以获取数据类型所占内存的大小
    printf("%d\n", sizeof(a));
    printf("%d\n", sizeof(b));
    printf("%d\n", sizeof(c));
    printf("%d\n", sizeof(d));
    printf("%d\n", sizeof(e));
    printf("%d\n", sizeof(f));
    return 0;
}
执行结果:
 
2.2存储相关关键字
register、static、const、auto、extern
1、register是寄存器的意思,用register修饰的变量是寄存器变量,
 即:在编译的时候告诉编译器这个变量是寄存器变量,尽量将其存储空间分配在寄存器
 中。
 注意:
 (1):定义的变量不一定真的存放在寄存器中。
 (2):cpu取数据的时候去寄存器中拿数据比去内存中拿数据要快
 (3):因为寄存器比较宝贵,所以不能定义寄存器数组
 (4):register只能修饰 字符型及整型的,不能修饰浮点型
 (5):因为register修饰的变量可能存放在寄存器中不存放在内存中,所以
 不能对寄存器变量取地址。因为只有存放在内存中的数据才有地址
2、static 是静态的意思
 static可以修饰全局变量、局部变量、函数
 使用static修饰的变量,此变量保存在内存的静态区空间中
3、const
 const 是常量的意思
 用const修饰的变量是只读的,不能修改它的值
 const int a=101;//在定义a的时候用const修饰,并赋初值为101
 从此以后,就不能再给a赋值了
 a=111;//错误的
4、auto
 auto int a和int a是等价的,auto关键字现在基本不用
5、extern
 是外部的意思,一般用于函数和全局变量的声明
2.3 控制语句相关的关键字
if 、else 、break、continue、for 、while、do、switch case
 goto、default
条件控制语句:
 if语句: if else
 switch语句: switch case default
 循环控制语句:
 for while do goto
 辅助控制语句:
 break continue
2.4 其他关键字
sizeof、typedef
 1、sizeof
 测变量、数组的占用空间的字节数大小
int a = 1;
int mum;
num = sizeof(a);
printf("num = %d ",num);
2、typedef 重命名关键字
 关键字 ,作用是给一个已有的类型,重新起个类型名,并没有创造一个新的类型
 typedef 定义方式:
 1、用想起名的类型定义一个变量
 short int a;
 2、用新的类型名替代变量名
 short int INT16;
 3、在最前面加typedef
 typedef short int INT16;
 4:就可以用新的类型名定义变量了
 INT16 b 和 short int b 是一个效果
三、数据类型
3.1基本数据类型
char 、short 、int、long、float、double
#include <stdio.h>
//基本数据类型的学习和使用
//char short int long float double
int main(int argc, char *argv[])
{
    //定义一个char类型的变量并赋值,输出字符使用%c
    char a = 'w';
    printf("a = %c\n", a);
    //定义一个short类型的变量并赋值
    short b = 100;
    printf("b = %d\n", b);
    //定义一个int类型的变量并赋值,输出int类型变量的值使用%d
    int c = 9999;
    printf("c = %d\n", c);
    //定义一个long类型的变量并赋值,输出long类型变量的值使用%ld
    long d = 34536453;
    printf("d = %ld\n", d);
    //定义一个float类型的变量并赋值,输出float类型变量的值使用%f
    //默认保留小数点后六位,并且可以四舍五入
    float e = 3.1415926;
    printf("e = %f\n", e);
    //定义一个double类型的变量并赋值,输出double类型变量的值使用%lf
    double f = 3452.2345324523452;
    printf("f = %lf\n", f);
    return 0;
}
执行结果
 
3.2 构造类型
由若干个相同或者不同类型数据结构构成的集合,称为构造类型
 例如: int a[10];
 数组,结构体,共用体,枚举
3.3 常量和变量
3.3.1 常量
在程序运行中,不可以改变它的值的量。
 例如:100,‘a’ ,‘Hello,world!’
 常量的分类:
 整型:100,111,222,0, -100
 实型:3.1415,0.12f,-3.14
 字符型:‘a’,‘z’,‘0’
 字符串: “abcdefg”,“12345”
ASCII 码表:对于计算机而言,只能识别二进制数,也就是数字,对于非数值型数据,如果
 要使用,就需要将其用一个数值型数据进行标识,就称之为ASCII码表

#include <stdio.h>
int main(int argc, char *argv[])
{
    //注意在使用字符类型的数据时,如果用%c输出就是输出字符,如果用%d就是输出字符的ascii值
    char ch1 = 'w';
    printf("ch1 = %c %d\n", ch1, ch1);
    char ch2 = 97;
    printf("ch2 = %c %d\n", ch2, ch2);
    return 0;
}
执行结果:
 
3.3.2 变量
变量: 值可以改变的量称为变量
 定义变量:
 存储类型 数据类型 变量名; auto int a ;
 存储类型 数据类型 变量名 = 变量或者常量;auto int a = 10 ;
 定义变量标识符命名规则:
 (1)只能由字母,数组,下划线 组成
 (2)首字母不可以是数字
 (3)不能和关键字重名
3.3.3 格式化输出字符
3.3.3.1 普通字符
%d 十进制有符号整数
 %ld 十进制long有符号整数
 %u 十进制无符号整数
 %o 以八进制表示的整数
 %x 以十六进制表示的整数
 %f float型浮点数
 %lf double型浮点数
 %e 指数形式的浮点数
 %c 单个字符
 %s 字符串
 %p 指针的值
3.3.3.2 特殊应用
%3d %03d %-3d %5.2f
 %3d 要求宽度为3位,如果不足3位,前面空格补齐;如果足够3位,此语句无效
 %03d 要求宽度为3位,如果不足3位,前面0补齐;如果足够3位,此语句无效
 %-3d 要求宽度为3位,如果不足3位,后面空格补齐;如果足够3位,此语句无效
 %.2f 小数点后只保留2位
#include <stdio.h>
//格式化输出字符的使用
int main(int argc, char *argv[])
{
    //输出整数
    int a = 100;
    //输出十进制数,用%d
    printf("a = %d\n", a);
    //输出八进制数,用%o
    //printf("a = %o\n", a);
    //使用%#o,可以输出八进制数的前导符
    printf("a = %#o\n", a);
    //输出十六进制数
    //printf("a = %x\n", a);
    // 使用%#x,可以输出十六进制数的前导符
    printf("a = %#x\n", a);
    //输出浮点型数据,float使用%f,double使用%lf
    //默认小数点后保留六位,并且可以四舍五入,如果不够六位自动补0
    float b = 3.1415926;
    double c = 2345.2345;
    printf("b = %f\n", b);
    printf("c = %lf\n", c);
    //输出字符,使用%c输出字符,使用%d可以输出字符的ascii码值
    char d = 'y';
    printf("d = %c %d\n", d, d);
    //输出字符串,使用%s
    //没有专门的变量保存字符串,一般使用数组来保存
    char e[] = "hello world";
    printf("e = %s\n", e);
    //输出地址,使用%p
    int f = 999;
    //&:取一个变量的地址,一般地址用十六进制数标识
    printf("&f = %p\n", &f);
    printf("********************\n");
    int m = 456;
    printf("%d%d\n", m, m);
    //%5d:输出的宽度为5,右对齐,如果实际数据的宽度小于5,则左边位置补空格,如果大于5,则没有用
    printf("%5d%5d\n", m, m);
    //%05d:输出的宽度为5,右对齐,如果实际数据的宽度小于5,则左边位置补0,如果大于5,则没有用
    printf("%05d%05d\n", m ,m);
    //%-5d:输出的宽度为5,左对齐,如果实际数据的宽度小于5,则右边补空格,如果大于5,则没有用
    printf("%-5d%-5d\n", m, m);
    float n = 3.678;
    printf("n = %f\n", n);
    //%.2f:小数点后保留两位并且可以四舍五入
    printf("n = %.2f\n", n);
    return 0;
}
执行结果:
 
3.4 类型转化
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题.
 转换的方法有两种:
 自动转换:
 遵循一定的规则,由编译系统自动完成.
 强制类型转换:
 把表达式的运算结果强制转换成所需的数据类型
3.4.1 自动转化
自动转换原则
 1、占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精
 度不降低.

3.4.2 强制转化
通过类型转换运算来实现
 (类型说明符) (表达式)
 功能:
 把表达式的运算结果强制转换成类型说明符所表示的类型
 例如:
 (float)a; // 把a的值转换为实型
 (int)(x+y); // 把x+y的结果值转换为整型
 注意:
 类型说明符必须加括号
#include <stdio.h>
int main(int argc, char *argv[])
{
    //***************强制类型转换之自动转换******************
    //参加运算的成员全部变成int类型的参加运算,结果也是int类型的
    printf("%d\n",5/2);
    //当表达式中出现了带小数点的实数,参加运算的成员全部变成double类型
    //参加运算,结果也是double型
    printf("%lf\n",5.0/2);
    //当表达式中有有符号数  也有无符号数,参加运算的成员变成无符号数参
    //加运算结果也是无符号数.(表达式中无实数)
    int a = -8;
    unsigned int b=7;
    if(a + b > 0)
    {
        printf("a+b>0\n");
    }
    else
    {
        printf("a+b<=0\n");
    }
    //在赋值语句中等号右边的类型自动转换为等号左边的类型
    int m;
    float n=5.8f;//5.8后面加f代表5.8是float类型,不加的话,认为是double类型
    m = n;
    printf("m = %d\n",m);
    printf("n = %f\n", n); //注意自动类型转换都是在运算的过程中进行临时性的转换,并不会影响自动类型转换的变量的值和其类型
    //*************强制类型转换之强制转换************
    int x = 10;
    int y = 4;
    float w;
    w = (float)x / (float)y;
    printf("w = %f\n", w);
    return 0;
}

总结
以上就是今天要讲的内容,本文仅仅简单介绍了C语言的基础 第一个程序,关键字,数据类型等。
 如有错误,还望指正。










