c语言简明教程_第1页
c语言简明教程_第2页
c语言简明教程_第3页
c语言简明教程_第4页
c语言简明教程_第5页
已阅读5页,还剩225页未读 继续免费阅读

下载本文档

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

文档简介

C程序设计

简明教程主编:雷新贤刘朋王映龙中国铁道出版社课前知识:

C语言的发展历史C语言是国际上广泛流行的高级语言。C语言是在B语言的基础上发展起来的。B(BCPL)语言是1970年由美国贝尔实验室设计的,并用于编写了第一个UNIX操作系统,在PDP7上实现。优点:精练,接近硬件,缺点:过于简单,数据无类型。

1973年贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言,对B取长补短,并用之改写了原来用汇编编写的UNIX,(即UNIX第5版),但仅在贝尔实验室使用。中国铁道出版社1975年UNIX第6版发布,C优点突出引起关注。1977年出现了《可移植C语言编译程序》,推动了UNIX在各种机器上实现,C语言也得到推广,其发展相辅相成。1978年影响深远的名著《TheCProgrammingLanguage》由BrianW.Kernighan和DennisM.Ritchie合著,被称为标准C。之后,C语言先后移植到大、中、小、微型计算机上,已独立于UNIX和PDP,风靡世界,成为最广泛的几种计算机语言之一。中国铁道出版社1983年,美国国家标准化协会(ANSI)根据C语言各种版本对C的发展和扩充,制定了新的标准ANSIC,比标准C有了很大的发展。1988年K&R按照ANSIC修改了他们的《TheCProgrammingLanguage》。1987年,ANSI公布了新标准——87ANSIC。1990年,国际标准化组织接受了87ANSIC为ISOC的标准(ISO9899—1990)。1994年,ISO又修订了C语言标准。目前流行的C语言编译系统大多是以ANSIC为基础进行开发的。中国铁道出版社C语言的特点结构化程序设计语言通用性和可移植性强程序执行效率高可直接对硬件进行操作表达能力强,书写形式简练语法限制少设计自由度大中国铁道出版社C语言的基本语法单位C语言的基本符号(1)大小写英文字母各26个:a~z,A~Z(2)0~9共十个数字

(3)下划线_(4)特殊符号:包括运算符在内的其他字符

如+、-、*、/、、、\等标识符 用来标识变量名、符号常量名、函数名、类型名、文件名等。

注意:标识符只能由字母、数字和下划线三种字符组成,且必须以字母或下划线开头。中国铁道出版社C语言中,标识符有三种类型:关键字

系统已定义过的、有特定含义、不能挪作它用的标识符。例如,int、char、break、for等(共有32个)。见表1-1预定义标识符

系统定义过的,用于编译预处理命令中的标识符。例如,include、define等。建议:这些标识符也不要作为用户自定义标识符 中国铁道出版社自定义标识符

依据标识符的命名原则,由用户自己定义的标识符。

合法的标识符

A2 studentarea_of_circlenum_dd

不合法的标识符

2AA-Bareaofcircle(一个标识符)M.D

中国铁道出版社第1章计算机语言及C语言概述第2章基本数据类型、运算符和表达式第3章数据的输入和输出第4章语句第5章指针初步和数组第6章函数与程序结构第7章编译预处理第8章指针第9章结构和联合第10章文件中国铁道出版社第1章程序设计入门

1.1简单的C程序

1.2C程序上机引导

1.3格式化输入输出

1.4输入输出应用案例中国铁道出版社1.1 简单的C程序1.1.1一个简单的C程序【例1.1】在屏幕上显示出“ThisisaCprogram!”。#include<stdio.h> //将库文件stdio.h包含到该文件中voidmain() //主函数{printf(“ThisisaCprogram!\n”); //在屏幕上显示一个字符串}

计算机程序用计算机语言编写的,使计算机能够完成特定任务的代码串。中国铁道出版社1.1.2C程序结构与书写格式由例1.1可见C程序包括三部分:

预处理命令部分、函数定义部分和注释部分。预处理命令,以#开始的语句是预处理命令,如:

#include<stdio.h>,若没有该语句输入输出功能不能实现

主函数main(),C程序必须且只能包含一个主函数,花括号{}中的部分是函数体注释部分,符号//后的内容是注释部分,为用户阅读程序提供方便

中国铁道出版社1.2C程序上机引导

本教材以

C-Free作为开发软件,C-Free是一款基于Windows的C/C++集成开发软件,利用本软件,可以方便地编辑、调试、运行程序序。启动C-Free单击工具栏上的“新建文件”按钮,在编辑区输入、编辑程序后如图所示。

中国铁道出版社运行按钮代码窗口信息窗口显示错误信息中国铁道出版社1.3格式化输入和输出1.3.1数据的输入和输出例1.3

了解输入输出格式的使用#include<stdio.h>voidmain(){int

