目录
1.流程图
2.变量与类型
3.格式化输入输出
4.判断
5.循环
6.数组
7.函数
8.后面的指针与结构体(主要有点多)留在下一篇文章再写。
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' ,'xff'类似的,字符在c语言中以ASCII来存储),char 类型的只能用单引号,单引号也只能用于一个字符,多个以上的用双引号----要用数组来存。
例:char a='A'; char a[]="String"。
浮点型的(存小数的):double-----8个字节;float-----4个字节。它两个用%lf,%f,别写成了%d。
补,字节数可以用sizeof()函数来计算(这个不管''),strlen()是用来计算长度的(原理就是依次计数直到''停止,在数组中计算数组长度可以用这两个
例:char a[]; 1.sizeof(a)/sizeof(a[0])-1(减一是去掉计算的),2.strlen(a);这两个要引头文件
变量
类型 变量名=常量;(赋值)。
变量又有全局变量与局部变量之分
#includeint num1=1; int main() { int num2=2; return 0; }
这之中num1为全局变量,num2为局部变量,
全局变量:定义于所有函数之外,作用于多个函数体。
局部变量:定义于函数体内,只在这个函数里生效,出则失效。
补:1.在函数体里局部优于全局。
2.static作用下会有不一样的效果,作用于局部变量会让(函数里的)变量的值出函数后不被失效,作用于全局变量会使从这个文件到另一个文件的引用失效(用extend 来引用)。
***无语的是:c语言中的变量要定义于(函数里的)最开头,否则要出错。
3.格式化输入输出c的预处理:在对源程序进行编译前,先对源程序中编译预处理命令进行处理。例:#开头的行,#include
#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,等--------为转义字符 %lf(中的l),%10c(中的10),%-7c(中的-7)------为修饰符(修饰格式的符号)
注:1.修饰符中的‘ - ‘让数据向左对齐(同时也是空余空间向右对齐。
2。对于%7.2f我们要分开看,首先7是整个位数(不够的则再后补0),.2则是保留多少位。
3.转义字符
a---响铃 b--退格 f--换页 n--换行 r--回车 t--水平制表(tab) v--垂直制表(让v后的下降一行) \-- *--* "--" ?--? --空字符(字符串结束的标志) 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("hehen"); } //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()函数(头文件
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"//字符数组会在最后添加‘’,计算大小可不要忘记
二维数组:像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(错误的),需要一个一个的将元素赋值
4.冒泡排序:冒泡;选择排序:选择。
7.函数函数的定义:一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能。子程序由函数来完成。一个C程序可由一个主函数(main())和若干个其他函数(自己写的)构成。
写法(自己写的):
返回类型(若不返回就用void) 函数名( 类型 变量名,······,类型 变量名)//每个变量用逗号隔开 { 语句; return xx;//如果有返回类型一定要返回 }
补:1.我们还可以去引用函数,像sizeof(),strlen()等,推荐一个网站:http://www.cplusplus.com
2.定义的函数若在主函数后要将其引用于前就像
#includeint 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[])//这两种写法等价8.后面的指针与结构体(主要有点多)留在下一篇文章再写。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)