C语言程序设计复习题_第1页
C语言程序设计复习题_第2页
C语言程序设计复习题_第3页
C语言程序设计复习题_第4页
C语言程序设计复习题_第5页
已阅读5页,还剩523页未读 继续免费阅读

下载本文档

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

文档简介

计算机等级考试二级C程序设计考前辅导上海市高等学校上海第二工业大学计算机与信息学院11/3/2023目录一C程序的组成、结构及书写规则二数据类型及基本运算三顺序结构程序设计四选择结构程序设计五循环结构程序设计六数组七函数及变量的存储类别和编译预处理八指针九结构与其它自定义类型十文件11/3/2023第一章C程序的组成、结构及书写规则11/3/20231.1C语言的发展史回顾:程序设计与高级语言早期的机器语言;过渡性语言——汇编语言;

20世纪50年代末的程序设计语言(高级语言);11/3/2023C语言的产生与发展

C语言是国际上广泛流行的计算机高级语言,既可用来写系统软件,也可用来写应用软件。

C语言是在B语言的基础上发展起来的。

1969年英国剑桥大学的MatinRichards推出了BCPL(basiccombinedprogramminglanguage)语言。

1972年至1973年间,贝尔实验室的D.M.Ritchie在B语言的基础上设计出了C语言(取BCPL的第二个字母)。最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。11/3/20231977年出现了不依赖于具体机器的C语言编译文本《可移植C语言编译程序》,使C移植到其他机器时所需做的工作大大简化。

1978年,

BrianW.Kernighan和DennisM.Ritchie合著了影响深远的名著《TheCProgrammingLanguage》,书中介绍的C语言成为后来广泛使用的C语言版本的基础,被称为标准C。1978年以后,C语言已先后移植到大、中、小、微型机上。

1980年,贝尔实验室的BjarneStroustrup博士及其同事修改和扩充C语言的内核,使其能满足面向对象模型的要求,称“带类的C”,1983年取名C++;11/3/2023

C++与C完全兼容,保存了C语言的所有组成部分,具有更完美的体系结构和更强大的功能;

C/C++常用的编译软件有TurboC,QuickC,BorlandC,MicrosoftVisualC++,BorlandC++,WatcomC++等等;注意:同学们应了解所用的计算机系统所配置的C编译系统的特点和规定(可以参阅有关手册)。11/3/20231.2.1简单的C/C++程序实例【例1.1】#include<stdio.h>头文件main()函数名{printf("ThisisaCprogram.\n");}函数体本程序的作用是输出以下一行信息:

ThisisaCprogram.

1.2C/C++程序简介11/3/2023

1.2.2C/C++程序设计规则(1)C程序中使用到的一切数据都必须在使用它们之前对其类型和存储属性加以定义和说明;(2)函数是C程序的基本模块,包括函数名、参数说明表和函数体三个部分;(3)语句是函数的基本单位,语句结束必须加“;”;(4)C语言允许“/**/”包围的注释行;(5)C程序是自由格式书写的程序,通常采用结构化程序设计原则将程序设计成“层次型”;(6)C的输入输出操作由库函数scanf和printf完成;11/3/2023c程序结构11/3/2023C程序运行的步骤:

高级语言源程序目标程序编译程序编译执行高级语言程序的执行过程

在编好一个C源程序后,如何上机运行呢?要经过以下几个步骤:上机输入、编辑源程序、对源程序进行编译、与库函数连接、运行目标程序这样几个步骤。11/3/2023

实线表示操作流程,虚线表示文件的输入输出。11/3/2023

1.2.3C/C++程序的编辑、编译与运行

1)在TurboC集成开发环境下编译与运行C程序为了能使用TurboC,必须先将TurboC编译程序装入磁盘的某一目录下,例如放在C盘根目录下一级TC子目录下。第一步:运行TurboC,即TC.exe文件;第二步:编辑源文件。在编辑(Edit)状态下可以根据需要输入或修改源程序。11/3/2023

第三步:编译源程序。选择“Compile”菜单并在其下拉菜单中选择“CompiletoOBJ”,则进行编译,得到一个后缀为.obj的目标程序;然后再选菜单“Compile/LinkEXEfile”,进行连接操作,可得到一个后缀为.exe的可执行文件。也可以将编译和连接合为一个步骤进行。选菜单“Compile/MakeEXEfile”或按“F9”键,即可一次完成编译和连接。

第四步:打开“Run”菜单,选择Run命令运行可执行程序;11/3/2023【特别说明】11/3/2023

2)在VisualC++集成开发环境下编译与运行C程序(自修)