a,b,sum;

scanf(“%d,%d”,&a,&b);//通过scanf函数输入数据

sum=a+b;

printf("a+b=%d",sum); //把加法的结果输出到屏幕上}一般而言,输入输出是程序的基本功能之一中国铁道出版社1.3.2格式输出函数printf()printf函数(格式输出函数)形式

printf(输出格式字符串

,输出表列

);作用向终端输出若干个任意类型的数据 注意:“输出格式字符串”要用双引号括起来,它包 含两种信息中国铁道出版社格式说明

形式:%格式字符如%d、%f、%c、%-6d。

作用:将输出项中的数据按指定格式输出。 其个数必须与输出项中的数据个数相等,且顺序上一一对应。

非格式符

格式串中的非格式照原样输出如:printf(a+b=%d,sum);

输出结果:a+b=46

见P4

其中:a+b=为非格式符原样输出,格式符%d表示按十进制整型格式输出sum的值中国铁道出版社%d:以十进制形式输出整数%c:以字符形式输出,只输出一个字符%s:输出字符串%f:以小数形式输出单,双精度数,隐含输出六位小数常用格式说明符:中国铁道出版社d格式符。用来输出十进制整数。几种用法:①%d:按十进制整型数据的实际长度输出。②%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。例:

printf(″%4d,%4d″,a,b);

若a=123,d=12345,则输出结果为123,12345③%ld:输出长整型数据。

例:

longa=135790;/*定义a为长整型变量*/

printf(″%ld″,a);常见格式符的使用方法中国铁道出版社(2)c格式符,用来输出一个字符。如:chard=′a′;printf(″%c″,d);输出字符′a′.一个整数,只要它的值在0~255范围内,可以用“%c”使之按字符形式输出,在输出前,系统会将该整数作为ASCII码转换成相应的字符;一个字符数据也可以用整数形式输出。中国铁道出版社(3)s格式符输出字符串.①%s。例如:printf(″%s″,″CHINA″)输出字符串“CHINA”(不包括双引号)。②%ms,输出的字符串占m列,若串长大于m,则全部输出,若串长小于m,则左补空格。③%-ms,若串长小于m,字符串向左靠,右补空格。④%m.ns,输出占m列,只取字符串中左端n个字符,输出在m列的右侧,左补空格。⑤%-m.ns,n个字符输出在m列的左侧,右补空格,若n〉m,m自动取n值。中国铁道出版社例字符串的输出。

#include<stdio.h>

voidmain()

{

printf(“%3s,%7.2s,%.4s,%-5.3s\n”,“CHINA”,“CHINA”,“CHINA”,“CHINA”);

}

运行结果:

CHINA,CH,CHIN,CHI中国铁道出版社(4)f格式符。用来以小数形式输出实数(包括单双精度)有以下几种用法:①%f。不指定字段宽度,由系统自动指定字段宽度,使整数部分全部输出,并输出6位小数。应当注意,在输出的数字中并非全部数字都是有效数字。单精度实数的有效位数一般为7位。②%m.nf。指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格。③%-m.nf与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。

中国铁道出版社例

输出实数时的有效位数。

#include<stdio.h>

voidmain()

