c语言学习资料整理总结.docx

上传人:b****7 文档编号:8885969 上传时间:2023-02-02 格式:DOCX 页数:23 大小:39.73KB
下载 相关 举报
c语言学习资料整理总结.docx_第1页
第1页 / 共23页
c语言学习资料整理总结.docx_第2页
第2页 / 共23页
c语言学习资料整理总结.docx_第3页
第3页 / 共23页
c语言学习资料整理总结.docx_第4页
第4页 / 共23页
c语言学习资料整理总结.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

c语言学习资料整理总结.docx

《c语言学习资料整理总结.docx》由会员分享,可在线阅读,更多相关《c语言学习资料整理总结.docx(23页珍藏版)》请在冰豆网上搜索。

c语言学习资料整理总结.docx

c语言学习资料整理总结

C语言知识整理

(一)数据类型知识点整理

常量

a.整型常量

分为int\shortint\longint\unsignedint\unsignedshort\unsignedlong\

注意:

(1)-32768—32768int\longint

(2)-2147483648—2147483648longint

(3)后加字母u表示unsignedint型,加l或L表示longint型。

b.浮点常量

(1)c语言编译系统将浮点型常量作为双精度处理;

(2)一个浮点型常量可以赋值给float、double或longdouble变量;

C.字符串常量

(1)字符常量用’‘括起来,如:

’a‘字符串常量用“”括起来;

(2)不能把一个字符串常量赋值给一个字符变量;

(3)以‘\0’作为字符串结束的标志(\0系统会自动加上)。

d.符号常量

(1)利用标识符代表常量,用#define定义如:

#defineN30;

(2)符号常量不能再被赋值;

(3)标识符只能由字母下划线数字组成,并且第一个字符必须为字母或下划线。

变量

a.整形变量

(1)变量定义时,放在函数的开头部分;

(2)数据溢出,程序不会自动报错,而是又从最小值开始计数。

b.浮点型变量

(1)表现形式:

十进制小数,0.12312.3;指数形式,123e3或123E3(123*10^3);

注意:

字母e或E之前必须有数字,且e后面的指数必须是整数(如:

e3、2e2.3都是不合理的);

(2)舍入误差:

浮点型变量存储单位有限,有效数字也是有限的,以外的数字将会被舍去。

C.字符型数据(char)

存放字符变量,只能放一个字符。

数值型数据间的混合运算

计算时,不同类型数据之间要转换为同一类型(长度短的转化为长度长的)

字符数据整数shortintfloat所有的类型double型

 

运算符

a.强制型转换运算符(类型名)表达式

转换时,只改变其值,不改变原来的类型

如:

floatx=32767.0

i=(int)x%3

输出时:

x=32767.0i=1

b.自增自减运算符

++i;--i(使用i之前,先使i的值加减1)

i++;i--(使用i之后,再使i的值加减1)

如:

i=1;++i中++i=2,i=2;i++=1,i=2

只能用于变量,不能用于常量或表达式,其结合方向是自右向左。

C.类型转换

(1)浮点型整型舍弃浮点数后的小数部分i=3.5—i=3;

(2)整型单双精度数值不变,以浮点形式储存f=12—f=12.00000;

(3)doublefloat截取前面7位有效数字(数值不得超过float的范围);

(4)字符型整型变量将字符数据放在整型变量储存单元的低8位中;

(5)整型数据char将其低8位原封不动的送到char中;

(6)intlongint的16位送到long的低16位中,如果int为+,高16位补0;如果为-,则补1。

反之将低16位原封不动的送到int中;

(7)unsignedintlongint高位补0;

(8)非unsignedunsigned(长度相同)原样赋值。

d.逗号运算符(表达式1,表达式2)值为后者的值

如:

(1+5,1+2值为3)

并不是任何时候出现逗号都是作为逗号运算符。

 

数组

a.一维数组类型说明符数组名[常量表达式]inta[10]

引用数组时要先定义后使用。

(1)初始化(无初始化时,则元素为随机数)

