C语言是结构化程序设计,包含顺序结构、选择结构、循环结构,他们是各种复杂程序的基本结构单元。
1.文件
可执行文件(指令和数据构成):.exe .bat .com
不可执行文件(数据构成)
在C语言中------- .c /.cpp(源文件,文本) .h(头文件,文本) .i(预编译文件,文本) .s(汇编文件,文本) .o / .opp(二进制目标文件) .exe(可执行文件)
*.c源文件----预编译----*.h预编译文件----编译----*.obj目标文件----链接----*.exe可执行文件
第一个C语言程序
//hello.c 注释----// /* 不允许嵌套 */
#include <stdio.h>           预编译处理       
 int main()
 {
     printf("hello FatFaceRain \n");        语句
     return  0;
 }
2.进制及进制转换
103(10) 1100111B 147(8) 67H
贪心算法:128 64 32 16 8 4 2 1
0 1 1 0 0 1 1 1
2.1C语言结构特点
一个源程序不论由多少个文件组成,都有且只有一个main函数。
3.数据类型
3.1数据类型的大小
sizeof关键字 计算变量或数据类型所占的字节个数
字节(byte)是计算机信息技术用于计量存储容量的一种计量单位,一个字节由8位二进制构成。
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
//char;int;short;long int;long long;//-2 0 1 整型
//float;double;long double;        //12.32   浮点型
//bool;0 false,1 ture;                       布尔 
//void;                                      空类型,无类型
//sizeof
    printf("char size:       %d\n", sizeof(char));                  //1
    printf("short size:      %d\n", sizeof(short));                 //2
    printf("int size:        %d\n", sizeof(int));                       //4
    printf("long int size:   %d\n", sizeof(long int));             //4
    printf("long long size:  %d\n", sizeof(long long));        //8
    printf("float size:      %d\n", sizeof(float));                    //4
    printf("double size:     %d\n", sizeof(double));             //8
    printf("long double size:%d\n", sizeof(long double));  //8
    printf("bool size:       %d\n", sizeof(bool));                   //1 
3.2 2^10=1KB 2^20=1MB 2^30=1GB 2^40=1TB 2^50=1PB
4.标识符,变量,常量
4.1 标识符命名规则----(1)由下划线“_”,英文字母(A-Z , a-z)和数字(0-9)构成,首字符必须是英文字母,或下划线“_”,首字符不能是数字。 (int a char _b)
4.2变量,定义、声明
int age = 0;//初始化 (有类型----定义)
age=19;//赋值(无类型----不称作定义)
4.3变量的作用域
全局变量(::---c++中全局变量标识符)、局部变量、程序块中的变量
(向上就近原则)
4.4例:验证海伦公式(计算三角形面积)
#include <stdio.h>
#include <math.h>
int main()
{
	//a,b,c p, s;
	//sacnf a b c
	//p=;
	//s=;
	//printf s;
	float a=0.0,b=0.0,c=0.0,p=0.0,s=0.0;
	scanf("%f %f %f",&a,&b,&c);
	p=(a+b+c)/2;
	s=sqrt(p*(p-a)*(p-b)*(p-c));
	printf("三角形面积:%f\n",s);
	return  0;
} 
4.4常量
1.字面常量(不可改变/不可写)
int a=2;
float  b=1.25f;
double c=12.6; 
2.用#define定义的宏常量(无类型、不开辟空间、不能加 ;)----特点:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
#define MAX 10 
3.用const关键字修饰的变量,称为常变量(不可改,要初始化)。
int const x=10;
const float y=12.6; 
4.枚举类型enum、枚举常量
#include <stdio.h>
enum week {mon=1,tue=2,wed=3,thu=4,fri=5,sat=6,sun=7};//枚举元素,只能是整型
int main()
{
	enum week wx;//1 2 3 4 5 6 7
	wx=mon;
	wx=sun;
	printf("%d\n",wx);
	return 0;
} 
5.字符
5.1ASCII值
‘ ’---32 ‘0’---58 ‘A’--- ‘a’---97
‘ ’---字符定界 " "---字符串定界
\---转义字符
6.顺序语句、选择语句、循环语句
6.1 if语句---单分支、双分支
6.2循环语句
while---先判断后执行
#include <stdio.h>
int main()
{
	int n=10;
	while(n>=0)
	{
		printf("%d\n",n);
		n--;
	}
	return 0;
} 
do...while---先执行后判断
#include <stdio.h>
int main()
{
	int n=10;
	do
	{
		printf("%d\n",n);
		n--;
	}while(n>=0);
	return 0;
} 
for循环语句
7.数组
数组是包含给定数据类型的一组数据,即一组相同数据类型元素的集合,内存中连续分配。
数组语法如下:<类型> 数组名 [元素数量];访问数组从下标0开始。
#include <stdio.h>
int main()
{
	int a[10] = {12,13,15,46,89,2,1,3,6,5 };
	for (int i =0; i <10; ++i)
	{
		printf("%d \n", a[i]);
	}
	return 0;
} 
8.函数
#include <stdio.h>
#include <math.h>
float TriangleArea(float a,float b,float c)
{
	float p,s=-1;
	if((a+b)>=c&&(b+c)>=a&&(a+c)>=c)
	{
	p=(a+b+c)/2;
	s=sqrt(p*(p-a)*(p-b)*(p-c));
	}
	return s;
}
int main()
{
	float x,y,z,s;
	scanf("%f %f %f",&x,&y,&z);
	s=TriangleArea(x,y,z);
	printf("三角形面积:%f\n",s);
	return 0;
} 
9.可见性(作用域)和生存期
可见性,此阶段针对编译和链接过程
进程---cpu+内存(代码区.text、数据区(存放数据,三部分---数据区.data、堆区.heap、栈区.stack(存在栈帧)))
生存期也叫生命期,此阶段针对的是程序的执行过程。

