C语言程序设计 第四章
C语言程序设计第4章

4.2.2 逻辑表达式
例:设a=3,b=4,x=0,y=0,求值: 结果:0 1、a < b && x > y 结果:1 2、a = = b || x = = y 3、! a || a > b 结果:0 4、! a && b || x > y 结果:0 5、int a=-1,b=1,c=2,d=3,m=5,n=2,k; k=(m=a+b)&&(n=c+d) k为0 ,m为0, n为2
当尝试对该程序进行编译时,C语言编译器会报告 "illegal else without matching if"的语法错误。 28
4.3.4使用if语句应注意的问题
void main() { int x; x=1; if(x==1) printf("x等于1\n"); else ; /*这里多加了个分号*/ printf("x不等于1\n"); }
if(表达式) 语句1 else 语句2
真 表达式 语句1 语句2 假
如果括号内的表达式为真,则执行括号后面的 语句1。如果表达式值为假,则执行else后面的 语句2;语句1和语句2只能有一个被执行。
21
4.3.2 else子句
【例4-2】输入两个整数,将较大者输出。 /*程序4-2*/ #include<stdio.h> void main () { int a, b, max; printf("Please input the data a and b:"); scanf("%d, %d",&a, &b); if(a>=b) max=a; else max=b; printf("The max is %d\n", max); }
C语言第四章.选择结构程序设计

case 常量表达式n: 语句n; default : 语句n+1; }
语句的执行过程:
先计算表达式的值,并逐个与其后的常量表达式值相 比较; 当表达式的值与某个常量表达式的值相等时,即执行
其后的语句;
然后不再进行判断,继续执行后面所有case后的语句;
如表达式的值与所有case后的常量表达式均不相同时,
a+b>c && x+y<b 等价于 ((a+b)>c) && ((x+y)<b)
2)逻辑运算的值: 逻辑运算的值也为“真”和“假”两种,用“1”和“0 ”
来表示。
反过来在判断一个量是为“真”还是为“假”时,以“0” 的数值代表“假”,以非“0”的数值代表“真”。
3)逻辑运算的规则:
(1)与运算&&
条件运算符和条件表达式
条件表达式通常用于赋值语句之中。 例如条件语句:
if(a>b) max=a;
else max=b; 可用条件表达式写为 max=(a>b)?a:b;
执行该语句的语义是:如a>b为真,则把a 赋予max, 否则把b 赋予max。
注意以下几点:
条件运算符的运算优先级 低于关系运算符和算术运算符,高于赋值符。 因此 max=(a>b)?a:b可以去掉括号而写为 max=a>b?a:b
注意:
(3) 在if 语句的三种形式中,所有的语句应为单个语句,
如果要想在满足条件时执行一组(多个)语句,则必须
把这一组语句用{ } 括起来组成一个复合语句。 例如:交换两个变量 if (a>b) { t= a; a=b; b=t; }
计算机程序设计基础c语言4

4.6 递归
如果一个函数在调用的过程中出现直接或者间接地调用 该函数本身,称为函数的递归调用。C语言的特点之一就是 允许使用函数的递归调用。
int fn(int a) { int x,y;
…
y=fn(x);
return (3*y);
} 在调用函数fn()的过程中,又出现再次调用fn()函数,这 就是函数的递归调用,函数fn()称为递归函数。像函数fn()这 样直接调用自身的,称为函数的直接递归调用。
在函数体中也应将变量的声明放在使用该变量之前,否则会 出现编译错误。
4.2.2 函数声明与函数原型
(一)函数声明 形式如下:
返回数据类型 函数名(形式参数类型 形式参数名); 如 float max1(float a, float b); 注意:
当被调函数的定义位于主调函数之前,可以省略函数 声明;若定义在后,则必须在主调函数之前对被调函 数进行声明。
对于有参函数,在声明时可以省略形式参数的名称, 但类型不能省略。 如 float max1(float , float);
函数声明时不要忘记语句末尾的分号“;”。
4.2.2 函数声明与函数原型
(二)函数原型 形式如下:
返回数据类型 函数名(形参类型 形参名); 返回数据类型 函数名(形参类型);
4.4 函数返回类型与返回值
2.无返回值函数 如果函数没有返回值,则定义为“空”类型,类型说明 符为“void”。无返回值函数用于完成特定的处理任务, 执行完后不向主调函数返回任何值。如
void printstar() {
printf("********"); } 如果要在主调函数中调用printstar函数,则语句为:
n!=1 n!=n×(n-1)!
第04章 C语言顺序结构程序设计