定义时赋初值;inta[3]={0,1,2};

部分元素赋值:

inta[10]={0,1,2,3,4}后面5个元素自动为0;

inta[10]={0*10}不能这样给数组整体赋初值。

c.程序举例

处理fibonacci数列问题

#include

main()

{

inti;

intf[20]={1,1};

for(i=2;i<20;i++)

f[i]=f[i-2]+f[i-1];

for(i=0;i<20;i++)

{

if(i%5==0)printf(“\n”);

printf(“%12d”,f[i]);

}

Printf(“\n”);

}

运行结果:

11235

813213455

89144233377610

9871597258441816765

b.二维数组类型说明符数组名[常量表达式][常量表达式]

floata[3][10]二维数组的排序按行存放。

(1)区分定义数组a[3][4]与引用元素a[3][4]的区别;

(2)初始化

inta[2][3]={1,2,3,4,5,6};

部分赋值inta[3][4]={{1},{5},{9}};inta[3][4]={{1},{0,6},{0,0,11}};

分行赋值inta[2][3]={{1,2,3},{4,5,6}};

对全部赋值定义数组时,对第一维的长度时可以不指定,但是第二维不能省。

inta[][4]={{1,2},{2,4,3},{2}},只对部分元素赋初值而省略第一维长度,但应分行赋初值。

(3)程序举例

将二维数组行列互换,存到另一个二维数组中去。

#include

Main()

{

inta[2][3]={{1,2,3},{4,5,6}};

intb[3][2],i,j;

printf(“arraya:

\n”);

for(i=0;i<=1;i++)

{

for(j=0;j<=2;j++)

{

Printf(“%5d”,a[i][j]);

b[j][i]=a[i][j];

}

Printf(“\n”);

}

Printf(“arrayb:

\n”);

For(i=0;i<=2;i++)

{

For(j=0;j<=1;j++)

Printf(“%5d”,b[i][j]);

Printf(“\n”);

}

}

C.字符数组charc[10](一个元素存放一个字符)

也可以定义一个整型数组,用其存放字符数。

(1)初始化

逐个赋值:

charc[10]={‘i’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’}

字符个数不得超过数组长度(定义时可以省略数组数组长度)。

(2)程序举例

输出一个字符串

#include

main()

{

Charc[10]={‘I’,’’,’a’,’m’,’’,’h’,’a’,’p’,’p’,’y’};

inti;

for(i=0;i<10;i++)

printf(“%c”,c[i]);

printf(“\n”);

}

运行结果:

Iamaboy.

(3)字符串以‘\0‘为结束标志;

保证数组的长度始终大于字符串实际长度,‘\0‘只是识别标志,并非有效字符。

(二)输入输出函数

1.输入输出函数有:

putchar(输出字符)getchar(输入字符)printf(格式输出)scanf(格式输入)gets(输入字符串)puts(输出字符串)

2.在使用系统库函数时,要用预编译命令#include/#include”stdio.h”

Putchar函数

1.作用是向终端输出一个字符

2.一般形式putchar(c),其中c可以为字符型变量或整型变量(c\ch\’a’\’a’+65\65)

Getchar函数

1.作用是从终端输入一个字符

2.getchar无函数参数,一般形式getchar()

注意:

以下写法是正确的

putchar(getchar());相当于printf(“%c”,getchar());

格式输出输入函数:

Printf函数

1.输出若干个任意类型的数据(putchar只能输出字符,而且是一个字符/printf可以输出多个数据,且为任意型)

2.一般格式printf(格式控制,输出列表)

或者printf(参数1,参数2,参数3,……,参数n)

格式控制:

用双撇号括起来的字符串,也称“转换控制字符串”包括

A.格式说明:

%加格式字符组成

B.普通字符:

即需要原样输出的字符

输出列表:

需要输出的数据,可以是表达式。

格式字符:

d,i格式字符

%d十进制实际长度输出

%md指定m宽度输出,数据长小于m左端补空格,大于按实际输出

%ld输出长整型数据

