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;
}