C语言基础教程


前言

内容来自千锋教育公开教程,
个人学习笔记,如有错误,望指正。


`

一、第一个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语言的基础 第一个程序,关键字,数据类型等。
如有错误,还望指正。

1. 概述.............................................................................................................................................1 1.1. 自然语言&计算机语言................................................................................................1 1.2. 计算机语言 & C/C++语言..........................................................................................2 1.3. 简单的C/C++程序及其运行方法(环境的使用)................................................2 1.3.1. C/C++程序开发运行环境....................................................................................2 1.3.2. 格式输出函数printf()和格式输入函数scanf()....................................................3 1.4. 习题..............................................................................................................................5 2. 基本的C语言................................................................................................................................6 2.1. C语言中的名词——类型、量值(常量和变量)....................................................6 2.1.1. 整型和整型量值...................................................................................................6 2.1.2. 浮点型和浮点量(常量和变量).......................................................................8 2.1.3. 字符型和字符量(常量和变量).......................................................................9 2.1.4. 字符串常量.........................................................................................................10 2.2. C语言中的动词—运算符,短语-表达式 和和特殊动词性关键字....................11 2.2.1. 赋值运算符和赋值表达式.................................................................................11 2.2.2. 算术运算符和算术表达式.................................................................................12 2.2.3. 逻辑运算符和逻辑表达式.................................................................................13 2.2.4. 关系运算符和关系表达式.................................................................................14 2.2.5. 其它运算符和表达式.........................................................................................15 2.2.6. 不同类型量值的不同运算的混合.....................................................................17 2.3. C语言中的连词及句子——分支、循环和顺序语句..............................................19 2.3.1. if-else:如果-那么...........................................................................................19 2.3.2. switch-case语句..................................................................................................21 2.3.3. ?-:语句................................................................................................................23 2.3.4. for........................................................................................................................23 2.3.5. while....................................................................................................................24 2.3.6. do-while..............................................................................................................25 2.3.7. goto-label-if.........................................................................................................26 2.3.8. break....................................................................................................................27 2.3.9. continue...............................................................................................................28 2.4. C语言中的句子小结..................................................................................................28 2.5. 用C语言写一段话——程序段..................................................................................29 2.6. 用C语言写复杂段落——语句嵌套..........................................................................29 2.6.1. 复杂段落——语句嵌套的含义.........................................................................29 2.6.2. 嵌套语句的示例.................................................................................................30 2.6.3. 复杂段落——语句嵌套的小结.........................................................................33 2.7. 总结............................................................................................................................33 习题...........................................................................................................................................34 3. C语言的横向名词性扩充..........................................................................................................34 3.1. C语言的横向名词性扩充(1):同类变量的集合——数组..................................34
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值