详解C语言(1)

本文介绍了C语言的起源、基本概念,包括C语言的定义、发展历史,以及字符和ASCII编码、数据类型(如整型、浮点型、字符型)的详细讲解,重点提到了sizeof操作符和signed/unsigned的区别。
摘要由CSDN通过智能技术生成

目录

一、C语言是什么

 1.定义

2.历史

二、第一个C语言(Hello World!)

1.代码与运行

2.讲解

三、C语言当中的字符和ASCll编码

1.ASCII

2.打印字符(可以先看数据类型)

3.转义字符

四、数据类型

1.内置类型

重点:

————引入sizeof(操作符-也是关键字)(x64配置下)

————signed和unsigned

五、C语言的书写风格

附录

六.总结


一、C语言是什么

 1.定义

首先,C语言是一门面向过程计算机编程语言,它既具有高级语言的特点,又具有汇编语言的特点。在人与人的生活中,我们会使用,中文,英语,日语,手语等各种语言,这些都为了达成了对话,交流的目的,那么,人和机器怎么交流呢,那就需要计算机语言的帮助了。

2.历史

C语言的祖先是BCPL语言。

1963年,剑桥大学基于ALGOL60的规范推出了CPL语言

1967年,剑桥大学的 Martin Richards 对CPL语言进行了简化,于是产生了BCPL语言。

随后,1970年贝尔工作室Ken Thompson以BCPL语言,设计出了很简单且很接近硬件的B语言,并且用B语言写了第一个UNIX操作系统(肯 汤普森)

牛人与牛人总是相伴,同是贝尔实验室的D.M.Ritchie(丹尼斯·里奇)在B语言的基础上发明了C语言

这位大牛为了推广,在1977年发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》

1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言

1983年 肯 汤普森与丹尼斯·里奇获得图灵奖

为了使各家人,用的C语言统一起来,1990年,国际标准化组织ISO(International Organization for Standards)接受了89 ANSI C 为I SO C 的标准(ISO9899-1990)。

总的来说,C语言发展史:CPL——BCPL——B语言——C语言。  

至今,一直到今天C语言还在广泛的使用在计算机排行榜上霸占前三名。

二、第一个C语言(Hello World!)

1.代码与运行

      

2.讲解

#include <stdio.h> //头文件  
int main()   //主函数
{
    printf("Hello World!\n");//格式化输出函数
    return 0;
}

头文件:在C语言当中,我们会运用到各种不同的函数,来达成输入、输出等目的,而这些                   函数,就隶属于各自的头文件。就像这里用的printf函数,就隶属于<stdio.h>头文件中。

主函数main:主函数是程序的入口,不管定义多少函数(定义函数是以后的内容),第一个入口只能是main函数。其中int 为数据类型,表⽰ main 函数执⾏结束的时候返回⼀个整型类型的值。(与return 中的0相对应)

注:①main函数有且只有一个

       ②即使在一次项目中,有多个文件,但也只能有一个main函数。

printf:格式化输出函数printf(""); 它会将我双引号里的内容呈现在屏幕上。

return 0:程序结束后。正常退出。至于return后面是0还是什么,这也得放到后面在讲。

注:编写过程中,一句语句后面需要加分号

       编写时所有符号必须用英文符号,eg:

三、C语言当中的字符和ASCll编码

1.ASCII

在平常,我们在电脑上敲出的“@、a、b”诸如此类都是字符;

那么在C语言中我们需要用单引号把它括起来表示为:‘a’,‘@’,‘b’等

计算机用二进制来储存所有数据,那么这些字符在计算机中又是怎么表示的呢

给每个字符编一个二进制序列,即编码;随后由美国国家标准学会(ANSI)出台了ASCII编码,C语言就遵循ASCII编码的方式

ps:这其实就相当于一个规定。我们也不需要整张表格背诵(表格在附录)

小编推荐大家记:

1.65 A;97 a;对应的大小写差值为32(按照英文字母顺序,每个大小写都可知)

2。字符 0 为48;(0-9即为48-52)

3.换行\n为 10;

4.0-31这32个字符是不可打印字符

2.打印字符(可以先看数据类型)

单字符用%c来指定格式

eg:

注意到虽然第二行中不是A,但是我输入其对应的ASCII码,加上%c就是用来指定为字符格式的。所以,它也会打印出A

