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语言程序设计课件》第四章-数组

#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语言程序设计(第五版)》第4章选择结构程序的设计 PPT课件

►(b*b-4*a*c)>=0
b*b-4*a*c>=0
►z= (x>y+3)
z= x>y+3
►(a>b)= = c
a>b= =c
►a=(b!=c)
a=b!=c
当然为提高程序的可读性、可维护性你不妨多使用 括号,因为C语言中的有些优先级很容易让你不小心犯 错。
C语言程序设计
第4章 选择结构程序设计
第10页
“>”的结果为“假”,即条件不成立。
C语言程序设计
第4章 选择结构程序设计
第5页
4.1 关系运算及关系表达式
4.1.1 关系运算符及其优先次序
运算符
含义
> 大于
优先级
结合性
>= 大于或等于 这些关系运算符等优
< 小于
先级,但比下面的优 先级高
左结合性
<= 小于或等于
== 等于 != 不等于
这些关系运算符等优 先级,但比上面的优 先级低
C语言程序设计
第4章 选择结构程序设计
第4页
4.1 关系运算及关系表达式
所谓“关系运算”实际上就是“比较运算”, 即将两个数据进行比较,判定两个数据是否符合 给定的关系。例如,
► “x>y+3”中的“>”表示一个大于关系运算。 ➢如果a的值是5,b的值是1,则大于关系运算
“>”的结果为“真”,即条件成立; ➢如果a的值是2,b的值是1,则大于关系运算
因为按照自左至右的结合方向,先执行关系运算
“a>b”得值为1(“真”),再执行关系运算“1>c”, 得值为0(“假”),因此y为0。
C语言程序设计
C程序设计(第五版)-第4章选择结构程序设计课后习题答案

C程序设计(第五版)-第4章选择结构程序设计课后习题答案1. 什么是算术运算?什么是关系运算?什么是逻辑运算?【答案解析】算熟运算:算术运算即“四则运算”,是加法、减法、乘法、除法、乘⽅、开⽅等⼏种运算的统称。
其中加减为⼀级运算,乘除为⼆级运算,乘⽅、开⽅为三级运算。
在⼀道算式中,如果有多级运算存在,则应先进⾏⾼级运算,再进⾏低⼀级的运算。
C语⾔中的算熟运算符包括:+、-、*、/、++、--、%等种类。
如果只存在同级运算;则从左⾄右的顺序进⾏;如果算式中有括号,则应先算括号⾥边,再按上述规则进⾏计算。
⽰例:$ (1 + 1)^{2} * 4+5 * 3$解析:1. 先进⾏括号内运算1+1,然后进⾏乘⽅运算得到结果4.2. 接下来与4相乘,得到结果163. 因为乘法优先级⼤于加法,因此先进⾏5*3,得到结果154. 最终相加得到结果31结果:31关系运算:关系的基本运算有两类:⼀类是传统的集合运算(并、差、交等),另⼀类是专门的关系运算(选择、投影、连接、除法、外连接等),⽽在C语⾔中,关系运算通常被认为是⽐较运算,将两个数值进⾏⽐较,判断⽐较结果是否符合给定的条件。
常见的关系运算符包括:<、<=、>、>=、==、!=等种类。
其中,前4种关系运算符(<、<=、>、>= )的优先级别相同,后2种(==、!=)也相同。
⽽前4种⾼于后2种。
例如, >优先于==。
⽽>与<优先级相同。
并且,关系运算符的优先级低于算术运算符,关系运算符的优先级⾼于赋值运算符(=)。
逻辑运算:在逻辑代数中,有与、或、⾮三种基本逻辑运算。
表⽰逻辑运算的⽅法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。
⽽在C语⾔中,逻辑运算通常⽤于使⽤逻辑运算符将关系表达式或其它逻辑量连接起来组成逻辑表达式⽤来测试真假值。
常见的逻辑运算符包括:&&、||、!等种类&&:与是双⽬运算符,要求有两个运算对象,表⽰两个运算对象都成⽴,则结果为真,否则结果为假。
《新编C语言程序设计教程》课件第4章