第一步:打开“Build”菜单,选择“Compilehjm01.c”命令,编译正确后生成目标文件;

第二步:打开“Build”菜单,选择“Buildhjm01.exe”命令,将目标程序与库文件相链接,生成可执行文件;

第三步:打开“Build”菜单,选择“Executehjm01.exe”命令,运行执行程序。11/3/20231.3C程序的基本语法成分1.3.1基本字符集字符集是构成C/C++程序的基本元素。C/C++语言的字符集有下述字符构成:

(1)英文字母:A~Z,a~z

(2)数字字符:0~9

(3)特殊符号:!,#,%,&等。11/3/20231.3.2标识符

C/C++程序中,标识符用来标识变量名、符号常量名、函数名、数组名、文件名、类名、对象名等。

有效标识符的构成规则为:(1)必须由字母(a~z,A~Z)或下划线(_)开头;(2)由字母、数字和下划线组成的长度不超过32的字符串;(3)标识符中的大小写字母有区别;(4)不能与关键字同名;下面是不合法的标识符和变量名:M.d.,John,y123,#33,3d6411/3/20231.3.3关键字

C编译系统已经预定义的、具有特殊用途的保留标识符称为关键字。具体见书P7。1.4编译预处理编译预处理是C编译系统的一个组成部分。

功能:告诉编译系统在对源程序进行编译之前应该做些什么。返回11/3/2023C源程序目标程序执行程序编译预处理编译链接图1编译预处理的执行过程(无预处理命令)(有预处理命令)11/3/2023

编译预处理命令有三种:宏定义无参数宏定义有参数宏定义(7.7节介绍)文件包含条件编译返回11/3/2023

无参数宏定义的格式为:#define<宏名><字符串>

【例】#definePI3.1415926

【例】分析程序的结果。

#definePI3.1415926#defineR4.0main(){floatarea;area=PI*R*R;printf(“area=%.2f”);}宏名一般用大写字母表示1.4.1无参数宏定义11/3/20231.4.2文件包含

文件包含是通过编译预处理命令#include把另一个文件的全部内容包含到本文件之中。命令格式有两种:#include“文件名”【例】#include“C:\TC\CC1\file2.c”#include<文件名>

【例】#include<stdio.h>

按系统指定的标准方式检索文件目录先在源文件目录中检索文件,没找到再按系统指定的标准方式检索文件目录11/3/2023【例】计算常用对数lgx。

#include“math.h”main(){floatx;scanf(“%f”,&x);printf(“%f\n”,log10(x));}【例】#include<stdio.h>main(){printf("ThisisaCprogram.\n");}11/3/2023第二章数据类型及基本运算11/3/20232.1C数据类型

见书P11图2.1数据类型分类示意图2.2基本数据类型见书P12表2.12.3数据的表示

数据在内存中有两种表示形式:其一是在程序运行过程中值永远保持不变的常量;其二是在程序运行过程中值可以发生变化的变量;11/3/2023常量数值常量符号常量整型常量实型常量字符常量字符串常量2.3.1常量常量——在程序运行过程中其值不能被改变的量;按表达形式,常量分为:11/3/2023

1、值常量常量通常是直接以自身的存在形式体现其值和类型,常量不占内存,在程序运行时作为操作对象直接出现在运算器的各种寄存器中。

2、符号常量

符号常量的定义形式:

#define

标识符值常量

const

数据类型标识符=值常量

【例】#definePI3.14159

constfloatI=3.141592611/3/2023

3.常用的转义字符【例】分析下面两段代码的区别:

#include<stdio.h>main(){printf(“ThisisaCprogram.\n”);}

#include<stdio.h>main(){printf(“\tThisisaCprogram.\n”);}11/3/20232.3.2变量

变量——在程序运行过程中其值可以被改变的量;

1.变量的说明形式:

数据类型

<变量名列表>

【例】inti,j,k;

2.变量的赋初值——在程序中,一个变量占据着一个实际的存储单元,变量名实际上是存储单元的逻辑地址,存储单元中的内容是变量的值;11/3/2023

(1)允许在定义变量的同时对其赋初值;【例】inta=3;

floatf=7.8;(2)允许仅对说明语句中的部分变量赋初值;【例】inta,b,c=6;(3)不允许同时对几个变量赋同一个初值;【例】inta=b=c=13;(4)变量的赋初值不是在程序编译阶段,而是在程序运行时赋的;11/3/2023使用注意:

1、变量一旦被说明为字符型,就意味着它只能取单字符值。

例:char

x;x=33;字符在计算机内部并不是以字符原形存储的,是以ASCII码的形式存储在一个字节中,所以字符也可以用ASCII码的整数形式来表示。

