C学习日记(1)

本文是C语言学习的第一篇日记,主要介绍了C语言的基础知识,包括第一个C程序、数据类型(如char、short、int、long、float、double等)及其相关关键字,以及存储相关关键字(如register、static、const)和控制语句(如if、for、while等)。同时,还讲解了变量、常量、字符串和格式化输出的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章 第一个C程序

经典的hello world。需要在调用库函数之前对库函数进行声明,标准C库用<>符号包含调用的头文件。main函数返回int整形,一个程序中有且只有一个main函数,是程序的入口。函数开始结尾要有大括号,每条语句用分号结尾。

写注释的方法://单行注释 注释双斜杠到行末;/* */多行注释

# include<stdio.h>
int main()
{
printf("hello world\n");
return 0;
}

第二章 数据类型及语句

第一节 关键字

一、数据类型相关的关键字:用于定义变量或者类型

1、char:定义字符型变量,占1个字节(8bit),只能定义一个字符
//char ch1 = ‘b’;正确
//char ch2 = ‘1’;正确
//char ch3 = ‘1234’;错误
字符存放的是ASCII码的值,即用1的ASCII码给ch1赋值
2、short:短整型,2个字节
short int a = 11;一般short和int配合使用,范围是 -32768 — 32767
3、int:定义整型变量,32位系统下占4个字节,16位占2字节
int a =44;范围是 -20亿 — 20亿
4、long:长整型;在32位系统占4个字节
long int a = 144;
5、float:单浮点型实数,带小数点,占4个字节
float b = 3.8f; f修饰3.8是float类型的实数,不加默认为double类型
6、double:双浮点型实数,带小数点,占8个字节,精度更高
double b = 3.8;
7、struct:定义结构体类型
8、union:定义联合体(共用体)
9、enum:定义枚举类型
10、signed:有符号数(0、正数、负数)
在定义字符型char、整形short int long时用signed修饰,表示数据是有符号的,保存正负0,不写默认是有符号
signed int b = -6;
11、unsigned:无符号数(0、正数)
在定义字符型char、整形short int long时用signed修饰,表示数据是无符号的,只能保存正数和0.
unsigned int a = 100;
unsigned int a = -100; 错误
12、void:空类型,不能定义变量,修饰函数的参数和返回值,代表函数没有参数或没有返回值

int main()
{
    char ch;
    ch = 'a';
    printf("ch = %c\n", ch);
    return 0;
}
int main()
{
    char a;
    short int b;
    int c;
    long int d;
    float e = 3.8f;
    double f = 5.6;
    printf("sizeof(a) = %d\n", sizeof(a));
    printf("sizeof(b) = %d\n", sizeof(b));
    printf("sizeof(c) = %d\n", sizeof(c));
    printf("sizeof(d) = %d\n", sizeof(d));
    printf("sizeof(e) = %d\n", sizeof(e));
    printf("sizeof(f) = %d\n", sizeof(f));
    return 0;
    
    //sizeof(a) = 1
    //sizeof(b) = 2
    //sizeof(c) = 4 说明vs编译环境是32位
    //sizeof(d) = 4
    //sizeof(e) = 4
    //sizeof(f) = 8
}

二、存储相关关键字
1、register:寄存器,用register修饰的变量是寄存器变量
一般定义的变量的存储空间会被分配在内存中,而用register修饰变量,编译时会告诉编译器尽量将其存储空间分配在寄存器中,有可能存放入也有可能没有存放入,只有内存中的变量才有地址,故不能用取地址的方式读取register修饰的变量。
(1)定义的变量不一定是存放在了寄存器中
(2)CPU取数据的时候在寄存器中读取比在内存中快,
(3)不能定义寄存器数组
(4)register只能修饰字符型char和整形short、int、long,不能修饰浮点型float、double
register char ch;
register short int b;
register int c;
register float d; (错误)
(5)只有内存中的变量才有地址,故不能用取地址的方式读取register修饰的变量
register int a;
int* p;
p = &a;(错误,可能a没有地址)
2、static:静态
static可以修饰全局变量、局部变量、函数
3、const:修饰只读变量
不能修改值,是只读的
const int a = 101;//定义了一个只读的变量a,a=101,在定义之后不能再修改了
a = 101;//错误,不能给只读变量赋值
4、auto:自动类型(不用了)
auto int a 与 int a 等价
5、extern:外部函数或外部变量声明
一般用于函数和全局变量的声明,常用在头文件中

三、控制语句相关的关键字
(1)if
(2)else
(3)break
(4)continue
(5)for
(6)while
(7)do
(8)switch…case…
(9)goto
(10)default

