奥赛辅导C语言基础.docx

上传人:b****7 文档编号:8976157 上传时间:2023-02-02 格式:DOCX 页数:22 大小:40.12KB
下载 相关 举报
奥赛辅导C语言基础.docx_第1页
第1页 / 共22页
奥赛辅导C语言基础.docx_第2页
第2页 / 共22页
奥赛辅导C语言基础.docx_第3页
第3页 / 共22页
奥赛辅导C语言基础.docx_第4页
第4页 / 共22页
奥赛辅导C语言基础.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

奥赛辅导C语言基础.docx

《奥赛辅导C语言基础.docx》由会员分享,可在线阅读,更多相关《奥赛辅导C语言基础.docx(22页珍藏版)》请在冰豆网上搜索。

奥赛辅导C语言基础.docx

奥赛辅导C语言基础

奥赛辅导C语言

第1课算法

一.教学目标

了解算法、算法的表示方法和结构化编程。

二.教学重点

算法的表示方法

三.教学内容

1.算法:

做某事所用的方法。

(举一些日常生活中的事例)

注意:

在计算机界描述算法时,常常要考虑计算机的特点(循环)

例:

求1×2×3×4×5

原始方法:

依次乘下去。

新算法:

(引入流程图)

在介绍算法时,介绍流程图表示法。

2.从此算法引出算法的特性:

有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性

3.结构化程序的三种基本结构:

顺序、选择、循环

4.除了流程图表示算法外,还有N-S图示法、伪代码法、计算机语言法。

5.伪代码法例:

求1×2×3×4×5

开始

P赋初值为1;I赋初值为2;

当I<=5时,循环开始

P=P×I;

I=I+1

循环结束

打印P的值

结束

6.结构化程序设计方法:

自顶向下、逐步细化、模块化设计、结构化编码

练习:

P372.6

⑴有50个学生,要求将他们之中成绩在80分以上者打印出来。

(用n表示学生学号,n1代表第一个学生学号,ni代表第I个学生学号。

用g代表学生成绩,gi代表第I个学生成绩。

)(此题难了,要在学了数组后再做)

⑵判定2000——2500年中的每一个是否闰年,将结果输出。

闰年:

①能被4一整除,但不能被100整除的年份②能被100整除,又能被400整除的年份。

题过难:

⑶求1-(1/2)+(1/3)-(1/4)+……+(1/99)-(1/100)

⑷对一个大于或等于3的正整数,判断它是不是一个素数

素数:

除了1和该数本身之外,不能被其他任何整数整除的数。

第2课数据类型、运算符与表达式

一.教学目标

了解数据类型、运算符与表达式

二.教学重点

数据类型、运算符的先后顺序

三.教学内容

1.数据结构:

指数据的组织形式

数据有常量和变量之分

2.常量和符号常量

常量:

在程序运行过程中,其值不能被改变的量称为常量。

常量分为:

整形常量、实型常量、字符常量。

符号常量指在程序中用#DEFINE(预定义的方式)定义一个标识符代表一个常量。

3.变量

变量:

其值可以改变的量称为变量。

变量有一个名字,在内存中占据一定的存储单元。

变量名:

由字母、数字和下划线三种字符组成,且第一个字符必须是字母或下划线。

注意:

大写字母和小写字母被认为是两个不同的字符,一般,变量名用小写字母表示。

建议:

变量名的长度不要超过8个字符。

变量遵从“先定义,后使用”,目的是:

⑴能保证程序中变量名使用正确。

⑵每一个变量被指定为一确定类型,编译时,就能为其分配相应的存储单元。

⑶每一变量属于一确定类型,便于编译时,检查该变量所进行的运算是否合法。

数据按类型分可分为整型、实型、字符型。

各种变量的定义:

格式:

类型变量名列表;

整形数据

4.整形常量①十进制整数②八进制整数,以O开头③十六进制整数,以OX开头

5.整形变量

⑴每一个整型变量在内存中占2个字节。

⑵整型变量可分为

类型

类型

比特数

最小取值范围

有符号基本整型

[signed]int

16

-32768~32767(-215~215-1)

无符号基本整型

unsignedint

16

0~65535(0~216-1)

有符号短整型

[signed]short[int]

16

-32768~32767(-215~215-1)

无符号短整型

unsignedshort[int]

16

0~65535(0~216-1)

有符号长整型

[signed]long[int]

32

-231~231-1

无符号长整型

unsignedlong[int]

32

0~232-1

6.整型变量的定义

格式:

类型变量名列表;

如:

inta,b;

7.整形数据的溢出

注意:

如在一个整常量后面加一个字母l或L,则认为是longint型常量。

实型数据

8.实型常量

两种表示方法:

①十进制小数形式,如1.23;②指数形式,如123e3或123E3。