{flaot

x,y;

x=111111.111;y=222222.222;

printf(″%f″,x+y);

运行结果:

333333.328125

中国铁道出版社例

输出实数时指定小数位数。

#include<stdio.h>

voidmain()

{

floatf=123.456;

printf(“%f%10f%10.2f%.2f%-10.2f\n”,f,f,

f,f,f);

运行结果:

123.455994123.455994123.46123.46

123.46

中国铁道出版社第2章数据类型和运算

2.1数据类型

2.2运算符和表达式

2.3数据类型应用中国铁道出版社C语言可以处理数值型及非数值数据。大致可分为:数据类型构造类型指针类型空类型(无值类型)void枚举类型enum数组类型结构类型struct联合类型

union基本类型整型int字符型char实型(浮点型)单精度实型

float双精度实型

double中国铁道出版社2.1.1程序引例例2.1求圆的周长和面积#include"stdio.h"#definePI3.14voidmain(){intr=1;floatg,s;g=2*PI*r;

s=PI*r*r;printf("r=%dg=%fs=%f\n",r,g,s);}

变量r,g和s是不同的数据类型,其数据形式,取值范围,输入输出格式等都不同

2.1基本数据类型中国铁道出版社2.1.2标识符和关键字标识符 用来标识变量名、符号常量名、函数名、类型名、文件名等。

注意:标识符只能由字母、数字和下划线三种字符组成,且必须以字母或下划线开头。关键字

系统已定义过的、有特定含义、不能挪作它用的标识符。例如,int、char、break、for等(共有32个)。中国铁道出版社

2.1.3常量在程序运行过程中,其值不能被改变的量称为常量常量有:整型常量、实型常量和字符型常量(1)整型常量:又称整数,有三种数制十进制:没有前缀如:125,032,0x23等;其中八进制:必须以数字0为前缀如:032为八进制32,即十进制26十六进制:前缀为0X或0x如:0x23为十六进制23,即十进制35中国铁道出版社

2.1.3常量(2)实型常量:也称为浮点数或实数,它采用十进制表示,有两种形式小数形式如:3.14,0.125,-3.789指数形式如:aen表示ax10n(其中a表示十进制数,n表示指数)中国铁道出版社

2.1.3常量(3)字符型常量:是用单引号括起来的一个字符。其特点为:字符型常量只能用单引号括起来字符型常量只能存放一个字符如:‘a’,‘b’,‘2’转义字符:一种特殊的字符型常量。(见P16表2-2)中国铁道出版社字符常量(1)用单引号包含的一个字符是字符型常量(2)只能包含一个字符例‘a’,’A’,‘1’‘abc’、“a”中国铁道出版社

有些以“\”开头的特殊字符称为转义字符\n换行\t横向跳格\r回车\\反斜杠\ddd

ddd表示1到3位八进制数字\xhh

hh表示1到2位十六进制数字中国铁道出版社

转义字符的使用

#include<stdio.h>

voidmain()

{printf(″ab

c\tde\rf\tg\n″);

printf(″h\ti\b\bj

k\n″);

显示屏上的运行结果:

fgde

hjk中国铁道出版社字符数据在内存中的存储形式及其使用方法一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。注意:

一个字符数据既可以以字符形式输出,也可以以整数形式输出。中国铁道出版社

2.1.3常量(4)字符串常量:是用一对双引号括起来的字符序列。字符串的长度就是字符串中包含的字符个数。如:

合法的字符串常量:

“Howdoyoudo.”,“CHINA”,“a”,“$123.45”,“ab”,“1232”可以输出一个字符串,如:

printf(“Howdoyoudo.”);中国铁道出版社字符串常量字符串常量与字符常量的区别:定界符包含字符的个数赋值(C语言中有字符变量供字符常量存放;但没有字符串变量,只有用字符数组来存放)中国铁道出版社

‘a’是字符常量,”a”是字符串常量,二者不同。如:假设C被指定为字符变量

:charc

c=’a’;

c=”a”;c=”CHINA”;

结论:不能把一个字符串常量赋给一个字符变量。中国铁道出版社C规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定以字符’\0’作为字符串结束标志。

如:如果有一个字符串常量”CHINA”,实际上在内存中是:CHINA\0

它占内存单元不是5个字符,而是6个字符,最后一个字符为’\0’。但在输出时不输出’\0’。中国铁道出版社

2.1.3常量(5)符号常量:一个标识符表示一个常量,符号常量在使用前必须先定义:

#define标识符常量如:#definePI3.14特点:习惯上用大写字母表示,以与变量名区别,但并非规定。虽用标识符使名,但与变量不同,它本质上是常量,具有常量值不能改变的性质。清楚,修改方便中国铁道出版社例

符号常量的使用

#definePRICE30

#include<stdio.h>

voidmain()

{

intnum,total;

num=10;

total=num*PRICE;

printf(″total=%d\n″,total);

}符号常量:用一个标识符代表一个常量。符号常量的值在其作用域内不能改变,也不能再被赋值。

运行结果:total=300说明:

程序中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算说明:如再用赋值语句给PRICE赋值是错的

PRICE=40;/*错误,不能给符号常量赋值*/中国铁道出版社2.1.4变量变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。变量必须先定义后使用

inta;a=3;变量名实际上是一个以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。中国铁道出版社变量的定义(声明)C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义(声明)”。例如:

int

a,b(指定变量a、b为整型)

floatc,d;(指定变量c、d为浮点型)

doublee,f;(指定变量e、f为双精度整型)中国铁道出版社

变量命名的规定:C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。

例:sum,_total,month,Student_name,

lotus_1_2_3,BASIC,li_ling

M.D.John,¥123,3D64,a>b

中国铁道出版社说明

字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:charc1,c2;在本函数中可以用下面语句对c1,c2赋值:

c1=‘a’;c2=‘b’;一个字符变量在内存中占一个字节。

不能把字符串赋给字符型变量。如:charch=“Youarewrong.”;是错误的中国铁道出版社例

向字符变量赋以整数,大小写字母的转换

#include<stdio.h>

voidmain()

{charc1,c2;

c1=97;

c2=98;

printf(“%c%c\n”,c1,c2);

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

c1=’a’;

c2=’b’;

c1=c1-32;

c2=c2-32;

printf(“%c%c\n”,c1,c2);

运行结果:

ab9798AB中国铁道出版社变量赋初值(1)C语言允许在定义变量的同时使变量初始化如:inta=3;//指定a为整型变量,初值为3

floatf=3.56;//指定f为浮点型变量,初值为3.56charc=‘a’;//指定c为字符变量,初值为‘a’中国铁道出版社(2)可以使被定义的变量的一部分赋初值。如:

int

a,b,c=5;表示指定a、b、c为整型变量,但只对c初始化,c的初值为5(3)如果对几个变量赋以同一个初值,应写成:inta=3,b=3,c=3;表示a、b、c的初值都是3。不能写成∶

inta=b=c=3;

注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。中国铁道出版社各类数值型数据间的混合运算混合运算:整型(包括int,short,long)、浮点型(包括float,double)可以混合运算。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算.说明:这种类型转换是由系统自动进行的。中国铁道出版社

2.2运算符和表达式

C的运算符有以下几类:分15个优先等级见p18表2.3(1)算术运算符+-*/%(2)关系运算符><==>=<=!=(3)逻辑运算符!&&||(4)位运算符<<>>~|∧&(5)赋值运算符=复合赋值运算符*=+=等(6)条件运算符?:(7)逗号运算符,(8)指针运算符*&(9)其它

(),[],->,.,sizeof等注意:C语言没提供幂运算符!运算符三个基本属性:优先级、结合性、目数中国铁道出版社表达式:由常量、变量、函数调用和运算符按 一定规律组合在一起构成的式子。求值的顺序:根据运算符的优先级与结合方向对表 达式加园括号,然后从左到右计算表 达式,一面计算一面转换操作数的类型,直到能最终确定表达式的值时终止。返回

中国铁道出版社2.2.1算术运算符和算术表达式基本的算术运算符:

+(加法运算符,或正值运算符。如:3+5、+3)-(减法运算符,或负值运算符。如:5-2、-3)*(乘法运算符。如:3*5)/(除法运算符。如:5/3)%(模运算符,或称求余运算符,%两侧均应为整型数据,如:7%4的值为3)。注意:同类型的量运算结果仍是该类型的量中国铁道出版社说明在除法运算中,当两个操作数都是整数时,商也为整数,小数部分一律舍去。

例如:7/3的结果为2,-1/2的结果为0,-5/3的结果为-1。%(求余运算)要求两个操作数都是整型,结果为整除后余下的整余数。当两个运算数的符号不同时,结果的符号与被除数的符号相同。

例如:5%3的值为2,-5%3的值为-2,5%-3的值为2。中国铁道出版社2.算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。

例如:

a*b/c-1.5+′a′

是一个合法的表达式C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。C规定了各种运算符的结合方向(结合性)

算术运算符的结合方向为“自左至右”,即先左后右。中国铁道出版社3.

自增、自减运算符++和--作用是使变量的值增1或减1如:++i,--i(在使用i之前,先使i的值加(减)1)i++,i--(在使用i之后,使i的值加(减)1)

i++与++i的区别:

++i是先执行i=i+1后,再使用i的值;i++是先使用i的值后,再执行i=i+1。例如:

①j=++i;i的值先变成4,再赋给j,j的值均为4②j=i++;先将i的值3赋给j,j的值为3,然后i变为4再如,若a的值仍为3

则执行a++*2后,表达式的值为6,a的值为4, 而执行++a*2后,表达式的值为8,a的值为4。中国铁道出版社注意:

(1)自增运算符(++),自减运算符(--),只能用于变量(整型或指针)类型,而不能用于常量或表达式,

(2)++和--的结合方向是“自右至左”。如:5++、(a+b)++、--d(d为实数)

非法

printf(“%d”,-i++);如果i的原值为3,输出-3

自增(减)运算符常用于循环语句中使循环变量自动加1。也用于指针变量,使指针指向下一个地址。中国铁道出版社例2.4分析运行结果#include<stdio.h>voidmain(){inti=8;

printf("%d",++i);printf("%d",--i);printf("%d",i++);printf("%d",i--);printf("%d",-i++);

printf("%d\n",-i--);}中国铁道出版社4.强制类型转换运算符可以利用强制类型转换运算符将一个变量或表达式转换成所需类型。

一般形式:(类型说明符)(表达式)

例如:

(double)a将a转换成double类型

(int)(x+y)将x+y的值转换成整型

(float)(5%3)将5%3的值转换成float型思考:(int)(x+y)与(int)x+y的区别。中国铁道出版社例强制类型转换。

#include<stdio.h>

voidmain()

{floatx;

int

i;

x=3.6;

i=(int)x;

printf("x=%f,i=%d\n“,x,i);

运行结果:

x=3.600000,i=3中国铁道出版社说明:(1)类型说明符和表达式都必须加括号,单个变量可不加。(2)有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如3+6.5或例2.11。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。(3)不管哪种转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。中国铁道出版社2.2.2关系运算与关系表达式

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

<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)优先级相同(高)优先级相同(低)说明:关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符中国铁道出版社

结合方向从左到右。

a==b<c等价于a==(b<c)

而不等价于(a==b)<c中国铁道出版社2.关系表达式用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符表达式)接起来的式子,称关系表达式例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)关系表达式的值是一个逻辑值,即“真”或“假”。例:关系表达式”a>b”的值为“真”,表达式的值为1。C语言中没有专用的逻辑值,1代表真,0代表假中国铁道出版社

例如:5>3的结果为1,a<B的结果为0

例:

x为0到100之间的数能否表示为

0<=x<=100?

对n(>0)个人进行分班,每班k(>0)个人,最后不足k人也编一班,问要编几个班?n/k+(n%k>0)中国铁道出版社2.2.3逻辑运算符和逻辑表达式1.逻辑运算符及其优先次序(1)&&(逻辑与)(2)||(逻辑或)(3)!(逻辑非)例:a&&b若a,b为真,则a&&b为真。

a||b若a,b之一为真,则a||b为真。!a若a为真,则!a为假。优先次序:!(非)->&&(与)->||(或)逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符中国铁道出版社2.逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑表达式的值应该是一个逻辑量“真”或“假”。即:1或0例:设a=4,b=5:!a的值为0a&&b的值为1a||b的值为1!a||b的值为14&&0||2的值为1任何非零的数值被认作“真”中国铁道出版社例:5>3&&8<4-!0

自左向右运算

1&&0逻辑值为08<3逻辑值为04-1值为3!0逻辑值为15>3逻辑值为1表达式值为0中国铁道出版社返回观看C语言表达式求值过程在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。(1)a&&b&&c只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。(2)a||b||c只要a为真,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c。(3)当多个&&和||混合出现时,视具体情况而定。注意:这里的a,b,c代表任何合法的C语言表达式。

例:(m=a>b)&&(n=c>d)当a=1,b=2,c=3,d=4,m和n的原值为1时,由于“a>b”的值为0,因此m=0,而“n=c>d”不被执行,因此n的值不是0而仍保持原值1。中国铁道出版社例

#include

stdio.h main() {

intm,n=10; m=2&&n++;

printf("m=%d,n=%d\n",m,n); }思考题:

若将程序中m=2&&n++改为m=0&&n++,则程序的运行情况又将如何?中国铁道出版社

用逻辑表达式来表示闰年的条件能被4整除,但不能被100整除。能被400整除。?答

(year%4==0&&year%100!=0)||year%400==0案

值为真(1)是闰年,否则为非闰年。中国铁道出版社

2.2.4条件运算符

格式:表达式1?表达式2∶表达式3说明:(1)条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。(2)条件运算符优先级高于赋值运算符,低于关系运算符、逻辑运算符和算术运算符。(3)条件运算符的结合方向为“自右至左”。(4)“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。(5)条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同。中国铁道出版社例2.6输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。

#include<stdio.h>

voidmain()

{charch;

scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?(ch+32):ch;

printf("%c\n",ch);

}

如果字符变量ch的值为大写字母,则条件表达式的值为(ch+32),即相应的小写字母。如果ch的值不是大写字母,则条件表达式的值为ch,即不进行转换。

例:max=(a>b)?a∶b;中国铁道出版社2.2.5赋值运算符和赋值表达式1.赋值运算符

赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量.2.类型转换

如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。①将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。如:i为整型变量,执行“i=3.56”的结果是使i的值为3,以整数形式存储在整型变量中.中国铁道出版社②将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中

如:

将23赋给float变量f,即执行f=23,先将23转换成23.00000,再存储在f中。将23赋给double型变量d,即执行d=23,系统将23补足有效位数字为23.00000000000000,然后以双精度浮点数形式存储到变量d中。

③将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(4个字节)中。但应注意数值范围不能溢出。如:floatf;doubled=123.456789e100;f=d;就出现溢出的错误。

如果将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以8个字节存储中国铁道出版社④字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为2个字节,因此将字符数据(8个二进位)放到整型变量存储单元的低8位中。

将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。例如:inti=289;charc=′a′;c=i;赋值情况:c的值为33,如果用“%c”输出c,将得到字符“!”!的ASCII码为33。

中国铁道出版社3.复合的赋值运算符在赋值符“=”之前加上其他运算符,可以构成复合的运算符。例如:

a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3为便于记忆,可以这样理解:①a+=b(其中a为变量,b为表达式)②a+=b(将有下划线的“a+”移到“=”右侧)

|___↑③a=a+b(在“=”左侧补上变量名a)中国铁道出版社注意:如果b是包含若干项的表达式,则相当于它有括号。如:

①x%=y+3

②x%=(y+3)|__↑

③x=x%(y+3)(不要错写成x=x%y+3)

凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。C语言规定可以使用10种复合赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,∧=,|=

中国铁道出版社4.赋值表达式

由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:

<变量><赋值运算符><表达式>

例如:“a=5”是一个赋值表达式

中国铁道出版社对赋值表达式求解的过程是:①求赋值运算符右侧的“表达式”的值;②赋给赋值运算符左侧的变量。例如:赋值表达式“a=3*5”的值为15,执行表达式后,变量a的值也是15。

注意:一个表达式应该有一个值

中国铁道出版社

赋值表达式中的“表达式”,又可以是一个赋值表达式。例如:a=(b=5)

分析:括弧内的“b=5”是一个赋值表达式,它的值等于5。执行表达式“a=(b=5)”相当于执行“b=5”和“a=b”两个赋值表达式。赋值运算符按照“自右而左”的结合顺序,因此,“(b=5)”外面的括弧可以不要,即“a=(b=5)”和“a=b=5”等价。中国铁道出版社

赋值表达式也可以包含复合的赋值运算符。

如:a+=a-=a*a分析:此赋值表达式的求解步骤如下∶(假的a的原值为12)①先进行“a-=a*a”的运算,它相当于a=a-a*a,a的值为12-144=-132。②再进行“a+=-132”的运算,相当于a=a+(-132),a的值为-132-132=-264。中国铁道出版社2.2.6逗号运算符和逗号表达式逗号运算符:将两个表达式连接起来,又称为“顺序求值运算符”

如:3+5,6+8

一般形式:

表达式1,表达式2求解过程:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。

逗号表达式的值为14中国铁道出版社例:逗号表达式a=3*5,a*4

分析:赋值运算符的优先级别高于逗号运算符,因此应先求解a=3*5。a的值为15,然后求解a*4,得60。整个逗号表达式的值为60。

一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式如:(a=3*5,a*4),a+5先计算出a的值等于15,再进行a*4的运算得60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20。中国铁道出版社逗号表达式的一般形式可以扩展为

表达式1,表达式2,表达式3,……,表达式n它的值为表达式n的值。逗号运算符是所有运算符中级别最低的例:①x=(a=3,6*3)②x=a=3,6*3赋值表达式,将一个逗号表达式的值赋给x,x的值等于18逗号表达式,包括一个赋值表达式和一个算术表达式,x的值为3,整个逗号表达式的值为18。中国铁道出版社sizeof运算该运算符是用来求某个数据(变量、常量、表达式)或某种数据类型所占的字节数。格式

sizeof(类型名)

或者

sizeof

变量名

对类型名和常量一定要加圆括号。中国铁道出版社例如:

sizeof(int)的值为2

sizeof(char)的值为1

sizeof(float)的值为4

sizeof(double)的值为8

sizeof(1)的值为2。又如:

有longintm;则sizeofm或者sizeof(m)的值均为4。中国铁道出版社2.3应用举例例

用c语言表达式描述下列一些命题:

1.判断m能且只能被2和3中的一个数整除。

解:

(m%3==0)&&(m%2!=0)||(m%2==0)&&(m%3!=0)或(m%3==0)!=(m%2==0) 2.判断ch是大写字母。

解:

ch>=A&&ch<=Z

[思考]上述命题可否描述为A<ch<Z?为什么?中国铁道出版社

3.将任意一个两位数x的个位数与十位数对换。 如:78----->87(x%10)*10+x/10演示:例2.8例2.9例2.10中国铁道出版社作业:教材P29

习题1,2,3,4实验作业:p31习题5编程实验中国铁道出版社scanf(格式输入函数)形式

scanf(输入格式字符串,输入项);其中:输入格式字符串的组成同printf函数中的相应部分。

输入项,即在变量名前加入一个取地址符”&”,或者是数组名及指针变量名。多个项之间用逗号分割。例:

假设有intm;charch;

则 scanf(%d,%c,&m,&ch);是正确的形式。而scanf(%d,%c,m,n);则是错误的。1.3.3格式输入函数scanf()中国铁道出版社说明:输入格式字符串中的非格式符也需要原样输入如:

scanf(%d%d,&m,&n);

输入:1215

(数据间以一个或多个空格符,制表符或回车符分隔)如:

scanf(%d,%d,&m,&n);

输入:12,15如:

scanf(m=%d,n=%d,&m,&n);

输入:m=12,n=15中国铁道出版社用%c格式输入字符时,空格字符和转义字符都作为有效字符输入。如:scanf(%c,%c,%c,&a,&b,&c);

若输入E,F,G则将E给变量aF给变量bG给 变量c。思考题:

若scanf(%c%c%c,&a,&b,&c);

输入E,F,G,则a、b、c的值各是什么?中国铁道出版社当输入的是长整型或双精度实型数据时,格式符前一定要加附加说明符“l”,否则会出错。例

#include“stdio.h” main() {doublex; longy;

scanf(%lf%ld

,&x,&y);

printf(x=%lf\ny=%ld\n,x,y); }中国铁道出版社格式说明