%mld指定长度输出

注意:

int型%d和%ld都可以

O格式字符

%o八进制整数形式输出,输出不带符号,符号位也作为八进制数的一部分输出,即不会输出带负号的八进制数(-1用八进制输出为177777),对长整型,可用%lo格式,也可以%mo,同上

X格式字符

%x十六进制形式输出,同样无负数,同样可以用%lx和%mx

U格式字符

%u输出无符号型数据,以十进制形式输出,注意无符号型输出和其他输出输出数据的对比,详细见书(p77页)

C格式字符

%c用来输入一个字符,注意,一个整数在0—255范围内,也可以用%c输出,转换为相应字符,反之,一个字符也可以用整型输出

S格式字符

%s输入一个字符串

%ms字符串本身长度大于就全部输出,小于左端补空格%-ms在右端补空格

%m.ns只取字符串左端n个字符,左补空格

%-m.ns右补空格,若n>m,m自动取n的值

F格式字符

%f用来输出实数(double/float),以小数形式输出。

一般给出六位小数。

%m.nf输出n位小数,数值长度小于m,左端补空格,%-m.nf右端补空格。

E格式字符

%e以指数形式输出实数,用e是指数以e表示(如1.2e+02)

%E,指数用E表示

G格式字符

选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0,用G以指数形式输出时,指数要大写

—(附加格式说明字符)

输出的数字或字符在域内向左靠

注意几点:

1.除X,E,G外,其他的格式字符必须用小写字母

2.格式控制中可以输出转义字符:

字符形式

含义

Ascii代码

\n

换行,将当前位置移动到下一行开头

10

\t

水平制表(跳到下一个tab位置)

9

\b

退格,将当前位置移到本行开头

8

\r

回车,将当前位置移到本行开头,(回车不换行)

13

\f

换页,将当前位置下移到下页开头

12

\\

代表一个反斜杠字符“\”

92

\’

代表一个单引号字符

39

\’’

代表一个双引号字符

34

\ddd

1到3位八进制数代表的字符

\xhh

1到2位十六进制数所代表的字符

3.一个格式说明以%开头,如果想输出字符“%”,则应该在格式控制字符串中用连续两个%。

Scanf函数

1.一般格式:

scanf(格式控制,地址表列)

2.格式控制同printf函数,地址列表是由若干地址组成的表列,可以是变量的地址,或字符串首地址。

记得&。

3.&地址运算符,输入数据时,分隔符应该与格式控制里的相对应输入。

即用逗号分隔的,输入的时候也要用逗号分隔,没有规定的用空格和回车或者是Tab键。

4.格式说明:

与printf格式说明类似。

A.如果在%后有一个“*”附加说明符,表示跳过它指定的列数。

B.输入数据时,不能规定精度,如“%7.2f”是错的。

使用scanf函数应该注意的事项:

A.格式控制后面应当是变量地址,而不是变量名

B.如果在格式控制字符串中除了格式说明以外还有其他字符,则在输入数据时,在对应位置应输入与这些字符相同的字符。

如果格式控制里有空格分隔,输入的时候只能比格式控制里的空格数多。

C.在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入。

D.在输入数据时,遇到以下情况认为该数据结束:

1遇到空格,或者按回车,tab键;

2按指定的宽度结束,如“%3d”,只取3列;

3遇到非法输入

Puts函数

1.一般形式:

puts(字符数组)

2.作用是将一个字符串(以‘\0’结束的字符序列)输出,可以包含转义字符。

Gets函数

1.作用是将一个字符串输入到一个数组,并且得到一个函数值。

该函数值是字符属猪的起始地址。

2.一般形式gets(字符数组)eg:

gets(str);

注意:

用puts和gets只能一次处理一个字符串

各类运算符

1.C语言运算符简介:

算术,关系,逻辑,位运算,赋值,条件,逗号,指针运算符,sizeof,强制类型转换,分量运算符,下标运算符。

常见的运算符归纳:

1.算术运算符(+,-,*,/,%)

A.说明:

两个整数相除结果为整数,有负数参与,多半遵循“向零取整”的方法,取整数后向零靠拢。

B.在表达式求值的时候,先按运算符的优先级别高低次序执行,优先级别相同的,按规定的“结合方向”处理,详细见书本附录。

C.如果一个运算符两侧数据类型不同,先自动经行转换

转换规律:

高Doublefloat

Long

Unsigned

低Intchar,short

2.强制类型转换

A.一般形式:

(类型名)(表达式)

B.表达式应该用括号括起来,注意区别(int)(x+y)和(int)x+y,第一个是转换x+y,第二个只转换了x

C.在强制类型转换时,得到一个中间数据,原来变量的类型未发生变化

3.自增自减运算符

A.++i,--i;(在使用之前先使i的值增加或者减少1)i++,i--;(先计算i的值,再使i的值增加或者减少1);

B.只能用于变量,不能用于常量和表达式。

C.++,--的结合方向是自右至左

D.常用于循环语句中,使循环变量自动增加1,也用于指针变量,使之指向下一个地址。

4.赋值运算符

A.赋值符号“=“称为赋值运算符,它的作用是将一个数据给一个变量。

也可以将一个表达式的值赋值给一个变量

B.如果赋值运算符两侧的类型不一致,但都是数值或者字符型的时候,转换规则:

见书(60-61页)

5.复合的赋值运算符(10种)

+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=

Eg:

a+=3相当于a=a+3

6.赋值表达式

格式:

变量赋值运算符表达式eg:

a=5;a=b=c=5;

运算规则:

先求运算符右侧的表达式的值,然后赋值给运算符左侧的变量

7.逗号运算符合逗号表达式

A.用一个逗号将两个表达式连接起来,是一个逗号表达式,又称为顺序求值运算符,一般形式是:

表达式1,表达式2

B.求解过程:

先求表达式1的值,再求解表达式2。

整个逗号表达式的值是表达式2的值。

C.表达式1,表达式2,表达式3……表达式n;它的值为表达式n的值

D.逗号表达式最常用于循环语句for语句中。

8.关系运算符及其优先次序

A.6种关系运算符:

<(小于)<=(小于或等于)>(大于)>=(大于或等于)(优先级相同高)

==(等于)!

=(不等于)(优先级相同低)

B.关系运算符的优先级低于算术运算符,高于赋值运算符

9.关系表达式

A.定义:

用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符表达式)连接起来的句子,称关系表达式。

B.关系表达式的值是一个逻辑值,即“真”或“假”。

在逻辑运算中,1代表真,0代表假。

Eg:

d=a>b,则d的值为1.

10.逻辑运算符

A.3种逻辑运算符:

&&逻辑与||逻辑或!

逻辑非

&&和||是双目运算符,要求有两个运算量,!

是一目运算符,只要求有一个运算量。

B.注意:

已知&&或者||两边左边已经确定了值,那么右边不做运算。

在&&中,两真才为真,一假便为假。

||中两假才为假,有一真便为真。

C.优先次序:

先!

,后&&,后||

与其他运算符的优先次序:

(由高到低排列)

(非)

算术运算符

关系运算符

&&和||

赋值运算符

D.逻辑表达式的值应该是一个逻辑量,运算结果不是0,就是1.表达式从左至右求解。

 

(三)c语句

一控制语句

1.If()…else…

3种形式:

①if()语句

②if()语句一else语句二

③if()…

elseif()…

……

else…

if语句的嵌套:

if()

if()语句1

else语句2

else

if()语句3

else语句4

else总是与他上面的最近的未配对的if配对。

If语句后面的表达式一般为逻辑表达式或关系表达式。

题目:

给一个不多于5位的正整数,要求:

一、求它是几位数,二、逆序打印出各位数字。

1. 程序分析:

学会分解出每一位数,如下解释:

(这里是一种简单的算法) 

2.程序源代码:

#include

main()