3.转义字符

①定义:转变了原来字符意思的字符;

②各种转义字符

\?:在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。

\':用于表示字符常量。

\":用于表示一个字符串内的双引号

\\:用于表示一个反斜杠,防止它被解释为一个转义序列符。

\a:警报,这会让终端发出警报声或出现闪烁,或者两者同时发生。

\b:退格键,光标回退一个字符,但不删除字符。

\f:换页符,,光标移到下一页。在现代系统上,这已经反应不出来,行为改成类似于\v

\n:换行符

\r:回车符,光标移到同一行的开头。

\t:制表符,光标移到下一个水平制表位,通常是下一个8的倍数

\v:垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列。

以下两种较为特殊:可理解为字符的8进制或16进制表示形式

\ddd: d d d表示1-3个八进制的数字。如:\130 表示字符X

\xdd: d d表示2个十六进制数字。       如:\x30 表示字符0

\0:null字符,代表没有内容,\0就是\ddd这类转义字符的一种,用于字符串的结束标志,其ASCII码值为0(略)(以后会提到)

eg:\?:在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。

int main()
{
    printf("(are you ok??)\n");
    //在过去一些编译器上,支持三字母
    //eg:??) —— ]
    //??(  —— [
    //如果不想被解释为三字母词问号,在问号前加上 \
    
    printf("(are you ok\?\?)\n");
    return 0;
}

\':用于表示字符常量。

int main()
{
    printf("%c\n", 'a');
    //printf("%c ",'''); 想打印单引号
    //在C语言中有语法规定,两个单引号构成一个字符,那我们想打印单引号
    //就需要使用  \
     
    printf("%c\n",'\'');//用\来转义 '
    return 0;
}

\":用于表示一个字符串内的双引号(同上)

\t:制表符,光标移到下一个水平制表位,通常是下一个8的倍数

\\:用于表示一个反斜杠,防止它被解释为一个转义序列符。

int main()
{
    printf("abc\test\test\n");//本想打印abc\test\test,但这里却成了转义字符\t
    printf("abc\\test\\test\n");//这里就需要\来修饰\让\就是其本身
    return 0;
}

\a:警报,这会让终端发出警报声或出现闪烁,或者两者同时发生。

\b:退格键,光标回退一个字符,但不删除字符。

这里发现:在第二行打印到d时,光标回退了一个打印了ef 顶掉了d

\n:换行符

\r:回车符,光标移到同一行的开头。

这个可能得自己试

\v:垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列。

\ddd: d d d表示1-3个八进制的数字。如:\130 表示字符X

八进制数字转化为十进制,打印为其对应的ASCII码

\xdd: d d表示2个十六进制数字。       如:\x30 表示字符0

四、数据类型

        那我们怎么在C语言当中来描述数据呢,比如说小数,整数等;那我们可以类比一下在日常生活中,我们自己已经默认,什么样的数字是整数,什么样的数字是小数;那在C语言当中,我们需要把一个数是什么样子告诉计算机,那这个样子就是数据类型;

C语言当中有各种数据类型,,本章节主要探讨内置数据类型、

1.内置类型

①字符型(ps:这里 [] 括着的可省略)

char ;

[signed] char(有符号--正/负号)---(对signed和unsigned可以先看下文特别说明)

unsigned char(无符号)

②整型

整型又分为

Ⅰ短整型

short [int]

[signed] short [int]

unsigned [int]

Ⅱ整型

int

[signed] int

unsigned int

Ⅲ长整型

long[int]

[signed] long [int]

unsigned long [int]

当然了,我们还有更长的整型

在C99中提供 

long long [int]

[signed] long long [int]

unsigned long long [int]

ps:short 和 long 修饰的int 可省略

③浮点型(描述小数)

float 单精度浮点型

double 双精度浮点型

long double 更高精度的浮点型

④布尔类型(建议        )

C语言原来用0来表示假;非0表示真;

_Bool or bool ————使用必须包含头文件<stdbool.h>

其变量的取值是:true or false

其中已经定义好了true = 1;(真)

                             false = 0;(假)

eg:

这里用了if语句,判断中为真就执行语句,为假就不执行;

很显然,当我给布尔类型的flag定义了不同值时,真假也就变了;

当flag = true(即就是1),执行打印

当flag = flase(即就是0),不执行打印 