同printf函数一样,scanf函数的格式说明也是以“%”开头,以格式字符结束,中间可辅以附加字符。见教材p34表3.3和表3.4。 现将格式说明中有别于printf函数的地方说明如下:输入实型数据时不能指定小数位数如:

scanf(%7.2f,&d);格式字符前附加的数字,用来指定输入数据的位数,系统将自动按它截取所需数据。如:

scanf(%2d,&m);输入:1234则系统自 动将12赋给m。

·建议双引号内不要像输出函数一样用’\n’中国铁道出版社1.3.4字符输出函数putchar(输出一个字符)putchar()形式

putchar(参量)

其中参量可以是一个字符型或整型变量,字符或整型常量,或一个转义字符。作用 向终端输出一个字符,相当于printf(%c,参量)。 注意: 调用该函数时,在程序开头要加入一条文件 包含命令#include

stdio.h中国铁道出版社例

#include

stdio.h main() {

intm=65; chara,b;a=O;b=K;

putchar(m);putchar(\n);putchar(\101);

putchar(a);putchar(b); }输出结果:

AAOK中国铁道出版社1.3.5getchar函数(字符输入函数)形式:

getchar()作用:从终端输入一个字符。该函数无参数,函数的值是从输入设备得到的字符

如:

ch=getchar();中国铁道出版社说明