四、其他关键字
1、sizeof:用来测变量、数组、指针等占用存储空间的大小(占用内存的字节数)
int a = 10;
in num;
num = sizeof(a); 测量a在内存中占用的字节数,即int类型占用的字节数
2、typedef:给一个已有的类型名如int、float等重新起个名字,比如把long int叫成abcd,不能创造一个新的类型
//使用方法,以unsigned short int 命名成 U16为例
unsigned short int a;//1、用想起名的类型定义一个变量
unsigned short int U16;//2、用新的类型名替代变量名
typedef unsigned short int U16;//3、在最前面加上typedef
unsigned short int b;和 U16 b;是一个效果//4、即可用新的类型名定义变量
//定义方式::typedef + 需要替代的变量名 + 新变量名

3、volatile:易改变
即告诉CPU每次用volatile变量时候,重新去内存中读取,以保证是最新的值,而不是寄存器中的备份
CPU读取数据是先把数据从内存中放到寄存器中再去用,再次读取直接在寄存器中读取
较少使用

//使用 INT 代替 short int 作为类型名称定义变量
//short int a;
//short int INT16;

typedef short int INT16;

int main()
{
    short int b = 100;
    INT16 c = 111;
    printf("b = %d\n", b);
    printf("c = %d\n", c);
    return 0;
}

五、命名要求:字母、数字、下划线,不能以数字开头,必须以字母或者下划线开头
1、Linux风格: stu num
2、驼峰风格: StuNum
3、大小写敏感:int Num; int num; 即大写和小写是两个变量名,Num 不等同于 num;
4、要求见名知意

六、C语言的程序结构
一个完整的C语言程序,有且仅有一个main()函数(又称主函数),和其他若干个函数组成
main()函数是程序的入口
main函数可以传参,也可以不带参

第二节 数据类型

一、基本类型
1、常量和变量
常量:程序运行过程中,其值不能改变的量称为常量
变量:其值可以改变的量称为变量
(1)字符常量和字符变量
字符常量:直接常量:用单引号括起来。如’a’,‘0’。转义字符:反斜杠\开头,后跟一个或几个字符:‘\n’制表符,’\t’制表符,'\'表示\。
字符变量:用char定义的字符,每个字符变量分配一个字节的内存空间,字符值用ASCII码的形式存放在变量的内存空间中
char a;
a = ‘x’;
a变量存放的是字符X的ASCII:120,即a = 120; 和 a = ‘x’;是一样的。

int main()
{
    char a = 120;
    char b = 'x';
    printf("a = %c\n",a);
    printf("b = %c\n", b);
    return 0;
}

// a = x
// b = x

(2)字符串常量和字符串变量
字符串常量:用双引号括起来的一连串字符,如“CHINA”,“湖南大学”
字符串常量和字符常量有区别:
a、单引号和双引号,‘a’和“a”
b、每个字符串结尾编译器会自动补一个结束标志位 ‘\0’,即"a"包含两个字符’a’和’\0’;

(3)整形数据 short、int、long
整形常量(按进制分类):十进制:以数字1-9开头,如123、145
八进制:以数字0开头,如0123、0152
十六进制:以数字0x开头,如0x1e,0x25(a=10,b=11,c=12,d=13,e=14,f=15)
整形变量:(un/signed)short (int)、(un/signed)int、(un/signed)long (int)

(4)实型数据(浮点型),float,double
实型常量(实数或浮点数):十进制形式和指数形式,不以f结尾默认double类型,以f结尾是float类型
实型变量:单精度(float,占4个字节,7位有效数字),双精度(double,占8字节,16位有效数字)

2、格式化输出字符
%d 十进制有符号整数
%u 十进制无符号整数
%x 十六进制整数
%o 八进制整数
%f float型浮点数(7位有效数字)
%lf double型浮点数
%e 指数形式的浮点数
%s 字符串
%c 单个字符
%p 指针的值
%3d 要求宽度为3位,如果不足3位则前面用空格补齐,如果足够3位则该条语句无效
%03d 要求宽度为3位,如果不足3位则前面用0补齐,如果足够3位则该条语句无效
%-3d 要求宽度为3位,如果不足3位则后面用空格补齐,如果足够3位则该条语句无效
%.2f 小数点后只保留2位

int main()
{
    char a = 'x';
    int b = 101;
    float c = 3.1415926f;
    double d = 1.23;
    int e = 0x3d;//61
    printf("a = %c\n", a);
    printf("b = %d\n", b);
    printf("c = %f\n", c);
    printf("d = %lf\n", d);
    printf("e = %x\n", e);
    printf("e = %d\n", e);
    return 0;
}
int main()
{
    printf("%03d\n", 1);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值