C语言教程.docx

上传人:b****1 文档编号:665984 上传时间:2023-04-29 格式:DOCX 页数:98 大小:299.69KB
下载 相关 举报
C语言教程.docx_第1页
第1页 / 共98页
C语言教程.docx_第2页
第2页 / 共98页
C语言教程.docx_第3页
第3页 / 共98页
C语言教程.docx_第4页
第4页 / 共98页
C语言教程.docx_第5页
第5页 / 共98页
C语言教程.docx_第6页
第6页 / 共98页
C语言教程.docx_第7页
第7页 / 共98页
C语言教程.docx_第8页
第8页 / 共98页
C语言教程.docx_第9页
第9页 / 共98页
C语言教程.docx_第10页
第10页 / 共98页
C语言教程.docx_第11页
第11页 / 共98页
C语言教程.docx_第12页
第12页 / 共98页
C语言教程.docx_第13页
第13页 / 共98页
C语言教程.docx_第14页
第14页 / 共98页
C语言教程.docx_第15页
第15页 / 共98页
C语言教程.docx_第16页
第16页 / 共98页
C语言教程.docx_第17页
第17页 / 共98页
C语言教程.docx_第18页
第18页 / 共98页
C语言教程.docx_第19页
第19页 / 共98页
C语言教程.docx_第20页
第20页 / 共98页
亲,该文档总共98页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言教程.docx

《C语言教程.docx》由会员分享,可在线阅读,更多相关《C语言教程.docx(98页珍藏版)》请在冰点文库上搜索。

C语言教程.docx

C语言教程

01章C语言程序的构成

与C++、Java相比,C语言其实很简单,但却非常重要。

因为它是C++、Java的基础。

不把C语言基础打扎实,很难成为程序员高手。

一、C语言的结构

先通过一个简单的例子,把C语言的基础打牢。

/*clang01_1.c*/

#include

intmain(void)