getchar函数得到的字符可以赋给一字符变量 或整型变量,也可以只作为表达式的一部分, 而不再赋给任何变量。

如:putchar(getchar());

该语句的作用是将从输入设备输入的字符在终端 输出设备上显示出来。

注意:

调用getchar函数时,程序前面也要包含一条预 编译处理命令:

#includestdio.h中国铁道出版社1.4输入输出应用案例演示:例1.8例1.9作业p11习题2,3实验p124.编程实验题中国铁道出版社第3章顺序和选择结构3.1顺序结构程序3.2选择结构程序

3.3选择结构程序应用案例中国铁道出版社C语言程序结构中国铁道出版社3.1顺序结构程序结构化是指程序应尽量由三种基本结构组成:顺序结构、选择结构和循环结构。顺序结构按照语句的书写顺序依次执行的程序段称为顺序结构程序实现顺序结构的语句:输入、输出语句、赋值语句、函数调用等中国铁道出版社【例3.1】顺序结构程序:计算半径为r的圆面积、球体积。程序代码如下:#include<stdio.h>#definePI3.1415926voidmain(){floatr,s,v;scanf("%f",&r);s=PI*r*r;v=4.0/3.0*r*r*r; //计算球的体积

printf("圆面积:%f",s);printf("球体积:%f",v);}中国铁道出版社3.2选择结构程序设计选择结构体现了程序的判断能力。

