C语言基础:菜鸟如何养成程序猿(一)

C语言基础:数据类型(一)

C语言是计算机中很多现代编程语言的开山鼻祖,它创造了信息时代和科技时代的文明。计算机语言由机器语言慢慢演变为高级语言。1958年7月3日,ALGOL语言(Algorithmic Language)创立。C语言的原型就是ALGOL 60语言。C语言的演变过程:ALGOL 60语言(简称A语言)—>CPL语言—>BCPL语言(简称B语言)—>C语言
计算机语言发展



1. 第一个C语言程序

程序=数据结构+算法

#include "stdafx.h" // 是预编译处理器把stdafx.h文件中的内容加载到程序中来
#include <stdio.h> // 在预处理时将stdio.h文件包含进当前文件,比如printf()函数的声明就在stdio.h文件中

/* argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数是用户从命令行输入的参数 */
int main(int argc, char *argv[])
{
    printf("Hello World!\n"); // 输入函数,行末跨行
    printf("\n");             // 占一行,跨行
    return 0;                 // return 0表示程序正确退出,非0就是程序异常退出
}

2. ASCII码

ASCII码分为:

  • 控制字符: 编号范围是0-311270x00-0x1F0x7F),共33个字符。
Bin(二进制)Dec(十进制)Hex(十六进制)缩写/符号说明
0000 000000x00NUL (null)空字符
0000 000110x01SOH (start of headline)标题开始
0000 001020x02STX (start of text)正文开始
0000 001130x03ETX (end of text)正文结束
0000 010040x04EOT (end of transmission)传输结束
0000 010150x05ENQ (enquiry)请求
0000 011060x06ACK (acknowledge)收到通知
0000 011170x07BEL (bell)响铃
0000 100080x08BS (backspace)退格
0000 100190x09HT (horizontal tab)水平制表符
0000 1010100x0ALF (NL line feed, new line)换行键
0000 1011110x0BVT (vertical tab)垂直制表符
0000 1100120x0CFF (NP form feed, new page)换页键
0000 1101130x0DCR (carriage return)回车键
0000 1110140x0ESO (shift out)不用切换
0000 1111150x0FSI (shift in)启用切换
0001 0000160x10DLE (data link escape)数据链路转义
0001 0001170x11DC1 (device control 1)设备控制1
0001 0010180x12DC2 (device control 2)设备控制2
0001 0011190x13DC3 (device control 3)设备控制3
0001 0100200x14DC4 (device control 4)设备控制4
0001 0101210x15NAK (negative acknowledge)拒绝接收
0001 0110220x16SYN (synchronous idle)同步空闲
0001 0111230x17ETB (end of trans. block)结束传输块
0001 1000240x18CAN (cancel)取消
0001 1001250x19EM (end of medium)媒介结束
0001 1010260x1ASUB (substitute) 代替
0001 1011270x1BESC (escape)换码(溢出)
0001 1100280x1CFS (file separator)文件分隔符
0001 1101290x1DGS (group separator)分组符
0001 1110300x1ERS (record separator)记录分隔符
0001 1111310x1FUS (unit separator)单元分隔符
0111 11111270x7FDEL (delete)删除
  • 可显示字符:编号范围是32-1260x20-0x7E),共95个字符。
    • 1个空格字符(' '):ASCII值为32;
    • 10个数字(0-9):ASCII值从48到57;
    • 52个大小字母(A-Za-z):ASCII值从65到90,97到122;
    • 32个标点符号(!"#$%&'()*+,-./:;<=>?@[\]^_{|}~`):ASCII值从33到47,58到64,91到96,123到126。
Bin(二进制)Dec(十进制)Hex(十六进制)符号说明
0010 0000320x20(space)空格
0010 0001330x21!感叹号
0010 0010340x22"双引号
0010 0011350x23#井号
0010 0100360x24$美元符
0010 0101370x25%百分号
0010 0110380x26&和号
0010 0111390x27'单引号
0010 1000400x28(开括号(左括号)
0010 1001410x29)闭括号(右括号)
0010 1010420x2A*星号
0010 1011430x2B+加号
0010 1100440x2C,逗号
0010 1101450x2D-减号/破折号
0010 1110460x2E.句点或小数点
0010 1111470x2F/斜杠
0011 0000480x300字符0
0011 0001490x311字符1
0011 0010500x322字符2
0011 0011510x333字符3
0011 0100520x344字符4
0011 0101530x355字符5
0011 0110540x366字符6
0011 0111550x377字符7
0011 1000560x388字符8
0011 1001570x399字符9
0011 1010580x3A:冒号
0011 1011590x3B;分号
0011 1100600x3C<小于
0011 1101610x3D=等号
0011 1110620x3E>大于
0011 1111630x3F?问号
0100 0000640x40@电子邮件符号
0100 0001650x41A大写字母A
0100 0010660x42B大写字母B
0100 0011670x43C大写字母C
0100 0100680x44D大写字母D
0100 0101690x45E大写字母E
0100 0110700x46F大写字母F
0100 0111710x47G大写字母G
0100 1000720x48H大写字母H
0100 1001730x49I大写字母I
0100 1010740x4AJ大写字母J
0100 1011750x4BK大写字母K
0100 1100760x4CL大写字母L
0100 1101770x4DM大写字母M
0100 1110780x4EN大写字母N
0100 1111790x4FO大写字母O
0101 0000800x50P大写字母P
0101 0001810x51Q大写字母Q
0101 0010820x52R大写字母R
0101 0011830x53S大写字母S
0101 0100840x54T大写字母T
0101 0101850x55U大写字母U
0101 0110860x56V大写字母V
0101 0111870x57W大写字母W
0101 1000880x58X大写字母X
0101 1001890x59Y大写字母Y
0101 1010900x5AZ大写字母Z
0101 1011910x5B[开方括号(左中括号)
0101 1100920x5C\反斜杠
0101 1101930x5D]闭方括号(右中括号)
0101 1110940x5E^脱字符
0101 1111950x5F_下划线
0110 0000960x60`反单引号
0110 0001970x61a小写字母a
0110 0010980x62b小写字母b
0110 0011990x63c小写字母c
0110 01001000x64d小写字母d
0110 01011010x65e小写字母e
0110 01101020x66f小写字母f
0110 01111030x67g小写字母g
0110 10001040x68h小写字母h
0110 10011050x69i小写字母i
0110 10101060x6Aj小写字母j
0110 10111070x6Bk小写字母k
0110 11001080x6Cl小写字母l
0110 11011090x6Dm小写字母m
0110 11101100x6En小写字母n
0110 11111110x6Fo小写字母o
0111 00001120x70p小写字母p
0111 00011130x71q小写字母q
0111 00101140x72r小写字母r
0111 00111150x73s小写字母s
0111 01001160x74t小写字母t
0111 01011170x75u小写字母u
0111 01101180x76v小写字母v
0111 01111190x77w小写字母w
0111 10001200x78x小写字母x
0111 10011210x79y小写字母y
0111 10101220x7Az小写字母z
0111 10111230x7B{开花括号(左大括号)
0111 11001240x7C|垂直线
0111 11011250x7D}闭花括号(右大括号)
0111 11101260x7E~波浪号

3. 数据类型

  • 整型intshortlongunsigned intunsigned shortunsigned longint输出用%dlong输出用%ld%-5d表示向左对齐,共占5位。
  • 字符型char,占1个字节,输出用%c表示。
  • 实型float,占4个字节,单精度,输出用%f表示,%8.2f表示为共占8位数,小数点后保留2位数。
    double,占8个字节,双精度,输出用%lf表示。
    long double,占16个字节,长双精度实型。
    整型变量存放

:在16位计算机中,整型int占2个字节,但在32位计算机中int则要占4个字节,在64位计算机中int仍然也占4个字节。


4. 常量和变量

  • 常量:常量是在程序运行期间其值不能被改变的量。分为字面常量和符号常量。
  • 变量:变量是在程序运行期间其值可以改变的量。每个变量应该有一个名字,对应一定大小的内存空间,必须先定义(起名字)后使用。

:变量的名字必须满足C语言关于标识符的命名规则。

4.1 标识符的命名规则

  • 由字母,数字和下划线组成,开头不能是数字;
  • 不能与保留字同名(保留字是在C语言里面有特殊意义的单词,如int);
  • 起名时注意字母大小写。

4.2 字面常量

4.2.1 整型
  • 十进制:直接写出,例如123
  • 八进制:以0开头,例如0123
  • 十六进制:以0x开头,例如0x123

: 进制后面可加上L表示长整型。进制可以互相转换,其他进制转十进制用进制展开多项式,十进制转其他进制用除基取余法

4.2.2 实型
  • 十进制小数形式123.45
  • 指数形式1.23e2,从科学计数法可表示为1.23乘以102次方,e之前必须有数字,e之后必须是整数;
  • 规格化的指数形式:数字部分(即e之前的数据)被限制为小数点前只有一位非0整数。

:实型数据是不精确的。

4.2.3 字符型

用单引号括起来的一个字符(ASCII字符):

  • 只能一个字符;
  • 单引号不能中文状态;
  • 转义字符'\',转义后面的字符,一般用来转义控制字符,如'\n'表示跨行(New Line),'\t'表示制表符(Tab),'\r'表示回车(Carriage Return),'\''表示单引号(Single Quote),'\"'表示双引号(Double Quote),'\\'表示反斜杠(Backslash),反斜杠后跟3位数'\141'(这里表示为八进制的141,换算为十进制97、十六进制61,也等于'a''\x61'的值)。

  1. '\ddd':表示一个八进制数对应的字符,反斜杠后面跟着一个或多个(最多三个)0-7之间的数字。
  2. '\xhh':表示一个十六进制数对应的字符,其中hh是两个十六进制数字(0-9A-Fa-f)。
  3. '\0':表示一个空字符(Null character),其ASCII值为0,它通常用于表示字符串的结束。
4.2.4 字符串常量

用双引号括起来的一串字符(ASCII字符):

  • 每个字符串都有一个隐含的结束标记'\0'
  • 单引号的a只有一个字符,双引号的a严格的来说有a'\0'2个字符。

试题训练

"xyz\\\t\1818\xabc"中有几个字符?

xyz\\\t\1818\xabc,一共有11个字符(不包括结束字符)。

4.3 符号常量

符号常量是在C语言中,可以用一个标识符来表示一个常量,这个标识符称之为符号常量。其特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。

5. 运算符

单目,双目,三目运算:一个目代表一个运算对象(数字)。

5.1 单目运算符

  • 强制转换运算符(type),优先级2,强制转换表达式为这类类型。
  • 自增自减运算符++--,优先级2,但运算先后不取决于优先级。
#include "stdafx.h"
#include <stdio.h>

int main(int argc, char* argv[])
{
	int x;
	float y=2.5;
	x=(int)y;
	printf("%d,%f\n",x,y);//强制运算符的应用
	int m,n;
	int z=3;
	int	l=3;
	m=z++*2;
	printf("%d,%d\n",z,m);//z++,先运算后自增
	n=++l*2;
	printf("%d,%d\n",l,n);//++l,先自增再运算
	return 0;
}

运行结果:

2,2.50000
4,6
4,8

:所有单目运算符优先级都是2,结合性自右向左。C语言中强制类型转换不会改变原变量的原有数据类型。

5.2 双目运算符

  • 乘法类运算符*/%, 优先级3,结合性自左向右;
  • 加法类运算符+-,优先级4,结合性自左向右,优先级越高,就先进行运算;
  • 赋值运算符=,优先级14,结合性自右向左,把右边的值计算出来,然后赋值给左边;
  • 复合赋值运算符+=-=/=%=,优先级14,结合性自右向左;
  • 逗号运算符,,优先级15,结合性自左向右,分隔符,相当于几个表达式的合并。

代码示例1:

#include "stdafx.h"
#include <stdio.h>

int main(int argc, char* argv[])
{
	int a,b,c;
	a=b=c=3;
	a+=a*=a;//9+9
	b+=b*b;//9+3
	c+=c-=c/=c*=c;//0+0
	printf("%d,%d,%d\n",a,b,c);
	return 0;
}

运行结果:

18,12,0

代码示例2:

#include "stdafx.h"
#include <stdio.h>

int main(int argc, char* argv[])
{
	int a=1,b,c;
	a++,b=a++,c=++b;//a++->a=2,b=a++->b=2+1,c=++b->c=2+1=3
	printf("%d,%d,%d\n",a,b,c);
	return 0;
}

运行结果:

3,3,3

  1. 10%3=1,-10%3=-1,-10%(-3)=-1,3%10=3,小数模大数,余就是小数(自己),模的符号取决于被除数的符号。
  2. x=(a,a+b),逗号表达式的值=逗号右边的表达式的值,x=a+b
  3. 如果运算符两边都是整型,那结果也是整型;如果两边有一边是带小数点,结果也是带小数点。
  4. C语言中不是所有的逗号都是逗号运算符,如int a,b;中的逗号只是用于分隔不同的变量声明。

5.3 三目运算符

三目运算符,又称条件运算符,优先级13,结合性是自右向左。其基本语法格式如下:

条件 ? 表达式1 : 表达式2

代码示例如下:

#include "stdafx.h"
#include <stdio.h>

int main(int argc, char* argv[])
{
	int a = 2;
	int c = 3;
	int b = (a > c) ? a : c;
	printf("%d\n",b);
	return 0;
}

运行结果:

3

:它是唯一有3个操作数的运算符,有时又称为三元运算符。


——>楼主初次来到博客,这是我的第一篇博文,以上内容是关于C语言数据类型的基础知识,希望对初学者或再次学习者有所帮助,基础打扎实,不怕风吹雨打! 如果以上内容有错误或者内容不全,望大家提出!我也会继续写好每一篇博文!

待续未完
——文优

欢迎观看和提问!!!

下一篇:C语言基础:程序结构(二)

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文优

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值