2、字符型数据与字符串数据的区别——形式和存储;返回第三章11/3/20232.4常用的运算符和表达式

2.4.1算术运算符和算术表达式

1)算术运算符类别运算符含义备注双目/除随参与运算的类型而含义有所不同%求余数运算对象必须为整型单目++自增1运算对象必须为变量--自减1运算对象必须为变量+取正-取负11/3/20232)算术运算符的运算优先级和结合性运算符结合性备注()自内向外++,--,-(取负)自右至左++,--为前缀形式时*,/,%自左至右+(加),-(减)自左至右优先级3)算术表达式

注意书写的规范11/3/2023【例】将下列代数式转换成C语言表达式。

sqrt(x*x+1)/(2*x)sqrt(abs(x))/24)算术型数据的混合运算自动类型转换:规则是由低级向高级转换,如下图所示:(P17图2.2)11/3/2023

强制类型转换:是根据程序的需要,将某数据强制转换成指定的数据类型,方法是在被转换对象(或表达式)前面增加类型标识符,形式如下:

数据类型自动转换规则示意(类型标识符)表达式水平箭头表示必定转换;纵向箭头表示两个不同类型对象时的转换方向11/3/2023

【例】(2.7+6.8)表示将2.7+6.8的运算结果9.5强制转换成int型整数9,舍弃小数部分。【思考题】如何实现运算结果的四舍五入呢?

5)使用算术表达式的注意事项两个整数直接相除,结果自动取整,丢弃小数部分;【例】floatx,y;

x=6/4;y=6.0/4;x的值为1.0y的值为1.5(int)11/3/2023

运算符“++”、“--”运算的优先级高于算术运算中所有双目运算符,运算对象只能是变量,不能是表达式或

常量;【例】有intx;floaty;下面的式子错在了哪里?(x+y)++、5++

变量的前缀和后缀运算的区别11/3/2023【例】设intx=5;则:y=6,x=6y=25,x=7y=49,x=7y=++x*++x;y=++x;y=x++*x++;y=5,x=6y=x++;11/3/2023

2.4.2赋值运算符和赋值表达式

1)基本赋值运算符

形式:=

功能:将赋值运算符右边的表达式的值赋给其左边的变量;【例】floatx=3.1;inty;y=x+2;正确floaty=5.6;intx;x+2=y;5=y;错误11/3/2023

2)复合赋值运算符

形式:算术运算符=

功能:对赋值运算符左、右两边的运算对象进行指定的算术运算符的运算,再将运算结果赋予左边的变量;【例】a+=3等价于a=a+3

那么a*=b+1等价于a=a*(b+1)

方法:

①a+=(b)(其中a为变量,b为表达式)

②a+=(b)(将有下划线的“a+”移到“=”右侧)

③a=a+(b)(在“=”左侧补上变量名a)11/3/2023

3)赋值表达式用赋值运算符将运算对象连接而成的式子称为赋值表达式。【例】intk,a=1,j=5;a+=j++【例】intx=6;

x+=x-=x*x;a=a+(j++)a=6,j=6x=x+(x-=x*x)x=x+(x=x-x*x)x=-6011/3/2023

2.4.3逗号运算符和逗号表达式

1)逗号运算符“,”的用法:用作分隔符——在变量说明语句、函数调用语句等场合,例如inta,b,c;用作运算符——是一个双目运算符,构成逗号表达式,优先级最低,运算顺序自左至右;例如

a=2*6,a-4,a+15;12827逗号表达式的值为2711/3/2023

2)逗号表达式

形式:表达式1,表达式2,表达式3,…,表达式n分别计算每一个表达式的值,并将最后一个表达式的值作为整个逗号表达式的结果

【例】x=5+5,10+10

【例】x=(5+5,10+10)20,10逗号表达式的值和x的值分别为赋值语句之后x的值为2011/3/2023

【例】分析逗号表达式(a=3*5,a*4),a+15的结果。60a的值为15整个逗号表达式的值为30

【例】intx,y,分析y=(x=1,++x,x+2)的结果。逗号表达式的值为44y的值为括号中的表达式值为11/3/2023

2.4.4关系运算符和关系表达式关系运算主要用在程序中的判断语句。

1、关系运算符<<=>>===!=同级同级高低2、关系表达式若干表达式用关系运算符连接而成,关系表达式的值为0或1。【例】设x=1,y=2,z=3,分析下面的关系表达式的值。

x!=y==z-2111/3/2023

2.4.5逻辑运算符和逻辑表达式