注意:

“规范化的指数形式”,即在字母E之前的小数部分中,小数点左边只能有一位非零的数字。

9.实型变量

⑴一个实型数据一般在内存中占4个字节。

并按指数形式存储在内存中。

⑵实型变量的分类

类型

类型

比特数

有效数字

数值范围

单精度

float

32

6~7

10-37~1038

双精度

double

64

15~16

10-307~10308

长双精度

longdouble

128

18~19

10-4931~104932

⑶实型数据的舍入误差

因为实型变量是由有限的存储单元组成,因此有效位以外的数字将被舍去,由此可能会产生一些误差。

如1.0/3*3的结果并不等于1。

10.实型常量的类型

实型常量默认为双精度型,可以在实型常量后加F来规定实型常量为单精度型。

字符型数据

11.字符常量

用单引号括起来的一个字符。

如’a’

转义字符及其表作用

字符形式

含义

ASCII代码

\n

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

10

\t

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

9

\b

退格,将当前位置称到前一列

8

\r

回车,将当前位置称到本行开头

13

\f

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

12

\\

反斜杠字符“\”

92

\’

单引号(撇号)字符

39

\”

双引号字符

34

\ddd

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

\xhh

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

三个特殊的字符的ASCII值:

(space)空格32;A65;a97

12.字符变量char变量名

注意:

一个字符型变量只能用来存放一个字符。

13.字符变量的存储

字符变量是把该字符相应的ASCII代码存储到内存单元中。

因此只占一个字节。

14.字符串常量

用双引号括起来的一串字符。

如“HOW”

字符串常量存储时会自动在字符串后加一个’\0’做为字符串的结束,即“HOW”在内存中占4个字节。

注意:

一定要区分字符常量与字符串常量,字符串没有专门的变量,要想存放保存,必须使用字符数组。

变量赋初值可有几种形式

⑴inta=4;

⑵inta;

a=4;

⑶inta,b,c=4;

各类数值型数据间的混合运算:

遵从图1

图中横向向左的箭头表示必定的转换

算术运算符和算术表达式

1.基本的算术运算符

+、-、*、/、%(两侧必须为整型数据)++,--

2.各类运算符的大致优先级顺序:

初等运算符——单目运算符——算术运算符——关系运算符——逻辑运算符——条件运算符——赋值运算符——逗号运算符。

赋值表达式格式:

变量=表达式,其中“=”为赋值运算符。

逗号运算符:

表达式1,表达式2

练习:

P653.6、3.7(在做此练习前,必须讲一些C语言程序的例子)

第3课顺序程序设计

一.教学目标

学会简单的C语言顺序编程。

二.教学重点

C语言顺序编程中的常用语句。

三.教学内容

1.C语言分5类:

⑴控制语句9种①if()~else(条件语句)

②for()~(循环语句)

③while()~(循环语句)

④do~while()(循环语句)

⑤continue(结束本次循环语句)

⑥break(中止执行switch或循环语句)

⑦switch(多分支选择语句)

⑧goto(转向语句)

⑨return(从函数返回语句)

()表示其中是一个条件表达式,~表示内嵌的语句。

⑵函数调用语句:

如printf(″ThisisaCstatement.″);

⑶表达式语句。

如:

a=3;

⑷空语句。

如:

⑸复合语句,又称分程序。

如:

{z=x+y;

T=z/100;

Printf(″%f″,t);

}

2.输入输出是以计算机主机为主体而言的,从计算机向外部输出设备输出数据称为“输出”,从外部向输入设备输入数据称为“输入”。

C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。

C语言的标准输入输出函数都放在函数库“stdio.h”文件中,所以要库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。

如:

#include或#include″stdio.h″

3.printf格式字符

格式字符

说明

d,i

以带符号的十进制形式输出整数(正数不输出符号)

O

以八进制无符号形式输出整数(不输出前导符O)

x,X

以十六进制无符号形式输出整数(不输出前导符Ox),用x则输出十六进制数的a~f时以小写形式输出。

用X时,则以大写字母输出

u

以无符号十进制输出整数

c

以字符形式输出,只输出一个字符

s

输出字符串

f

以小数形式输出单、双精度数,隐含输出6位小数。

e,E

以标准指数形式输出单、双精度数,数字部分小数位数为6位。

用e时指数以“e”表示(如1.2e+02),用E时指数以“E”表示(如1.2E+02)

g,G

选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。

用G时,若以指数形式输出,刚指数以大写表示

4.printf的附加格式说明字符

字符

说明

字母l

用于长整型整型数据,可加在格式符d、O、x、u前面

m(代表一个正整数)

数据最小宽度

n(代表一个正整数)

对实数,表示输出n位小数;对字符串,表示截取的字符个数

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

例:

