C语言程序设计课件_第1页
C语言程序设计课件_第2页
C语言程序设计课件_第3页
C语言程序设计课件_第4页
C语言程序设计课件_第5页
已阅读5页,还剩430页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

绪论Chap

1用C语言编写程序程序设计语言的发展C语言特点C程序结构基本的输入输出程序设计语言的发展机器语言汇编语言高级语言通用语言fortran、

basic

VBC

C++

(

VC++

BC++

)SQLDelphi

Powerbuild数据库语言foxbase、FoxPro网页制作工具

HTML

JavaC语言特点

C语言允许直接访问计算机内部地址,能比其他语言更容易执行硬件操作。用于解决大多数应用领域中的问题。

语法限制不太严格,程序设计自由度大,但同时不易查找错误。C语言中大小写字母代表不同含义。例1在屏幕上显示:Programming

is

fun!C程序结构主函数printf("Programming

is

fun!

\n");语句结束}输出函数C程序结构例1在屏幕上显示:Programming

is

fun!#

include

<stdio.h>void

main(

){1.任何程序都有主函数程序由若干语句组成语句由;结束换行符在屏幕上显示:Programming

is

fun!And

Programming

in

C

is

even

more

fun!编译预处理命令#

include

<stdio.h>void

main(

){printf("Programming

is

fun!

\n");printf("And

Programming

in

C

is

even

more

fun!

\n");}例2计算并显示2个数的和#

include

<stdio.h>void

main(

){int

value1,

value2,

sum;变量定义变量使用value1=5;value2=2;sum=value1+value2;printf("The

sum

is%d

\n",sum);输出结果}例3#

include

<stdio.h>void

main(

){int

value1,

value2,

sum;value1=5;value2=2;sum=value1+value2;printf("%d+%d=%d

\n",

value1,

value2,

sum);}例4计算2个数的和,以算式的形式显示#

include

<stdio.h>void

main(

){int

value1,

value2,

sum;输入提示读入2个数printf("Input

2

numbers:\n");scanf("%d%d",

&value1,

&value2);sum=value1+value2;printf("%d+%d=%d

\n",

value1,

value2,

sum);}例5输入2个数,求和。例6#

include

<stdio.h>void

main(

){int

m,

n,

resm,

resn;resm

=

fact(m);resn

=

fact(n);printf("%d,

%d\n",

resm,

resn);/*

main函数结束*/}求阶乘函数输入m,n计算m!和ni!nt

fact(int

k)/*函数定义*/{

int

i,

y

=

1;for(i

=

2;

i

<=

k;

i++)y

=

y*i;scanf("%d%d",

&m,

&n)r;eturn

y;/*计算k!*//*结果返回*//*}调用函数fact计算m!*//*调用函数fact计算n!*/基本输入输出函数格式化输出函数printf()printf(格式控制,输出参数1,...,输出参数n);printf("Hello

World!

\n");printf("%d,

%d\n"

,

resm,

resn)

;printf("sum=%d\n",

sum)

;格式控制格式控制说明%…%d:输出十进制整数%f:输出十进制浮点数%c:输出单个字符普通字符原样输出普通字母数字及符号转义字符\n,\tx=34;

y=3.14;输出:printf("

X

=

%d,

Y

=

%f

",

x,

yX)=;34,Y=3.14基本输入输出函数格式化输入函数scanf(格式控制,输入参数1,...,输入参数n);格式控制说明%…普通字符原样输入&m,&n);变量地址&m,&n);scanf("%d%d",格式控制scanf("%d,%d",要求输入:5,6scanf("m=%d,n=%d",

&m,&n);要求输入:m=5,n=6最好直接了当:scaanafn(f()"%d

%d",

&m,

&n

);C语言上机源程序test.ctest.obj可执行代码运行编译连接test.exeC语言上机上机环境:Turbo

C这是一个集编辑,编译,连接,执行和调试为一体的全屏幕语言工具。优点:系统小缺点:不支持鼠标(MS-dos方式)启动Turbo

C:MS-dos方式

TCWindows

98双击相应文件夹下tc应用程序。C语言上机使用TC编辑调入程序输入、修改程序F3

保存文件

F2编译+连接+执行查看运行结果ctrl+F9

(可能要修改错误)Alt+F5中断程序执行ctrl+Break

或ctrl+C菜单

Alt

+

字母或

F10再

选择退出

Alt

+

XC语言上机使用BorlandC

3.1执行bc.exe程序(可以使用鼠标)调入程序F3编译+连接+执行查看运行结果保存文件

F2ctrl+F9Alt

+

F5选择)菜单

Alt

+

字母

(或F10

再中断程序执行ctrl+Break

或ctrl+C窗口切换退出BCAlt+窗口号Alt+XChap

2基本数据类型和表达式常量和变量整数类型实数类型字符类型表达式数据的存储和类型转换2.1常量和变量常量常量(常数):数据123

(整型)

4.56

(实型)’A’(字符型)符号常量:用标识符表示的常量数据:PI:EPS通常用大写字母例2-1求球的表面积和体积#

include

<stdio.h>void

main(

){float

r,

s,

v;scanf("%f",

&r);}s=4.0*3.14*r*r

;

s=4.0*3.14159*r*r

;v=4.0/3.0*3.14*r*r*r

;

v=4.0/3.0*3.14159*r*r*r

;printf("s=%f,

v=%f\n",

s,

v);例2-2符号常量#

define

PI

3.14#

include

<stdio.h>void

main(

){float

r,

s,

v;scanf("%f",

&r);s=4.0*PI*r*r

;v=4.0/3.0*PI*r*r*r

;printf("s=%f,

v=%f\n",

s,

v);}#

define PI

3.141592.1.2

变量C语言中的量常量(常数):数据符号常量:用标识符表示的常量数据在程序的运行过程中,其值不能被改变变量:存放数据的工作单元在程序的运行过程中,其值可以改变变量的定义变量定义的一般形式类型名

变量表;变量名:小写字母,见名知义类型名:整型int实型(浮点型)float

double字符型char变量的定义(定义i,j,k为整型变量)(定义c为字符型变量)int

i,

j,

k;char

c;float

x,

y;double

area,

length;变量名代表内存中的一个存储单元用于存放该变量的值该存储单元的大小由变量的数据类型决定变量的定义与使用变量必须

先定义,后使用。#

include

<stdio.h>void

main(

){int

x,

y;x

=

3;y

=

x*x

;printf(“%d”,

y

)

;}一个变量名只能定义一次。变量一般都定义在程序的头上,不能定义在程序的中间或后面。变量的使用变量:

先定义,后使用先赋值,后引用#

include

<stdio.h>void

main(

){int

x,

y;x

=

3;y

=

x*x

;printf(“%d”,

y

)

;}变量的赋值赋初值:在定义变量时对它赋值 int

a

=

5,

b

=

3;赋值表达式:

int

a,b;a

=

5;b=3;输入函数:

scanf(“%d%d”,&a,&b);2.2整数类型整型常量(整数)三种表现形式十进制整数:正、负号,0-9,首位不是0例:10,123八进制整数:正、负号,0-7,首位是0例:010,0123

16进制整数:正、负号,0-9,a-f,A-F,前缀是

0x,0X例:0x10,0x123123=1111011

(B)二进制=173

(O)八进制=7B

(X)十六进制int

i=0173;int

j=0x7b;int

k=123;例:160200x10100120XA2.2.2整型变量int

ai,

bi,

ci,

di

=

0;ai

=

1;bi

=

-27;ci

=

012;整型变量的值是整数,它的取值范围有限最小取值范围[-32768,32767]2.2.3整型数据的输入输出printf(格式控制,输出参数1,...,输出参数n);scanf(格式控制,输入参数1,...,输入参数n);格式控制说明%…%d:以十进制形式输入、输出整数%o:以八进制形式输入、输出整数%x:以十六进制形式输入、输出整数例2-3#

include

<stdio.h>void

main(

){printf("%d,

%o,

%x\n",

10,

10,

10);printf("%d,

%d,

%d\n",

10,

010,

0x10);printf("%d,

%x\n",

012,

012);}运行结果为:10,12,a10,

8,

1610,

a0……01010例2-4#

include

<stdio.h>void

main(

){int

a,

b;scanf("%o%d",

&a,

&b);printf("%d%5d\n",

a,

b);printf("%x,

%d\n",

a,

b);}输入:

17

17运行结果为:15

17f,

172.3实型数据实型常量(实数)浮点表示:0.123

123.4

1.科学计数法:123e4

0.2e-12.3.2实型变量单精度浮点型

float

x,y,z;双精度浮点型

double

u,v,w;4字节存储8字节存储数据精度和取值范围数据精度取值范围单精度七位有效数字±(10-38

1038)双精度十六位有效数字±(10308

10308

)数据精度与取值范围是两个不同的概念:float

x

=

1.23456789;x=1.234568float

y

=

123456789;虽在数据表示范围内,但无法精y=确1.表23达45。67e8float

z

=

1.2e55z的精度要求不高,但数据表示范围超出。并不是所有的实数都能在计算机中精确表示。实型常量的类型都是double2.3.3实型数据的输入和输出输出printf()float和double使用相同的格式控制说明%f:以小数形式输出浮点数,保留6位小数。%e:以指数形式输出1位整数.5

位小数e3位指数#

include

<stdio.h>void

main(

){float

f

=

123.45;double

d

=

3.1415926;printf("%f,

%e\n",

f,

f);printf("%f,

%e\n",

d,

d);

printf("%5.3f,

%5.2f,

%.2f\n",

d,

d,

d);}一共5位,小数3位,小数点一位例2-5实型数据的运行输结出果为:123.450000,

1.23450e+023.141593,

3.14159e+003.142,

3.14,

3.14例2-6假定float的精度为7位,double的精度为16位#

include

<stdio.h>void

main(

){float

f;double

d1,

d2;f

=

1234567890123.123456;d1

=

1234567890123.123456;d2

=

1234567890123.12;printf("f

=

%f

\n

d1

=

%f

\n

d2

=

%f

\n",

f,

d1,

d2);}运行结果为:f

=

1234567954432.000000d1

=

1234567890123.123540d2

=

1234567890123.120120实型数据的输入scanf(

)float和double使用不同的格式控制说明%f和%e相同%f:以小数或指数形式输入一个单精度浮点数%e%lf:以小数或指数形式输入一个双精度浮点数%le例2-7#

include

<stdio.h>void

main(

){float

f1;double

d1;scanf("%f%lf",

&f1,

&d1);printf("f1

=

%f

\n

d1

=

%f

\n",

f1,

d1);}输入:12

1234567.12345运行结果为:

f1=12.000000d1=1234567.1234502.4字符类型2.4.1字符常量’a’

’A’

’9’

’+’

’$"ASCII字符集:列出所有可用的字符每个字符:惟一的次序值(

ASCII码)"0"-"9""A"-"Z""a"-"z"2.4.1字符常量字符的存储在内存中,每个字符占用一个字节,存储该字符的ASCII码字符ASCII码内存"A"650100

0001"B"660100

0010字符的数值特征字符可以当整数用,ASCII码"A"+1

=?2.4.2字符变量char

c1,

c2,

c3;c1="2";c2="#";c3="A";或c3=65;int

i;i=65;或i="A";整型变量和字符变量的定义和赋值可以互换【ASCII码范围】2.4.3字符型数据输入输出scanf()和printf()%c

char

ch;scanf("%c",

&ch);printf("%c",

ch);getchar()和putchar()char

ch;ch=getchar(

);putchar(ch);输入输出一个字符例2-9#

include

<stdio.h>void

main(

){char

ch1,

ch2;ch1=getchar();ch2=getchar();putchar(ch1);putchar("#");putchar(ch2);}运行结果为:

A#b输入:

Ab例2-10#

include

<stdio.h>void

main(

){char

ch1,

ch2,

ch3;运行结果1为:A#b#Cscanf("%c%c%c",

&ch1,

&ch2,

&ch3);printf("%c%c%c%c%c",

ch1,

"#",

ch2,

"#",

ch3);}输入1:AbC运行结果2为:

A##b输入2:A

bC输入数据包括字符和数值的混合#include

<stdio.h>void

main(

){int

i;char

c;float

x

;scanf("%d%c%f",

&i,

&c,

&x

);printf(

"%d

%c

%f",

i,

c,

x

);}数据之间不能用空格等间隔,也不需要单引号输入:3a1.2输出:3

a

1.200000例2-11已知:"b"的ASCII码98#include

<stdio.h>void

main(){printf("%c,%d\n",

"b",

"b");printf("%c,%d\n",

98,

98);printf("%c,%d\n",

97,

"b"-1);}运行结果为:

b,98b,98a,970110

0010"b"98"b"98#

include

<stdio.h>void

main(

){char

ch="b";printf("%c,%d\n",

ch,

ch);}0110

0010"b"9814262"b"9801420x62printf"b"

%c

putchar98

%d142

%o62

%xscanf"b"

%c

getchar98

%d142

%o62

%xscanf("%c",

&ch);字符运算大小写英文字母转换

"b"-"a"="B"-"A"……"z"

-

"a"

=

"Z"

-

"A""m"

"M"数字字符和数字9-0="9"-"0""9"

=

9

+

"0""8"

8"a"-"A""A"-"a""0""m"

-

"a"

+

"A"

=

"M""M"

-

"A"

+

"a"

=

"m""8"

-

"0"

=

88

+

"0"

=

"8"2.4.4转义字符"\101"

"\x41"

"A"反斜杠后跟一个字符或数字字符常量,代表一个字符"\n"所有字符都可以用转义字符表示2.5表达式算术表达式算术运算符单目

+

-

++

--双目

+-*/%注意!%模(求余)整型数据5%6=5,9%4=1,100%4=0/整数除整数,得整数1/2=0,9/4=2双目运算符两侧操作数的类型要相同算术运算符的优先级和结合性单目+-++--双目*/%双目+-高低从右向左-5+3%2

=

(-5)+(3%2)

=

-43*5%3

=

(3*5)%3

=

0-i++-(i++)算术表达式C表达式例2-15

数学式

-->s(s-a)(s-b)(s-c)(x+2)e2xs*(s-a)*(s-b)*(s-c)(x+2)*exp(2*x)2.5.2赋值表达式赋值运算符

=赋值表达式变量=表达式计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量将赋值运算符左侧的变量的值作为表达式的值n

=

2;n

=

n+1;赋值运算符的优先级和结合性优先级较低,从右向左x=y=3;x=(y=3)例大小写字母转换输入一个小写字母,输出对应的大写字母。#include

<stdio.h>void

main(

){char

ch

;scanf("%c",

&ch);ch

=

ch

-

"a"

+

"A";printf("%c\n",

ch);}2.5.3逗号表达式表达式1,表达式2,……,表达式n先计算表达式1,然后计算表达式2,……,最后计算表达式n的值,并将表达式n的值作为逗号表达式的值.逗号运算符的优先级最低,从左向右a

=

(3+5

,

4*6

)a

=

3+5

,

4*6a=24a=8自增运算符和自减运算符自增运算符++和自减运算符--int

n,n++++n n-- --n

(只适合变量运算)使变量的值增1或减1++n

n++--n

n--n=n+1n=n-1取变量的值作为表达式的值++n:n=n+1;取n值作为表达式++n的值

n++:取n值作为表达式n++的值;n=n+1自增运算和自减运算int

i,

k;i=2;k=++i;i=2;k=i++;i=3i=3k=3k=2k=ii=i+1i=i+1k=i例2-17#include

<stdio.h>void

main(

){int

a,

b,

c;b=5;

c=5;a=++b+c--;printf("%d,%d,%d\n",

a,

b,

c);b=b+1,

a=b+c,

c=c-1a=b---c;printf("%d,%da,=%(db\-n-"),-ac,

b,

c);

a=b-c,

b=b-1a=-b+++c;printf("%d,%da,=%-d(\bn+"+,)+ac,

b,

c);

a=-b+c,

b=b+1}复合算术赋值运算符/=

%=赋值运算符简单赋值运算符=复合(算术)赋值运算符+=-=*=赋值表达式变量赋值运算符表达式x

+=

expx

=

x

+

(exp)例2-18#include

<stdio.h>void

main(

){int

x,

y,

z;}z=(x=7)+(y=3);printf("%d,%d,%d\nx="7,,xy,=y3,

z)=;x+y

x=y=z=x+2;printf("%d,%d,%d\nz"=,x+x2,

y,=z,);x=z

x*=y-3;printf("%d,%d,%d\n",

x,

y,

z);x=x*(y-3)2.6数据的存储和类型转换数据的存储整型数据的存储设整数占2个字节1

0000001100000010

000000110000001符号位1:负数0:正数原码反码补码正数的原码、反码和补码相同0

000

0000

0000

00010

111

1111

1111

11111的补码……32767的补码(215-1)负数-1原码1

000

0000

0000

0001反码1

111

1111

1111

1110原码取反补码1

111

1111

1111

1111反码+1原码反码补码32767补码

0

111

1111

1111

1111-32767原码1

111

1111

1111

1111反码1

000

0000

0000

0000补码1

000

0000

0000

0001原码取反反码+1-32768

=

-32767-1补码1

000

0000

0000

0000-32768-1

0

132767327670111

1111

1111

1111……10000

0000

0000

000100000

0000

0000

0000-11111

1111

1111

1111-21111

1111

1111

1110……-32767

1000

0000

0000

0001-32768

1000

0000

0000

000032768

=

32767+11000

0000

0000

0000

=

-32768-32769

=

-32768-10111

1111

1111

1111

=

32767实型和字符型数据的存储实型数据的存储-1.2345e+02符号位阶码尾数字符型数据的存储一个字节存储ASCII码2.6.2整数类型的扩展有符号int无符号unsigned

[int]数据长度16或32short

[int]unsigned

short

[int]16long

[int]unsigned

long

[int]32无符号unsigned设整数占2个字节0000

0000

0000

0000

01111

1111

1111

1111

65535(216-1)整数类型的最小取值范围-32768~32767(-215~215-1)intshort

[int]long

[int]-2147483648~

2147483647(-231~231-1)(0~216-1)unsigned

[int]

0~65535unsigned

short

[int]unsigned

long

[int]

0~4294967295(0~232-1)整型常量的表示不能超出整型数据的取值范围比长整型数还要大的数只能用实数来表示整型常量的类型整数后的字母后缀longunsignedunsigned

long123L123U123LU数值整型数据的输入输出printf(格式控制,输出参数1,...,输出参数n);scanf(格式控制,输入参数1,...,输入参数n);格式控制说明%…十进制八进制十六进制int%d%o%xlong%ld%lo%lxunsigned%u%o%xunsigned

long%lu%lo%lx例2-19#include

<stdio.h>void

main(

){int

ai;

long

cl;unsigned

bu;

unsigned

long

dul;ai

=

32767;

bu

=

65535U;cl

=

-2147483648L;

dul

=

4294967295LU;printf("%d,%u,%ld,%lu\n",ai,

bu,

cl,

dul);printf("%x,%x,%lx,%lx\n",ai,

bu,

cl,

dul);}7fff,

ffff,

80000000,

ffffffff2.6.3数据类型转换不同类型数据的混合运算类型转换自动转换强制转换运算自动类型转换(非赋值运算)水平方向:自动垂直方向:低

高高doublefloatunsigned

longlongunsignedunsigned

short低intchar,

short自动类型转换(非赋值运算)"A"

+

12

10.05657766.95高doublefloatunsigned

longlongunsignedunsigned

short低intchar,

short自动类型转换(赋值运算)变量赋值运算符表达式计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量将赋值运算符左侧的变量的值作为表达式的值将赋值运算符右侧表达式的类型自动转换成赋值号左侧变量的类型自动类型转换(赋值运算)double

x;x

=

1;x

=

?short

a

=

1000;char

b

=

"A";long

c

=

80000;c

=

a

+

b;c

=

?int

ai;ai

=

2.56;ai

=

?int

bi;bi

=

0x12345678Lbi

=

?例2-20#

include

<stdio.h>void

main(

){long

a,

b,

c;a=1000000L;b=1000*1000LU;c=1000*1000;printf("%ld,%ld,%ld\n",

a,

b,

c);}运行结果为:

1000000,1000000,16960强制类型转换强制类型转换运算符(类型名)表达式优先级同++,从右向左(double)3(int)3.8(double)(5/2)(double)5/23.032.02.5算法程序用编程语言编写,完成特定功能的语句的集合。编程步骤:明确问题问题算法若干具体步骤(算法)程序4.上机调试运行算法解题方法或解题步骤的精确描述算法表示:文字描述、流程图和N-S流程图算法与程序程序=算法+数据结构+结构化程序设计方法+语言工具和环境例3-1从键盘中输入100个整数,对其中的正整数进行累加,最后输出结果。算法描述(自然语言)⑴输入一个数;⑵如果该数>0,累加它;⑶如果100个数没有输入完,转步骤(1);⑷输入完100个数后,输出累加和。例3-1算法描述(流程图)开始该数>0累加输入完100个数输出累加和结束起止框处理框判断框流向线输入一个数YYNN例3-1算法描述(N-S流程图)处理判断重复算法的C语句实现void

main(

){int

x;int

count;int

sum;/*存放输入数的单元*//*存放输入个数的单元*//*存放累加和的单元*/count=0;sum=0;/*工作单元初值*/do{scanf

(“%d”,&x);

/*输入一个数*/count

++;if

(x>0)sum

=

sum

+

x;/*每输入一个数,记一下数*//*判断输入数〉0否*//*是〉0,则加到累加和中*/}

while

(

count

<100

);printf

(

“%d”

,

sum

);/*未输入完100个数,则重复*//*输出累加和*/}准备工作算法步骤C语句概述C语言的五类语句1函数调用语句2表达式语句3空语句4复合语句5程序结构控制语句C语言的所有语句必须以分号;结束C语句概述函数调用语句scanf(

”%d%d”,

&a

,

&b

);printf(

"%d"

,

x

);表达式语句x

=

3;i++;空语句;C语句概述4复合语句{statement

1;statement

2;……statement

n;}❏5程序结构控制语句条件控制(第四章)循环控制(第五章)C程序的基本结构顺序结构选择结构循环结构C程序的基本结构顺序结构语句1;语句2;语句3;……..语句1;语句2;冯.若依曼机工作原理——顺序执行例3-4交换变量的值对两个变量先输入两个值,然后交换这两个变量的值。xtempy步骤:1

x->

temp例3-4交换变量的值例对两个变量先输入两个值,然后交换这两个变量的值。xtempy步骤:x->

tempx

<-

y例3-4交换变量的值例对两个变量先输入两个值,然后交换这两个变量的值。xtempy步骤:x

->

tempx

<-

ytemp->y例3-4交换变量的值例对两个变量先输入两个值,然后交换这两个变量的值。xtempy步骤:x

->

tempx

<-

ytemp->y例3-4交换变量的值对两个变量先输入两个值,然后交换这两个变量的值。main(){int

x,

y,

temp;scanf(“%d%d”,

&x,

&y);temp

=

x;x

=

y;y

=

temp;printf(“first=%d,

second=%d”,

x,

y);}C程序的基本结构顺序结构选择结构语句1;语句2;条件?满足不满足条件满足不满足语句1

语句2选择结构例输入变量x,计算y值。1

当x>=0y

=-1

当x<0main(){int

x,

y;scanf(“%d”,&x);if

(x>0)

y

=

1;else

y

=

-1;printf(“x=%d,

y=%d”,

x,

y);}x>0不满足满足y

=

1y

=

-1C程序的基本结构顺序结构选择结构循环结构不满足满足重复执行的语句;后一语句;条件?循环结构void

main(

){int

i,

max,

x;i=9;scanf("%d",

&x)max

=

x;while

(

i

>

0

){scanf

(“%d”,

&x);if

(

x

>

max

)

max

=

x;i

--;}printf("max

number

is

%d"

,max);}重复步骤C程序的基本结构结构化程序设计基本要求:自顶向下,模块化设计;使用三种基本结构构造程序;程序书写规范,切勿随心所欲;清晰第一,效率第二。思路清晰书写清晰(变量名、函数名、注解等)书写使用阶梯形4.1.1关系运算符和关系表达式比较两个量(x,y)之间的关系x

<

y x

<=

yx

>

y x

>=

yx

==

yx

!=

y比较的结果:真

3>1假

1>3int

x=2,

y=6;x

=

(y

>

3)x

=

(x

>

y)10x=1x=0关系运算符的优先级运算符优先级:算术运算符高<

<=

>

>===

!==低d

=

b+2

==

3d

=

((b+2)

==

3)b

-

1

==

a

!=

c((b

1)

==

a)

!=

c关系表达式3

<

x

<

5x=1时x=4时(

3<x

)

<

5恒为

14.1.2逻辑运算符和逻辑表达式3

<

x

<

50

3

5

xx>3

并且

x<53

<

x

&&

x

<

5逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来逻辑运算符X&&YX||YXYXY与或非逻辑与&&(x>1)&&(y>1)逻辑或||(x>1)||(y>1)逻辑非!(x>1)!(x>1)即x<=1逻辑运算符逻辑运算的规则-真值表逻辑与&&逻辑或||

逻辑非!真值表xyx&&yx||y!x假假001假真011真假010真真110逻辑运算的规则-真值表逻辑与&&逻辑或||

逻辑非!真值表x假y

x&&y假

0x||y

!x0

1真00真

11

11

01

05&&7是否合法?假0真0真0非假0非0

0非0非0!

!2

=

=1逻辑表达式对于X

&&

Y,X和Y可以是:关系表达式或逻辑量x<=5

&&

x>=33

&&

5(x+y)

&&

7X,Y可以是任意表达式判断逻辑量的真假非0表示真0表示假逻辑运算的结果

1表示真0表示假!算术运算符<

<=

>

>===

!=&&||=,运算符的优先级设x=1,y=2,c=0x>=y==c

&&

!x+2>3(x

>=

y

==

c)

&&

(!x+2

>

3)

((x

>=

y)

==

c)

&&

((!x+2)

>

3)((x

>=

y)

==

c)

&&

(((!x)+2)

>

3))例4-3写出满足下列要求的表达式⑴ch是小写英文字母

ch>="a"&&

ch<="z"⑵x为零验证:x取0

!x

真x取非0

!x

假x取0 x==0

真x取非0 x==0

假关系表达式

x

==

0等价

逻辑表达式

!x⑶x不为零x!=0

或x例4-3(4)x和y不同时为零x!=0

||

y!=0

或x

||

y(5)year是闰年,即year能被4整除但不能被100整除,或year能被400整除。(year

%

4

==

0

&&

year

%

100

!=

0)

||

(year

%

400

=

=

0)或(!(year

%

4)

&&

year

%

100)

||

!(year

%

400

)逻辑运算符&&和||int

x,y;

/*假设每次运算后,将x的值置1

*/y

=

(3

>1

&&

x++);y

=

(3<1

&&

x++);y

=

(3<1

||

x++);y

=

(3>1

||

x++);exp1

&&

exp2exp1

||

exp2先算exp1,若其值为0,STOP先算exp1,若其值为1,STOPy=1

x=2y=0

x=1y=1

x=2y=1

x=14.2.1基本的if语句1、if–else结构if

(exp)statement_1elsestatement_2语句1表达式语句2非00x+2

x>0y=x2x<=0if

(

x>0

)y=x+2;elsey=x*x;if–else结构if

(exp)statement_1elsestatement_2scanf("%d%d",

&a,

&b);if

(

a

!=

b

){t

=

a;a=b;b=t;printf("%d,%d",

a,

b);}elseprintf("a==b");一条语句一条语句4.2.1基本的if语句2、省略else的if结构if

(exp)statement_1语句1表达式非00ch=getchar();if(ch>="a"&&ch<="z")ch=ch-"a"+"A";putchar(ch);ch=getchar();if(ch>="a"&&ch<="z"){ch=ch-"a"+"A";putchar(ch);}例4-7求最大值输入3个数,输出其中的最大值。#include

<stdio.h>void

main(

){int

a,

b,

c,

max;printf("input

a,

b,

c:\n");scanf("%d%d%d",

&a,

&b,

&c);max

=

a;if(max

<

b)

max

=

b;if(max

<

c)

max

=

c;printf("max

is

%d\n",

max);}maxabcmaxmax4.2.2嵌套的if语句if

(exp)statement1elsestatement21、else–if结构if

(exp_1)

statement_1else

if(exp_2)

statement_2……else

if(exp_n-1)

statement_n-1else

statement_nif语句if语句嵌套的if语句if

(exp_1)

statement_1else

if(exp_2)

statement_2……else

if(exp_n-1)

statement_n-1else

statement_n0表达式2语句1语句2语句n-1语句n表达式1非00表达式n-1非000非0n个分支需要n-1次比较输入变量x,计算符号函数:1

当x>0y=

0

当x=0-1

当x<0例:计算符号函数if

(x>0)

y

=

1;else

if

(x==0)

y

=

0;else

y

=

-1;0x

>

0x

=

0y

=

1y

=

0非00非0y

=

-1输入变量x,计算y:x+1

x<1y

=

x+2

1<=x<2x+3

2<=x<3x+4

x>=3例4-9if

(x<1)

y

=

x+1;else

if

(x<2)

y

=

x+2;else

if(x<3)

y

=

x+3;else

y

=

x+4;y

=

x+40x

<1x

<2y

=

x+1y

=

x+2非00非0x

<3y

=

x+3非004.2.2嵌套的if语句2、嵌套的if–else结构if

(exp_1)if(exp_2)

statement_1else

statement_2elseif(exp_3)

statement_3else

statement_4if

(exp)statement1elsestatement2if语句if语句嵌套的if语句输入变量x,计算符号函数:1

当x>0y=

0

当x=0-1

当x<0例:计算符号函数if

(x>=0)if(x>0)

y

=

1;else

y

=

0;else

y

=

-1;x

>=0x

>

0y

=

1y

=

0非00非0y

=

-10输入变量x,计算y:x+1x<1y

=x+21<=x<2x+32<=x<3x+4x>=3例4-9if

(x<2)if(x<1)

y

=

x+1;else

y

=

x+2;elseif(x<3)

y

=

x+3;else

y

=

x+4;x

<2x

<1y

=

x+1y

=

x+2非00非00x

<3y

=

x+3y

=

x+4非00if

(x>0)

y

=

1;else

if

(x==0)

y

=

0;else

y

=

-1;if

(x>=0)if(x>0)

y

=

1;else

y

=

0;else

y

=

-1;x>=0x

>0y

=

1y

=

0非00非0y

=

-100x

>x

=y

=

1y

=

00非000非0y

=

-12种嵌套if语句的比较if

(exp_1)if(exp_2)

statement_1else

statement_2elseif(exp_3)

statement_3else

statement_4if

(exp_1)if(exp_2)

statement_1elseif(exp_3)

statement_3else

statement_4elseel和se与i最f靠的近它匹的配、没有与别的else匹配过的if匹配statement_1if

(exp_1)if(exp_2)elseif(exp_3)

statement_3else

statement_4改变else和if的配对statement_1if

(exp_1)if(exp_2)elseif(exp_3)statement_3else

statement_4statement_1if

(exp_1)if(exp_2)elseif(exp_3)

statement_3else

statement_4statement_1if

(exp_1){if(exp_2)}elseif(exp_3)statement_3else

statement_4statement_1if

(exp_1)if(exp_2)elseelseif(exp_3)statement_3else

statement_44.2.3条件表达式exp1

?

exp2

:

exp3非00exp1y

=

(x>0)

?

x+2

:

x*x;int

n;(n>0)

?

2.9

:

1n

=

10n

=

-102.91.0x+2

x>0y

=x2x<=0if

(

x>0

)y=x+2;elsey=x*x;4.3

switch语句switch(表达式){case

常量表达式1:语句段1case

常量表达式2:语句段2....…case

常量表达式n:语句段ndefault:语句段n+1}switch(表达式){case

常量表达式1:语句段1case

常量表达式2:语句段2....…case

常量表达式n:语句段ndefault:语句段n+1}表达式的值=常量表达式1的值语句段1表达式的值=常量表达式2的值语句段2表达式表达式的值=常量表达式n的值语句段n其他语句段n+1例4-13#

include

<stdio.h>void

main(

){int

k;scanf("%d",

&k);switch(

k

){case

1:

printf

(

"I"m

in

the

case1\n"

);case

2:

printf

(

"I"m

in

the

case2\n"

);case

3:

printf

(

"I"m

in

the

case3\n"

);default:

printf

(

"I"m

in

the

default\n");}}输入2输入6#

include

<stdio.h>void

main(

){int

k;输入2输入6scanf("%d",

&k);switch(

k

){case

1:

printf

(

"I"m

in

the

case1\n"

);

break;case

2:

printf

(

"I"m

in

the

case2\n"

);

break;case

3:

printf

(

"I"m

in

the

case3\n"

);

break;default:printf

(

"I"m

in

the

default\n");

break;}}if(k==1)

printf

(

"I"m

in

the

case1\n"

);

else

if(k==2)

printf

(

"I"m

in

the

case2\n"

);else

if(k==3)

printf

(

"I"m

in

the

case3\n"

);else

printf

(

"I"m

in

the

default\n");例4-14void

main(

){

char

c;printf("Please

input

a

character:\n");c

=

getchar();switch(c)

{case

"

"

:case

"\n":printf("This

is

a

blank

or

enter");break;输入2输入a几个常量表达式共有一case

"0":case

"1":case

"2":case

"3":case

"4"个:语句段case

"5"

:

case

"6"

:

case

"7"

:

case

"8"

:

case

"9"

:printf("This

is

a

digit.\n");break;default:printf("This

is

an

other

character.

\n");}}5.1循环语句问题打印整数1~10打印整数1~100打印整数1~nprintf("%d",

1);printf("%d",

2);……printf("%d",

10);i=1;printf("%d",

i);

i++;printf("%d",

i);

i++;……printf("%d",

i);

i++;i=1;while(i<=10){printf("%d",

i);i++;}while语句while(表达式)语句;语句表达式非00i=1;while(i<=10){printf("%d",

i);i++;}循环条件循环体循环不变式改变循环条件10求sum=

ii=1sum=0sum+1

—>

sumsum+2

—>

sumsum=0;i=1;while(i<=10){sum=sum+i;i++;}sum+3

—>

sum……sum+10

—>

sumsum=sum+?循环不变式for语句for

(exp1;exp2;exp3)语句;exp3非0exp20循环条件exp1语句循环体while(表达式)语句;表达式非0语句0for

(exp1;exp2;exp3)语句;exp3exp20exp1非0语句exp1;while(exp2){语句;exp3;}while和forwhile和forwhile(表达式)语句;exp1;while(exp2{语句;exp3;}for

(exp1;exp2;exp3)语句;sum=0;i=1;while(i<=10){sum=sum+i;i++;}sum=0;for(i=1;

i<=10;

i++)sum=sum+i;程序举例例T1-1求1+2+3+4+……+n例T1-2求1+1/2+1/3+1/4+……+1/n例T1-3求1-1/2+1/3-1/4+……1/n例T1-4求1-1/3+1/5-1/6+……前n项之和例T2-1求n!例T2-2求xn例T3-1求1-1/3+1/5-1/7+……,直到最后1项的绝对值<10-5例T4-1输入100个整数,求其中正数之和例T4-2输入一个正整数n,再输入n个数,输出最大值例T5输出Fibonacci序列前20个数例T1-1求1+2+3+4+……+n算法:

i=1

to

ns=s+tt++i++程序段:

s=0;for(i=1;

i<=n;

i++)s=s+i;算法:

i=1

to

ns=s+ii++例T1-2求1+1/2+1/3+……+1/n算法:i=1

to

ns=s+tt=1.0/ii++程序段:

s=0;for(i=1;

i<=n;

i++)s=s+1.0/i;算法:i=1

to

ns=s+tt++

i++求1-1/2+1/3-1/4+……1/n例T1-3i

=1

to

ns=s+tt=1.0/ii++程序段:s=0;

flag=1;for(i=1;

i<=n;

i++){s=s+1.0/i*flag;flag=-flag;}算法:

i=1

to

ns=s+tt=1.0/i*flagflag=-flagi++例T1-4求1-1/3+1/5-……前n项和算法:

i=1

to

ns=s+tt=1.0/i*flagflag=-flagi++程序段:

s=0;flag=1;tt=1;for(i=1;i<=n;i++){s=s+1.0/tt*flag;tt+=2;flag=-flag;}算法:i=1

to

ns=s+tt=1.0/tt*flagflag=-flagtt=tt+2i++例T2-1求n!算法:

i=1

to

nf=f*tt++i++程序段:

f=1;for(i=1;

i<=n;

i++)f=f*i;算法:

i=1

to

nf=f*ii++例T2-2求xn算法:

i=1

to

nf=f*tt++i++程序段:

f=1;for(i=1;

i<=n;

i++)f=f*x;算法:

i=1

to

nf=f*tt=xi++例T3-1求1-1/3+1/5-…直到最后1项的绝对值<10-5程序段:s=0;

flag=1;

tt=1;

t=1;while(fabs(t)

>=

1E-5){s

=

s+t;flag

=

-flag;tt

+=

2;t

=

1.0/tt*flag;}i

=1

to

ns=s+tt=1.0/tt*flagflag=-flagtt=tt+2i++算法:while

|t|>=1E-5s=s+tflag=-flagtt=tt+2t=1.0/tt*flag例T4-1

输入100个整数,求其中正数之和#

include

<stdio.h>void

main(){int

i

,

sum=0,

x;for

(i=0;

i<100;

i++){scanf("%d",

&x);if

(x>0)

sum=sum+x;}printf("%d",sum);}例4-7求最大值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论