1、逻辑运算符运算符优先级!(逻辑非)1*/%2+-3<<=>>=4==!=5&&(逻辑与)6||(逻辑或)7=811/3/20232)逻辑表达式用逻辑运算符将若干不同类型的表达式连接而成的式子称为逻辑表达式。逻辑表达式的值应该是一个逻辑量“真”或“假”。c语言编译系统在给出逻辑运算结果时,判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。【例】设inta=0,b=2,c=3;判断下面逻辑表达式的值。

a<b&&b>0,a>0||b<0||c<0,!a11/3/2023

使用逻辑表达式时,要注意的问题:

代数中的不等式0<x<5必须写成(x>0)&&

(x<5),而不能直接写成0<x<5,因为无论x取值如何,其逻辑值恒为非0;

C语言允许直接对数或字符进行逻辑运算。例如:!5,其结果为0;11/3/2023【例】判别一个字符型变量c是否是英文字母。c>=‘A’&&c<=‘Z’||c>=’a’&&c<=‘z’【例】判别整数变量year是否为闰年。(year%4==0&&year%100!=0)||(year%400==0)返回11/3/2023

2.4.6位运算符和位表达式

1)位运算符位运算符形式功能~~x对x的二进制值按位求反&x&y对x,y的二进制值按位与|x|y对x,y的二进制值按位或^x^y对x,y的二进制值按位异或<<x<<m将x的二进制值左移m位>>x>>m将x的二进制值右移m位

2)位运算符求值规则11/3/2023

3)位运算的优先级~<<>>&^|运算符求值规则~~0=1~1=0(求反)&0&0=00&1=01&0=01&1=1(与)|0|0=00|1=11|0=01|1=1(或)^0^0=00^1=11^0=11^1=0(异或)<<00101110<<2结果为10111000>>00101110>>2结果为00001011高低11/3/2023

【例】取一个整数a从右端开始的4~7位。

分为3步考虑:

第一步:先使a右移4位;下图中,

(a)图是未右移时的情况;(b)图是右移4位后的情况。目的是使要取出的那几位移到最右端。右移到右端可以用下面方法实现:a>>4。11/3/2023

第二步:

设置一个低4位全为1,其余全为0的数。可用下面方法实现:

~(~0<<4)~0的全部二进制为全1,左移4位,这样右端低4位为

0。见下面所示:

0:0000…000000~0:1111…111111~0<<4:1111…110000~(~0<<4):0000…00111111/3/2023

第三步:

将上面二者进行&运算。即(a>>4)&~(~0<<4)

根据介绍的方法,与低4位为1的数进行&运算,就能将这4位保留下来。程序如下:

11/3/2023

main(

)

{unsigneda,b,c,d;

scanf("%o",&a);

b=a>>4;

c=~(~0<<4);d=b&c;

printf("%o,%d\n%o,%d\n",a,a,d,d);

}

11/3/20232.5常用的库函数

2.5.1库函数的调用

abs(x)fabs(x)sqrt(x)pow(x,y)clrscr()11/3/20232.5.2使用库函数注意事项库函数是C编译系统预定义的,库函数的原型都被定义在扩展名为h的头文件,在调用库函数之前,必须用#include编译预处理命令将相关的头文件包含到程序中来。11/3/2023

【例】计算常用对数lgx。

#include“math.h”main(){floatx;scanf(“%f”,&x);printf(“%f\n”,log10(x));}11/3/2023第三章顺序结构程序设计11/3/2023程序从的执行流程可以分为三种基本结构:顺序结构分支结构循环结构3.1用于顺序结构的基本语句

C语言用于顺序结构的基本语句是表达式语句、复合语句和空语句。

3.1.1表达式语句11/3/2023

表达式语句的形式:表达式;【例】a=1;【功能】完成计算表达式的值或将结果赋给某一变量的任务;【例】i++;【例】printf(“bye!”);

【例】x=y+z;11/3/2023

表达式语句中最常用的是赋值语句(赋值表达式+

;)简单赋值:变量=表达式;多重赋值:变量1=变量2=…=变量n=表达式;赋值表达式可以出现在任何表达式允许出现的地方,而赋值语句则不能;x=(y=2)+(z=3+y);x=(y=2;)+(z=3+y;);正确错误11/3/20233.1.2复合语句复合语句的形式:{若干连续语句;

}

【例】{z=x;x=y;y=z;}

注意:{}中最后一个语句末尾的分号不能省略,并且在{}之外不能再加“;”。【应用范围】复合语句主要用于选择结构和循环结构中。返回11/3/20233.1.3空语句空语句的形式:;【功能】一般作为程序的转向点或作为循环语句中的空循环体;11/3/20233.2输入与输出

