目录
1.流程图
写一个程序,首先要了解它是如何进行的
要素:
2.变量与类型
变量,常量,函数的名字:标识符,由下划线,数字,字母组成。
例:ab5c 正确; __a1bc 正确; ¥¥abc 错误。
先讲类型,正如我们所知的int, char, double等都是类型,那先看看它们需要的空间大小
变量属于什么类型,计算机开辟就多大的空间储存。
整形的:int -----4个字节;short-----2个字节;long-----4或8个字节(取决于编译器,通常为4个字节);long long-----8个字节(别想了没有long long long的)。
字符的:char----1个字节(通常考它能存哪些‘ a' ,'\0xff'类似的,字符在c语言中以ASCII来存储),char 类型的只能用单引号,单引号也只能用于一个字符,多个以上的用双引号----要用数组来存。
例:char a='A'; char a[]="String"。
浮点型的(存小数的):double-----8个字节;float-----4个字节。它两个用%lf,%f,别写成了%d。
补,字节数可以用sizeof()函数来计算(这个不管'\0'),strlen()是用来计算长度的(原理就是依次计数直到'\0'停止,在数组中计算数组长度可以用这两个
例:char a[]; 1.sizeof(a)/sizeof(a[0])-1(减一是去掉计算的\0),2.strlen(a);这两个要引头文件<string.h>。
变量
类型 变量名=常量;(赋值)。
变量又有全局变量与局部变量之分
#include<stdio.h>
int num1=1;
int main()
{
int num2=2;
return 0;
}
这之中num1为全局变量,num2为局部变量,
全局变量:定义于所有函数之外,作用于多个函数体。
局部变量:定义于函数体内,只在这个函数里生效,出则失效。
补:1.在函数体里局部优于全局。
2.static作用下会有不一样的效果,作用于局部变量会让(函数里的)变量的值出函数后不被失效,作用于全局变量会使从这个文件到另一个文件的引用失效(用extend 来引用)。
***无语的是:c语言中的变量要定义于(函数里的)最开头,否则要出错。
3.格式化输入输出
c的预处理:在对源程序进行编译前,先对源程序中编译预处理命令进行处理。例:#开头的行,#include<stdio.h>,#define;#include(文件包括),#define(宏替换);注预处理不会帮你计算结果,只是符号的替换,就像
#define muplite(x,y) x*y;//要用来定义常量#define 标识符 常量;
int main()
{
int x;
x=muplite(3+2,3-1);//这个程序中3+2*3-1这样来算,如果要实现原本的目的就这样写(x)*(y)
}
#include<文件名>和#include“ 文件名”的区别:< >里面的是系统指定的;“ "里面是你自己搞的。
输入输出:输入就是你用键盘的其他东西将数据输入,输出(打印)就是计算机将结果展现于电脑屏幕。
输入常用的函数:scanf(在有些编译器上用scanf_s),getchar(),gets()(输出字符串)
注,scanf()用的时候输入数据时,怎么写的就怎么输,例如scanf(“%d%d”,&a,&b)输入时每个数据间要空格,&(取地址符)不要忘记(除了输出整个数组,数组名本身就是地址)。getchar()会接收空格。
输出常用的函数:printf();putchar();puts().
相关的字符于操作:我们熟悉的%d,%f等为格式符,不光这个,还有普通字符,转义字符,修饰符
%d,%s,%f,%e等------格式符
printf("china")-----中的china为普通字符
\n,\t,\r,\0等--------为转义字符
%lf(中的l),%10c(中的10),%-7c(中的-7)------为修饰符(修饰格式的符号)
注:1.修饰符中的‘ - ‘让数据向左对齐(同时也是空余空间向右对齐。
2。对于%7.2f我们要分开看,首先7是整个位数(不够的则再后补0),.2则是保留多少位。
3.转义字符
\a---响铃 \b--退格 \f--换页 \n--换行 \r--回车
\t--水平制表(tab) \v--垂直制表(让\v后的下降一行)
\\--\ \*--* \"--" \?--? \0--空字符(字符串结束的标志)
\ddd---一个字符(1到3位八进制数ASCII码值代表的字符)
\xdd--一个字符(1到2位十六进制数ASCII码值代表的字符)
在printf()函数中无法分辨如\, * ," ,? 等,要将这些打印出来则要加\ 在它们前。
4.判断
我们经常会遇到一些题要用到条件的判断,先从关系运算符开始。
1.
>,<,>=,<=的优先级大于==,!=
2.逻辑值中0为假,其他的数为真,逻辑运算符:
&&, ||, !
与 或 非
优先级(运行时哪个先起效):!--->&&---->||
注:1.&&是会运行到不符条件那儿,例x=2,y=2,z=0(++x>1)&&(y++<1)&&(z++<1),如果(z++<1)为假,而&&运算符会把前两个给计算出来。x=3,y=3,z=0.
3.判断语句(两种写法)
1.
if(判断条件) if(判断条件)
语句1; 语句1;
else else if(判断语句)
语句2; 语句2;
·····
else//就近原则,与最近的if结合。
语句n;
if()语句可以嵌套if()
{
if()
语句;
}
补:还有一个三目操作符:表达式1 ? 表达式2:表达式3
执行:先求解表达式1,为真(非零),求表达式2为假(为0),求表达式3,例(a>b)?a:b;若a>b为真,则结果为a,反之,为b.
2.swtich()语句
switch (表达式) 表达式=常量表达式n 执行语句m
{
case 常量表达式1 :
语句1;
break;
case 常量表达式2 :
语句2;
break; ┇
case 常量表达式n :
语句m;
break;//找到结果,break是跳出来(用不用break;看要求)
·
·
·
default : //没结果时才轮到它
语句m+1;
}
5.循环
循环有while(),do while(),for()循环
while( 可以进行的条件(循环条件)),通常需要++符号来保证进行(否则死循环,光标一直动)
while(i<5)//这里是先判断在执行语句。
{
语句;
i++;
}
do while(),和while()差不多但
do
{
语句;
i++;
}while(i<5);//这里是先执行语句后判断。while()后的;不要忘记
for((初始值;条件;调整值)
for(i=0;i<=10;i++)//初始值和调整值可以多个用,隔开
{
printf("hehe\n");
}
//for(;;)循环的初始化,判断值与调整值都可以省去;判断值省去则恒为真(死循环)
(这时break就有用了)
补:break与continue在循环中用法有差异。continue则是跳过本次循环, break是从当前循环体系出去,若是双循环例
1.for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
break;//break则是跳出有j这个循环
}
//来到这个循环(break)
}
2.for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(i==5)
{
语句1;
continue;//当i等于5并执行这条语句时,就跳过此次循环(j要循环10次,只是跳过这一次),语句2就不会执行
语句2;
}
}
}
6.数组
1.数组:具有相同数据类型的元素的集合,是一组有序数据的集合,这个集合用一个数组名来表示。
2.格式:类型说明符 数组名[常量表达式]。
扩:1.数组有静态内存分配和动态内存分配,静态就是我们常用的 int array[10]([]里就是我们提前分配的大小,动态这要用malloc()函数(头文件<malloc。h>),int* array=(int*)malloc(sizeof(int)*8)等价于int array[8];这个数组空间是全局的,要用free()来释放内存
2.字符串其实就是字符数组。
3.一维,二维数组
一维数组:就像int arr[];char arr[10],在c语言中int 类型的数组只有一个个用循环输出,而字符类的可以用%s来输出。写法:
int arr[3]={1,2,3};
char arr[3]={'a','b','c'};
char arr[3]={"abc"}
char arr[3]="abc"//字符数组会在最后添加‘\0’,计算大小可不要忘记
二维数组:像int array[行][列];二维数组行可以省略,列不可以
int arr[2][2]={{1,2},{3,4}};
char arr[2][2]={"ad","cb"};//每一行的元素可以不写满;
注:1.数组初始化可以直接赋0;int arr[10]={0};
2.数组本身就是地址的集合(连续的),数组名就可以看成这一系列地址的首个元素的地址(在sizeof()中为一个数组)。(通常以16进制来打印A=10,B=11,C=12,D=13,E=14,F=15)
3.数组不可直接赋值给另一数组,arr=brr(错误的),需要一个一个的将元素赋值
7.函数
函数的定义:一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能。子程序由函数来完成。一个C程序可由一个主函数(main())和若干个其他函数(自己写的)构成。
写法(自己写的):
返回类型(若不返回就用void) 函数名( 类型 变量名,······,类型 变量名)//每个变量用逗号隔开
{
语句;
return xx;//如果有返回类型一定要返回
}
补:1.我们还可以去引用函数,像sizeof(),strlen()等,推荐一个网站:http://www.cplusplus.com
2.定义的函数若在主函数后要将其引用于前就像
#include<stdio.h>
int add(int x,int y);//可以写在这
int main()
{
int add(int x,int y);//也可以写在这(要在引用的语句前)
int i,a=0,b=0;
语句;
i=add(a,b)//a,b把值传过去,然后返回的值用i来接收(没有返回值就不用接收,把i=去掉就行了)
//引用语句
}
int add(int x,int y)
{
return x+y;
}
3.递归(天才用的)
举个例子:
void add(int n)
{
if(n=20)//设置条件使得递归不变成死循环
{
return 1;
}
else
{
return add(n-1)+1;//可以理解为循环的逆过程,它是从最里面开始返回值一直向外走。
}
4.数组传参给函数,只是将首地址传过去可以这么写
void add(int *array)
void add(int array[])//这两种写法等价