2.每种数据类型的取值范围

limits.h 头文件查找整型类型的取值范围

float.h头文件里查找浮点型类型的取值范围

重点:

1.不同的类型它的区别是什么呢

①描述的类型不同(这个显而易见)

②在内存中占据空间不同

————我们要怎么知道每种类型,占用了多少的空间呢

————引入sizeof(操作符-也是关键字)(x64配置下)

sizeof后面可为类型,变量或表达式          其返回值单位为字节(附录 有单位换算)

注:C语言规定sizeof返回为无符号整型(unsigned),但并未规定返回什么类型

        那就麻烦了啊,不同的系统返回值不同,代码的移植性就差了;

        就在这时,C语言——该出手时就出手,它创造出了一个别名size_t,用来统一sizeof的返回值;

size_t 这种类型,用%zd来打印

1.用sizeof查看数据类型所占内存大小

eg:int main()
{
    printf("%zd\n",sizeof(char));
    printf("%zd\n", sizeof(int));
    printf("%zd\n", sizeof(short));
    printf("%zd\n", sizeof(long));
    printf("%zd\n", sizeof(long long));
    printf("%zd\n", sizeof(float));
    printf("%zd\n", sizeof(double));
    printf("%zd\n", sizeof(long double));
    return 0;
}

那有同学就奇怪了:为什么我的long 和int一样大呢;

因为C语言规定sizeof(int)<=sizeof(long);有些编译器可能是>

2.sizeof后面为变量/表达式时

①sizeof后表达式括号可省略;

②sizeof后表达式不计算,根据其数据类型得出大小

对比可发现:3.5+3.5 结果尽管是 7 ,但内存大小仍旧为8;可知sizeof后表达式不参与计算

int main()
{
    int a = 5;
    printf("%zd\n", sizeof(a));
    printf("%zd\n", sizeof a);
    printf("%zd\n", sizeof(int));
    printf("%zd\n", sizeof(3 + 3));
    printf("%zd\n", sizeof(3 + 3.5));
    printf("%zd\n", sizeof(3.5 + 3.5));
    return 0;
}

————signed和unsigned

生活中有很多东西是绝对不会有负数的:年龄,身高......这时,就需要unsigned出手

signedunsigned
相同关键字,用于修饰整型和字符型
不同表示一个类型带有正负号表示一个类型无正负号,只能表示0和正整数

对于上文中signed int 中signed可省 因为对于 int 来说默认带有正负号; unsigned 来设置int无符号

可对于char类型来说,也可以设置signed和unsigned类型;

那有什么好处呢

对于unsigned类型来说,同样长度的内存能够表示的最大值

signed中的第一位为正负数的表示0/1,而unsigned类型不需要,所以

16位的 signed short int 的取值范围是:-32768~32767,最⼤是32767;

⽽unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。增大了一倍

在limits.h中定义

五、C语言的书写风格

1.遵循规则

①一个说明或一个语句占用一行;(千万不要把所有的语句挤在一起)

②用{}括起来的结构,通常是程序的一个层次;在使用时,尽量让花括号各占一行;上下对齐更好;eg:

这里用到了if语句,我先用白话文来跟大家讲解一下;

先定义了一个变量 i,初始化值为1;

if(如果)i=1,我就输出下面两个printf里的字符串;

这里的举例只是为了让大家知道规范性;花括号上下对齐的好处大家慢慢可以感受到

③缩进格式

非常明显,有缩进会很好的帮助大家阅读代码,避免很多错误,因为没有缩进可能导致的错误很多,以后可能时不时的拿出来唠一唠

编译器通常在按下回车(enter)时自动缩进;若想自己调整,可以按tab键 

这是书上的一个例子,我把它改的易于理解;这段代码是为了计算出 a和b的和;

两段代码对比,以见得风格好的重要性。

附录

1.ASCII(美国信息交换标准代码)表格

有些表格中有十六进制等的换算可以自个上网搜搜。

2.byte:字节 bit:比特

1Byte = 8 bit

1KB = 1024Byte

1MB = 1024 KB

1GB = 1024MB

1TB = 1024GB

六.总结

本次内容主要在字符、ASCII码以及数据类型上;这都是我们后面会反复用的东西。

那么,我们知道C语言由很多的语句组成,拿下一篇我们就着重讲讲语句,还有很多的前置知识点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值