选择结构分:

单选择结构、双选择结构、多选择结构

C语言提供了两种实现选择结构的语句:if语句,实现单、双和多分支,要求多个表达式;switch语句,实现多分支;只用1个表达式。中国铁道出版社3.2.1if语句if语句的三种形式:单分支

if(表达式)语句当表达式为真(非0)时,执行表达式后面的语句,否则绕过该语句,而执行其后面的语句。如:

if(x>y){t=x;x=y;y=t;}

printf(“min=%d,max=%d”,x,y);

表达式语句真(非0)假(0)中国铁道出版社【例3.2】输入一个整数,若大于60则输出“大于60,及格”字样,否则不做处理。程序代码如下:#include<stdio.h>voidmain(){

intscore;

scanf("%d",&score);

if(score>60)printf("大于60,及格\n"); //x若大于60执行输出语句}也可以将if语句写成两行:if(score>60)printf("大于60,及格\n");中国铁道出版社【例3.3】给变量x和y输入任意整数值,判断x和y的大小,使x大于y。程序代码如下:#include<stdio.h>voidmain(){intx,y,t;scanf("%d,%d",&x,&y);if(x<y) //条件成立执行复合语句

{t=x;x=y;y=t;}printf("x,y为:%d,%d",x,y);}中国铁道出版社②双分支if(表达式)