{

printf("这是劝学网的C语言教程。

\n");

return0;

}

C语言的结构要掌握以下几点:

1.C语言的注释是/*···*/,而不是//···,//是C++的单行注释,有的C语言版本也认可。

2.C语言区分大小写,每句以分号结尾。

3.C语言程序是从main函数开始的。

函数的返回值如果缺省则为int,而不是void。

4.函数必须用return来返回。

即使void类型也不建议省略。

5.使用函数时须包含相应的头文件。

自定义的头文件用双引号,C语言自身的头文件用<···>

二、main()函数的写法与含义

main()的参数和返回值全部省略,这和上例含义相同。

省略写法是一种很不好的习惯。

main()intmain(void)

{{

···等同于···

}}

main()的参数是一种不限个数的写法,argc代表参数的个数,真正的参数是放在argv[]数组里面的。

注意:

当数组当参数用时,数组被降格为指针。

初学者先照着样子写,以后小雅会详细说明指针和数组的区别。

intmain(intargc,char*argv[])intmain(intargc,char**argv)

{{

···也可写成···

}}

三、头文件的意义

每个C程序通常分为两个文件。

一个文件用于保存程序的声明(declaration),称为头文件。

另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。

C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀。

头文件的内容也可以直接写C程序中,但这是很不好的习惯。

许多初学者用了头文件,却不明其理。

在此略作说明。

1.通过头文件来调用库功能。

在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。

用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。

编译器会从库中提取相应的代码。

2.头文件能加强类型安全检查。

如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。

关于头文件的内容,初学者还必须注意。

1.头文件中可以和C程序一样引用其它头文件,可以写预处理块,但不能写语句命令。

2.可以申明函数,但不可以定义函数。

3.可以申明常量,但不可以定义变量。

4.可以“定义”一个宏函数。

注意:

宏函数很象函数,但却不是函数。

其实还是一个申明。

5.结构的定义、自定义数据类型一般也放在头文件中。

6.#include,编译系统会到C语言固定目录去引用。

#include"filename.h",系统一般首先在当前目录查找,然后再去环境指定目录查找。

四、好的风格是成功的关键

版本申明、函数功能说明、注释等是C语言程序的一部分。

不养成很好的习惯则不能成为C语言高手(专业人员)。

02章C语言的变量和数据类型

掌握变量的有效范围、基本数据类型是本章的内容。

一、基本数据类型

基本数据类型只有5种,另外加上布尔型、数组、结构类型、枚举类型等都是基本类型的一种变化。

指针是一种地址操作,必须和某一种数据类型相结合才有意义。

自定义数据类型则是将以上类型进行组合变化后重新命名而已。

1.char   字符型

2.int   整型

3.float  浮点型

4.double  双精度浮点型

5.void   无类型

不同的C语言版本都扩充了许多自己的类型,这些全是基本类型的变化(主要是数据范围的变化),扩充的修饰符有2组(short和long,signed和unsigned)。

下面列出VC的基本类型及部分扩充类型,以供参考:

类型名称

字节数

其它称呼

值的范围

int

*

signed,

signedint

根据操作系统而定

unsignedint

*

unsigned

根据操作系统而定

__int8

1

char,

signedchar

-128to127

__int16

2

short,

shortint,

signedshortint

-32,768to32,767

__int32

4

signed,

signedint

-2,147,483,648to2,147,483,647

__int64

8

none

-9,223,372,036,854,775,808to9,223,372,036,854,775,807

char

1

signedchar

-128to127

unsignedchar

1

none

0to255

short

2

shortint,

signedshortint

-32,768to32,767

unsignedshort

2

unsignedshortint

0to65,535

long

4

longint,

signedlongint

-2,147,483,648to2,147,483,647

unsignedlong

4

unsignedlongint

0to4,294,967,295

enum

*

none

与int相同

float

4

none

3.4E+/-38(7digits)

double

8

none

1.7E+/-308(15digits)

longdouble

10

none

1.2E+/-4932(19digits)

标准ANSIC中没有布尔型,只有布尔表达式,但不同的C语言版本有可能扩充。

布尔型只有2个值“真”、“假”,数值0表示“假”,0以外数值全当作“真”处理。

二、变量定义

变量定义要注意以下几方面:

1.变量定义必须有一数据类型。

2.变量定义时可以赋初值,也可以不赋初值。

3.几个变量可以同时定义。

4.不同类型的变量赋值时,小类型的变量可以直接赋给大的,大类型的变量赋给小类型的变量时必须强制转换。

.NET的编译器做了许多防错处理,使得不强制转换也不出问题。

大家仍不可忘记类型转换,否则将来程序移植时会带来许多麻烦。

#include

intmain(void)

{

unsignedcharu_char=109;//定义并初始化

charcharC;//只定义不赋值

doubledoubleX=200,doubleY;//2变量同时定义

charC=u_char;//类型的范围相同,无须强制转换

printf("u_char=%c\n",u_char);

printf("charC=%c\n",charC);

printf("u_char=%d\n",u_char);

printf("charC=%d\n",charC);

doubleY=charC;//小类型->大类型

charC=(char)doubleX;//大类型->小类型

printf("doubleY=%e\n",doubleY);

printf("charC=%d\n",charC);

return0;

}

三、变量命名

C语言的变量命名是很自由的,不同的系统有各自的规则,如UNIX主张用小写并用下划线分割意思(例:

new_value)。

Windows主张大小写混写(例:

NewValue)。

中国主张尽可能用英文,而日本更喜欢用汉字的读音。

甚至不同企业的命名规则也不一样,但不管什么风格,都必须遵守C语言的几点规则。

1.不能用纯数字命名,如“123”,“849”等。

2.不能有空格和运算符,如“newvalue”,“two+three”。

3.不能用C语言的关键字(参见下表)、扩充关键字。

auto

double

int

struct

break

else

long

switch

case

enum

register

typedef

char

extern

return

union

const

float

short

unsigned

continue

for

signed

void

default

goto

sizeof

volatile

do

if

static

while

四、易忽视的地方

char型和unsignedint是同一类型,字符其实就是无符号整型,因此下面几种写法实际上是一样的。

#include

intmain(void)

{

charch1=109;

__int8x1=109;

charch2='m';

unsignedintx2='m';

printf("ch1=%c\n",ch1);//字符方式输出

printf("ch1=%d\n",ch1);//整型方式输出

printf("x1=%c\n",x1);//字符方式输出

printf("x1=%d\n",x1);//整型方式输出

printf("ch2=%c\n",ch2);//字符方式输出

printf("ch2=%d\n",ch2);//整型方式输出

printf("x2=%c\n",x2);//字符方式输出

printf("x2=%d\n",x2);//整型方式输出

return0;

}

注意:

字符用单引号,而以后学的字符串是用双引号的。

03章字符的输入输出

前2章用到的printf()函数,是C语言中的带格式的标准输出函数。

C语言的函数都封装在不同的函数库里面,编程时要用到某个函数时,只要用include语句申明一下,被申明过的函数库中的所有函数就可以在程序的任何地方使用。

这2章要讲述的基本输入输出函数,都在stdio.h中被定义。

一、字符的输入输出『getchar(),putchar()』

函数getch()是从终端输入一个字符。

注意:

是一个字符,也就是说,该函数调用一次只能得到一个字符,想要得到若干字符,只能调用若干次。

函数putchar()是向终端输出一个字符。

注意:

这儿也是一个字符,也就是说,该函数调用一次只能输出一个字符,要输出若干字符,只能调用若干次。

#include

intmain(void)

{

charich1;

intich2,ich3;

charch1='q';

charch2='u';

charch3='a';

charch4='n';

 

ich1=getchar();//字符类型实际是整型,只是范围小点而已

ich2=getchar();//所以字符赋给整数变量没有关系

ich3=getchar();//这三句在屏幕上输入“xue”后回车

putchar(ch1);

putchar(ch2);

putchar(ch3);

putchar(ch4);

putchar(ich1);

putchar(ich2);

putchar(ich3);

putchar('\n');//这是回车字符

return0;

}

上例中调用了3次getchar()函数,输入时请注意:

1.如果正好输入3个字符后回车,则3个字符分别赋给了相应的三个变量。

2.如果输入的字符数大干3个,则多余的被会扔掉。

3.如果输入2个字符后回车,则回车符被赋给了第3个变量。

4.如果输入1个字符后回车,则第1个变量得到了这个字符,而第2个变量则得到的是回车,第3个变量还没有得到,所以系统还在继续等待你输入第3个字符。

5.如果不输入而直接敲回车,则你必须敲3次回车,3个变量全等于回车。

6.getchar()的返回值不是char,而是int。

因此当得到超出char范围的数据时要注意。

二、改进后的字符输入函数

上面这些令人不满的地方,主要是由于getchar()函数使用了键盘缓冲区,一直等到有回车时,getchar()函数才接受字符。

因此有人对此函数进行了扩充,函数名为getche(),不再使用键盘缓冲,输入的字符立即就能被接受。

这个函数不是存放在stdio.h中,而是存放在conio.h中。

上面程序如下修改便好用多了。

类似函数还有很多,如getch(),这和getche()的区别是,getch()函数在输入后并不显示在屏幕上,其它功能和getche()相同,也是定义在conio.h中。

#include

#include

intmain(void)

{

charich1;

intich2,ich3;

charch1='q';

charch2='u';

charch3='a';

charch4='n';

 

ich1=getche();//改进后的字符输入函数

ich2=getche();

ich3=getche();

putchar('\n');//这是回车字符

putchar(ch1);

putchar(ch2);

putchar(ch3);

putchar(ch4);

putchar(ich1);

putchar(ich2);

putchar(ich3);

putchar('\n');//这是回车字符

return0;

}

三、转义字符

前面的例子中,我们已经看很多“\n”,它表示输出时显示一个回车。

回车字符是控制字符,无法输入在字符串中间。

因此,C语言用“转义字符”来代替这一类的控制字符。

注意:

%的输出并不是用“\%”表示,而是用“%%”表示,好象就这一个是特殊的。

字符形式

功  能

\0

空字符(NULL)

\n

换行

\t

横向跳格(Tab)

\v

竖向跳格(|)

\b

退格

\r

回车

\f

换页字符

\\

反斜杠"\"字符

\'

单引号(撇号)字符

\"

双引号字符

\a

响铃字符

\?

问号字符

%%

百分号字符

\ddd

1~3位8进制数所代表的字符

\xhh

1~2位16进制数所代表的字符

04章附带格式的输入输出

printf()函数和scanf()函数中的f是format的缩写,这里面用到的“格式”,在C语言其它地方也有很广的应用。

一、格式输出『printf()』

前面已经说过,一个字符用%d格式就可以输出其ASCII码即字符的整数值。

用%c格式则输出这个字符。

如果用%f格式,则小数的方式输出。

#include

intmain(void)

{

intdays=360;

//“劝学网”三字的ASCII码是“C8B0”“D1A7”“CDF8”

printf("\xC8\xB0\xD1\xA7\xCD\xF8\t小雅\n");//显示:

劝学网{TAB}小雅

printf("北京奥运还有:

%d天\n",days);

printf("\a\a");//“嘟嘟”

//以下三行写在同一行

printf("%s","这是C语言");

printf("教程\t");

printf("作者:

%s\n","小雅");

//360分别以整数、小数、科学计数法显示

printf("整数:

%d\n小数:

%f\n科学:

%e\n",days,(float)days,(double)days);

//以下控制字节长度

printf("360用5个字节表示:

[%5d]\n",days);//[...]中共5字节

printf("3.6保留2位整数2位小数:

[%5.2f]\n",(float)days/100);//[...]中2位整数2位小数,

//外加小数点共5字节

return0;

}

注意:

格式符的个数必须和逗号后面的变量或常量相同,类型也必须一致或可以直接转换。

二、常见格式符号

格式字符

类型

输出格式

c

int或

win_t

以字符方式输出。

C

int或

win_t

用在printf()函数中时,以双字节字符显示;用在wprintf()函数中时,以单字节字符显示。

d

int

以整型输出。

i

int

以整型输出。

o

int

以八进制无符号整型输出。

u

int

以无符号整型输出

x

int

以十六进制小写输出(abcdef)。

X

int

以十六进制小写输出(ABCDEF)。

e

double

以科学计数法表示float和double型数据。

(其中e用小写)

E

double

以科学计数法表示float和double型数据。

(其中E用大写)

f

double

以小数表示float和double型数据。

g

double

自动地将能显示的很小或很大的数转换成%f,不能直接显示的数则转换成%e。

G

double

自动地将能显示的很小或很大的数转换成%f,不能直接显示的数则转换成%E。

n

Pointertointeger

Numberofcharacterssuccessfullywrittensofartothestreamorbuffer;thisvalueisstoredintheintegerwhoseaddressisgivenastheargument.

p

Pointertovoid

内存地址,以十六进制表示。

s

String

以字符串输出。

S

String

用在printf()函数中时,以双字节字符串显示;用在wprintf()函数中时,以单字节字符串显示。

三、格式输入『scanf()』

scanf()函数的功能与printf()函数正好相反,是输入数据的功能。

但对于初学者却有一难点,即所输入的数据存放到变量时,用到了地址操作。

地址操作也就是指针,是C语言的难点、重点,许多人不会C语言的根本原因就是没学会指针。

既然指针这么难,为什么C语言要使用指针呢?

C语言产生之前,前辈们都是用机器语言或汇编语言来编程,整天都是与内存地址打交道,C语言使用了指针,使得程序运行速度接近汇编语言,编程效率、实现的功能大大提高。

当今电脑硬件的飞速发展,使速度不成问题,于是Java、C#都基本废除了指针的使用。

#include

intmain(void)

{

intage;//年龄

charname[20];//姓名

printf("请输入你的年龄:

");

scanf("%d",&age);//&age表示变量age的地址

printf("请输入你的姓名:

");

scanf("%s",name);//name单独使用就表示变量name的地址

printf("\n姓名=%s\t年龄=%d\n",name,age);

return0;

}

上例中,2个变量当作参数使用时,一个用了&符号,一个没用,为什么呢?

原来当一个变量的类型是基本类型、或扩充基本类型时,变量的地址要用&符号再加变量名。

其它尤其指数组,单独使用变量名,就表示该变量的地址。

关于这一点,以后讲完数组和指针后还要详细讨论。

05章if语句和switch语句

一、if语句

在计算机如此普及的今天,if语句的功能介绍就不说了。

其基本语法如下:

//写法一

if(条件表达式){

语句

}

//写法二

if(条件表达式){

语句

}

else{

语句

}

//写法三

if(条件表达式){

语句

}

elseif(条件表达式){//elseif(条件表达式){语句}部分可重复n遍

语句

}

else{

语句

}

else块只能出现在if语法的最后,且最多只能出现1次。

elseif块能出现若干次,但只能在if块的后面,不能在else块的前面。

当各块里面的语句只有一句时,括号{}可以省略。

不建议省略,因为省略后下面的语句让人容易糊涂。

//易让人看错的写法//表示的是下面的意思

if(x==1)if(x==1){

if(y==1)if(y==1)

printf("x和y都等于1");printf("x和y都等于1");

elseelse

printf("我其实是y==1的else");printf("我其实是y==1的else");

}

二、switch语句

switch语句完全可以用if语句代替,每一个case块的最后一句语句要有break语句,否则将运行到下一个case块中去。

还需要注意的是,switch语句只适用于基本类型的变量作条件(包括扩充基本类型)。

default块可以省略,但小雅建议您不要省略,即使不用也加上。

//基本类型的变量//假定inti;//假定charstr[];以下是错误的

switch(变量){switch(i){switch(str){

case表达式1:

case1:

case"Sunday":

语句语句语句

break;break;break;

case表达式2:

case2:

case"Monday":

语句语句语句

break;break;break;

·········

case表达式n:

case10:

case"Friday":

语句语句语句

break;break;break;

default:

default:

default:

语句语句语句

break;break;break;

}}}

三、(?

)运算符

(表达式?

值1:

值2)这是带运算符的表达式,意思是:

如果“表达式”的值为“真”,则返回“值1”,否则返回“值2”。

if是控制语句而不是运算符,也不是表达式。

y=(x==2?

100:

50);

//写成如下相同功能的if语句

if(x==2){

y=100;

}

else{

y=50;

}

四、关于逻辑表达式

逻辑表达式又叫布尔表达式,前面章节已经说过,布尔表达式只有2个值:

TRUE和FALSE

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2