文章目录
基础语法
程序就是指令序列
程序设计的四个层次
计算机算法(核心):数值算法、非数值算法
程序设计方法学:缩短程序设计周期、延长软件寿命、降低开发成本的关键
结构化程序设计方法(自顶向下,逐步求精的程序设计方法、单入口单出口-由顺序选择循环构成)
程序1=数据结构+算法+程序设计语言+语言环境
面向对象程序设计方法(数据抽象和信息隐藏技术 将数据的静态属性和和对他的操作封装在一起)
程序2=程序1+程序1+程序1+程序1………
程序设计语言:(基本成分:数据成分、运算成分、控制成分、传输成分)
程序设计环境与工具
C程序的基本组成结构是函数(由C语句构成)
语句以分号结束 以#开头的和注释(可在任何位置)不是c语句
注释://单行 /多行注释/
标识符:字母、下划线、数字(不可用作开头)
程序从main()函数开始运行到结束
标题文件不区分大小写
编译型的程序设计语言:编辑->.c的源程序->编译(编译器对源程序的句法和语法检查)->.obj二进制目标程序->连接(.obj和库函数连接到一起)->.exe可执行的目标程序->运行
C语言不提供输入输出函数
八进制以0开头 十六进制以0x开头 仅支持输入带负号 输出不识别负号
整数或实数后面加u、U表示无符号,l、L表示长整型,也可以加ul、UL
字符串常量以””定界(以\0结尾) 字符常量以‘’定界
表达式中类型自动转换(低精度->高精度):char->int float->double 能表示的最大值越大、长度越长精度越高
临时强制类型转换:(类型)常量、变量、(表达式)
%[0 -]m.nd—m宽度在左端补空格或无效,n个有效数字位在左端补0或无效
%[0 -]m.nf或%[0 -]m.ne—四舍五入保留小数点后n位后输出m宽度左端补空格或无效 n默认为6
%[0 -]m.ns—以m宽度输出前n个字符在左端补空格或无效 不够n个无效
i++优先级很低 即使括号了也不行 在表达式赋值之后
非0数据表示逻辑真 0表示逻辑假 逻辑关系有时不全被计算
数学函数形参和返回值都是双精度,三角函数为弧度制
If选择结构
if(判断表达式){
语句块;
}
else if(判断表达式){
语句块;
}
else{
语句块;
}
switch选择结构
switch(整型){
case 整型:语句1;[break;]
case 整型:语句2;[break;]
[default: 语句n;]
}
for循环
for([赋值语句];[判断语句];[i++]){
循环体;
}
while循环
while(判断语句){
循环体;
}
do循环(先循环,后判断)
do{
循环体;
}while(判断语句);
while((ch=getchar())!=’a’) 键入的字符被放在缓冲区按下回车再一个一个读取
数组的维度没有限制(从0开始),但必须是同一类型(字符串每行空出一个位置 char a[2][4]={{'1','2'.'3'},{"123"}};
char b[5]="1234";
printf("%s,%s,%s",a[0],a[1],b);
extern型和其他非main()函数中的auto型数组不能进行初始化
数组中没有赋初值的位置为0
数组只可隐含相对第一维的尺寸 (一维字符数组隐含尺寸后用字符常量赋初值,不会自动添加\0)
变量不能放字符串
输出某位以后的字符串用 首地址加数字、定位标号后加&
0=\0=NULL
变量所占用的存储单元首字节的地址作为变量的地址
%p、%x、%X都可以用作输出地址,但前者固定16位,不足则补0
取地址&只能和变量、数组结合达到地址升维
访问地址[]、*达到地址降维 []将地址偏移后访问
定义指针变量: cahr *pc=&c:*是说明符 给pc赋c的地址值
指针加减n=指针的数据类型所占字节数*n+指向的地址 ,指针之间相加减=指针之间相差的元素个数(不是字节数)
比较两个同类型的指针或指针和地址量之间的存储位置的先后关系
按二维数组的存储形式定义指针 *p==&a[0][0]==a[0]
行指针 int a[3][4] , (*p)[列数4]=a; 行指针p+1=&p[1] 则移动一行的字节
指针数组 int a[3][4] , *p[行数3]={a[0],a[1],a[2]}; 存放行首地址的数组 与行指针访问元素的形式一样
已知得:*和[]在定义变量时都是说明符,所以有名字符串的定义是把字符串的==地址赋给数组首地址
==,则无名字符串也可以将字符串常量的地址赋值给定义的指针变量,再由指针来引导操作,不同的是有名字符串存放的是字符串,无名字符串存的是首地址。占用空间的问题
无名字符串具有只读性,不能对无名字符串进行修改
定义函数: [存储类型] [数据类型] 函数名 (数据类型 形参,数据类型 形参){
函数体;
}
类型字节取值范围char=[signed] char1-128 ~ 127
unsigned char10 ~ 255
short [int]2-32768 ~ 32767
unsigned short [int]20 ~ 65535
int = [signed] int = long [int] = [signed] long [int]4-2147483648 ~ 2147483647
unsigned [int] = unsigned long [int]40 ~ 4294967295
float4-3.4e38 ~ 3.4e38
[long] double8-1.798e308 ~ 1.798e308
long long [int]8-9223372036854775808 ~ 9223372036854775807
格式转换字符
整数转换字符加l或h表示long或short
%c字符%d或%i十进制整数,大写表示读入长整型
%u无符号十进制整数
%o八进制,大写表示读入长整型
%x或%X十六进制,大写表示读入长整型
%f或%lf浮点数,大写表示读入双精度
%e或E指数格式输出浮点数
%g选取宽度小的方式输出浮点数
%s字符串,scanf_s时遇空格、制表符、换行符时结束
%%%
%p指针值
%n接收%n之前所读入的字符个数,并存入指定的整型变量的地址中
转义字符
\a响铃(BEL)\b退格(BS) ,Backspace
\f换页(FF),将当前位置移到下页开头
\n换行(LF)
\r回车(CR) ,将当前位置移到本行开头
\t水平制表(HT)
\v垂直制表(VT)
\\反斜线 \
\’单引号
\"双引号
\0空字符(NULL)
\ddd八进制数所代表的任意字符
\xhh十六进制所代表的任意字符
常用标题文件
alloc.h:动态分配函数
conio.h:屏幕处理函数
ctype.h:字符处理函数
math.h:数学函数
stdio.h:标准输入输出及文件操作函数
stdlib.h:标准使用函数
string.h:字符串处理函数
函数
printf(“输出字符串”,x,y); 用\n\与下一行连接
scanf_s(“输入格式和引号内格式一样”,&x,&y); 返回值等于输入字符个数 类似于%*c(d)读入但不赋值 引号内连续时可用空格、制表符、回车分割 两个此函数连在一起,后一个会接收前一个字符的回车
purchar(数字或字符常量或变量); 单字符输出
变量=getchar(); 单字符输入 需按enter才能接收 连续接收时吞回车
变量=getche();和变量=getch(); 不需要摁enter即可接收输入字符 getch()无回显
变量=pow(x,y); 乘方
gets(字符数组名); 接收用户输入的字符串,存入数组中,只有遇到回车才认为输入结束
puts(字符数组名); 输出字符串将\0自动变成\n输出
strlen(字符串); 计算不含\0的字符串长度(见\0就结束)
strcpy(目标字符串,源字符串); 将字符逐个替换达到复制字符串的目的
strcmp(字符串1,字符串2); 比较字符串ASC大小 相等返回0 1>2返回1 1<2返回-1
strcat(前字符串,后字符串); 前后拼接字符串 前字符串要是数组
关键字
流程控制
if: 条件语句
else:条件语句否定分支(与 if 连用)
switch:多分支结构(执行相等的case后,执行其后所有的case及default中的语句,所以常与break连用)
case:switch分支
default:多分支结构的否则
break:跳出当前花括号
continue:结束当前循环,开始下一轮循环
do:循环语句的循环体
for:循环语句 循环条件可以用逗号表达式 顺序1-2-循环体-3-2-循环体 for(;;)是死循环
while:循环语句的循环条件
goto:无条件跳转语句
return:子程序返回语句(可以带参数,也看不带参数)
存储属性
auto:声明自动变量 一般不使用 省略时默认为此
extern:声明变量是在其他文件中声明(也可以看做是引用变量)
static:声明静态变量
register:声明积存器变量
基本数据类型
_bool:声明布尔变量
_complex:复数型变量
_imaginary:复数型变量 纯虚数
char:声明字符型变量或函数 必须用单引号
int: 声明整型变量或函数 补码(符号位1为负 其余取反加一为真)
float:声明浮点型变量或函数 6位有效数字 8+24位
double:声明双精度变量或函数 15位有效数字 11+53位
void:声明无值或无参数函数,声明无指定类型指针(指向内存的某个地址)
short:声明短整型变量或函数(仅限于int)
long:声明长整型变量或函数(仅限于int、double)
signed:声明有符号类型变量或函数(仅限于char、int)
unsigned:声明无符号类型变量或函数(仅限于char、int)
构造类型(+数组+文件)
struct:声明结构体变量或函数
union:声明共用体(联合)数据类型
指针类型
const:声明只读变量,且在编译时赋值:const 数据类型 标识符=常数
restrict:限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式
volatile:说明变量在程序执行中可被隐含地改变
其他
inline:将函数展开,吧函数的代码复制到每一个调用处
sizeof:计算数据类型长度
typedef:用以给数据类型取别名(当然还有其他作用)
enum:声明枚举类型
预处理命令
#include使编译程序将另一源文件嵌入带有#include的源文件#include编译命令行中的目录中搜索->标准目录#include”stdio.h”先检索当前工作目录->编译命令行中的目录中搜索->标准目录#define在编译前,定义宏:#define 宏名 串
#ifdef如果宏已经定义,则编译下面代码
#ifndef如果宏没有定义,则编译下面代码
#undef取消已定义的宏
#if如果给定条件为真,则编译下面代码
#else
#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码
#endif结束一个#if……#else条件编译块
#error强迫编译程序停止编译
#pragma
#line
运算符
优先级运算符功能元结合性0( )括号
1[ ]访问地址,整型或表达式2自左至右
1->指向结构或联合成员2自左至右
1.取结构或联合成员2自左至右
2!逻辑非1自右至左
2~按位取反1自右至左
2++加一(只对变量,不能连用)1自右至左
2--减一(只对变量,不能连用)1自右至左
2强制类型转换类型关键字1自右至左
2*访问地址或指针1自右至左
2&取地址1自右至左
2sizeof()测试数据长度1自右至左
3*乘2自左至右
3/除2自左至右
3%取余(只对整数,符号跟随前面)2自左至右
4+ -加 减2自左至右
5<< >>左移位 右移位2自左至右
6< > <= >=关系运算2自左至右
7== !=等于 不等于2自左至右
8&按位与2自左至右
9^按位异或2自左至右
10|按位或2自左至右
11&&逻辑与2自左至右
12||逻辑或2自左至右
13?:条件运算 式1? 式2: 式3 取二三中较高的类型返回2自右至左
14= (+ - * / % >> << & ^ |)=赋值运算2自右至左
15,逗号运算2自左至右
标签:语句,变量,int,基础,C语言,自左至,字符串,指针
来源: https://blog.csdn.net/maweizz/article/details/113896866