C语言的输入和输出函数(原型放在头文件stdio.h中):

putchar(字符输出);

printf(格式输出);

getchar(字符输入);

scanf(格式输入);11/3/20233.2.1数据的输出

1、putchar函数

功能:在显示器上输出一个字符。

函数调用形式:putchar(参数)

说明:参数可以是一个字符型变量、一个整型变量或一个字符型常量(包括控制字符和转义字符)等。【例】使用库函数putchar()输出各种字符。11/3/2023

#include<stdio.h>main(){charch1,ch2;intj;ch1=‘C’;ch2=‘h’;j=105;putchar(ch1);putchar(ch2);putchar(j);putchar(‘n’);putchar(‘\141’);

putchar(‘\n’);输出字符C输出字符h输出字符i输出字符n输出字符a,\141是转义字符输出换行}11/3/20232、printf函数

1)函数形式:

printf(“格式控制字符串”,输出项1,输出项2,…)

函数功能:将各输出项(可以是变量、常量、表达式)的值按指定的格式输出到屏幕上。【例】printf(“%d\n”,x);2)printf函数中常用的格式控制

形式:11/3/2023格式字符

%[

格式修饰]格式说明总是由“%”字符开始标志、类型修饰、输出最小宽度和精度说明输出项类型

格式字符见P32表3.1;【例】printf(“x=%d,y=%f\n”,x,y);

【例】main()

{charc=‘A’;intx=1234;floaty=-123.456789;printf(“|%c|%s|%d|%f|%e|\n”,c,“Hello”,x,y,y);}11/3/2023

标志

-表示输出值左对齐,右边补空;【例】printf(”%-d”,-24);运行结果:-24  +表示输出结果右对齐,输出符号位;#对o格式输出时加前缀0,对x格式输出时加前缀0x,对

e、g、f格式当结果有小数时才给出小数点;11/3/2023

精度

m.n

【例】printf(“%8.1f”,123.45);

输出结果:_

_

_123.5

输出宽度用十进制整数限定输出数据的位数:【例】printf(“%5d”,-24);运行结果:__-24数据总宽度小数位数11/3/2023

类型修饰

h表示输出项是短整型或无符号短整型;

l表示输出项是长整型或无符号长整型;【例】longintx=1234567;

printf(”|%ld|%d|”,x,x);

输出结果:|1234567|-10617|11/3/2023

【例】printf函数应用举例。#include<stdio.h>main(){intx=28;floaty=-1.7;charc=‘B’;doublez=1.25e+7;printf(“x=%+5d,y=%-8.3f\n”,x,y);printf(“|%c####%-5c|\n”,c,c);printf(“z=%lf\n”,z);}x=__

+28,y=-1.700__|B####B____|Z=12500000.00000011/3/20233.2.2数据的输入

1、getchar函数调用形式:c=getchar()

功能:从键盘上读取一个字符;【例】#include<stdio.h>main(){charch;ch=getchar();printf(“%c:%d\n”,ch,c);}#include<stdio.h>main(){charch;ch=getchar();printf(“c:%d\n”,ch,c);}11/3/20232、scanf函数

1)函数调用形式:

scanf(“格式控制字符串”,输入项1,输入项2,…)

函数功能:按指定的格式接收由键盘输入的数据,并存入输入项变量所在的内存单元中。

格式控制字符串形式:%[格式修饰]格式字符输入项必须为地址引用:&变量名【例】scanf(“%d,%d”,&x,&y);11/3/20232)scanf函数中常用的格式控制格式字符见P36表3.3;输入数据宽度用十进制整数设定输入数据的宽度,【例】scanf(”%5d”,&a);输入7654321

类型修饰符类同于printf函数;

3)scanf函数的使用要点

intx;scanf(”%d”,x);输入数据时,不允许规定精度错误scanf(”%d”,&x)11/3/2023

输入数据时,数据与数据之间应使用分隔符;【例】scanf(”%d,%d”,&x,&y);【例】scanf(”%d%d”,&x,&y);按原样输入的字符在键入时不能遗漏,否则将导致数据项与对应读入数据错位;【例】scanf(“x=%d,y=%d”,&x,&y);正确的输入应该是x=3,y=4

键入数据的类型、宽度应该与格式控制中给定的相一致;例doublea,b;scanf(”%d%d”,&a,&b);

错误11/3/20233.3顺序结构程序设计举例

为了提高程序设计的质量和效率,现在普遍采用结构化程序设计方法。结构化程序由若干个基本结构组成。每一个基本结构可以包含一个或若干个语句。

顺序结构见下图。先执行A操作,再执行B操作,两者是顺序执行的关系。图是ns结构化流程图。11/3/2023