(1)局部变量生存期:函数被调用,分配存储空间,到函数执行结束,存储空间释放。存储在.stack区。
(2)全局变量的生存期:从程序开始执行,到执行后结束。存储在.data区。
(3)动态生命期
10.运算符
操作数、运算符、左值(可读可写)和右值(可读)
10.1 ?:条件运算符(与if语句等同用法)
#include <stdio.h>
int main()
{
	int a=0,b=0;
	int max=0;
	scanf("%d %d",&a,&b);
	max=a>b?a:b;//与if语句等同用法
	/*
	if(a>b)
	{
    	max=a;
	}
	else
    {
        max=b;
    }
	*/
	printf("max=%d\n",max);
	return 0;
} 
10.2前置++,后置++(回写能力,单目运算)
#include <stdio.h>
int main()
{
	int a=10,b=10,x=0;
	x=++a;
	printf("x=%da=%d\n",x,a);
	x=b++;
	printf("x=%di=%d\n",x,b);
	return 0;
} 
10.3取余%
(1)判断是否能够整出某个数
(2)判别奇偶数,判别质数(或素数)---一个数只能被1和自身整除
(3)计算范围,形成循环
#include <stdio.h>
int main()
{
	//abcdefghijklmnopqrstuvwxyz
	//bcdefghijklmnopqrstuvwxyza
	//.
	//.
	//.
	//zabcdefghijklmnopqrstuvwxy
	char a[]={"abcdefghijklmnopqrstuvwxyz"};
	int n=26,k;
	for(int i=0;i<n;i++)	 
	{
		k=i;
		for(int j=0;j<n;j++)
		{
			printf("%c",a[k]);
			k=(k+1)%n;
		}
		printf("\n");
	}
	printf("\n");
	return 0;
} 
(4)求最大公约数:求最大公约数最常见的方法是欧几里得算法(又称辗转相除法),其计算原理依赖于定理:gcd(a,b)=(b,a mod(取模) b)
#include <stdio.h>
int main()
{
	int a=0,b=0;
	scanf("%d %d",&a,&b);
	int c=a>b?a:b;
	int i=c+1;
	while(i--)
		{
			if(a%i==0&&b%i==0)
			{
				printf("最大公约数:%d\n",i);
				break;
			}
		}
	return 0;
}
 
//辗转相除法
#include <stdio.h>
int main()
{
	int a=0,b=0,tmp=0;
	scanf("%d %d",&a,&b);
	while(b!=0)
	{
		tmp=a%b;
		a=b;
		b=tmp;
	}
	printf("%d\n",a);
	return 0;
}









