




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言基本知识的整理C语言的特点1.机器语言、汇编语言、高级语言机器语言:是各类语言在计算机上储存的最终形式。二进制编码。是“面向机器的语言”或“低级语言”。汇编语言:用具有一定意义的符号代替机器语言中的各条命令和地址。又称为“面向机器的语言”或“低级语言”。高级语言:编写接近日常的数学表达习惯,和自然语言。具有一般性通用性。又称“面向问题的语言”和“算法语言”。2.源程序、编译程序、解释程序用高级语言编写的程序称为源程序,必须将其翻译成二进制程序才能执行。翻译有两种方式:一种是通过“解释程序”翻译一句执行一句的方式执行。一种通过“编译程序”一次翻译产生目标程序,然后执行。C语言本身的特点主要有:表达能力强,。流程控制结构化、程序结构模块化。。语言简练、紧凑。有32个关键字,9种控制语句。数据结构丰富。运算符丰富。C有34种运算符。程序代码质量高。运可移植性好。。C程序基本结构:⒈C程序是由若干个函数构成的,每个程序有且仅有一个主函数(函数名规定为main)。2.C程序的执行总是从主函数开始,并在主函数中结束。3.每个函数(含主函数)的定义分为两部分:函数说明部分(首语句)函数体{……}。4.主函数可以调用任何非主函数,任何非主函数都可以相互调用,但不能调用主函数。2.结构类型“结构”一般可以称为数据元素,在不同的结构类型中,数据元素会有特定的名称。结构类型的数据由更加基本的成分组成。这些成分称为“数据项”,结构的子成员。(1)数组下标从0开始a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]1020304050607080一个数组(array)是由相同类型的若干数组元素构成的有限序列。C语言的数定义:intb[8],a[8];charc[10];(2)结构体C语言中实现:日期类型的定义structDate{intmonth;/*月*/intday;/*日*/intyear;/*年*/};structDatemyd={12,16,1978};系统分配给它的内存是各成员所需内存量的总和。本例是6.3.指针类型(1)指针:变量名的在内存中的存储地址。(2)指针变量inti=12,*p;P=&i;把存放变量i的地址的变量p称作指针变量。指针变量的存放内容是数据的地址。(3)指针引用变量指针变量可以指向各种不同的数据类型,因此指针变量也要有不同的指针类型。如:intm,*p;floatx,*q;inta[],*rm=12;p=&m;x=3.14;q=&x;r=a;C源程序书写格式1.组成C语言源程序的基本单位则是语句。C程序中的语句最后总要有一个分号“;”作为每个语句的结束。2.C语言源程序由若干行组成,一行可写一个语句。也可在一行上以书写多个语句。3.关于注释。可以用“/*”和“*/”括住任意字符,称为“注释”。在其内部的代码是不编译,不执行的。小结:汇编语言编写的程序必须经汇编为目标程序。高级语言编写的程序必须经编译为目标程序。C语言程序总是从main()函数开始执行,到main()函数结束。因此,C语言程序至少有一个main()函数。C语言的词类一、字符集在C语言程序中允许出现的所有基本字符的组合称为C语言的字符集。C语言的字符集就是ASCII字符集,主要分52个大小写英文字母、10个数字、33个键盘符号和若干转义字符。二、保留字在C语言的程序中有特殊含义的英文单词称为“保留字”,主要用于构成语句、进行存储类型和数据类型定义。表1.1C语言的32个关键字数据类型数据类型14char,short,int,unsigned,long,float,double,struct,union,void,enum,signed,const,volatile存储类型5break,case,continue,default,do,else,for,goto,if,return,switch,while流程控制12运算符1typedef,auto,register,static,externsizeof三、标识符是用户自定义的一种字符序列,用于变量名、函数名、常量名等,主要由程序设计者指定。规则:①标识符只能由字母、数字和下划线组成,且第一个字符必须是字母或下划线。②不能与上述32个关键字同名。③(ANSI)规定C语言标识符的有效长度不大于32个字符。而PC机中通常是前8个字符有效。④C语言大小写敏感。四、分隔符是用来分隔标识符的符号。空格字符、换行符、换页符及注释均是C的分隔符,通称为空白字符。空白字符在语法上仅起分隔单词的作用。一个或多个空白字符,其效果相同。数据类型(DataType)数据表示形式合法的取值范围占用内存空间大小可参与的运算种类数据类型数据类型构造类型指针类型空类型整型实型(浮点型)字符型枚举类型数组类型结构体类型共用体类型单精度实型双精度实型基本整型长整型短整型无符号整型简单类型简单类型构造类型指针类型整型实型字符型数组结构体共用体数值型枚举型空类型int2个字节long4个字节float4个字节double8个字节char1个字节成员类型字节数×个数struct各成员字节数之和不要求C语言的数据表示1.1常量和变量1.常量常量是在程序执行中,值不发生改变的数据。其值预先决定,之后不变。有不同的数据类型。(1)常数(有的称直接常量、页面常量)例如的:整数:+5、-3、017(八进制)、0x1f(16进制)实数(浮点数):3.14、-1.2E-3(E3,2E3.0不合法)、1E10(不是整型量)单个字符:‘A’,占一个字节’\\’,转义字符‘\’‘\’非法’\77’(八进制ASCII码63,‘?’),’\78’非法’\x3f’(十六进制ASCII码63,‘?’)‘\x3g’非法字符串:“A”后面有\0,占两个字节 字符串“\*\077\\\x7f\n”的长度是:5“\x7F”和’\x7F’的字节数分别为:2,1(2)符号常量给常量起标识符名字。C语言的符号常量(用宏定义):#definePI3.14159265注意:1.一般用大写字母。2,#defineM3不是C语句,后面没有“;”。3.可以做M+1,不能做M++.(3)地址常量当数组在定义时,其变量名为其首地址,是地址常量。inta[10];可以做a+1,不能做a++.2.变量用各种操作来改变值数据。从“名”和“值”两个角度认识变量(1)变量名每个变量,要在使用前定义变量的名字,遵循标识符命名规则。只能用字母、数字和下划线组成。不能以数字开头。不能用保留字(int,printf,main…..)。合法:a12a_3_abc非法:12aa#int变量定义就是申请数据的存储空间,登记数据的各种存储特性。例如:intm;2个字节longn;4个字节charch;1个字节floatx;4个字节doubley;8个字节可以用sizeof获得字长sizeof(char)=1sizeof(int)=2sizeof(double)=8(2)变量的值变量值就是由变量名所指定空间上的存储数据内容。即变量的当前值。数据内容用语言的操作语句来改变。赋值语句;键盘输入语句;charchx;intm;/*变量的定义*/chx=‘A’;m=12*3;/*赋值语句*/scanf(“%d”,&m);/*键盘输入语句*/变量初始化:定义变量时同时确定变量初值。例如:charchy=‘a’;intweight=2;1.2表达式C语言的表达式使用规定的运算符,将常量、变量、函数(调用)连结的一个有意义的式子。1、算术表达式用算术运算符来表示对数据的算术运算求值过程。算术运算符:+-*/%2/3结果是0,2%3结果是22、关系表达式关系运算符:>>=<<=(优先级较高)!===(优先级较低)关系表达式的结果:1(非0,真),0(假)分析:10<=a<=15a=9当a=9,10<=a假,把0赋给a,则0<=15真所以要写成10<=a&&a<=15则结果是假3、逻辑表达式用逻辑表达式来表示对数据的逻辑关系判断,运算结果是逻辑值“真”1或者“假”0。C逻辑运算符包括:!&&||参加逻辑运算的数据必须是逻辑量,可以是逻辑类型的变量、常量,关系表达式或逻辑表达式。C语言中,没有专门的逻辑量,1是真值,0是假值。也认为非零的值为真值。如:inta=3,b=4,c=-5;(1)!((a<b)&&!c||1)(2)if(a)printf(“\nyes”);位运算符和位运算运算符含义运算符含义&按位与~取反|按位或<<左移^按位异或>>右移“按位与”运算符──&
(1)格式:x&y
(2)规则:对应位均为1时才为1,否则为0:3&7=。例如,3&7=:0011&0111 ──── 0011=3 (3)主要用途:取(或保留)1个数的某(些)位,其余各位置0。"按位或"运算符──|
(1)格式:x|y
(2)规则:对应位均为0时才为0,否则为1:3|9=11。例如,3|9=11:0011 |1001──── 1011=11
(3)主要用途:将1个数的某(些)位置1,其余各位不变。"按位异或"运算符──^(1)格式:x^y(2)规则:对应位相同时为0,不同时为1:例如57^42=19。00111001^00101010 ────────00010011(3)主要用途:使1个数的某(些)位翻转(即原来为1的位变为0,为0的变为1),其余各位不变。"按位取反"运算符──~(1)格式:~x(2)规则:各位翻转,即原来为1的位变成0,原来为0的位变成1:在IBM-PC机中,~0=0xffff,~9=0xfff6。(3)主要用途:间接地构造一个数,以增强程序的可移植性。"按位左移"运算符──<<(1)格式:a<<位数(2)规则:使操作数的各位左移,低位补0,高位溢出:例如a=15,则a=a<<2;后a的值为60即从:00001111左移2位后为00111100(3)左移1位相当于乘于2(当高位不包含0时)“按位右移”运算符──>>(1)格式:a>>位数(2)规则:使操作数的各位右移,移出的低位舍弃;高位:1)对无符号数和有符号中的正数,补0;2)有符号数中的负数,取决于所使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”。例如:a=017:00001111a>>2为:00000011又如a:10101111a>>2:00101011(逻辑右移)a>>2:11101011(算术右移)位运算赋值运算符a&=b等价于a=a&ba<<=b等价于a=a<<b逻辑运算规律①在&&(与)表达式中,若&&的左端为假,则不再计算另一端,该表达式值肯定为0(假)。②在||(或)表达式中,若||的左端为真,则不再计算另一端,表达式的值必定为1(真)。inta=5,b=1k=a<=3(假,后面不算了)&&b-->0k?b?结果k=0,b=14、赋值表达式=,+=,-=,*=,/=,++(单目),--(单目)级别仅高于逗号表达式,右结合inta=3,c=2,ba=b=c;c赋值给b,b=2b赋值给a,a=2n*=m+2相当于n=n*(m+2)k=i++;先k=i,再i=i+1k=++i;先i=i+1,再k=ii++,++ii++先使用,后加1,++i先加1,后使用要充分理解中”使用”的实际意义k=i++作赋值运算,使用就是赋值.先做k=i,再做i=i+1k==i++作比较判断运算,使用就是比较判断先做k==i,是真还是假,再做i=i+1printf(“%d”,i++)作输出结果,使用就是输出结果.先输出i,再做i=i+1a=5-(i++)作减法,使用就是减.先做5-i,并赋给a,再做i=i+15、条件表达式e1?e2:e3若e1为真,表达式的值为e2,否则为e3.a=3,b=2;(--a==b++)?--a:b++结果是15?10非零为真表达式的值为10-5?10:3表达式的值为100?10:3假表达式的值为3b=3;赋值运算符优先仅高于逗号运算符a=(b>5?10:3);a=b>5?10:3;a=?结果a=36、逗号表达式表达式的值等于最后一个表达式的值,运算等级最低!a=5,b=2,c=3a=7+b+c,b++a=12a=(7+b+c,b++)a=27、强制类型转换表达式(单目)intm;sqrt((float)m);b=2a=5-(--b)()优先级最高,--b右结合-优先级其次=优先级最低--b,b=b-1,b为1再做5-b,即5-1等于4最后将4赋给a理解记忆运算符表!++,--,等(高)(低)算数运算符关系运算符逻辑运算符&&||条件运算符赋值运算符逗号运算符-1.3数据类型简单类型、结构类型、指针类型简单类型(1)整型类型名字节数输入、输出格式int2%dshort2%dlong4%ld(2)实型类型名字节数输入、输出格式有效数字位float4%f7doubule8%lf1616longdoubule16%lf19(3)字符型(输入、输出格式“%c”)ASCII码,一个字符占1字节;char型数据与int型数据之间的关系char型对应其ASCII码,只不过是占一个字节。大写字母与小写字母之差为32.char型变量既能以%c字符格式输出,也能以%d整型格式输出。能象int量一样进行算术运算。注意转义字符’\’的使用。‘\*’‘\101’(A,8进制)‘\x41’(A,16进制)‘\n’(4)字符串(输入、输出格式“%s”)所谓“字符串”是指若干有效字符的序列。C语言字符串可以包括字母、数字、专用字符、转义字符等。字符串常量:使用双引号"China""BASIC""a+b=c""Li-Li"“39.4”“%d\n”“解放军““\*\077\\\x7f\n”字符型的一维数组(相当于字符串变量)charst[8],str[10];strcpy(st,"12345");strcpy(str,st);不能st=“12345”;str=st;这是赋值.可以charst[]=“12345”;这是初始化.1.4输入、输出输出:printf(“…….”,…….)%d,%6d,%ld%c,%s%f,%10.2f,%lf,%20.8lfchara[]=“abfgcde”,max,max_i;main(){…….printf(“max=%c\nmax_i%d=”,max,max_i);(max=gmax_i=3)常见错误inta,b;chard,e[20];-scanf("%d,%f\n”,&a,&b);\n要多输入一个值-scanf("%d,%f”,a,b);缺&-scanf("%7.2f",&b);不能规定精度-scanf("%s",&e);数组名是首地址,不要&-scanf("%f",&d);类型不匹配输入:scanf(“…….”,…….)%d,%ld对应intlong%c,%s对应charcharstr[]%f,%lf对应flaotdoubleC程序常见符号分类关键字(Keyword)又称为保留字,C语言中预先规定的具有固定含义的一些单词数据类型修饰符int,控制语句return等标识符(Identifier)系统预定义标识符,main,printf等用户自定义标识符,Add,x,y等运算符(Operator)34种,详见附录2分隔符(Separator)空格、回车/换行、逗号等其它符号大花括号“{”和“}”通常用于标识函数体或者一个语句块“/*”和“*/”是程序注释所需的定界符数据(Data)变量(Variable)常量(Constant)如何衡量数据类型所占空间大小?b,B,KB,MB,GB,TBbit,中文叫法:位Byte,中文叫法:字节Kilobyte(KB),中文叫法:KMegabyte(MB),中文叫法:兆Gigabyte(GB),中文叫法:GTerabyte(TB),中文叫法:T1TB==1,024GB1GB==1,024MB1MB==1,024KB1KB==1,024B1B==8b基本数据类型int整数,在目前绝大多数机器上占4个字节。TC2中是2个字节VC中是4个字节float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0~255的整数shortshortint,短整数,一般2个字节长。通常简写为shortlonglongint,长整数,一般是4个字节长。通常简写为longlongdouble,长双精度(高精度)浮点数,一般是10个字节长。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)C语言的程序结构与相关语句带参宏定义以文本按原样展开#defineMUL(x)x*x5/MUL(5+3)=5/5+3*5+3=19#defineMUL(x)(x)*(x)5/MUL(5+3)=5/(5+3)*(5+3)=5#defineMUL(x)((x)*(x))5/MUL(5+3)=5/((5+3)*(5+3))=5/641.表达式语句的组成:由一个表达式后接一个分号组成的。⒈一组语句括在一对花括号之中,称复合语句。{c=getchar();putchar(c);}注意,一个复合语句的后花括号之后不应再写分号。⒉在语法上是一个整体,相当于一个语句。凡是能够使用简单语句的地方,都可以使用复合语句。一个复合语句中又可以包含另一个或多个复合语句流程控制语句完成一定的控制功能。9种控制语句:判断语句条件判断语句if()…else…多分支选择语句switch()…case循环语句循环次数控制语句for()先判断后执行循环控制语句while()先执行后判断循环控制语句do…while()转移控制语句直接转移语句goto终止语句break(用在循环结构、swicth)跳转语句continue(仅用在循环结构)返回语句return二、C语言的程序结构与相关语句程序的三种基本结构:顺序结构选择结构if()…else…switch()…case单分支结构if(a==b)printf(“yes”);双分支结构if(a==b)printf(“yes”);elseprintf(“no”);多分支结构switch_caseswitch(表达式){case常量表达式1:语句序列1;[break;] case常量表达式2:语句序列2;[break;] ……… case常量表达式n:语句序列n;[break;] [default:语句序列n+1;]} 根据“表达式”的值从上至下去寻找与表达式的值相匹配的“case常量表达式”,执行一个分支后,再执行下一个分支,直到break结束,然后执行switch结构后面的程序。找不到匹配的入口标号时,执行“语句序列n+1”,然后结束。顺序向下执行程序。循环结构for(){…..;}while(){……;}do{……;}while()for,while,do-while三种结构循环变量初始化,继续循环条件,改变循环变量是不可缺少的三个环节。for常用于循环次数已知的问题中。括号中的两个“;”不可省。while与do-while常用于循环次数未知的问题中。注意点:在for和while语句之后一般没有分号有分号表示循环体就是分号之前的内容(空循环体)while(i<100);
i++;for(i=0;i<100;i++);
printf("%d",i);if,swtich,while,for后面的语句只能是一句,因此,多句时别忘了{}。在while(e)和for(;e;)中的e是循环继续的条件,不能写其它条件!如果缺省,就是死循环!在if(e),while(e)和for(;e;)中e的值是逻辑值(0或非0)e一般是关系表达式,逻辑表达式或变量。break,coutinuebreak只能用于switch和循环语句中,作用提前终止本层次switch和循环。coutinue是跳过循环体内尚未执行的语句,接着执行下次循环。常用的循环算法求素数、水仙花数、最小公倍数、最大公约数、分解多位数的数字,累加,累乘,分解质因数等。各种有规律的图案。三数组定义inta[5]时,a[0],a[1]…..=?随机数!只有inta[5]={3}后,后面几项自动赋0数组的初始化合法:inta[]={1,2,3,4,5};inti[][3]={1,2,3,4,5,6};inta[5]={1,2,3};chara[4]=“boy”chara[3]={‘b’,’o’,’y’}不合法:inta[5]={,2,,4,5};inti[2][]={1,2,3,4,5,6};inta[5]={};chara[4]={boy}二维字符数组二维数组在内存中的排列顺序是“按行优先存放”二维数组a[m][n]可以视为由n个一维数组a[m]组成的。二维字符数组中m由其中最长的字符串决定。charstu[5][6]={“Tom",“Anne",“Mary",“Peter"};其中stu[0]=“Tom"stu[1]=“Anne"字符数组charstr[50];inti;for(i=0;str[i]!=‘\0’,i++)构造新的字符数组(删除,插入,复制,连接,倒序)。1.用和不用字符串函数实现上述功能。2.用指针实现。3.必须注意最后一项一定是:str[i]=‘\0’;或*p=‘\0’;数组的操作往往用循环结构.数值数组inta[10];for(i=0;i<10;i++)字符数组chara[50];for(i=0;a[i]!=‘\0’;i++)数值数组倒序for(i=0,j=M;i<j;i++,i--)交换a[i],a[j]字符数组倒序for(i=0,j=strlen(a);i<j;i++,i--)交换a[i],a[j]数值数组voidinv(intx[],intm){inti,j,k;j=m;for(i=0;i<j;i++,i--){k=x[i];x[i]=x[j];x[j]=k;}字符数组voidinv(intx[]){inti,j,k;j=strlen(x);for(i=0;i<j;i++,i--)k=x[i];x[i]=x[j];x[j]=k;}}一.字符串和字符串的存储方法所谓“字符串”是指若干有效字符的序列。C语言中的字符串可以包括字母、数字、专用字符、转义字符等。1.字符串常量:使用双引号"China""BASIC""a+b=c""Li-Li""39.4""%d\n""解放军“2.字符型的数组(字符串变量)charst[8],str[10];本质:数组元素的值是char类型。字符串函数要用#include<string.h>字符串拷贝函数strcpy字符串连接函数strcat字符串比较函数strcmp测字符串长度函数strlen函数strlen的值为‘\0’之前的全部字符个数.它与数组长度不是一个概念.chars[6]={‘H’,’o’,’w’,’\0’,’o’,’k’}strlen(s)=3C中是以‘\0’字符作为字符串结束标志的.注意:字符数组和字符串是两个不同含义的概念,1.字符串存放在字符数组中,字符串以‘\0’作为结束标记。2.字符数组,则未必。charst[9];“BeiJing”st[0]='B';st[1]='e';st[2]=‘i';st[3]='';st[4]='J';st[5]='i';st[6]='n';st[7]='g';st[8]='\0';charst[9]={’B’,’e’,’i’,’’,’J’,’i’,’n’,’g’,’\0’};①逐个地为数组中各元素指定初值字符。(a)一个字符一个字符地分别赋给各元素。例如:charst[9]={’B’,’e’,’i’,’’,’J’,’i’,’n’,’g’,’\0’};(b)当全部元素指定初值的情况下,字符数组的大小可以不必定义。即:charst[]={’B’,’e’,’i’,’’,’J’,’i’,’n’,’g’,’\0’};②也可以用字符串常量对字符数组指定初值。如:charst[]={"BeiJing"};字符串函数的应用数组的初始化规则:①当对数组中全体元素赋初值时,可以不必指明数组中元素的个数。如:inta[]={1,2,3,4,5};②在定义数组时可只对部分元素初值。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业外聘面试题及答案
- 心内科术后护理
- 教师组织活动总结
- 运维开发面试题及答案
- 实践素材面试题及答案
- 茶楼与旅游公司合作推广合同
- 门洞扩大施工方案
- 药品研发项目方案规程
- 摩托训练考试题及答案
- 企业防范诈排查方案
- 保险品质管理制度
- 2025年辽宁高考地理试卷真题答案详解讲评课件(黑龙江吉林内蒙古适用)
- 质检队伍考试题及答案
- 全国中小学教师职业道德知识竞赛80题及答案
- 运沙船运输合同协议
- 2023CSCO食管癌诊疗指南
- 2024年四川省资中县事业单位公开招聘教师岗笔试题带答案
- 成人女性压力性尿失禁护理干预护理团标解读
- 某律师事务所内部规章管理制度大全
- GB 29743.2-2025机动车冷却液第2部分:电动汽车冷却液
- 六西格玛试题及答案
评论
0/150
提交评论