目录
定义函数的语法: 函数返回类型 函数名 (形参列表) {函数体}
一.C语言编译链接过程
二.数据类型
1.基本数据类型:
a.整型: char(1字节) short(2字节) int(4字节) long(4字节) longlong(8字节)
b.浮点型: float(4字节) double(8字节)
c.字符型: char(1字节)
d.布尔类型:bool: false(0) true(1)
2^10==> 1KB 2^20==> 1MB 2^30==> 1GB 2^40==>1TB 2^50==> 1PB
三.标识符、变量、常量
1.在C语言中,为变量、函数和结构体等起的名称为标识符。
2.标识符命名规则:
a.下划线“_”,英文字母(A-Z,a-z)和数字(0-9)构成,首字母不能为数字。
b.命名最好见名知意。
c.不能把关键字作为标识符。
d.严格区分大小写 。
关键字不能作为标识符使用:(32个关键字)
3.变量:是以某标识符为名字,其数值可读、可写。
变量的作用域:每一个变量名都有一个作用域问题,即变量名在什么范围有效。
全局变量:在函数外定义的变量。
局部变量:在函数内定义的变量。
程序块中的变量:在函数内部,在复合语句中定义变量。
:: 作用域解析符(c++)
示例:
#include<stdio.h>
int get_sum = 100; //全局变量
int main() {
float ft = 12.23f; //局部变量
int a = 10;
int get_sum = 0; //全局变量和局部变量
a = get_sum;
return 0;
}
4.常量:
用const关键字修饰的变量,称为常变量。
枚举常量
字面常量
用#define 定义的宏常量:可以用#define 定义一个标识符来表示一个常量。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
字符常量和字符串常量:
a.单引号是字符的定界符 ‘a'
b.双引号是字符串的定界符 "a" ———— 97 \0
重要的ASCII值: A ——> 65 a——> 97 0——> 48 空格——> 32
四.输出和输入函数的使用
printf函数 称为格式输出函数,一般格式为: printf("格式控制字符串",输出列表);
格式控制串可由格式字符串和非格式字符串两种组成。
a.格式字符串是以%开头的字符串,%后跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。
如: "%d" 表示按十进制整型输出 "%o" 表示按八进制整型输出 "%x"表示按十六进制整形输出
"%ld" 表示按十进制长整型输出 "%c"表示按字符型输出 "%f"表示按浮点数输出
b.非格式字符串在输出时原样打印,在显示中起提示作用。
scanf函数 称为格式输入函数, 即按用户指定的格式从键盘上把数据输入到指定变量之中。
一般格式为:scanf("格式控制字符串",地址列表); 地址是由地址运算符”&“后跟变量名组成的。
#include<stdio.h>
#include<math.h>
#define __CRT_SECURE_NO_WARNINGS 1
int main()
{
float a = 0, b = 0, c = 0, p = 0, s = 0;
scanf_s("%f %f %f", &a, &b, &c);
p = (a + b + c) / 2;
s = sqrt(p * (p - a) * (p - b) * (p - c));
printf("s = %f \n", s);
return 0;
}
五.转义字符及其含义
六.顺序、选择、循环语句
顺序语句:按照语句出现的先后顺序依次执行。
选择语句:根据条件判断是否执行相关语句。
int main()
{
if(条件语句)
{
语句1;
}
else
{
语句2;
}
return 0;
}
int main()
{
int a = 0, b = 0, c = 0;
int max = 0;
scanf_s("%d %d %d", &a, &b, &c);
if (a > b && b > c)
{
printf("max=%d \n", a);
}
else if(b > a && a > c)
{
printf("max=%d \n", b);
}
else if(c > a && a > b)
{
printf("max=%d \n", c);
}
return 0;
}
循环语句:当条件成立时,重复执行某些语句。
while(条件语句){ }
do{ } while(条件语句);
for (表达式1; 表达式2; 表达式3)
switch分支语句:
int main()
{
char grade = '\0';
printf("input grade(Aa Bb Cc Dd Ee Ff) \n");
grade = getchar();
switch (grade)
{
case 'A':
case 'a':
printf("A(90--100) \n");
break;
case 'B':
case 'b':
printf("B(80--89) \n");
break;
case 'C':
case'c':
printf("C(70--79) \n");
break;
case 'D':
case'd':
printf("D(60--69) \n");
break;
case 'E':
case'e':
printf("E(<60) \n");
break;
default:
printf("不及格 \n");
break;
}
return 0;
}
七.数组
数组是包含给定数据类型的一组数据,即一组相同数据类型元素的集合。
其语法如下: <类型> 数组名 [ <元素数量> ] ;访问数组从下标0开始。
int* ar[5] = { &a,&b,&c,&d }; //数组指针
int (*pa)[5] //指针变量存储数组的地址
八.函数
在结构化程序设计中,函数是将任务进行模块划分的基本单位。通过函数,可以把一个复杂的任务分解成若干个易于解决的小任务。充分体现结构化程序设计由粗到细,逐步细化的思想。一个大的程序一般应分为若干程序模块,每个模块实行一个特定的功能,这些模块称为子程序,在C语言中子程序用函数实现
定义函数的语法: 函数返回类型 函数名 (形参列表) {函数体}
常见函数的库函数:
C语言不允许函数的嵌套定义,即在一个函数中定义另一个函数。
1.形式参数(形参):只能等到函数被调用时接收传递进来的数据,函数执行完毕形参自动释放。
2.实际参数(实参):调用函数时给出的参数包含了实实在在的数据。
九.可见性(作用域)和生存期
作用域(可见性)指标识符能够被使用的范围;只有在作用域内标识符才可以被使用。
此阶段针对编译和链接过程。
1.函数中定义的标识符,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作函数域。
2.文件作用域也称全局作用域。定义在所有的函数之外的标识符,具有文件作用域,作用域为从定义处到整个源文件结束。全局变量和函数都具有文件作用域。
生存期也叫生命期,此阶段针对的是程序的执行过程。
生命期指标识符从程序开始运行时被创建,具有存储空间,到程序运行结束时消亡,释放存储空间的时间段。
1.局部变量的生存期:函数被调用,分配存储空间,到函数执行结束,存储空间释放。存储.stack区(栈区)。
2.全局变量的生存期:从程序运行前开始,到执行后结束,存储在.data区(数据区)。
3.动态生命期:标识符由特定的函数调用或运算来创建和释放,如调用malloc()为变量分配存储空间,变量的生命期开始,而调用free()释放空间或程序结束时,变量生命期结束。具有动态生命期的变量存储在.heap区(堆区)。
十.运算符
操作数:是程序操纵的数据实体,该数据可以是数值、逻辑值或其他类型。该操作数可以是常量也可以为变量。
运算符:是可以对数据进行相应操作的符号。如对数据求和操作,用加法运算符‘+’,求积操作使用乘法运算符‘*’等。
根据运算符可操作的操作数的个数,可把运算符分为一元运算符(单目运算符)、二元运算符(双目运算符)和多元运算符(C语言只有一个三目运算符(?:))。
左值和右值:按字面意思通俗的说。以赋值符号=为界,=左边的就是左值,=右边的就是右值。
前置++与后置++:
十一.指针
内存(在程序中称为主存 DRAM)是计算机中最重要的部件之一,它是外存(硬盘)与CPU沟通的桥梁。
计算机中所有的程序的运行都是在内存中进行,为了有效使用内存,就把内存以8位二进制(bit)划分为存储单元(1字节)。为了有效的访问到内存的每个单元,就给内存存储单元进行了编号,这些编号被称为内存存储单元的地址。
int main()
{
int a =10 , b =20, c =0;
c = a * b ; //乘法
int *p; //声明
p = &a;
int *p = &a;
*p; //取值
}
十二.结构体
程序开发人员可以使用结构体来封装一些属性,设计出新的类型,在C语言中称为结构体类型。
结构体是一种数据类型。
指针的两种访问形式:
(*sp).s_id sp->s_id
十三.标准文件与缓冲区
C语言提供的标准文件:
通常把显示器称为标准输出文件,printf就是向这个文件输出数据;putchar。
通常把键盘称为标准输入文件,scanf就是从这个文件读取数据;getchar。
缓冲区:
指在程序执行时,所提供的一块存储空间(在内存中),可用来暂时存放做准备执行的数据。它的设置是为了提高存取效率,因为内存的存取速度比磁盘驱动快得多。
十四.关键字详解
sizeof:
计算类型大小或变量的大小,也就是字节个数。unsigned int(无符号整型);
typedef:
在C语言允许为一个数据类型起一个新的别名。
extern:
用在全局变量或函数的声明前,用来说明“此变量/函数实在别处定义的,要在此处引用”。
定义和声明重要区别:定义创建了对象并给这个对象一块内存,而声明的时候是没有分配内存空间
static:
C语言中static关键字修饰变量和函数。(使可见性只在本文件内有效)
const:
无论是全局常变量还是局部常变量都必须初始化赋值。