C学习笔记
C语言学习笔记(7)基础篇--for循环跳出,嵌套,goto语句
C语⾔学习笔记(7)基础篇--for循环跳出,嵌套,goto语句forbreak:跳出结束当前的循环 i=1时进⼊循环,判断条件成⽴,进⼊if语句,if条件为假略过所控制语句,进⼊输出语句,输出1,。
i⾃增为2后判断条件,成⽴进⼊if语句,if为假略过所控制语句,进⼊输出语句,输出2.i⾃增为3后判断条件,成⽴进⼊if语句,if条件为假略过所控制语句,进⼊输出语句,输出3.i⾃增后为4判断条件,为真进⼊if语句,此时if语句为真,进⼊if所控制的语句,执⾏break语句跳出循环,输出总结果为123 continue:结束这⼀次循环,继续下⼀次循环,continue控制循环体内的它下⾯的语句,continue运⾏时,下⾯的语句不执⾏。
这两个例⼦⼀样,这⾥只是把break换成了continue,前⾯不过多叙述,当i⾃增后为4时判断循环条件,成⽴进⼊if语句,为真执⾏continue语句,这⾥continue控制它下⾯的所有语句,不做输出。
i⾃增为5进⼊判断循环条件... 结果为1235678910 记不住的话就亲⾃测试⼀下 执⾏完⼀次循环后让它随着打印⼀次here,看看是不是continue控制下⾯剩余所有语句 可以看到没有输出4和here语句。
eg1:输出100以内的奇数(包括100)嵌套 for嵌套:⼀个for循环体内⼜包含另⼀个完整的for循环结构,称为for循环的嵌套。
内嵌的循环中还可以嵌套循环,这样就形成了多层循环eg2:打印3x3的*符号理解⼀个考试难度题 ⾸先程序⾛到第⼀个for循环,i=0时进⼊x++语句,执⾏后x为1。
进⼊第⼆个for循环语句,j=0时进⼊if语句,0%2=0,为假,注意,这⾥为假则不执⾏continue语句,别弄混,进⼊if下⾯的x++,x为2。
此时程序还是回到第⼆个for循环开始的地⽅,因为第⼆个for循环的j++后对于循环条件(j<3)来说是成⽴的,所以下⼀次执⾏的是if语句,发现此时j等于1的时候1%2等于1,为真,执⾏continue语句,下⾯的x++不执⾏,j再⾃增为2,循环条件成⽴,进⼊if语句,2%2=0,为假,不执⾏continue语句,往下执⾏x++,x为3。
碳族元素学习笔记无机化学
碳族元素预习笔记一、碳族元素通性1、原子结构性质⑴相似性:•外层电子构型:ns²np²气态氢化物的通式:RH4最高价氧化物对应的水化物通式为H2RO3或R(OH)4⑵递变性•+2价化合物主要氧化态稳定性:由上至下逐渐增强+4价化合物主要氧化态稳定性:由上至下逐渐减弱但铅(Ⅱ)化合物稳定性高于铅(Ⅳ),铅(Ⅳ)本身为强氧化剂。
•熔沸点降低(锡和铅反常),单质密度逐渐增大•金属性增强,非金属性减弱,(由于半径不断增大,原子核对外层电子引力变小所致)•最高价氧化物对应水化物的酸性减弱(最高价氧化物对应的酸举个例子解释:碳酸H2CO3。
(HO)2-CO连接一个氧原子,氧原子强吸电子作用导致碳原子电子云密度下降,对应的碳原子同样要从羟基上边多取电子,那么最终结果就是羟基氧原子再把和氢原子公用的电子对拉向自己。
那么此时氢原子是缺电子的,就会很容易电离。
氢原子越缺电子越容易电离;那么对应的中心原子越吸电子,氢原子就越缺电子。
所以从上到下,元素原子电负性减弱,吸电子能力减弱,自然氢离子电离能力减弱,酸性减弱。
)•氢化物的稳定性减弱•第一电离能:由碳至铅逐渐减小(同主族由上至下半径增大,更易失去最外层电子)特殊:锡<铅•熔沸点:由碳至铅逐渐减小(碳、硅为原子晶体,锗、锡、铅为金属晶体)二、元素的成键特性⒈碳:①共价键(sp:CO sp²:乙烯 sp³:甲烷):碳碳,碳氢,碳氧键键能大,稳定,因此碳氢氧可形成多种有机化合物。
②以碳酸盐的形式存在于自然界中2.硅:①硅氧四面体形式存在(石英,硅酸盐矿)②硅硅,硅氧,硅氢键较弱,可形成有机化合物但数量较少3.锡铅:①离子键(+2氧化态,SnO、PbO +4氧化态,SnCl4)②共价键(+4氧化态,SnO、PbO2)二、碳及其化合物1.单质(三种同素异形体)①金刚石:结构:sp³杂化,原子晶体,五个碳原子构成正四面体性质:硬度最大,熔沸点很高(由于其为空间网状结构),无色透明,不导电,化学惰性,但800°C以上与空气反应成CO2②石墨:结构:sp²杂化,层状原子晶体,每层上的碳原子各提供一个含成单电子的p轨道形成大π键层与层之间靠分子见作用力结合在一起。
【原创】C语言高级用法-学习笔记
#是将其后的变量直接转换为字符串 void WriteLog(arg) {
printf("%s=%d",#arg,arg) }
2.##的作用
##的作用是连接两个变量
如 #define combine_converse_str(x,y)
x##y
int Err; int Num; printf("%s",combine_converse_str(Err,Num)); 结果为: ErrNum
int aaa(char
x[0]),因为定义一个数组也不能用 char x[0]来定义,编译器在检查参数的声明合法后, 如果发现参数是数组, 就会强制转换成指针, 所以 int aaa(char x[1]) 和 int aaa(char x[100])
的结果是一样的。
B. 数组名用在 sizeof上:结果返回的是整个数组所占空间的大小,而不是一个指针的长度
以及
int * const pi;
1)前两种情况一样的,没有区别。 1) 如果 const 修饰在 *pi 前(前 2 种情况 )则不能改的是 *pi(即不能 类似这样: *pi=50 ;赋值) 而不是指 pi.
这样:pi=&i ;赋值)。 2) 如果 const 是直接写在 pi 前(后一种情况) 则 pi 不能改(即不能类似
2.地址传递 void Exchg2(int *px, int *py) {
int tmp = *px; *px = *py;
*py = tmp; printf("*px = %d, *py = %d.\n", *px, *py); } main() { int a = 4; int b = 6; Exchg2(&a, &b); printf("a = %d, b = %d.\n", a, b); return(0); }
(完整)C语言 谭浩强学习笔记
C语言谭浩强版笔记第一章程序设计和C语言1、计算机能直接识别和接受的二进制代码称为机器指令,机器指令的集合就是该计算机的机器语言。
2、语言的发展历史:①机器语言②符号语言③高级语言3、高级语言的发展:①非结构化语言②结构化语言③面向对象的语言4、C语言的祖先是BCPL语言5、在字符串中的//和/*都不作为注释的开始。
而是作为字符串的一部分。
【但是在vc++6.0中//显示编译错误】6、不要以为在max函数中求出最大值z后就会自动地作为函数值返回调用处,必须用return语句指定将哪个值作为函数值。
也不要不加分析地在所有函数后面都写上return 07、一个程序由一个或多个源程序文件组成8、全局声明:即在函数之外进行的数据声明,在函数外面声明的变量称为全局变量。
例如把int a,b,sum;放到main函数的前面9、函数是C程序的主要组成部分,编写C程序的工作主要就是编写一个个函数10、一个C语言程序是由一个或多个函数组成的,其中必须有且只有一个main函数11、一个小程序只包含一个源程序文件,在一个源程序文件中包含若干个函数(其中一个为main函数),若程序规模太大,可以使一个程序包含若干个源程序文件,每个源程序文件又包含若干个函数【一个源程序文件就是一个程序模块,一个程序分成若干个程序模块】12、在进行编译时是以源程序文件为对象进行的【分别对各源程序文件进行编译得到相应的目标程序,然后再将这些目标程序连接成为一个统一的二进制可执行程序】13、C语言的这种特点使得容易实现程序的模块化14、一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。
如果函数没有参数,可以写void或空括号【如int main(void)或int main()】15、void dump(){}它是一个空函数,但是是合法的16、程序总是从mian函数开始执行的,不管位置在哪儿17、程序中对计算机的操作是由函数中的C语句完成的18、二进制目标程序在visual C++中的后缀为.obj19、可执行程序在visual C++中的后缀为.exe20、一个源程序经过编译后得到的目标程序要经过连接阶段与函数库进行连接才能生成可执行文件21、程序设计的任务:①问题分析②设计算法③编写程序④对源程序进行编辑、编译和连接⑤运行程序,分析结果⑥编写程序文档第二章算法1、对数据的描述:在程序中要指定用到哪些数据类型以及这些数据类型和数据的组织形式,这就是数据结构。
C语言学习入门笔记之数组
数组笔记在程序设计中,把具有相同类型的若干变量按有序的形式组织起来。
这些按序排列的同类数据元素的集合称为数组。
在C语言中,数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
1.一维数组的定义和引用1.一维数组的定义方式在C语言中使用数组必须先进行定义。
一维数组的定义方式为:类型说明符数组名[常量表达式];其中:类型说明符是任一种基本数据类型或构造数据类型。
数组名是用户定义的数组标识符。
方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
例如:int a[10]; 说明整型数组a,有10 个元素。
float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch[20]; 说明字符数组ch有20 个元素。
对于数组类型说明应注意以下几点:1)数组的类型实际上是指数组元素的取值类型。
对于同一个数组,其所有元素的数据类型都是相同的。
2)数组名的书写规则应遵循标识符命名规则。
3)数组名不能与其它变量名相同。
例如:main(){int a; float a[10];……}是错误的。
4)方括号中常量表达式表示数组元素的个数,如a[5]表示数组a 有5 个元素。
但是其下标从0 开始计算。
因此5 个元素分别为a[0],a[1],a[2],a[3],a[4]。
5)常量表达式中可以包括常量和符号常量,不能用变量来表示元素的个数,也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
例如:#define FD 5 main(){int a[3+2],b[7+FD];……}是合法的。
但是下述说明方式是错误的。
main(){int n=5; int a[n];……}6)允许在同一个类型说明中,说明多个数组和多个变量。
c 语言学习笔记01
1. c 语言1.1.1.helloworld文件名:test_pointer.c文件内容:#include <stdio.h>#include <malloc.h>int main(){printf("hello world\n\n");return 0;}编译加运行:[root@localhost c_study]# gcc test_pointer.c ;./a.outhello world1.1.2.获取键盘输入文件名:getKeyboardInptStr.c文件内容:#include <stdio.h>#include <malloc.h> int main(){char *a= malloc(sizeof(char *));char *b= malloc(sizeof(char *));scanf("%s",a);scanf("%s",b);printf("%s \t%s\n",a,b);free(a);free(b);return 0;}编译:gcc getKeyboardInptStr.c -o hello.exe运行[root@localhost tcp_ip]# ./hello.exe abcdddabc ddd[root@localhost tcp_ip]#1.1.2.1.从键盘输入构造数组文件名keyboard_input.c文件内容:#include <stdio.h>#include <malloc.h>int main(){char * strs[4];char *a;int i;for(i=0;i<4;i++){a= malloc(sizeof(char *));scanf("%s",a);strs[i]=a;//printf("%s \t\n",a);//free(a);}printf("=====================================\n");for(i=0;i<4;i++){printf("%s \t\n",strs[i]);}return 0;}1.1.3.读取文件读取文件有两个操作:打开流(fopen)和关闭流(fclose)#include <stdio.h>#include <stdlib.h>#include <malloc.h>int main(int ac,char**av){int exit_status=EXIT_SUCCESS;FILE *input;while( *++av!=NULL){input=fopen(*av,"r");if(input==NULL){perror(*av);exit_status=EXIT_FAILURE;continue;}if(fclose(input)!=0){perror("fclose");exit(EXIT_FAILURE);}}return exit_status;}1.1.3.1.打开文件流1.1.3.1.1.ungetc 用法文件名:ungetc_test.c文件内容:#include<stdio.h>#include<ctype.h>int main(){int value;int ch;value=0;while((ch=getchar())!=EOF && isdigit(ch)){value=value*10;value+=ch-'0';}//ungetc(ch,stdin);printf("%d\n",value);ch=getchar();printf("last char is %c\n",ch);return value;}若注释掉红色部分:[root@localhost read_file]# gcc ungetc_test.c;echo 234abc|./a.out 234last char is b否则:[root@localhost read_file]# gcc ungetc_test.c;echo 234abc|./a.out 234last char is a1.1.3.2.关闭流1.1.3.3.读取文本文件文件名称:read_file03.c文件内容:#include <stdio.h>#include <stdlib.h>#include <malloc.h>int main(){int value;int ch;char *input_file="ab.txt";FILE *input;input=fopen(input_file,"r");while((ch=fgetc(input))!=EOF){printf("%c",ch);}return 0;}1.2.指针1.2.1.取地址和取值取地址:&取值:*1.2.1.1.取地址int age=23;int *age_adrr=&age;1.2.1.2.取值参阅取地址。
C语言学习笔记,悉心整理
语句 else if (表达式) 语句 else if (表达式) 语句 else 语句 这种 if 语句序列是编写多路判定最常用的方法。其中的各表 达式将被依次求值,一旦某个表达式结 果为真,则执行与之相关的语句,并终止整个语句序 列的执行。同样,其中各语句既可以是单条语 句,也可以是用花括号括住的复合语句。
数据输出
输出字符: putchar()输出一个字符 例如:putchar(‘a’); putchar(‘\n’) 包含在头文件 stdio.h 中
格式化输出及输出格式控制符
printf()函数:(特例,不需包含 stdio.h 头文件) printf(“格式控制字符串”,输出表列); 其中格式控制字符串是用双引号引起来的字符串,用于指定输出格式,包括格 式说明和普通字符两种信息构成。格式说明是以%开头后跟一个格式字符组成 普通字符按原样输出。 输出表列是需要输出的变量或者表达式。 注意: 格式符 %d %o %u %x %c 用于处理整形和字符型数据 %s 用于处理字符串 %f %e %g 用于处理实型数据 允许没有输出表列,即只输出普通字符,但是格式符一定要正确 要输出%要使用%% %与格式符之间可以指定输出项的宽度和小数点后数据的位数,格式为: %m[.n]格式字符。其中域宽为 0 开头的数时,则输出前导 0.
从右至左
* / % 从左至右 + • 从左至右 << >> 从左至右 < <= > >= 从左至右 == != 从左至右 & 从左至右 ^ 从左至右 | 从左至右 && 从左至右 || 从左至右 ?: 从左至右 = += •= *= /= %= &= ^= |= <<= >>= 从右至左 , 从右至左 一元运算符+、 、&与*匕相应的二元运算符+、 、&与*的优先级高。
C语言学习笔记(004)-数组名和数组首地址(转)
C语⾔学习笔记(004)-数组名和数组⾸地址(转)⼀个变量有地址,⼀个数组包含若⼲元素,每个数组元素都在内存中占⽤存储单元,它们都有相应的地址。
指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某⼀元素的地址放到⼀个指针变量中)。
所谓数组的指针是指数组的起始地址,数组元素的指针数组元素的地址。
这种指针变量的定义与以前介绍的指向变量的指针变量相同。
应当注意,如果数组为int型,则指针变量亦应指向int型。
规定数组名代表数组的⾸地址,也就是第⼀个元素的地址。
因此,下⾯两个语句等价:p=&a[0];p=a;注意数组a不代表整个数组,上述"p=a;"的作⽤是"把a数组的⾸地址赋给指针变量p",⽽不是"把数组a各元素的值赋给p"。
在定义指针变量时可以赋给初值:int*p=&a[0];它等效于:int*p;p=&a[0];当然定义时也可以写成int*p=a;它的作⽤是将a的⾸地址(即a[0]的地址)赋给指针变量p(⽽不是*p)。
假设p已定义为指针变量,并已给它赋了⼀个地址,使它指向某⼀个数组元素。
如果有以下赋值语句: *p=1;表⽰对P当前所指向的数组元素赋以⼀个值(值为1)。
C规定对p+1指向数组的下⼀个元素(⽽不是将p值简单地加1)。
如果p的这初值为&a[0],则: (1)p+i和a+i就是a[i]的地址,或者说,它们指向a数组的第i个元素。
(2)*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。
(3)指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。
根据以上叙述,引⽤⼀个数组元素,可以⽤: (1)下标法,如a[i]形式; (2)指针法,如*(a+i)或*(p+i)。
要输出各元素的值有三种⽅法:○1下标法○2通过数组名计算数组元素地址,找出元素的值。
○3⽤指针变量指向数组元素。
翁凯c语言笔记
翁凯c语言笔记
翁凯是一位热爱编程的学生,他在学习C语言的过程中积累了很多宝贵的经验和知识。
下面是他的一些C语言学习笔记,希望对大家有所帮助。
1. 基础语法:C语言是一种结构化的编程语言,具有丰富的数据类型和运算符。
翁凯通过学习基础语法,掌握了变量的声明和赋值、控制语句、循环语句等基本概念。
2. 函数与模块化编程:C语言通过函数的调用来实现模块化编程,提高了代码的可读性和可维护性。
翁凯学会了如何定义和调用函数,并且学习了递归函数的使用。
3. 数组与指针:在C语言中,数组和指针是非常重要的概念。
翁凯弄清楚了数组和指针之间的关系,并学会了如何使用它们进行内存管理和数据操作。
4. 结构体与文件操作:C语言中的结构体可以用来存储不同类型的数据,翁凯学会了如何定义和使用结构体,并且掌握了文件的读写操作,可以将结构体数据保存到文件中。
5. 动态内存分配:C语言提供了动态内存分配的功能,翁凯学会了
使用malloc()和free()函数来进行内存管理,避免了内存泄漏和内存溢出的问题。
6. 编程技巧与调试:除了学习语法和基本概念,翁凯还注重培养编程技巧和调试能力。
他学会了使用调试工具和技巧,解决程序中的bug,并且善于利用注释、缩进和命名规范来提高代码的可读性。
翁凯通过不断学习和实践,逐渐掌握了C语言的基本知识和技巧。
他深知编程需要不断练习和积累,因此他坚持每天都进行编程练习,并且参与了一些开源项目,与其他开发者交流经验。
翁凯相信,只有不断学习和实践,才能成为一名优秀的C语言程序员。
C语言基础学习笔记
C语言基础学习笔记(第一版修改)丁炳亮1数据类型和表达式1.1计算机内数据存储方式理解与测试:什么是补码?我们得先知道模的概念。
模“模”是指一个计量系统的计数范围。
如时钟等。
计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。
例如:时钟的计量范围是0~11,模=12。
表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。
任何有模的计量器,均可化减法为加法运算。
例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨4小时,即:10-4=6;另一种是顺拨8小时:10+8=12+6=6在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。
对“模”而言,8和4互为补数。
实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。
共同的特点是两者相加等于模。
二进制中整数的补码求法是:正数的补码为原码,负数的补码是符号位不变其他位全部取反再整个数加1。
我们可以通过下面的代码看下负整数在计算机内部的表示。
void f(int n){unsigned int i;for(i=1,i<<=15;i;i>>=1){if(i&n)printf("1");elseprintf("0");}printf("\n");}main(){int a=-0xff;f(a);getch();}输出的结果是1111111100000001。
1.2变量与常量理解与测试:1)类型声明在计算机内部数据是以字节为单位存储的,但是我们需要的数据类型有很多种,每种数据类型所占字节和存储方式都不一样。
类型声明的作用就是告诉计算机以哪种“格式”去读写该数据数据。
类型说明符变量名1,变量名2......,变量名n;类型说明符有基本类型(字符型、整数型、单/双精度型)、高级类型(结构体型、共用体型、枚举类型)、指针型等,其中指针类型包括指向基本类型的指针类型、指向高级类型的指针型和指向函数的指针类型(指向函数指针声明格式在后面章节)。
C语言学习入门笔记之结构体与共用体
结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。
在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。
定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。
上面的结构体声明中Student就是结构体名(结构体标记)。
2.花括号内是该结构体所包括的子项,称为结构体的成员。
“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。
对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。
例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。
例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。
C驾照学习笔记
注意:上车考试操作一定要先记好安全带!靠路右边停车打右转向灯!一、倒桩移库操作要点:1.从右停车位(起点)倒入乙库1)检查车辆的位置,车轮是否正直,方向盘记号是否朝上(特别注意是要记得放手刹)。
2)踩下离合器刹车挂倒档,慢松离合在半离合状态下倒车,调整身体位置自然向左倾斜,并调整双手握方向盘的位置为右侧上下排放。
3)当前中杆(2号杆)进入右侧后三角窗花位置时,开始向右侧慢打方向,始终保持右侧后三角窗花和中杆之间位置不变,若窗花和中杆之间位置变大则加速向右侧打方向,杆消失则要向左回方向,直到方向向右侧打死,车身已经开始快接近进入乙库入口。
4)此时向左转身,眼盯左侧后视镜,目视左侧前杆(1号杆)通过,当看到后左侧4号杆出现,且车身与边线平行时停车,向左回方向2圈,慢松离合启动倒车,至肩线(与自身肩平齐)位置停车,注意将车身与边线保持平行。
(方向盘动作:向右逐渐打死→停车-→回2圈)2. 从乙库移到甲库(2进2退)注:1进1退,先将方向盘向右打死,慢回3圈,2进2退,全部都先将方向盘向右打2圈1)一进,先将方向盘向右打死,挂前进1档半离合前进,在引擎盖左侧经线对准前中杆后,向左侧慢回方向3圈,当车身前进至距中杆侧边线20CM处停车。
(方向盘动作:停车-→向右打死→左回3圈)2)一退,挂倒档,方向盘向右打到底,半离合后退,行车至车头左前灯对准左边杆时,慢速将方向盘向左回3圈,后退至肩与肩线位置平齐停车。
3)二进,挂前进1档,方向盘向右打2.2圈,前进至左侧前车灯对准前中杆(2#杆)时,方向盘向左回2.2圈,前进至前中号杆边线距离为20CM处停。
4)二退,挂倒档,方向盘向右打2圈,半离合后退,观察后视镜,退至左后窗角对准后中杆(用车内反光镜观察),方向盘向左打到底,倒至车身和甲乙库分界线平行停车。
3.从甲库前进到左停车点1)挂前进1档半离合前进,(注:前面方向已经向左打到底)当前左侧灯对准前左侧杆,停车,方向盘向右回2圈,对准前左侧杆与中杆(1,2号杆之间)之间通过。
c语言学习笔记
c语言学习笔记第一章基础一、函数是c语言的基本单位,一个程序有一个或多个函数组成,且必须包含main函数(有且只有一个)二、程序总是从main函数开始执行三、c语言的3种基本结构是顺序结构、选择结构、循环结构四、//表示单行注释五、/* */表示块注释第二章常量定义:其值不能被改变的量叫常量一、整形常量例如:100,十进制数100-16,十进制数-1607,八进制数7-036,八进制数-36,等价于十进制数-300x19,十六进制数19,等价于十进制数25-0x2f,十六进制数-2f,等价于十进制数-47二、实型常量例如:3.5,double型常量2e3,double型常量-2e-1,double型常量6. double型常量,等于6.0.3 double型常量,等于0.62.5f float型常量三、字符常量1、普通字符:用‘’单撇号括起来的一个字符,如‘a’,‘9’2、转义字符:以\开头的字符,如\n,换行\t,tab键\\,单斜杠\\61,61是八进制数,等于十进制数49,即字符‘1’\x62,62是十六进制数,等于十进制98,既字符‘b’四、字符串常量用“”双撇号括起来的若干字符例如:“abc”,“”,“a”五、符号常量用#define指令指定的常量例如:#define PI 3.1415827第三章变量一、必须先定义(声明),后使用二、必须是一个合法的标识符三、一个合法的标识符必须满足以下3个条件1、只由字母、数字、_(下划线)三种字符组成2、首字符不能是数字3、不能与c语言的保留字冲突,如void,int等都是保留字四、数据类型1、字符型:char 如‘a’,‘\101’,‘\x41’,‘\n’2、整型:short(短整型)如:2,3,-5int(整型)如:3,89,-7long(长整型)如3l,0L前面可以加修饰符signed(有符号的)或unsigned(五符号的)例如:signed int,有符号整形unsigned int,无符号整形3、实型:float:如3.4fdouble:如4.2,1e2五、不同类型间数据的混合运算1、+,-,*,\运算中,只要有一个为float或double,结果为double型2、int与float或double运算,int、float都转换为double3、char与int运算,char转换为int4、char与float或double运算,char转换为double六、常用ASCII码‘0’=30H=48 ,1到9依次+1类推‘a’=61H=97 ,b到z依次+1类推‘A’=41H=65 ,B到Z依次+1类推第四章运算符一、常用运算符1、算术:+,-,*,/,%2、关系:>,<,>=,<=,==,!=3、逻辑:!,&&,||4、赋值:=,+=,-=,*=,/=,%=5、逗号运算符:,说明:1、关系和逻辑运算的结果只有两个,要么为真,要么为假2、C语言中0表示假,非0表示真3、c语言中将真赋值给其他变量时,其值为1二、优先级1、算术>关系>逻辑>赋值>逗号2、!(非)优先于算术3、*,\,% 优先于+,-4、>,<,>=,<=, 优先于==,!=5、&& 优先于||6、同级别运算符一般都是自左向右结合例如:a*b/c*e,等价于((a*b)/c)*e7、赋值运算符是自右向左结合例如:a=b=c=1,等价于a=(b=(c=1))三、自增(++),自减(--)1、i++,++i独立使用时没有区别,都等价于i=i+12、i--,--i独立使用时没有区别,都等价于i=i-13、i++,++i在其他语句中使用时是有区别的,i++,先使用i,再i=i+1例如:y=x++;等价于y=x;x=x+1;++i,先i=i+1,再使用i例如:y=++x;等价于x=x+1;y=x;4、i--,--i的区别等同i++,++i5、特殊情况1:0 && i++语句中,i++永运不执行6、特殊情况2:0 && ++i语句中,++i运不执行7、特殊情况3:1|| i++语句中,i++永运不执行8、特殊情况4:1|| ++i句中,++i运不执行9、特殊情况5:a++,b++,a+b语句中,先执行a=a+1,再执行b=b+1,最后a+b四、赋值1、+=,-=,*=,/=等复合赋值语句的优先级等同于=2、a+=3+4等价于a+=(3+4)3、a=b=c=4;等价于b=c;a=b;五,逗号运算符1、运算方向是自左向右例如:a++,b++,a+b等价于a++;b++;a+b;2、逗号表达式的结果为最后一个表达式的值例如:执行x=(3,4,5,6);后x=6第五章语句一、表达式:通过各种运算符将常量或变量连起来的式子就是表达式二、表达式后加;分号,构成语句三、空语句,只有一个;分号的语句四、复合语句,{。
C语言学习笔记(4)基础篇--ifelse语句
C语⾔学习笔记(4)基础篇--ifelse语句if 格式:if (条件)语句;1. 条件可以是任何表达式,变量,常量2. 判断条件的真假,真则执⾏后⾯的⼀个分句,假不执⾏后⾯的⼀个分句3. 若想控制多⾏语句,⽤⼤括号括起来 流程图 如if条件为真执⾏b++,假则跳过控制下的⼀⾏分句。
输出结果a为0是因为在if条件⾥a被赋值0eg1: ⽐较两个数的⼤⼩,若a>b,则a、b互换,并且输出,否则a、b原始值输出,⽤单分⽀选择结构完成 //a=2,b=3让ab的值互换 看起来没有达到我们想要的效果。
程序表达的是顺序执⾏的动作,⽽不是关系,这⾥的a=b,b=a是依次执⾏的,结果使得a和b都得到b 原来的值 我们需要⼀个新的变量else else⼦句不能作为语句单独使⽤,它必须是if语句的⼀部分,与if配对使⽤ 格式:if(条件)语句1; else语句2; 流程图 判断条件的真假,为真执⾏语句1,为假执⾏else的语句2。
else也只控制后⾯的⼀个分句,若想控制多个分句,加上⼤括号。
若看不懂为什么等于6,那么看⼀下ab的值是什么 ⾃增⾃减本⾝具有赋值过程if else嵌套 流程图 嵌套的if 第⼀种: if(条件1) if(条件2) if(条件3) ... 第⼆种 if(条件1) if(条件2) ... else ... 第三种 if(条件1) if(条件2) else... else... 看⼀下⼆、三种 //先判断第⼀个if,为假则跳过整个判断,进⼊输出语句。
//还是上⾯那个例⼦,若你想让第⼀个if做判断之后结果为假执⾏else语句,那么把第⼀个if和else⽤缩进做对齐格式,看看这么写对不对 //出错了,没有得要想要的结果。
在C语⾔⾥,缩进格式不能暗⽰else的匹配。
C是有类型的语⾔,强调类型,对类型检查严格,不像python,js等不看重类型。
应该这样写 //⽤⼤括号括起来,else总是与其上⾯最近的未配对的if配对。
机动车驾驶证申考学习笔记C
机动车驾驶证申考学习笔记——C1科目一:倒桩:准备:踩离合刹车挂倒档一次入库1.向右后方观察逐渐松刹车离合(先松离合到联动点再松刹车),2.当1,6杆重合时方向右打到底,继续倒,3.当2号杆从后窗消失时方向回半圈(有时候2号杆不会消失,因为第一步倒过了,那直接往后倒即可入库),注:若2号杆始终在右后小窗口的角落处,可直接到入库;若2号杆始从右后小窗口消失出现在后挡风玻璃的右下角3-4cm处时,方向回半圈,当2号再出现时在右后小窗口的角落处方向再右打到底4.当2号杆再出现时方向再右打到底,5.然后看左边后视镜,当车身(不是轮胎的方向)与地上边线平行时回正方向,然后向后倒并根据车身与两边黄线距离微调,哪边宽即向哪边打90度,6.当5号杆出现在后挡风玻璃的右下角5cm时停车注:(1)若车身离1.5米线太远,应挂倒档,方向盘左打,到适当的位置后,方向盘右打,继续倒车,待车身正后,回方向,挂1档,前行直停止线。
(2)在倒库时若车身距离杆太近,应先向远的一打方向,等倒车镜距离杆1米左右时迅速回正方向。
(3)出库右行,当7米线将要消失前迅速将方向盘向右打死,当车的左前角指向7米线与停止线的夹角时回一圈,当车身正时,回正方向。
(4)出库左行,当7米线将要消失前迅速将方向盘向左打死,当车身正时,回正方向。
移库(二进二退)1.挂一档方向右打到底向前,开到2号杆刚刚出现左前窗框时(左前车轮刚过中线时)停车,2.方向左打到底一直向前尽可能贴近2号杆停车,(一进完成)3.然后方向右打到底挂倒档,倒车时扭头看车头中央稍偏微左,后中杆出现在左后小窗中时停车,4.方向左打到底继续倒,当车头进右库时停车回正方向停车,(一退完成)5.挂一档向前走微调车身使之与库边线平行,(二进完成)6.然后倒档倒车当4号杆出现在后挡风玻璃的右下角5cm时停车。
(二退完成)一次出库换一档方向左打一圈,前行至车头左前角正对3号杆时停车回正方向出库时微调方向不撞杆。
C语言学习入门笔记之函数
函数笔记1.为什么要用函数函数就是功能。
每一个函数用来实现一个特定的功能。
函数的名字应反映其代表的功能。
1.一个C程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。
对较大的程序,一般不希望把所有内容全放在一个文件中,而是将它们分别放在若干个源文件中,由若干个源程序文件组成一个C程序。
这样便于分别编写和编译,提高调试效率。
一个源程序文件可以为多个C程序共用。
2.一个源程序文件由一个或多个函数以及其他有关内容(如指令、数据声明与定义等)组成。
一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的.而不是以函数为单位进行编译的。
3.C程序的执行是从main函数开始的.如果在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。
4.所有函数都是平行的.即在定义函数时是分别进行的,是互相独立的。
一个函数并不从属于另一个函数,即函数不能嵌套定义。
函数间可以互相调用,但不能调用main函数。
main 函数是被操作系统调用的。
5.函数的分类:从用户使用的角度看,函数有两种。
①库函数,它是由系统提供的,用户不必自己定义,可直接使用它们。
②用户自己定义的函数。
它是用以解决用户专门需要的函数。
从函数的形式看,函数分两类。
①无参函数。
在调用无参函数时,主调函数不向被调用函数传递数据。
无参函数一般用来执行指定的一组操作。
无参函数可以带回或不带回函教值.但一般以不带回函数值的居多。
②有参函数。
在调用函数时,主调函数在调用被调用函数时,通过参数向被调用函数传递数据。
一般情况下,执行被调用函数时会(返回)得到一个函数值,供主调函数使用。
此时有参函数应定义为与返回值相同的类型。
2.怎样定义函数1.为什么要定义函数C语言要求在程序中用到的所有函数,必须“先定义,后使用”。
定义函数应包括以下几个内容:(1) 指定函数的名字,以便以后按名调用。
(2) 指定函数的类型,即函数返回值的类型。
C语言学习笔记
1.我们把由高级语言编写的程序称为“源程序”2.把由二进制代码表示的程序称为“目标程序”,这些具有翻译功能的软件称为“编译程序”,每一种高级语言都有与它相应的编译程序。
C语言源程序经达C语言编译程序编译之后生成一个后缀为.OBJ 的二进制文件(称为目标文件),最后还要由称为“链接程序”(link)的软件,把此.OBJ文件与C语言提供的各种库函数连接起来生成一个后缀为EXE的可执行文件。
3.算法是指为解决某个特定问题而采取的确定且有限的步骤。
一个算法应当具有以下五个特性:1.有穷性。
一个算法应当包含有限个步骤。
也就是说,在执行若干个操作步骤之后算法将结束,而且每一步都在合理的时间内完成。
2.确定性。
算法中每一条指令必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的结果。
3.可行性。
算法中指定的操作,都可以通过已经实现的基本运算执行有限次后实现。
4.有零个或多个输入。
在计算机上实现的算法是用来处理数据对象的,在大多数情况下这些数据对象需要通过输入得到。
5.有一个或多个输出。
算法的目的是为了求解,这些解只有通过输出才能得到。
算法可以用各种描述方法进行描述,最常用的是伪代码和流程图。
伪代码是一种近似高级语言但又不受语法约束的一种语言描述方式,这在英语国家中使用起来非常方便。
4.结构化程序由三种基本结构组成。
一、顺序结构。
当执行由这些语句构成的程序时,将按这些语句在程序中的先后顺序逐条执行,没有分支,没有转移。
二、选择结构。
if语句,switch语句都可构成选择结构。
三、循环结构。
有两种当型循环和直到型循环。
已经证明,由三种基本结构组成的算法结构可以解决任何复杂的问题。
由三种基本结构所构成的算法称为结构化算法。
由三种基本结构所构成的程序称为结构化程序。
C语言既具有高级语言的一切功能,也具有低级语言的一些功能,因此它既可以编写系统软件,也可以用来编写应用软件。
main是主函数名,C语言规定必须用main作主函数名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C学习笔记一、数据1.数据类型分类2.变量与常量变量是程序中数据的存储空间的的抽象。
typedef是C语言的关键字,作用是为一种数据类型定义一个新名字。
3.存储类存储类的属性:作用域(空间)、存储期(时间)、链接点存储方式:静态存储、动态存储。
是就时间属性来区分的。
静态存储方式和静态变量是不同的概念。
静态变量是就链接属性来区分的,有静态局部变量和静态全局变量。
二、字符串格式化输入输出三、运算符、表达式和语句1.运算符种类4.运算符优先级结合性:同一优先级的运算符,运算次序由结合方向所决定。
结合方向由右向左:单目运算符、条件运算符、赋值运算符简单优先级比较:单目运算符> 算术运算符> 关系运算符> 逻辑运算符> 赋值运算符5.运算符相关知识点总结算术---: 数据类型的转换:自动转换和强制转换赋值---:赋值表达式的值与被赋值变量的值得关系;赋值中的类型转换:特别注意有符号与无符号之间的转换造成的BUG;关系---:if( 1 == a ){……},防止错写成“=”造成的隐藏BUG;0为假,非0为真;逻辑---:逻辑量,表达式的逻辑值(0 or 1);sizeof---:s izeof(<类型或变量名>);相同运算符的的嵌套造成的表达式的拓展;6.表达式的概念四、程序结构和控制语句1.3种基本结构:顺序、分支、循环循环:当型循环和直到循环2.C语言控制语句(1)条件判断语句(选择语句):if、switchif:单分支、双分支、多分支if语句的嵌套方式;if-else的配对——就近配对;复合语句被看做是单条语句,且{……}后无“;”switch语句中case标签并没有把语句列表分为几个部分,它只是确定语句执行的入口点,default作用和普通标号一样;(2)循环语句:while和do-while、for、goto-标号(3)转向语句:break、continue、gotocontinue:之后语句不再执行,结束本次循环,开始下次循环;五、数组1.一维数组数组元素可以是基本类型或者构造类型;数组必须逐个元素引用,而不能整体引用;逐个元素通过下标引用;在数组引用中要注意数组越界问题;一维数组初始化的多种形式;eg. int a[10] = {0};冒泡排序核心:if(a[j] < a[j+1])选择排序核心:r = i;for(j = i + 1; j < n; j++)if(a[j] < a[r])r = j;2.多维数组二位数组的行与列:int a[r][v]; r—行,v—列;可以将二位数组a[3][4]理解为含有三个元素:a[0], a[1], a[2],每个元素a[i]都是包含四个元素的一维数组;二维数组的内存分配:按行优先存;a[2][3]:a, a+1 代表行地址,a+1 = &a[1][0];a[0], a[0]+1 代表列地址,a[0]+1 = &a[0][1];3.字符串数组用字符串方式赋值比用字符逐个赋值多占一个字符——“\0”;int scanf( const char * restrict format, ... );左值:L-value中的L指的是Location,表示可寻址。
A value (computer science)that hasan address.右值:R-value中的R指的是Read,表示可读。
in computer science, a value that doesnot have an address in a computer language.字符串处理函数:strcpy(), strcat(), strcmp(), strlen(), strtok();六、指针1.指针的本质是数据类型,而这个变量存的是存储空间的地址值变量是存储空间的抽象,指针类型是存储数据的类型指针和数组名是不同的!!!所有数据类型的指针在32位机上都是32位(4个字节);*(&m)= m;野指针是没有初始化的指针,其指向是随机的;NULL:空指针,指向为空,唯一常量指针。
即int *p = 0; or int *p = NULL;,指向0号存储单元。
但访问零号地址存储值或者修改其值,都是不允许的。
void指针:指向的数据类型是不确定的,只知道指针目标的起始地址,不知道其占用的字节数,必须通过强制类型转换为其他数据类型才能使用;指针的运算:算数运算:p+n, p-n, p++, p--, p-q两个指针相减的结果值不是地址量,而是两个指针之间相隔数据的个数关系运算:p > qconst与指针const int *p; p is a point to const intint * const p const p is a point to int字符指针char *s = "welcome"; = const char *s = "welcome";字符串的首地址赋值给s在程序中使用字符串常量会产生一个“指向字符串的常指针”,当一个字符串出现在一个表达式中时,表达式所引用的值是存储该字符串常量的内存首地址,而不是字符串本身。
2.指针与数组(1)指针与一维数组int a[5], *p;p = a;a[1] = *(a+1),*(p+1) = p[1]数组名是地址常量,指针是地址变量(2)指针与二维数组指针数组int * p[2];int *p[2] 与int (*p)[2] 区别?答:根据运算符的优先级,int* p[2]——p先与[]结合,p是一个数组名,是一个地址值,而数组元素是整形指针。
int (*p)[2]; ——p先与*结合,所以p是个指针,又因为(*p)相当于一个数组名,p是数组指针数组指针编译结果:运行结果:字符指针数组char * a[3] = {"welcome", "to", "suzhou"};3.多级指针不管是几级指针,都是存储内存的编号(地址)4.数据类型与寻址方式数据类型:基本类型(单个存储单元)、构造类型:数组、结构体、共用体灵活的寻址方式实现了数据的结构化,以及结构化数据的存储单元的访问;int *p; //间接寻址int **q; //二次间接寻址int a[4]; //变址寻址、寄存器相对寻址[…],变址运算符,也表示存储单元;…,存储单元的偏移地址;七、函数1.函数基础(1)函数是一个能完成特定功能的代码模块。
把程序中独立的功能封装成函数可以减少重复劳动,使得程序更简洁,可读性更好。
是实现模块化编程的重要工具。
(2)如果返回值的数据类型是void,可以省略return语句,或者写成"return";(3)函数声明的作用函数声明称为函数原型(function prototype)。
用函数原型是ANSI C的一个重要特点。
其作用主要是利用它在程序中的编译阶段对调用函数的合法性进行检查。
所谓合法性检查就是检查函数名是否正确,传递参数的类型、个数、顺序等。
编译器不检查形参名,故可以省略。
(4)一个C程序包含C语句、编译语句、符号等,既要遵从语言规则,又要符合编译规则。
语言规则对应语法错误,编译规则对应语义错误?(5)参数传递值传递、地址(指针传递)、全局变量传递(6)函数和数组传递数组,当形参是数组形式时,其本质上也是一个指针。
几维数组对应几级指针。
例int test( int a[], int *p); int a[] 等价于int *a2.指针函数or 函数指针(1)指针函数char *mystring( void );指针函数不可以返回局部变量的地址,可以返回的地址有3种情况:一、静态变量的地址;static二、字符串常量的地址;“welcome”三、堆上的地址;str = (char*)malloc(20)内存的开辟与释放的本质是:SP的存储值的改变,也即是存储空间指向的改变,原来存储单元的数据依然存在或者被覆盖。
char a[10] = {0}; 0是存储值,ASCII码值,等价于转移字符'\0',打印数组无显示(2)函数指针函数名代表了函数的入口地址int (*pfun)(int, int) 函数指针typedef int (*Pfun)(int, int) 函数指针类型int (*pa[3])(int, int) 函数指针数组,元素是函数指针理解void (*signal(int sig, void(*func)(int)))(int);3.递归函数与循环回调函数attribute机制介绍:函数属性、变量属性、类型属性,都是编译器要处理的八、构造数据类型1.结构体定义结构体变量:先定义结构体类型,再定义变量名;在定义类型的同时,定义变量;直接定义结构体变量;对结构体、联合体中的数组用strcpy()进行赋值。
不能使用数组名直接赋值;位域本质上是一种结构类型;2.共用体不同数据类型的数据使用相同的存储区域,使用方式和结构体一样;3.枚举九、嵌入式C高级用法1.内存管理代码区:code全局变量和静态变量区:RW栈区:局部变量、函数名等堆区:heap,malloc()与free()2.动态内存的申请与释放void* malloc( size_t );void free( void *ptr );两者一定要配对使用,否则内存泄漏;虽然malloc()申请到的空间是连续的,但就从堆的概念上来说,他是由许多分散的内存空间块以链表的数据结构组织一起的集合。
free()之后指针要赋值NULL.利用memset()对申请到的内存空间进行清零;3.堆和栈的区别4.C语言和汇编语言的接口内联汇编_asm_ (汇编语言模块:输出部分:输入部分:破坏描述部分)编译器优化一般将内存变量缓存到寄存器和调整指令顺序充分利用CPU流水线等C语言关键字volatile十、数据结构之线性表1.线性表零个或多个数据元素的有限序列;数学语言描述;直接前驱、直接后继、一对一,位序抽象数据类型:变量形参与指针形参的区别;2.线性表的顺序存储结构定义:用一段地址连续的存储单元存储线性表的数据元素实现方式:一维数组属性:起始位置、最大存储容量(数组长度)、线性表当前长度;地址计算方式:LOC() = LOC() + (i - 1) * c存取时间性能:O(1),随机存储结构;插入删除:O(n)优点:无需为表示表中元素之间的逻辑关系而增加额外的存储空间;可以快速地存取表中任意位置的元素;缺点:插入和删除操作需要移动大量的元素;当线性表长度变化较大时,难以确定存储空间的容量;造成存储空间的“碎片”;3.线性表的链式存储结构(1)基本概念起始结点:是指链表中的第一个结点,它没有直接前驱头指针:是指指向起始结点的指针(没有头结点的情况下)。