如if语句中的选择体和while语句中的循环体需多条语句描述 时,就必须采用复合语句。
复合语句只需用大括号“{ }”将一系列语句括起来即可。
复合语句不是一条具体语句,它是一种逻辑上的考虑,凡是 单一语句可以存在的位置,均可以使用复合语句。复合语句用 在语法上只能使用单一语句,而相应操作需由多条语句描述。 复合语句又称为分程序,它可以有属于自己的数据说明部分。
第 4章 顺序结构程序设计
4.1.3 特殊语句
1. 注释语句
格式为: /*注释文本*/ 注释语句虽然不对程序的运行产生任何影响, 但必要的 注释是程序的重要组成部分。 注释分功能性注释和说明性注释。 功能性注释用以注 释程序、 函数及语句块的功能, 说明性注释用以注释变量的 作用。
第 4章 顺序结构程序设计
(10) 在分析程序的输入数据时, 要同时考虑输入数据 的输入格式。
第 4章 顺序结构程序设计
4.3 数据输出
4.3.1 一般格式
printf(格式字串, 输出参数表) (1) 格式字串用以描述输出数据的格式, 由格式说明符 和普通字符组成。 与scanf( )函数中格式字串一样, 格式说 明符由“%”和格式字符组成, 不同的格式说明符对应不同 类型数据的输出, 普通字符原样输出。
第 4章 顺序结构程序设计
(2) 输出参数可以是表达式。如果是常量, 直接输出; 如是 变量, 输出其值; 如是表达式, 先计算表达式的值, 再输出。
(3) 输出函数的调用一般也采用语句调用形式, 间接形成C 语言的输出语句。 例如: int i=3, j=6; ① printf("i=%2d,j=%2d",i,j); 输出结果:i= 3,j= 6 ② printf("%2d*%2d=%2d",i,j,i*j);
《C语言程序设计课件》第四章-循环语句

{ sum+=n; scanf("%d",&n); }
printf("The sum is :%d\n",sum);
return 0; }
从任意 n 个实数中选出最大数 和最小数
从任意 n 个实数中选出最大数和最小数
#include <stdio.h> int main( ) {
/*程序4-1*/ #include <stdio.h> int main() {
int i,sum=0; i=1; while(i<=100) {
sum += i; i++; } printf("sum=%d\n",sum); return 0; }
【例4-2】输入一行字符以回车键结束,分别 统计出其中英文字母、空格、数字和其它字符 的个数。
#include <stdio.h> int main( ) {
int i,n;
printf("This program prints a table of squares.\n"); printf("Enter number of entries in table:");
scanf("%d",&n); i=1; while (i<=n)
【例】求整数1~100的累加和,使用for语句实 现。
#include <stdio.h> int main() {
int i,sum=0; for(i=1;i<=100;i++)
谭浩强C程序设计第4章

图4.1是一个程序中函数调用的示意图。 图4.1
例4.1 在主函数中调用其他函数。
#include <iostream>
பைடு நூலகம்
using namespace std; void printstar(void)
//定义printstar函数
{
cout<<″****************************** ″<<endl;
}
//输出30个“*”
void print_message(void)
//定义print_message函数
{
cout<<″ Welcome to C++!″<<endl;
//输出一行文字
要根据需要编写一个个函数,每个函数用来实现某
一功能。因此,读者必须掌握函数的概念以及学会 设计和使用函数。
“函数”这个名词是从英文function翻译过来的,其 实function的原意是“功能”。顾名思义,一个函数 就是一个功能。
在实际应用的程序中,主函数写得很简单,它的作 用就是调用各个函数,程序各部分的功能全部都是 由各函数实现的。主函数相当于总调度,调动各函 数依次实现各项功能。
}
C++要求在定义函数时必须指定函数的类型。
4.3 函数参数和函数的值
4.3.1 形式参数和实际参数
在调用函数时,大多数情况下,函数是带参数的。 主调函数和被调用函数之间有数据传递关系。前面 已提到:在定义函数时函数名后面括号中的变量名 称为形式参数(formal parameter,简称形参),在 主调函数中调用一个函数时,函数名后面括号中的 参数(可以是一个表达式)称为实际参数(actual parameter,简称实参)。
C程序设计(第四版)教案第四章