printf("%-3s\n","computer");

5.scanf格式字符

使用scanf函数时应注意的问题:

⑴scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。

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

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

⑷在输入数据时,遇以下情况时该数据认为结束。

1遇空格,或按“回车”或“跳格(TAB)”键。

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

3遇非法输入。

练习:

设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆柱体积。

用SCANF输入数据,输出计算结果,输出时要求有说明,取小数点后2位数字。

请编程序。

第4课选择结构程序设计

1.关系运算符和关系表达式,逻辑运算符和逻辑表达式。

注意它们的运算顺序。

2.if语句的三种形式

⑴if(表达式)语句;

⑵if(表达式)语句1;

else语句2;

⑶if(表达式)语句1;

elseif(表达式2)语句2;

elseif(表达式3)语句3;

……

else语句n;

3.例题:

5.2

4.if语句的嵌套

If(表达式1)

If(表达式2)语句1;

else语句2;

else

if(表达式3)语句3;

else语句4;

5.例题:

5.3C源程序\5-2.c

6.条件运算符格式

表达式1?

表达式2:

表达式3

7.switch语句格式

Switch(表达式)

{case常量表达式1:

语句1;

Case常量表达式2:

语句2;

Case常量表达式n:

语句n;

Default:

语句n+1;

}

注意:

①当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。

②每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象(对表达式的同一个值,有两种或多种执行方案)。

③各个case和default的出现次序不影响执行结果。

4在执行switch语句时,根据switch后面表达式的佱找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。

5为使流程执行一个case分支后跳出switch结构,可以用一个break语句来达到此目的。

C源程序\SWITCH1.C

练习:

6-1⑴有3个整数a,b,c由键盘输入,输出其中最大的数。

6-2⑵给出一百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。

90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为’、‘E’。

第5课循环控制

1.用if语句和goto语句构成循环;

例:

Main()

{inti,sum=0;

i=1;

loop:

if(i<=100)

{sum=sum+i;

i++;

gotoloop;}

printf(“%d”,sum);

}

2.while语句格式

while(表达式)语句

例:

Main()

{inti,sum=0;

i=1;

while(i<=100)

{sum=sum+i;

i++;}

printf(“%d”,sum);

}

3.dowhile语句格式

do循环体语句

while(表达式);

Main()

{inti,sum=0;

i=1;

do

{sum=sum+i;

i++;}

while(i<=100);

printf(“%d”,sum);

}

注意while和dowhile循环的区别:

while是先判断再执行,dowhile是先执行一次再进行判断,即至少执行一次。

4.for语句格式

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

执行过程:

⑴先求解表达式1.

⑵求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,后执行下面第⑶步。

若为假(值为0),则结束循环,转到第⑸步。

⑶求解表达式3.

⑷转回上面第⑵步,继续执行。

⑸循环结束,执行for语句下面的一个语句。

也可以理解为以下格式

for(循环变量赋初值;循环条件;循环变量增值)语句

Main()

{inti,sum=0;

for(i=1;i<=100;i++)sum=sum+i;

printf(“%d”,sum);

}

5.循环的嵌套

注意循环可以嵌套,但不能交叉嵌套。

6.break语句

用于从循环语句或switch语句中跳出。

7.continue语句

用于结束本次循环

例:

main()

{intn;

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

{if(n%3==0)

continue;

printf("%d",n);

}

}

8.例:

判断m是否是素数

#include

main()

{intm,i,k;

scanf("%d",&m);

k=sqrt(m);

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

if(m%i==0)break;

if(i>=k+1)printf("%disaprimenumber\n",m);

elseprintf("%disnoaprimenumber\n",m);

}

练习:

6-3⑴求100~200间的全部素数C源程序\LIAN6-3.C

6-4⑵一皮球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下。

求它在第10次落地时,共经过多少m?

第10次反弹多高?

C源程序\LIAN6-4.C

 

第6课数组

1.变量与数组的区别

数组可以理解成是一组特殊的变量,它们的类型一样,并且连续,因此便于使用循环语句调用.

2.一维数组的定义

类型说明符数组名[常量表达式]

例:

inta[10]

注意:

从定义数组时数组是0开始,即a[0].

3.一维数组的引用

数组名[下标]

例7.1C源程序\7-1.c

例7.2

4.二维数组的定义:

类型说明符数组名[常量表达式][常量表达式]

例:

floata[3][4],b[5][10];

5.二维数组的引用:

数组名[下标][下标]

例:

7.4C源程序\7-4.c

6.字符数组的定义:

(同数值型数组的定义)

例:

charc[10];

由于字符型与整型是互相通用的,因此上面的定义也可改为:

Intc[10];

例:

chardiamond[][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}}

7.字符串与字符串结束标志

“/0”做为字符串的结束标志。