【例】输入三角形的三边长,求三角形面积。设输入的三边长a、b、c能构成三角形。从数学知识已知求三角形面积的公式为:其中s=(a+b+c)/2;#include<stdio.h>

#include<math.h>main()

{floata,b,c,s,area;

scanf("%f,%f,%f",&a,&b,&c);

s=(a+b+c)/2;

area=sqrt(s*(s-a)*(s-b)*(s-c));11/3/2023

printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",

a,b,c,s);

printf("area=%7.2f\n",area);}运行情况如下:输入

3,4,6

a=3.00,b=4.00,c=6.00,s=6.50

area=5.3311/3/2023【例】编写程序,键盘输入一个三位整数,逆序输出之。

#include<stdio.h>main(){inta,i,j,k;printf(“Inputdatas:”);scanf(“%3d”,&a);

i=a/100;j=a/10-i*10;k=a-j*10-i*100;printf(“output:%d%d%d\n”,k,j,i);}11/3/2023

【例】不借助于第3个变量,将键盘输入的两个整数赋予变量a和b,程序输出a,b的原始值以及相互交换后的值。#include<stdio.h>main(){inta,b;printf(“Inputaandb:”);scanf(“%d%d”,&a,&b);printf(“olda=%db=%d\n”,a,b);a=a+b;b=a-b;a=a-b;printf(“newa=%db=%d\n”,a,b);}ab68ab6+8=148ab6+8=1414-8=6ab14-6=8611/3/2023第四章选择结构程序设计11/3/2023顺序结构与选择结构流程对照

顺序结构选择结构

p代表一个条件,当p条件成立(或称为“真”)时执行A,否则执行B。注意,只能执行A或B之一。两条路径汇合在一起然后出口。11/3/2023

两个选择结构的程序实例:【例】if条件语句。

if(x>0)return1;elsereturn–1;

【例】switch多分支选择语句。

switch(month)

{case1:case3:day=31;case4:case6:day=30;}11/3/20234.1if语句

4.1.1if语句的三种基本形式

1、if结构

if语句单分支选择结构的语法形式是:

if(表达式)语句1;

【例】if(x>0)y=1;

其中“x>0”是一个关系表达式。语义图表达式语句1非0011/3/2023

【例】下列错误的语句是()。

A)if(a>b)printf(“%d”,a);B)if(a>0);a=n;C)if(2)a=m;D)if(&&);a=m;D11/3/2023

【例】输入一个整数,判断其奇偶性,若为奇数就显示输出。按照语法含义图写出程序的流程,并编写程序代码:是奇数吗?用printf语句输出否是11/3/2023

程序如下:

#include<stdio.h>main(){intx;scanf(“x=%d”,&x);if(x%2!=0)printf(“%disoddnumber\n”,x);}

运行结果:x=77isoddnumber11/3/2023

2、if…else结构

if语句双分支选择结构的语法形式为:

if(表达式)语句1

else语句2

【例】if(x>0)y=1;elsey=-1;语义图11/3/2023【例】从键盘上输入两个整数,输出其中的大数。写出选择结构的语义图:语义图x>y输出x输出y11/3/2023

【题目】从键盘上输入两个整数,输出其中的大数。#include<stdio.h>main(){intx,y;printf(“Enterxandy:”);/*为了提高程序的可读性*/scanf(“%d%d”,&x,&y);printf(“x=%d,y=%d\n”,x,y);/*提高程序的可读性*/if(x>y)printf(“max=%d\n”,x);

elseprintf(“max=%d\n”,y);

}11/3/2023

思考问题:

1、如果双边if语句if(表达式)语句1;

else语句2;语句1和语句2是个语句体,该如何表示?【例】比较a和b的大小,如果a>b,交换a和b的值,否则什么都不做。if(a>b)temp=a;a=b;b=temp;else;if(表达式){语句体1;}else{语句2;}

【例】if(a>b)temp=a;a=b;b=temp;复合语句{}11/3/2023

【例】写出下面程序的输出结果。运行结果:11/3/20233、if…elseif结构

if…elseif语句为多分支选择结构,一般形式为:

if(表达式1)语句1;

elseif(表达式2)语句2;

elseif(表达式3)语句3;

……elseif(表达式n)语句n;

else语句n+1;11/3/2023多分支选择结构if…elseif语句的语义图:11/3/2023

【例】有一函数:-1(x<0),实现输入一个x值,输出y值。y=0(x=0)1(x>0)

分析:

输入x如果x<0,则y=-1输出y;否则:如果x=0,则y=0输出y;