§ 4.3 数据输入输出的概念及在C语言中的 数据输入输出的概念及在C 实现
(二).C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实 ).C语言本身不提供输入输出语句,输入和输出操作是由C 现的 例如: 例如: 字符输入函数: 字符输入函数: getchar 字符输出函数:putchar 字符输出函数:putchar 格式输入函数: 格式输入函数: scanf 格式输出函数: printf 格式输出函数: 字符串输入函数:gets 字符串输入函数:gets 字数穿输出函数:puts 字数穿输出函数:puts
%d: %d:以带符号的十进制形式输出整数 %o: %o:以八进制无符号形式输出整数 %x: %x:以十六进制无符号形式输出整数 continued…… To be continued
§ 4.5 格式输入与输出(续)
%u: %u:以无符号十进制形式输出整数 %c:以字符形式输出, %c:以字符形式输出,只输出一个字符 %s:输出字符串 %s: %f:以小数形式输出单,双精度数, %f:以小数形式输出单,双精度数,隐含输出六位小数 %e: %e:以指数形式输出实数 %g:选用%f %e格式中输出宽度较短的一种格式 %f或 格式中输出宽度较短的一种格式, %g:选用%f或%e格式中输出宽度较短的一种格式,不输 出无意义的0 出无意义的0
运行结果:BOY
§ 4.4 字符数据的输入输出(续)
(二). (二).字符输入函数
一般形式:getchar() 一般形式:getchar() 函数作用:从终端(或系统隐含指定的输入设备)输入一个字符. 函数值: 从输入设备得到的字符.
§ 4.4 字符数据的输入输出(续)
例4.2 输入单个字符. 输入单个字符. #include<stdio.h> void main() { char c; c=getchar(); putchar(c); putchar('\ putchar('\n'); } 运行程序: 运行程序:
C语言 第4章 选择结构程序设计

#include <stdio.h> int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) 如果 a>b,将a和b对换 , 和 对换 是 、 中的小者 { t=a; a=b; b=t; } a是a、b中的小者 if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); return 0; }
if (disc<0) 8<0为假 为假 printf(“has not real roots\n”); else 的值变为-1 的值变为 { p=-b/(2.0*a); p的值变为 的值变为0.71 的值变为 q=sqrt(disc)/(2.0*a); q的值变为 x1=p+q; x1的值变为 的值变为-0.29 的值变为 x2=p-q; x2的值变为 的值变为-1.71 的值变为 printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; }
if (disc<0) printf(“has not real roots\n”); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; 复合语句 }
C语言有两种选择语句: 语言有两种选择语句: 语言有两种选择语句 (1)if语句,实现两个分支的选择结构 语句, 语句 (2)switch语句,实现多分支的选择结构 语句, 语句
《C语言程序设计课件》第四章-数组

#include <stdio.h> #define N 10 int main(void)
{ int a[N], i; printf("Enter %d numbers: ", N);
for (i = 0; i < N; i++)
for(i=0;i<1;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0]
20
a[1]
02
a[2]
44
a[3]
55
a[4]
88
a[5]
99
for(i=0;i<5;i++) if (a[i]>a[i+1]) { ……}
for(i=0;i<4;i++) if (a[i]>a[i+1]) { ……}
4.2 一维数组
一维数组主要用来存储一组类型相同并且数量一定 的数据。其中,每个数据称为数组的一个元素。
4.2.1 一维数组定义 一维数组的定义形式如下: 类型名 数组名[常量表达式]; int x[100]; char string[10]; double data[10];
常量表达式给出了数组的长度,在C语 言中定义数组时必须确定数组的长度。
600
xxx[[[654]]]
700
xxx[[[765]]]
800
xxx[[[876]]]
900
xxx[[[987]]]
C程序设计第四章模块化程序设计

第四章模块化程序设计1. 教学内容:§4.1 函数4.1.1 C程序结构4.1.2 函数定义与函数声明4.1.3 函数的传值调用4.1.4 函数的嵌套调用4.1.5 函数的递归调用§4.2 变量的存储属性4.2.1 动态变量4.2.2 静态变量4.2.3 外部变量§4.3 编译预处理4.3.1 宏替换4.3.2 文件包含2. 教学目的及要求:1) 熟练掌握函数定义与函数声明2)熟练掌握函数传值、嵌套、递归调用3)理解变量的存储属性3. 学重点:1) 函数定义与函数声明2) 函数的传值、嵌套、递归调用第四章模块化程序设计模块化程序设计是进行大程序设计的一种有效措施,其基本思想是将一个程序按功能进行分割成一些模块,使用权每一个模块都成为功能单一、结构清晰、接口简单、容易理解的小程序。
C语言提供了一些支持模块化软件开发的功能:⑴函数式的程序结构。
⑵允许通过使用不同存储类别的变量,控制模块内部及外部的信息交换。
⑶具有编译预处理功能,为程序的高度、移植提供了方便,支持模块化程序。
§4.1 函数函数是具有独立功能的程序段。
4.1.1 C程序结构C程序结构实际上是由函数组成的结构。
所有其它函数均由主函数main()调用。
如下图所示:C程序结构设计在逻辑上遵循自顶向下、逐步细化的层次结构。
【例】:“高等院校事务管理系统”菜单设计。
P1024.1.2 函数定义与函数声明定义函数就是在程序中设定一个函数模块。
一个函数由变量声明与可执行语句组成的独立实体,用以完成一指定功能。
函数定义形式如前所述:【例】:求三个数的平均值按自顶向下的方法可写出计算平均值的主函数和自定义函数,如下:int average(x,y,z) /*声明自定义函数*/ int x,y,z; /*声明形式参数x,y,z为整型数*/ {int aver; /*声明变量aver为整型数*/ver=(x+y+z)/3; /*求x,y,z的平均值,并赋给aver变量*/ return (aver); /*将aver的值作为函数的返回值*/ }㈠函数定义函数定义的内容及形式:函数类型标识符函数名([类型标识符形式参数1],… …){函数体;}⒈函数名函数名是函数的名字。
《C语言程序设计》教材习题答案第4章