{

longa,b,c,d,e,x;

scanf("%ld",&x);

a=x/10000;/*分解出万位*/

b=x%10000/1000;/*分解出千位*/

c=x%1000/100;/*分解出百位*/

d=x%100/10;/*分解出十位*/

e=x%10;/*分解出个位*/

if(a!

=0)printf("thereare5,%ld%ld%ld%ld%ld\n",e,d,c,b,a);

elseif(b!

=0)printf("thereare4,%ld%ld%ld%ld\n",e,d,c,b);

elseif(c!

=0)printf("thereare3,%ld%ld%ld\n",e,d,c);

elseif(d!

=0)printf("thereare2,%ld%ld\n",e,d);

elseif(e!

=0)printf("thereare1,%ld\n",e);

}

题目:

输入三个整数x,y,z,请把这三个数由小到大输出。

1.程序分析:

我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

2.程序源代码:

#include

voidmain()

{

int x,y,z,t;

scanf("%d%d%d",&x,&y,&z);

if (x>y)

{t=x;x=y;y=t;} /*交换x,y的值*/

if(x>z)

{t=z;z=x;x=t;}/*交换x,z的值*/

if(y>z)

{t=y;y=z;z=t;}/*交换z,y的值*/

printf("small to big:

 %d %d %d\n",x,y,z);

}

2.for()…

一般形式:

for(表达式1;表达式2;表达式3)语句

题目:

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?

都是多少?

1.程序分析:

可填在百位、十位、个位的数字都是1、2、3、4。

组成所有的排列后再去掉不满足条件的排列。

 

2.程序源代码:

#include

main()

{

inti,j,k;

printf("\n");

for(i=1;i<5;i++)/*以下为三重循环*/

for(j=1;j<5;j++)

for(k=1;k<5;k++)

{

if(i!

=k&&i!

=j&&j!

=k)/*确保i、j、k三位互不相同*/

printf("%d,%d,%d\n",i,j,k);

}

}

题目:

古典问题:

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1.程序分析:

 兔子的规律为数列1,1,2,3,5,8,13,21....

2.程序源代码:

#include

main()

{

longf1,f2;

inti;

f1=f2=1;

for(i=1;i<=20;i++)

{

printf("%12ld%12ld",f1,f2);

if(i%2==0)printf("\n");/*控制输出,每行四个*/

f1=f1+f2;/*前两个月加起来赋值给第三个月*/

f2=f1+f2;/*前两个月加起来赋值给第三个月*/

}

}

3.while()…

例:

求Sn=a+aa+aaa+…+aa…a之值,n,a由键盘输入。

#include

voidmain()

{

inta,n,i=1,sn=0,tn=0;

printf("a,n=:

");

scanf("%d,%d",&a,&n);

while(i<=n)

{

tn=tn+a;

sn=sn+tn;

a=a*10;

++i;

}

printf("a+aa+aaa+…+aa…a=%d\n",sn);

}

4.do…while()

题目:

求1+2+3+…+100的值。

#include

voidmain()

{

intsum=0,i;

i=1;

do

{

sum=sum+i;

i++;

}

while(i<=100);

printf(“sum=%d\n”,sum);

}

5.continue…

题目:

把100—200之间的不能被三整除的数输出。

#include

voidmain()

{

intn;

for(n=100;n<=200;n++)

{

if(n%3==0)

continue;

printf(“%d\n”,n);

}

}

6.break…

题目:

计算r=1到r=10时的圆面积,直到面积大于100为止。

#include

voidmain()

{

intr;

floatpi=3.14159f,area;

for(r=1;r<=10;r++)

{

area=pi*r*r;

if(area>100)break;

printf("r=%d,area=%f\n",r,area);

}

}

7.switch…括号内的表达式,其值可以是整型、字符型、枚举型数据。

Case只是起语句标号作用,并不是在该处进行条件判断。

题目:

输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:

以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊

      情况,闰年且输入月份大于3时需考虑多加一天。

2.程序源代码:

#include

main()

{

intday,month,year,sum,leap;

printf("\npleaseinputyear,month,day\n");

scanf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1