8.字符数组的输入输出

⑴以逐个字符输入输出的方法,用格式符“%C”。

⑵将整个字符串一次输入或输出。

用格式符“%S”格式符。

用此方式输出时,在后跟数组名。

用此方式输入时,后跟数组名,不再加"&"符号,并且,输入时空格做为分隔符。

9.字符串处理函数。

⑴puts(字符数组)

作用:

将一个字符串输出到终端。

⑵gets(字符数组)

作用:

从终端输入一个字符串到字符数组,并且得到一个函数值。

练习:

已有一个已排好序的数组,现输入一个数,要求按原来排序的规律将它插入数组中。

第7课函数

1.函数需要注意的地方

⑴每一个源程序文件由一个或多个函数组成。

⑵一个C程序由一个或多个源程序文件组成。

⑶C程序的执行从main函数开始,调用其他后流程回到main函数,main函数是系统定义的。

⑷函数不能嵌套定义,函数间可以互相调用,但不能调用main函数。

2.无参函数的定义形式

类型标识符函数名()

{声明部分

语句

}

无参函数一般不需要带回函数值,因此可以不写类型标识符。

3.有参函数定义形式

类型标识符函数名(形式参数表列)

{声明部分

语句

}

例:

Intmax(intx,inty)

{intz;

Z=x>y?

x:

y;

Return(z);

}

4.形式参数和实际参数

在定义函数时,函数名后面括弧中的变量名称为“形式参数”(简称“形参”),在主调函数中调用一个函数时,函数名后面括弧中的参数称为“实际参数”(简称“实参”)。

注意:

⑴实参可以是常量、变量或表达式,但要求它们有确定的值,在调用时将实参的值赋给形参。

⑵在被定义的函数中,必须指定形参的类型。

⑶实参与形参的类型应相同或赋值兼容。

⑷实参变量对形参变量的数据传递是单向传递,只由实参传给形参,而不能由形参传回给实参。

例8.2C源程序\8-2.c

注意:

返回值类型如与函数类型不同,以函数类型为主。

5.函数调用的一般形式

函数名(实参列表)

6.对被调用函数的声明和函数原型

⑴必须是已经存在的函数。

⑵还应该在本文件开头用#include命令定义。

⑶如果使用用户自己定义的函数,一般还应该在主调函数中对被调用的函数作声明。

7.函数的嵌套调用

函数在定义时是互相平行、独立的,不能包另一个函数,但在调用时可以嵌套调用。

8.函数的递归调用

函数的递归调用其实是一种特殊的嵌套调用,即(自己嵌套自己,调用自己)

9.数组作为函数参数

⑴数组元素和函数实参

⑵数组名可作函数参数,此时,实参与形参都应用数组名(或用指针变量)

例:

8-11C源程序\8-11.c

10.局部变量和全局变量

局部变量:

在函数内部定义的变量,它只在本函数范围人有效。

全局变量:

在函数之外定义的变量,它可以为本文件中其他函数所共用。

⑴设全局变量的作用:

增加了函数间联系的渠道。

⑵建议不是非常必要时不要作用全局变量,因为:

1全局变量在程序的全部执行过程中都占用存储单元

2它使函数的通用性降低了,如果要将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。

但若该外部变量与其他文件的变量同名时,就会出现问题。

3使用全局变量过多,会降低程序的清晰性,人们往往难以清楚地判断出每个瞬时各个外部变量的值。

⑶如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。

11.动态存储方式与静态存储方式

静态存储方式:

用static声明静态变量。

寄存器存储方式:

用register声明寄存器变量。

12.内部函数和外部函数

用static定义内部函数。

即只能被本文件中的其他函数所调用。

用extern定义外部函数,即能被其它文件中的其他函数所调用。

默认为外部函数。

第11章结构体与共用体

有时需要将不同类型的数据组合成一个有机的整体,以便于引用。

这些组合在一个整体中的数据是互相联系的。

1.一般定义形式为:

Struct结构体名

{

成员表列

}变量名表列;

如:

Structstudent

{intnum;

Charname[20];

Charsex;

Intage;

Floatscore;

}student1,student2;

2.结构体变量的引用:

结构体变量名.成员名

如:

student1.num=10010;

3.结构体数组

如:

structstudent

{intnum;

……

};

Structstrudentstu[3]={{……},{……},{……}};

4.指向结构体数组的指针

例11.4指向结构体数组的指针的应用。

5.用指向结构体的指针作函数参数

其实质与指向其它类型的指针作函数参数一样,即用指针作函数形参,接收其它类型传送过来的地址。

6.用指针处理链表:

链表是动态地进行存储分配的一种结构。

1)建立链表

a)建立链表函数程序

2)输出链表

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

当前位置:首页 > 解决方案 > 学习计划

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

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