语句1else

语句2

当表达式为真(非0)时,执行语句1,否则执行语句2。

错例:

if(x>y)max=x;min=y;elsemax=y;min=x;

条件

语句1

语句2YN中国铁道出版社

③多分支

if(表达式1)

语句1 elseif(表达式2)

语句2 ┆ elseif(表达式n)

语句n else

语句n+1

当表达式1的值为真(非0)时,执行语句1,否则当表达式2的值为真时执行语句2,依此类推,若表达式的值都为假,则执行语句n+1。中国铁道出版社【例3.4】计算分段函数的值。

#include<stdio.h>#include<math.h> //常用数学函数头文件voidmain(){floatx,y;

scanf("%f",&x);if(x>=0)y=sqrt(x); //sqrt(x)求x的平方根

elsey=fabs(x); //fabs(x)求x的绝对值

printf("x=%f,y=%f",x,y); //该语句总是执行到}中国铁道出版社【例3.5】编写程序计算运输收费问题。计算公式为:f=p*w*s*d。其中,f为总运输费,p为每吨公里货物运费,w为货物重量,s为公里数,d为费用折扣,折扣标准如下:公里数s折扣ds<250(km)0250≤s<10002%1000≤s<20008%2000≤s<500015%5000≤s20%分析:程序运行时需要先输入p、w、s三个基本数据,然后根据距离s的值,利用多选择结构求出折扣d,最后计算出总费用f。中国铁道出版社程序代码如下:#include<stdio.h>voidmain(){floatf,p,w,s,d;