月日第4章选择结构程序设计4.1 选择结构和条件判断举例:在现实生活中,需要进行判断和选择的情况是很多的如果你在家,我去拜访你如果考试不及格,要补考如果遇到红灯,要停车等待周末我们去郊游70岁以上的老年人,入公园免票都需要用到【选择】在现实生活中,需要进行判断和选择的情况是很多的,处理这些问题,关键在于进行条件判断,由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断。
C语言有两种选择语句:(1)if语句,实现两个分支的选择结构(2)switch语句,实现多分支的选择结构例4.1 在例3.5的基础上对程序进行改进。
题目要求是求一元二次方程的根。
由键盘输入a,b,c。
假设a,b,c的值任意,并不保证b*b-4ac>0。
需要在程序中进行判别,如果b*b-4ac>0 ,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。
解题思路:输入a,b,c计算discdisc<0计算x1,x2输出无实根输出x1,x2假真程序#include <stdio.h>#include <math.h>int main ( ){double a,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为-15if (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;pri ntf(“real roots:\nx1=%7.2f\nx2=%7.2f\n”,x1,x2); }return 0;}-15<0为真#include <stdio.h>#include <math.h>int main ( ){double a,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;计算b2-4ac,disc的值变为8if (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\nx2=%7.2f\n”,x1,x2); }return 0;}8<0为假p的值变为-1q的值变为0.71x1的值变为-0.29x2的值变为-1.71if (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\nx2=%7.2f\n”,x1,x2);}return 0;}选择结构,用if语句实现的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\nx2=%7.2f\n”,x1,x2);}return 0;}4.2 用if语句实现选择结构4.2.1 用if语句处理选择结构举例例4.2 输入两个实数,按代数值由小到大的顺序输出这两个数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A)1,2,0
B)2,1,0
C)1,2,1
D)2,1,1
无锡润智图书有限公司制作
3、若有以下程序段,且变量已正确定义和赋值: for(s=1.0,k=l;k<=n;k++) s=s+1.0/(k*(k+1)); printf(”s=%f\n\n”,s); 请填空,使下面程序段的功能与之完全相同: S=1.0;k=l; while( k<=n ) { s=s+1.0/(k*(k+1)); k++ ; } printf(”s=%f\n\n”,s);
无锡润智图书有限公司制作
【问题4】有以下程序: # include <stdio.h> main() { int n=2,k=O; while(k++&&n++>2); printf(”%d%d\n”,k,n); ) 程序运行后的输出结果是____ D 。 A)0 2 B)1 3 C)5 7 D)1 2 【思路分析】本题考查逻辑运算,在进行逻辑与运算时, 若“&&”的左边运算结果已经为O,则“&&”右边的表达 式将不再进行计算,结果总为O。本题:在while语句的 表达式中由于k=0,所以只进行&&左边的运算,不进行 &&右边的运算,所以k的值为1,n的值仍为2。
无锡润智图书有限公司制作
【问题2】有以下程序: # include <stdio. h> main() { int s[12]={1,2,3,4,4,3,2,1,1,l,2,3),c[5]={O},i; for(i=O;i<12;i++) c[s[i]]++; for(i=l;i<5;i++) printf(“%d”,c[i]); printf(“\n"); ) C 。 程序的运行结果是____ A. 12 3 4 B.2344 C.4332 D.112 3 【思路分析】程序中定义了两个数组s和c,数组c中有5个元 素,每个元素的初始值为O;数组s中有12个元素,包含4个 “1”,3个“2”,3个“3”,2个“4”。第一个for语句中,用 s[i]作为c数组的下标,用于统计s[i]中相同数字的个数,同 时将统计的结果放在以该数字为下标的c数组中。第二个for 语句用于将c数组中a[1]~a[4]4个元义 for(i=0;i<6;i++,i++) for(k=l;k<4;k++); printf(“*”); 程序段的输出结果是______ D 。 A.****** B.**** C.** D.* 4、有以下程序: # include<stdio. h> main() { int f,fl,f2,i; fl=0;f2=1; printf(”%d%f,fl,f2); for(i=3;i<=5;i++) { f= fl+ f2; printf(“%r,f); f1=f2;f2=f; } printf(”\n"); } 01123 。 程序运行后的输出结果是__________
无锡润智图书有限公司制作
54321 。 【问题3】以下程序的输出结果是__________ # include<stdio.h> main() { int n=12345,d; while(n!=0) { d=n% 10; printf("%d",d); n/= 10; } }
【思路分析】本题考查的重点是while循环的理解与 运用。若n不为O,则n对10进行模运算,并打印出 n%10的值,之后再进行n/一10运算,直至n为O时 结束循环。因此,依次输出54321。
无锡润智图书有限公司制作
5、以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同 )中找出最大、最小数,将其中的数与第一个数对换,把最大的数与 最后一个数对换。请填空。 # include <stdio.h> void f(int x[],int n) { int p0,pl,i,j,t,m; i=j=x[0l; p0= pl=0; for(m=0;m<n;m++) { if(X[m]>i){i=x[m];p0=m;) else if(x[m]<j){j=x[m]; pl=“;) } t= x[p0]; x[p0]= x[n -1];x[n -1]=t; X[0] t; t=x[p1];x[p1]= x[O] ; ______= } main() { int a[10],u; for(u=0;u<10;u++)scanf(”%cf,,&a[u]); f(a,10); for(u= O;u<10;u++) printf(“%f,a[u]); printf("\n"); 无锡润智图书有限公司制作 }
无锡润智图书有限公司制作
(二)巩固练习 1、有如下程序 main( ) { int x=23; do { printf("%d",x--);}while(!x);} 该程序的执行结果是( B ) A、321 B、23 C、不输出任何内容 D、陷入死循环
无锡润智图书有限公司制作
【问题2]以下程序运行后的输出结果是____ 5 。 # include <stdio. h> main() { int a=l,b=7; do { b= b/2; a+=b; } while (b>l); printf(”%d\n”,a); } 【思路分析】本题主要考查do-while语句,它先执行一 次指定的循环体语句,然后判别表达式,当表达式的值 为非零(“真”)时,返回重新执行循环体语句,如此 反 复,直到表达式的值等于O为止,此时循环结束。
无锡润智图书有限公司制作
第二节
用while语句构成的循环结构
课堂探析
无锡润智图书有限公司制作
【问题1】若有以下程序: main() { int y=10; while(y- -); printf(“y=%d\n”,y); } 程序运行后的输出结果是____ B 。 A) y=0 B) y= -1 C) y=l D) while构成无限循环 【思路分析】while语句一般形式为: while(表达式)语句; 其语句先判断表达式,后执行语句。 而表达式y- -先返回y的当前值,再 进行-1运算。
无锡润智图书有限公司制作
【问题2】有以下程序: # include <stdio. h> main() { int a=1,b=2; while(a<6) {b+=a;a+=2;b%=10;} printf(”%d,%d\n”,a,b); } B 。 程序运行后的输出结果是____ A) 5,11 B) 7,1 C) 7,11 D) 6,1 【思路分析】 第一次循环,a=l,b=b+a=3;a=a+2=3;b=b%10=3; 第二次循环,a=3,b=b+a=6;a=a+2=5; b=b%10=6; 第三次循环,a=5,b=b+a=ll; a=a+2=7.b=b%10=1; 结束循环;
无锡润智图书有限公司制作
【思路分析】do-while语句的特点是先执行循环体, 然后再判断循环条件是否成立,当循环条件的值为 O时循环结束。本题中执行switch语句,寻找与5匹 配的case 5分支,没有寻找到则执行default后的语 句,n-0,k的值变为4,继续执行switch语句,寻 找与4匹配的case 4分支,找到后开始执行其后的 语句“n+ =2;k--;”,n的值为2,k的值变为3, 遇到break语句跳出该switch语句体。执行print语 句输出2;此时n=2,k=3依旧满足do-while循环条 件,将用同样的方式再次执行switch语句,直到n5时不再满足do-while循环条件退出所有的循环。 答案:A
C语言
无锡润智图书有限公司
无锡润智图书有限公司制作
第四章
一、考试要求 理解
循环结构程序设计
掌握 for语句的执行过程 while语句的执行过程 Do while语句的执行 过程 循环嵌套的几种形式、 流程和功能
for语句的执行过程 while语句的执行过程 Do while语句的执行过程 循环嵌套结构的执行过程
无锡润智图书有限公司制作
第三节
用do-while语句构成的循环结构
课堂探析
无锡润智图书有限公司制作
(一)问题探析 【问题1】若变量已正确定义,有以下程序段: i=0: do printf(“%d” ,i); while(i++); printf(”%d\r,i); 其输出结果是_____ 。 B A)O,O B)O,1 C)1,1 D)程序进入无限循环 【思路分析】为本题考查的重点是do-while用法。do-while 循环是先执行循环体中的语句,然后再判断while中的条件 是否为真,如果为真(非零)则继续循环;如果为假,则终 止循环。因此,do-while循环至少要执行一次循环语句。
无锡润智图书有限公司制作
(二)巩固练习 B 1、对于for(表达式1;;表达式3)可理解为_______ A. for(表达式1;0;表达式3) B. for(表达式1;1;表达式3) C. for(表达式1;表达式1;表达式3) D. for(表达式1;表达式3;表达式3) 2、以下程序的输出结果是_________. D Main( ) { int x; for(x=3;x<6;x++) printf((x%2)?(“**%d”):(“##%d\n”),x); } A.**3 B.##3 C.##3 D.**3##4 ##4 **4 **4##5 **5 **5 ##5