否则x>0,则y=1输出y;11/3/202311/3/20234.1.2if语句的嵌套形式在if语句中又包含一个或多个if语句称为if语句的嵌套。语义图表达式非00表达式22语句3语句4非00语句1表达式11语句2非00if(表达式)

if(表达式11)语句1;

else

语句2;else

if(表达式22)语句3;

else

语句4;语法形式11/3/2023

【使用注意事项】else子句总是与它前面最近的、尚未配对的if子句进行匹配;【例】if(a==b)if(b==c)printf(“a=b=c\n”);elseprintf(“b!=c\n”);{}11/3/20234.2条件表达式

条件运算——条件运算符连接表达式构成的运算;

1、条件运算符

形式:

?:

2、条件表达式

形式:表达式1?表达式2:表达式3

语义:先计算表达式1的值,若结果为非0,则以表达式2的值作为整个条件表达式的值;若为0,则以表达式3的值作为整个表达式的值;11/3/2023

执行过程如下:11/3/2023

【例】(x>0)?1:-1若表达式1为真,返回1,否则返回-1说明:表达式2和表达式3通常为同类型,若不同则整个条件表达式的数据类型取两个表达式中较高的类型;各类运算符的优先级:算术运算符关系运算符逻辑运算符条件运算符赋值运算符

高低表达式1表达式2表达式311/3/2023

条件运算符的结合方向是“自右至左”的;【例】a>b?a:c>d?c:da>b?a:(c>d?c:d)

【例】设有:inta=1,b=2,c=3,d=4,m=2,n=2;求下列表达式的值。(1)a+b>c?m*a:m*b411/3/20234.3switch语句

看下面这个例子:

if(ch==‘Z’)z=z+1;elseif(ch==‘W’)w=w+1;elseif(ch==‘C’)c=c+1;elseif(ch==‘Q’)q=q+1;elseif(ch==‘S’)s=s+1;11/3/20231、switch语句的结构

形式:switch(表达式)

{case

常量表达式1:语句1;

case

常量表达式2:语句2;

……case常量表达式n:语句n;

default:语句n+1;

}11/3/2023

用switch语句改写上面的程序:

switch(ch){case‘Z’:z=z+1;case‘W’:w=w+1;case‘C’:c=c+1;case‘Q’:q=q+1;case‘S’:s=s+1;}

【例】要求按照考试成绩等级打印出百分制分数段可以用switch语句实现:流程图见下图:11/3/202311/3/2023根据语义图写出switch语句结构:11/3/202311/3/2023运行结果:11/3/20232、switch与break配合使用

break语句是中断语句,常与switch语句配合使用,程序执行到break语句时,跳出switch语句体。用switch和break语句改写上面的程序:11/3/2023运行结果:11/3/2023【例】从键盘输入一个分数,使用switch语句判断是否及格。11/3/2023错误【例】下述程序段中,正确的是()。

A)intx=0,y=10;switch(x){casey:x++;break;casey+2:x+=10;break;casey-1:x=-7;break;}11/3/2023B)intx=0,y;switch(x){casex>0:y=1;break;casex==0:y=0;break;casex<0:y=-1;break;}错误11/3/2023

C)#definey20intx=10,y;switch(x){case12:z=3;break;casey+1:x+=10;break;casey-8:x-=3;break;}错误11/3/2023

D)intx=0,y;switch(x){case3:case-1:y=2;break;case2:break;}正确11/3/20234.4应用举例

【例】判断从键盘输入的字符是否为小写字母,若是,则将其转换为大写字母并输出;若不是,则原样输出。流程图如下所示:是小写字母吗?输入字符转换为大写字母原样输出是否11/3/2023#include<stdio.h>main(){charch;printf(“pleaseinputacharacter:”);scanf(“%c”,&ch);if(ch>=‘a’&&ch<=‘z’)printf(“thecharacteris:%c\n”,ch-32);elseprintf(“thecharacteris:%c\n”,ch);}11/3/2023

【例】编写程序,判断某一年是否闰年(用嵌套的if语句)。分析题目:判断某一年是否是闰年的表达式。#include<stdio.h>main(){intyear;printf("pleaseinputyear:");scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))printf("%disrun-year!\n",year);elseprintf(“%disnotrun-year!\n”,year);}11/3/2023

【例】编写程序,判断某一年是否闰年(用嵌套的if语句)。分析题目:我们用下图来表示判别闰年的算法。以变量leap代表是否闰年的信息。若某年为闰年,则令leap=1;若为非闰年,令leap=0。最后判断leap是否为1(真),若是,则输出“闰年”信息。11/3/2023编写程序如下:#include<stdio.h>