printf("请输入p,w,s的值\n");

scanf("%f,%f,%f",&p,&w,&s);

if(s<=0) //防止误输入负值时得出错误结果

printf("数据有误");elseif(s<250)d=1;

中国铁道出版社elseif(s<1000)d=1-0.02;elseif(s<2000)d=1-0.08;elseif(s<5000)d=1-0.15;elsed=1-0.2;f=p*w*s*d;

printf("最终费用为:%f\n",f);}中国铁道出版社if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。如:

if(表达式1) if(表达式11)

语句11else

语句12 else

语句2在if语句的嵌套形式中,为了增强程序的可读性,建议采用锯齿型的书写形式。中国铁道出版社C语言规定:

else始终与同一层中最近的if配对,而这个if还没有其他的else与之匹配。分析下面结构

if(条件1)if(条件11)语句11;//条件1和条件11满足时执行语句11else语句12;//条件1满足,条件11不满足时执行语句12else

语句2; //条件1不满足时执行语句2中国铁道出版社【例3.6】已知x、y、z三个数,比较他们的大小并排序,

使得x>y>z。#include<stdio.h>voidmain(){intx,y,z,t;printf("输入x,y,z三个数\n");scanf("%d,%d,%d",&x,&y,&z);if(x<y){t=x;x=y;y=t;} //使x>yif(x<z){t=x;x=z;z=t; //使x>z,x为最大

if(y<z) //使y大于z{t=y;y=z;z=t;}}printf("%d>%d>%d\n",x,y,z);}中国铁道出版社实现上述函数判断下面程序段,哪些正确,哪些错误?(1) (2) (3)if(x>=0) y=-1; y=0;

if(x>0)if(x>=0) if(x>=0) y=1;if(x>0) if(x>0)y=1;

else y=1; else y=0;else y=-1; elsey=0; y=-1;中国铁道出版社3.2.2switch语句

C语言还提供了另外一种专门用于描述多分支选择结构的语句——switch语句。格式

switch(表达式)

{case常量表达式1:

语句组1[break;]case常量表达式2:

语句组2[break;] ┆

case常量表达式n:

语句组n[break;]

default:

语句组n+1

}

当表达式的值与某个常量表达式的值相等时,则执行该常量表达式后面相应的语句,若使用了break,则执行完该语句后便退出switch语句;否则,还要依次执行其后面的各条语句。若找不到相匹配的常量表达式,则执行default后面的语句。中国铁道出版社如:

switch(grade) {case'A':printf(85~100\n); case'B':printf(70~84\n); case'C':printf(60~69\n); case'D':printf(<60\n); default:printf(error\n); }

注意:“case常量表达式”只是起语句标号作用,不是进行条件判断。中国铁道出版社说明

switch语句中的常量表达式与表达式的类型要一致,要求为整型或字符型。常量表达式的值要互不相同,但不同的常量表达式可以共用同一个语句组。该语句通常与break语句联用,以保证多路分支的正确实现,break的作用是强制退出switch语句。多个case可以共用一组执行语句,如:……case'A': case'B': case‘C‘:printf(>60\n);错误:case‘A‘,’B’,’C’:printf(>60\n);中国铁道出版社分析下面程序段:

a=1; switch(a%5)//变量a没变

{ case0:printf(“%d\t”,a++); case1:printf(“%d\t”,a++); case2:printf(“%d\t”,++a);break; case3:printf(“%d\t”,++a);break; }中国铁道出版社例3.8阅读程序

分析当x的值分别为5、6和7时,程序的运行结果?

#include<stdio.h>voidmain(){intx,y;scanf("%d",&x);

switch(x%5) //测试表达式的值为求余运算的结果,但x不变

{case0:y=x++;printf("x=%d,y=%d\n",x,y);case1:y=++x;printf("x=%d,y=%d\n",x,y);

break;case2:y=--x;

printf("x=%d,y=%d\n",x,y);case3:y=x--;

printf("x=%d,y=%d\n",x,y);

温馨提示

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

评论

0/150

提交评论