专插本C语言简便总结复习Word下载.docx
《专插本C语言简便总结复习Word下载.docx》由会员分享,可在线阅读,更多相关《专插本C语言简便总结复习Word下载.docx(36页珍藏版)》请在冰豆网上搜索。
一个负数的补码是取-10的绝对值10,对10的二进制形式取反加1,101+1=110
Signedintunsignedintshortlongchar
float单精度
double双精度,longdouble
%d,%o,%x,%c,%s,一个整常量后面加一个字母l或L,则认为是longint
main()个说明或一个语句占一行。
2.用{}括起来的部分,通常表示了程序的某一层次结构。
{}一般与该结构语句的第一个字母对齐,并单独占一行。
3.低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。
以便看起来更加清晰,增加程序的可读性。
空白符:
空格符、制表符、换行符等统称为空白符
在C语言中使用的词汇分为六类:
标识符,关键字,运算符,分隔符,常量,注释符等。
1.标识符(在程序中使用的变量名、函数名、标号等统称为标识符)
C规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。
(1)标准C不限制标识符的长度,但它受各种版本的C语言编译系统限制,同时也受到具体机器的限制。
(2)在标识符中,大小写是有区别的。
(3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。
因此,命名应尽量有相应的意义,以便于阅读理解,作到“顾名思义”。
2.关键字(关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。
用户定义的标识符不应与关键字相同)
(1)类型说明符:
如前面例题中用到的int,double等
(2)语句定义符:
ifelse就是条件语句的语句定义符
(3)预处理命令字:
include
3.运算符:
4.分隔符:
在C语言中采用的分隔符有逗号和空格两种
5.常量:
C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。
6.注释符:
C语言的注释符是以“/*”开头并以“*/”结尾的串
#definePRICE30/*#define定义PRICE代表常量30*/PRICE是符号常量
习惯上符号常量用大写,变量用写小写
例如:
整型变量a和b,可以进行求余运算:
a%b(%是求余符号)若指定a和b为实型变量,则不允许进行”求余”运算.
整型
八进制以0开头的数是八进制.如0123表示八进制123,即(123)8,其值为1X82+2X81+3X80
十六进制以0x开头的数是十六进制.如0x123表示十六进制123,即(123)16,其值为1X162+2X161+3X160
在C编译系统,每一个整型变量在内存中占2个字节.
实际上,数值是以补码表示的.一个正数的补码和其原码的形式是相同.而负数的补码是将该值的绝对值的二进制形式,按位取反再加1.
求-10的补码,取-10的绝对值为10,然后10的二进制为1010,
对1010(0000000000001010)取反,,一共占16个字节,
再加1为
整数的16位中,最左面的一位是表示符号,该位为0表示数值为正,该位为1则数值为负
Signedint有符号-32768-32767
unsignedint无符号0-65535
shortint短整型longint长整型.不一样的微机,位数是不一样的.
整型int
%d,%0,%x
实型floatdouble
%f
字符型char一个字符变量在内存中占一个字节
%c
Printf(“%f,%d,%c\n”,a,b,c);
\ddd:
1到3位8进制数所代表的字符
如:
\101(八进制)为65(二进制)的字符”A”
注意:
”\0”或”\000”是代表ASCII码为0的控制字符,即”空操作”字符.它将用在字符串中.
\xhh:
1到2位16进制数所代表的字符
\n:
换行,将当前位置移到下一行开头,ASCII代码为10(十进制)
\t:
水平制表(跳到下一个tab位置),制表区占8列,ASCII代码为9(十进制)
\b:
退格,将当前位置移到前一列,ASCII代码为8(十进制)
\r:
回车,将当前位置移到本行开头,ASCII代码为13(十进制)
\f:
换页,将当前位置移到下页开头,ASCII代码为12(十进制)
\\:
反斜杠字符”\”,ASCII代码为92(十进制)
\’:
单引号(撇号)字符,ASCII代码为39(十进制)
\”:
双引号字符,ASCII代码为34(十进制)
字符串常量
‘a’是字符常量(是用一对单引号括起来的),”a”是字符串常量(是用一对双引号括起来的)
C规定在每一个字符串的结尾加一个”字符串结束标志”,是以字符’\0’作为字符结束标志,从ASCII代码表中可以看到ASCII码为0的字符是”空操作字符”
各类数值型数据间的混合运算
如字符数据必定先转换为整数,short型转换为int型,float型数据在运算时一律先转换成双精度型,即是二个全是float型也要先转换成double型.
Charshortl→int→unsigned→long→double←float
运算符优先级和结合性
级 别
类 别
含义
运算符
结合方向
1
强制转换、数组、
结构、联合
圆括号
()
自左至右
下标运算符
[]
指向结构成员运算符或结构体成员运算符
->
或
.
2
逻 辑
逻辑非
!
自右至左
(单目运算符)
字 位
按位取反
~
增 量
自增(加一)
++
减 量
自减(减一)
--
指 针
地址与运算符(取地址)
&
指针运算符(取内容)
*
算 术
负号运算符(单目减)
-
长度计算
sizeof
3
乘
(双目运算符)
除
/
求余(取模)
%
4
算术和指针运算
加
+
减
5
左移
<
右移
>
6
关系
大于等于
=
大于
小于等于
小于
7
等于(恒等于)
==
不等于
8
按位与
9
按位异或
∧
10
按位或
|
11
逻辑与
左结合
双目运算符
12
逻辑或
||
13
条 件
条件运算
?
:
14
赋 值
赋值
复合赋值
+=
-=
*=
/=
%=
》=
<<=
∧=
∣=
15
逗 号
逗号运算
右结合
强制类型转换运算符
(double)a将a转换成double类型
(int)(x+y)将x+y的值转换成整形,如果写成(int)x+y则只将x转换成int型,然后与y相加
(float)(5%3)将5%3的值转换成float型
说明:
在强制转换时,得到一个所需的类型的中间变量,原来变量的类型未发生变化.
求余“%”运算符要求其两侧均为整型量,floatx,则x%3是不合法,必须(int)x%3
自增自减运算符(只能用于变量,不能用于常理和表达式)
++i是在使用之前先使i的值加(减)1若j=++i;
i=3;
printf(“%d\n”,++j)为4
i++是在使用之后使i的值加(减)1若j=i++;
printf(“%d\n”,j++)为3
-i++中,其中-为负号运算和++为同优先级,而结合方向是自右至左,所以相当于-(i++)
(1)控制语句
C语言9种控制语句:
1、if()~~~~~~else~~~~~~(条件语句)
2、for()~~~~~(循环语句)
3、while()~~~~~(循环语句)
4、do~~~`~~while()~~~~~~(循环语句)
5、continue(结束本次循环语句)
6、break(中止执行switch或循环语句)
7、switch(多分支选择语句)
8、goto(转向语句)
9、return(从函数返回语句)
上述括号()表示其中是一个条件,~~~~表示内嵌的语句
例:
if(x>
y)z=x;
elsez=y;
(2)函数调用语句:
printf(“ThisisaCstatement.\n”);
(3)表达式语句:
a=3;
(一个赋值表达式)
(4)空语句:
;
(即只有一个分号语句)
(5)复合语句{}:
{z=x+y;
t=z/100;
printf(“%f\n”,t);
}
输入输出函数
#include<
或“”/*头文件*/
Scanf()输入函数printf()输出函数是系统提供的标准函数
#include(预编译命令)
Putchar(输出字符) getchar(输入字符)
Printf(格式输出) scanf(格式输入)
Puts(输出字符串) gets(输入字符串)
c语言中include后用引号与尖括号的区别
使用尖括号的话,编译时会先在系统include目录里搜索,如果找不到才会在源代码所在目录搜索;
使用双引号则相反,会先在源代码目录里搜索。
这就意味着,当系统里(如/usr/include/里)有一个叫做的头文件,而你的源代码目录里也有一个你自己写的头文件,那么使用尖括号时用的就是系统里的;
而使用双引号的话则会使用你自己写的那个。
所以建议:
使用系统里提供的头文件时使用尖括号
使用自己编写的头文件时使用双引号
输出单个字符:
#include<
Main()
{chara,b,c;
a=‘B’;
b=‘O’c=‘Y’;
putchar(a);
putchar(b);
putchar(c);
也可以输出转义字符如:
putchar(‘\101’);
putchar(‘\’’);
输入单个字符:
getchar()函数没有参数,其一般形式为getchar()字符输入函数
main()
{charc;
c=getchar();
格式输入输出函数
Printf(“%d\n”,x);
%d么按整型数据的实际长度输出
%md么m为指定的输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出.Printf(“%4d,%4d\n”,a,b);
若a=123,b=12345
则a输出结果为:
空格123则b输出结果为:
12345
%ld么输出长整型数据若longa=1356739;
printf(“%9ld”,a);
则a输出结果为:
空格空格1356739
%o是以八进制形式输出整数.
%x是以十六进制形式输出整数.
%u用来输出unsigned型数据,即无符号数,以十进制形式输出.
%c用来输出一个字符.chara=’w’;
printf(“%c”,w);
%s用来输出一个字符串.printf(“%s”,”CHINA”);
%ms输出的字符占m列,如字符串本身长度大于m则突破m的限制,全部输出字符串,若串长小于m,则左补空格.
%-ms如果串长小于m则在m列范围内,字符串向左靠,右补空格.
%输出占m列,但只取字符串左端n个字符.这n个字符输出在m列的右端,左补空格.
%输出占m列,但只取字符串左端n个字符.这n个字符输出在m列的左端,右补空格.n>
m,则m自动取n值,即保证n个字符正常输出.
%f用来输出实数(单精度和双精度),以小数形式输出.
%e以指数形式输出实数,输出数据所占的宽度和数字部分小数位数由系统自动指定给出6位小数,指数部分占5列(如e+002),其中e占一位,指数符号占一位,指数占3位
%g用来输出实数,它根据数值大小自动选f格式或e格式.
Scanf输入函数scanf(“%d,%d,%d”,&
a,&
b,&
c)
{inta,b,c;
scanf("
%d,%d,%d"
&
c);
/*输入这三个数的时候”,”逗号也要输的.*/
printf("
%d,%d,%d\n"
a,b,c);
getch();
若:
%d%d%d"
输入a,b,c三个数时,12空格13空格88
Scanf(“%3d%3d”,&
b);
输入:
123456,系统自动把123赋给a,456赋给b
Scanf(“%3c”,&
ch);
abc,由于ch只能容纳一个字符,系统就把第一个字符’a’赋给ch
如果%后面有一个”*”附加说明符,表示跳过它指定的列数.
scanf(“%2d%*3d%2d”,&
输入:
12空格345空格67回车,将12赋给a,%*3d表示读入3位整数但不赋给任何变量.然后再读入2位整数67赋给b.第二组数据345被跳过.
在输入数据进,遇以下情况时数据认为结束:
1、遇空格,或按回车或跳格(Tab)键;
2、按指定的宽度结束,如“%3d”,只取3列;
3、遇非法输入;
例:
输入三角形的三边长,求三角形面积s=1/2(a+b+c)area=根号s(s-a)(s-b)(s-c)
Floata,b,c,area,s;
scanf(“%f,%f,%f”,&
s=2*(a+b+c);
Area=sqrt(s*(s-a)*(s-b)*(s-c));
Printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n”,a,b,c,s);
printf(“area=%7.2f\n”,area);
If语句
If与else的配对关系:
else总是与它上面的最近的if配对.
If与else的数目一样时,采用
If()main()
If()语句1{intx,y;
Else语句2scanf(“%d”,&
x);
Elseif(x<
0)y=-1;
If()语句3elseif(x==0)y=0;
elsey=1;
Else语句4printf(“x=%d,y=%d\n”,x,y);
If与else的数目不一样时,采用加花括号来确定getch();
/*能显示输出*/
If()}
{if()语句1}
Else语句2
判断某一年是否闰年其中一种方法
main()
{
intyear,leap;
printf("
inputyear:
"
);
scanf("
%d"
year);
if(year%4==0)
if(year%100==0)
if(year%400==0)leap=1;
elseleap=0;
elseleap=1;
if(leap)printf("
%dyes\n"
year);
elseprintf("
%dnoyear\n"
getch();
/*判断某一年是否闰年另一种方法*/
voidmain()
intyear;
if(((year%4==0)&
(year%100!
=0))||(year%400==0))printf("
elseprintf("
条件运算符(三目运算符,自右至左)
main()
{intx,y,max;
%d,%d"
x,&
y);
max=(x>
y)?
x:
y;
/*如果(a>
b)条件为真,则条件表达式取值a,否则取值b*/
%d\n"
max);
/*输入一个字符,判断大小写,如果是大写,转换成小写,并输出最后得到的字符*/
{charch;
Scanf(“%c”,&
If(ch>
=‘A’&
ch<
=‘Z’){ch=ch+32;
printf(“%c\n”,ch);
}/*去掉花括号将编译出错*/
/*ch=(ch>
=‘Z’)?
(ch+32):
ch也可以用条件运算符*/
Elseprintf(“%c\n”,ch);
Switch语句是多分支选择语句
Switch(表达式)表达式的值与某一个case后面的常量表达式的值相等时就执行case后面的语句
{case常量表达式1:
语句1;
break;
每一个case常量表达式的值必须互不相同
case常量表达式2:
语句2;
执行一个分支后可以用一个break语句来终止switch语句的执行
case常量表达式3:
语句3;
case常量表达式n:
语句n;
default:
语句n+1;
最后一个分支default可以不加break语句。
Case后面包含一个以上执行语句,但可以不必用花括弧括起来,会自动顺序执行本case后面所有的执行语句
Switch(表达式)表达式的值为A或B或C时都执行同一组语句
case‘A’:
case‘B’:
case‘C’:
case‘D’:
printf(“>
60\n”);
/*求方程的解*/
/*输入输出函数要调用,也可以不写*/
/*用到绝对值函数和开根号函数,所以要调用*/
floata,b,c,disc,x1,x2,realpart,imagpart;
/*定义类型*/
%f,%f,%f"
/*输入方程的三个数*/
theequation"
/*显示theequation,意思是方程*/
if(fabs(a)<
=pow(10,-6))printf("
isnotaquadratic"
/*对a求绝对值,判断a=0(fabs(a)<
=le-6))就不是二次方程*/
elsedisc=b*b-4*a*c;
/*计算b*b-4*a*c的值是等于还是小于还是大于0*/
if(fabs(disc)<
hastwoequalroots:
%8.4f\n"
-b/(2*a));
/*hastwoequalroots是有两个相等的根的意思,这个判断是等于0后有两个相等实根*/
elseif(disc>
pow(10,-6))/*大于0后有两个不等实根*/
{x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
%8.4fand%8.4f\n"
x1,x2);
}
else
{realpart=-b/(2*a);
/*小于0后有两个共轭复根的实部*/
imagpart=sqrt(-disc)/(2*a);
hascomplexroots:
\n"
/*hascomplexroots是有复杂的根源的意思*/
%8.4f+%\n"
realpart,imagpart);
%8.4f-%\n"
说明:
le-6:
是科学计数法,表示10的-6次方,用函数是pow(10,-6))不用0来判断,用一个很小的数就认为disc是0,是为了产生误差,因为实数在计算和存储时会有一些微小的误差。
/*算运费*/
{
intc,s;
floatf,d,p,w;
/*总运费f(freight货物),基本运费p(price价格),货物重w(weight重量),距离s,折扣d(discount)*/
inputnumber:
%f,%f,%d"
p,&
w,&
s);
if(s>
=3000)c=12;
elsec=s/250;
switch(c)
{
case0:
d=0;
break;
case1:
d=2;
case2:
case3:
d=5;
case4:
case5:
case6:
case7:
d=8;
case8:
case9:
case10:
case11:
d=10;
case12:
d=15;
f=p*w*s*(1-d/;
freight=%f\n"
f);
Goto语句为无条件转向语句,形式:
goto语句标号;
语句标号用标识符表示,它的定名规则与变量名相同.即字母,下划线,数字.
一般来说来两种用途:
1、与if语句一起构成循环结构;
2、从循环体中跳转到循环体外.但在C语言中可以用break语句和continue语句跳出本层循环和结束本次循