main()

{intyear,leap;

scanf("%d",&year);

if

(year%4==0){

if

(year%100==0)

{if

(year%400==0)

leap=1;

else

leap=0;}

else

leap=1;}

else

leap=0;11/3/2023if

(leap)

printf("%disaleapyear.\n",year);

else

printf(“%disnotaleapyear.\n”,year);}运行结果:1989

1989isnotaleapyear.2000

2000isaleapyear.11/3/2023实验习题课11/3/2023【习题1】预测程序运行后的输出值。

#include<stdio.h>main(){charx,y,z;x=‘a’;y=‘\t’;z=‘b’;printf(“Theline1is:%c%c%c\n”,x,y,z);printf(“Theline2is:%c%c%c%c\n”,x,y,y,z);}运行结果为:11/3/2023

【习题2】编写程序,输入一个3位的正整数,分别以顺序和倒序按列输出其中的每一位数字。例如:输入519

输出59119511/3/2023#include<stdio.h>main(){printf(“x=?”);/*提高程序的可读性*/scanf(“%3d”,&x);a=x/100;b=(x-a*100)/10;c=x%10;printf(“%d%d\n%d%d\n%d%d\n”,a,c,b,b,c,a);}inta,b,c,x;11/3/2023【习题3】阅读程序,预测程序的输出值。main(){unsignedv=65535;w[]=“programming”;printf(“%d,%2d,%6d,%06d\n,i,i,i,i);printf(“%08d\n”,v);}printf(“%11.7s\n”,w);inti=1234,j=047;#include<stdio.h>printf(“%d”,j);1234,1234,__1234,001234____program-00000013911/3/2023∵216=65536∴65535=216-1100000000000000001111111111111111216215214213212211210292827262524232221202152142132122112102928272625242322212065535=216-1216=6553611/3/2023【习题4】对下面的程序按题目要求完成规定的操作。

#include<stdio.h>main(){inta,b;floatx,y;charc1,c2;scanf(“(1)”,&c1,&c2);scanf(“(2)”,&a,&b,&x,&y);printf(“a=%d\tb=%d\n”,a,b);printf(“x=%6.2f\ty=%e\n”,x,y);printf(“c1=%c\tc2=%c\n”,c1,c2);printf(“(3)”);}a=12b=678x=34.55y=1.81930e+02c1=$c2=&输出空的一行bye!!$&1234567834.55181.93%c%*c%c\n%d%*d%d%f%f\nbye!!11/3/2023

【习题5】以下if语句用于对所给的分段函数求值,有错误,请用整齐的缩进格式将该if语句改写为正确。x=1a>0,b>0,c>02a>0,b>0,c<03a>0,b<=04a<=05if(a>0)if(b>0)if(c>0)x=1;elsex=2;elsex=3;elsex=4elsex=5;程序错在哪里了?11/3/2023画出语义图:a>0真假b>0真假x=4c>0x=3假真x=1c<0x=2真假11/3/2023改写以后的程序:x=5;if(a>0)if(b>0){if(c>0)x=1;elseif(c<0)x=2;}elsex=3;elsex=4;x=1a>0,b>0,c>02a>0,b>0,c<03a>0,b<=04a<=05分段函数:11/3/2023【习题6】用switch语句编写程序实现下面的函数计算。y=x20<=x<1x2-51<=x<2x2-2x-12<=x<3x2+6x-183<=x<4#incldue<stdio.h>main(){floatx,y;scanf(“%f”,&x);switch((int)x){case0:y=x*x;break;case1:y=x*x-5;break;case2:y=x*x-2*x-1;break;case3:y=x*x+6*x-18;break;default:exit();}printf(“x=%f,y=%f\n”,x,y);}11/3/2023第五章循环结构程序设计11/3/2023

循环的逻辑含义:当满足某个特定的条件时,重复执行某段程序,直到条件不满足为止。两种循环结构:结构化程序设计顺序结构选择结构循环结构

循环结构主要用于解决当符合某个特定条件时需要重复执行某一操作的问题。例如,要输入全校学生成绩;求若干个数之和;迭代求根等。循环结构是结构化程序设计的基本结构。11/3/2023①当型循环结构见图1。当P条件成立(“真”)时,反复执行A操作。直到P为“假”时才停止循环。图1当型循环结构图2直到型循环结构真假假

②直到型循环结构见图2。先执行A操作,再判断P是否为“真”,若“真”,再执行A,如此反复,直到P为“假”为止。11/3/2023

在C语言中,用于循环结构的三种程序设计语句有:

(1)用while语句(当型循环结构);

温馨提示

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

评论

0/150

提交评论