if(++n<10) printf("%d\n",n);
else printf("%d\n",--n);
}
3、若a、b、c1、c2、x、y均是整形变量,正确的switch语句是D
switch(a-b)
{default:y=a*b;break;
case 3:
case 10:y=a-b;break;
{
day+=a[ai][i];
}
day+=d;
printf("这是该年的弟%d天\n",day);
}
7、输入一个字符,判断输入字符的种类,即区分空格、回车、数字字符、英文字母和其他字符(要求分别用if…else if和switch语句编写)。
#include<stdio.h>
void main()
{
else x=6;
else x=7;
12、有如下程序段
int a=14,b=15,x;
char c='A';
x=(a&&b)&&(c<'B');
执行该程序段后,x的值为D 1
13、有如下程序段
int score=5;
switch(score)
{
case 5:printf("very good!");
case 4:printf("Good!");
default:printf("data error!");
}
程序输出结果为D Very good! Good! Data error!
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计
第四章分支结构程序设计
1、分支(选择)结构的基本形式:
If (表达式)
语句
注:if(表达式)后面没有“;”
2、分支(选择)结构的标准形式:
If (表达式)语句1
else 语句2
3、多分支(选择)结构的形式:
if (表达式)语句1
else if (表达式)语句2
else if (表达式)语句3
…
else if (表达式)语句n
else 语句n+1
4、对if语句的说明如下:
①三种形式的if语句中在if后面都有表达式,一般为逻辑表达式或关系表达式,但也可以是其他表达式,如赋值表达式等,甚至可以是一个变量。
例如,if(a=5);语句、if(b);语句都是允许的。
只要表达式的值为非0,即为“真”。
如在if(a=5)…;中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。
②第二、第三种形式的if语句中,在每个else前面有一个分号,整个语句结束处有一个分号。
③在if和else后面可以只含有一个内嵌的操作语句,也可以由多个操作语句组成,此时用花括号{}将几个语句括起来组成一个符合语句。
5、if语句的嵌套:
C语言规定,缺省{}时,else总是与上面最近的、没有匹配过的if匹配。
例如:改写下列if语句,使else和第一个if配对。
If(X<2)
If(X<1)Y=X+1;
else Y=X+2:;
①通过添加{}改变配对关系:
If(X<2)
{
If(X<1)Y=X+1;
}
else Y=X+2:;
②或者,通过添加else语句改变配对关系:
If(X<2)
If(X<1)Y=X+1;
else;
else Y=X+2:;
6、条件运算符为?:。
表达式的一般形式为:
表达式1?表达式2:表达式3
执行过程:如果表达式1的值为非0,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。
如:
max=(a>b)?a:b;
该语句的意思是:如果a>b为真,则把a赋予max,否则把b赋予max.
7、对条件运算符和条件表达式的说明如下:
①条件运算符仅优先于赋值运算符和逗号运算符。
②条件运算符是一个三目运算符(C语言中唯一的一个三目运算符),结合方向“自右到左”
例如:
a>b?a:c>d?c:d应理解为a>b?a:(c>d?c:d)
③条件表达式不能取代一般的if语句,只有在if语句中内嵌的语句为赋值语句
(且两个分支都给同一个变量赋值)时才能代替if语句。
8、根据switch语句中break语句的使用情况,switch语句分为如下三种:(1)在switch语句中不使用break语句,
switch (表达式)
{
case 常量表达式1:语句1:;
case 常量表达式2:语句2:;
…
case 常量表达式n:语句n;
default:语句n+1;
}
(2)在switch语句的每个语句段中都使用break语句
switch (表达式)
{
case 常量表达式1:语句段1;break;
case 常量表达式2:语句段2;break;
…
case 常量表达式n:语句段n;break;
default :语句段n+1;break;
}
注:break语句是终止后面switch语句的执行
(3)在switch语句中的某些语句段中使用break语句
9、对switch语句的说明如下:
①switch语句中的表达式和case后面的常量表达式的结果值的类型应该一致(整型或字符型)。
②每一个case后面的常量表达式的值必须互不相同,否则将出现矛盾现象。
各个case的出现次序不影响执行结果。
③执行完一个case后面的语句后,流程控制转移下一个case继续执行,除非
有break语句跳出switch。
④default语句为选择项,可有可无。
另外,default后面可以不加break语句。