《C语言程序设计》基本知识点解答(三)
- 格式:doc
- 大小:194.50 KB
- 文档页数:14
单选题1、若定义a=3,b=4,执行printf(“%d, %d”,(a,b),(b,a));的输出结果为()。
A.3,4B.4,3C.3,3D.4,42、如果要求在if后的判断条件是a不等于0,则下列选项中能正确表达这一关系的是()。
A.a<>0B.!aC.a=0D.a3、为了避免嵌套的if-else语句的二义性,C语言规定else总是与()组成配对关系。
A.缩排位置相同的ifB.在其之前未配对的ifC.在其之前尚未配对的最近的ifD.同一行上的if4、有定义int t = 0;则有循环while(t=1){…},则下列关于while循环语句的描述中正确的是()。
A.循环控制表达式的值为0B.循环控制表达式的值为1C.循环控制表达式的值不合法D.以上说法都不对5、若有定义:int x ,i;则下列for循环语句:for(i = 0,x = 0; i<= 9 && x!=876;i++)scanf(“%d”,&x);下列选项中,描述正确的是()A.最多执行10次B.最多执行9次C.是无限循环D.循环体一次也不执行6、关于下面的for循环语句int i,k;for(i = 0,k = -1;k = 1;i++,k++) printf(“*****”); 下列选项中,描述正确的是()A.判断循环结束的条件非法B.是无限循环C.只循环一次D.一次也不循环7、C语言程序的三种基本结构是()。
A.顺序结构,选择结构,循环结构B.递归结构,循环结构,转移结构C.嵌套结构,递归结构,顺序结构D.循环结构,转移结构,顺序结构8、若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为()。
A.a<>0B.!aC.a=0D.a9、两次运行下面的程序,如果从键盘上分别输入6和4,那么输出结果是()。
void main(){int x;scanf("%d",&x);if (x++ > 5)printf("%d",x);elseprintf("%d\n",x--);}A.7和5B.6和3C.7和4D.6和410、运行以下程序后,如果从键盘上输入china#,那么输出结果为()。
C语言程序设计(第三版)习题答案习题一一、名词解释(1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)高级语言P2(5)汇编程序P3 (6)编译程序P4 (7)算法P5 (8)结构化程序设计方法P10二、简答题1. 设计程序时应遵循哪些基本原则?P4答:正确性、可靠性、简明性、有效性、可维护性、可移植性。
2. 算法具有哪些特点?答:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。
3. 算法的表示形式有哪几种?答:自然语言、伪代码、传统流程图、N-S流程图、计算机语言。
4. 结构化程序设计方法的三种基本结构是什么?答:顺序结构、选择结构和循环结构。
5. 传统流程图与N-S流程图最大的区别是什么?答:N-S流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。
三、用传统流程图或N-S流程图表示求解以下问题的算法。
1. 从键盘输入10个整数,求出其中的最小数并输出。
2. 求1+2+3+…+100的值。
3. 求10~50的所有素数之和。
4. 求下列分段函数的值。
四、请参照本章例题,编写一个简单的C 程序,输出以下三行信息。
**************************Yangtze University**************************#include <stdio.h>void main(){printf("**************************\n");printf(" Yangtze University\n");printf("**************************\n");}4X-1 (X ≤1) 5(X-1)+6 (1<X<5) 6-3X (X ≥5)习题二一、选择题1~10: B C D C D D B C A A11~20: D A C D B D B A C D二、填空题1.字母 L 或字母 l2. %c(或字符) 、 %d(或整数)3.在程序运行过程中,其值可以在一定的范围内变化的量4.'\0'5.小数形式、指数形式6.关键字、预定义标识符、用户标识符7.字母、数字、下划线、数字8. 189. 2 、 1 、 3010.双精度实数或double11.赋值、逗号、 20 、 20 、 20 、 412. 4 、 4习题三一、选择题1~10: B C C B C C C D C C注:第4题答案D为: 10 22↙33↙二、填空题1. printf 、 scanf2. h3."%5d"4.'\0'5. e 、 E6. 67. s 、 c8. *9. - 、 +10. i三、编程题1. 编写程序,从键盘输入一个以秒为单位的时间数,将其换算成几小时几分几秒,然后进行输出。
习题解析与答案第1章C语言概述一.简答题1.概述C语言的主要特点。
【解答】(1)语言简洁、紧凑,使用方便、灵活。
(2)数据类型丰富,表达能力强。
(3)运算符多样。
C语言中的运算符包含的范围非常广泛。
(4)具有结构化的控制语句。
如if…else语句、while语句、do while语句、switch 语句、for语句。
(5)允许直接访问物理地址。
C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。
(6)所生成的目标代码质量高,可移植性好。
2.构成C语言程序的基本单位是什么?它由哪几部分组成?【解答】函数是构成C语言程序的基本单位。
一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。
3.C语言程序的运行一般要经过哪几个步骤?【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。
二.运行程序写结果1.输入下面程序并运行。
main(){int a1,a2,x;a1=100;a2=50;x=a1-a2;printf(″x=%d\n″,x);}【解答】运行结果为:x=502.输入下面程序并运行。
main(){int a1,a2,x;a1=10;a2=20;x=a1*a2;printf(″a1=%d,a2=%d\n″,a1,a2);printf(″x=%d\n″,x);}【解答】运行结果为:a1=10,a2=20x=200三.编程题1.参照本章例题,编写一个C程序,用于显示如下信息:*************************I love C programs!*************************【分析与提示】①要有文件包含语句#include <stdio.h>。
C语言中没有数据的输入、输出等功能,数据的输入、输出都是通过调用系统提供的库函数scanf和printf等来实现的。
这些函数的说明都包括在stdio.h文件中。
②main是主函数的名称。
C语言程序设计参考答案上海交大出版社第1章程序设计题参考答案1.代码1-1如下:2.代码1-2如下:3.代码1-3如下:4.代码1-4如下:5.代码1-5如下:“如何让你的幻灯片动起来”培训课时:一课时。
培训内容:“幻灯片切换”、“自定义动画”和“动作设置”(超链接)在幻灯片中的应用。
培训目标:这次培训要完成最后几张幻灯片的制作,你要对演示文稿设置幻灯片的切换效果,为幻灯片的文字、文本框等内容设置一些动画效果,例如文字显示的效果以及显示的顺序等。
1、为每张幻灯片设置切换效果以及换页方式等。
2、为幻灯片的标题、正文和图片等设置动画效果。
3、设置各个对象适当的显示顺序。
4、添加一些适宜的背景声音效果,以衬托主题内容。
5、合理利用“动作设置”中的“超链接”。
6、幻灯片“动画效果”以及“幻灯片切换”设计的注意事项。
培训过程:导言:到目前为止,你已经制作了幻灯片,学会了不少制作幻灯片的操作,幻灯片中有文字,也有图片,还有声音,你的演示文稿顿时变得既“活泼”又能“悦耳”了起来啦!假如能让幻灯片的文字、图片显示的时候多一些动画效果,让它“动”起来,那么幻灯片的效果一定更妙!新增加一张新的幻灯片,在幻灯片中加入文本框和正文。
(提示:点击菜单项“插入”->“新幻灯片”,在对话框中选择合适的版式)1、为每张幻灯片设置切换效果以及换页方式等。
(1)单击“幻灯片放映”菜单->“幻灯片切换”,出现一个对话框。
这时可以为当前的幻灯片设置切换时的“效果”、“换页方式”以及“声音效果”等。
(2)在“效果”区内选择幻灯片切换放映时的效果方式。
(3)在“速度”中选择显示速度。
(4)在“声音”栏内选择合适的背景声音。
(5)在“换片方式”中,选择下一张幻灯片出现时的操作方式。
(6)如果想把这种设置应用于所有幻灯片,就选择“应用于所有幻灯片”2、为幻灯片的标题、正文和图片等设置动画效果。
(1)选中需要设置动画效果的标题、正文或图片等。
c语言程序设计教程第三版习题答案C语言程序设计教程第三版习题答案第一章:C语言概述1. 简述C语言的特点。
C语言是一种结构化编程语言,具有高级语言的特点,同时支持底层硬件操作。
其特点包括:简洁、高效、可移植、丰富的运算符、数据结构支持、广泛的库函数等。
2. 什么是编译型语言?编译型语言是指源代码在执行前需要通过编译器转换成机器语言的程序设计语言。
C语言就是一种编译型语言。
第二章:数据类型、运算符和表达式1. 列出C语言的基本数据类型。
C语言的基本数据类型包括:整型(int)、字符型(char)、浮点型(float和double)。
2. 说明赋值运算符的用法。
赋值运算符(=)用于将右侧表达式的值赋给左侧的变量。
例如:`int a = 10;` 将整数值10赋给变量a。
第三章:控制结构1. 什么是条件语句?条件语句用于根据条件的真假来执行不同的代码块。
C语言中的条件语句主要有if语句和switch语句。
2. 循环语句有哪些?C语言中的循环语句主要有for循环、while循环和do-while循环。
第四章:数组和字符串1. 数组的声明和初始化方式。
数组声明的一般形式为:`type arrayName[arraySize];`。
初始化可以使用花括号一次性赋值,如:`int arr[5] = {1, 2, 3, 4, 5};`。
2. 字符串在C语言中的表示方法。
在C语言中,字符串以字符数组的形式存在,以空字符('\0')作为结束标志。
第五章:函数1. 函数的定义和调用。
函数定义的一般形式为:`returnTypefunctionName(parameterList) { /* function body */ }`。
调用函数时,使用其名称和必要的参数。
2. 函数的参数传递方式有哪些?C语言中函数的参数传递方式主要有值传递(pass by value)和引用传递(pass by reference)。
第一章测试1【单选题】(5分)下列叙述中正确的是()。
A.C语言所有函数都是外部函数B.C语言的子程序有过程和函数两种C.C语言编译时不检查语法D.C语言的函数可以嵌套定义2【单选题】(5分)以下叙述中正确的是()。
A.C语言中的每条可执行语句最终都将被转换成二进制的机器指令B.C源程序经编译形成的二进制代码可以直接运行C.C语言中的函数不可以单独进行编译D.C语言的源程序不必通过编译就可以直接运行3【单选题】(5分)C语言的注释定界符是()。
A.[]B./**/C.\**\D.{}4【单选题】(5分)C语言源程序的基本单位是()。
A.过程B.标识符C.子程序D.函数5【单选题】(5分)一个算法应该具有“确定性”等五个特性,下面对另外4个特性的描述中的是()A.有零个或多个输入B.可行性C.有零个或多个输出D.有穷性6【单选题】(5分)以下叙述中正确的是()。
A.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式B.C语言可以不用编译就能被计算机识别执行C.C语言比其他语言高级D.C语言出现的最晚,具有其他语言的一切优点7【单选题】(5分)有一个命名为C001.C的C语言源程序,当正常执行后,在当前目录下不存在的文件是A.C001.EXEB.C001.CC.C001.OBJD.C001.DAT8【单选题】(5分)能将高级语言编写的源程序转换为目标程序的是()。
A.编辑程序B.链接程序C.解释程序D.编译程序9【单选题】(5分)结构化程序由三种基本结构组成,由这三种基本结构组成的算法()。
A.能完成符合结构化的任务B.只能完成部分复杂的任务C.只能完成一些简单的任务D.可以完成任何复杂的任务10【单选题】(5分)以下叙述中的是()。
A.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件B.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令C.C语言源程序经编译后生成后缀为.obj的目标程序D.用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中11【判断题】(5分)C语言程序将从源程序中第一个函数开始执行A.对B.错12【判断题】(5分)C语言程序中可以有多个函数,但只能有一个主函数。
谭浩强第五版c语言知识点总结谭浩强第五版c语言知识点总结谭浩强的《C语言程序设计》是一本经典的教材,第五版在全面保留第四版内容的基础上,对知识点进行了进一步深化和拓展。
本文将对该教材中的重要知识点进行总结和归纳,以帮助读者快速理解和掌握C语言的基本知识。
首先,本教材从C语言的基本语法开始介绍,并详细讲解了数据类型的定义和使用。
其中,针对整型数据、浮点型数据、字符型数据和枚举类型等进行了深入讲解,并提供了大量的实例说明,帮助读者更好地理解和掌握各种数据类型的使用方法。
其次,在数据类型的基础上,本教材介绍了C语言中的运算符和表达式。
这一部分主要包括算术运算符、关系运算符、逻辑运算符等的使用方法,并对运算符的优先级和结合性作了详细说明。
同时,还介绍了条件运算符、位运算符和赋值运算符等的使用方法,以及运算符的短路求值特性。
在继续深入学习之前,本教材介绍了C语言中的控制语句。
其中,针对顺序结构、选择结构和循环结构进行了详细介绍。
对于选择结构,本教材重点讲解了if语句和switch语句的使用方法,并给出了大量的实例进行演示。
对于循环结构,本教材着重讲解了while循环、do-while循环和for循环的使用方法,并提供了相应的示例。
接下来,本教材介绍了C语言中的数组和字符串。
对于数组,本教材详细讲解了一维数组和多维数组的定义和使用方法,并提供了大量的实例进行练习。
对于字符串,本教材讲解了字符串的定义和初始化方法,以及字符串的输入输出和字符串处理函数的使用方法。
此外,本教材还介绍了C语言中的函数和指针。
对于函数,本教材从函数的定义、函数的调用和函数的返回值等方面进行了详细讲解,并提供了很多实例进行练习。
对于指针,本教材重点介绍了指针的概念、指针的运算和指针的应用,并通过实例演示了指针在C语言中的重要作用。
最后,本教材介绍了C语言中的结构和文件操作。
对于结构,本教材详细讲解了结构的定义和使用方法,以及结构数组和结构指针的使用;对于文件操作,本教材重点介绍了文件的打开、关闭和读写操作,并通过实例演示了文件的基本操作方法。
《C语言程序设计》练习三(参考答案)三、阅读分析题1.请阅读分析下面程序,然后写出运行结果。
x=8,y=-5x=-5,y=82.请阅读分析下面程序,然后写出运行结果。
1 5 6 303.请阅读分析下面程序,然后写出运行结果。
#**$@@4.阅读下面程序,写出运行结果(已知A的ASCII码为65,a的ASCII码为97)。
运行结果:d,100,D,1445.阅读下面程序,并回答问题:(1)若程序运行时,输入3、2和5,则输出结果是什么?(2)写出程序所实现的功能。
答:(1)5,3,2(2)输入三个整数,按从大到小的顺序输出。
6.阅读下面程序,并回答问题:(1)程序输出结果是多少?(2)外循环执行完一次时,m和n的值分别是多少?(3)将while(n>m)n-=m;语句删除后,程序运行情况如何?答:(1)m=1(2)m=9,n=5(3)程序进入无限循环17.阅读下面程序,写出运行结果。
运行结果:7,10,9,9878.阅读下面程序,并回答问题:(1)若程序运行时,输入6和9,输出结果是什么?输出结果是:1(2)说明程序的功能。
程序功能:输入2个数存入a和b变量中,计算a2+b2存入x变量中,如果x大于100则将x整除100的值存入y中并输出y的值,否则输出a+b的值。
9.阅读下面程序,并回答问题:(1)程序输出结果是什么?输出结果:a=8(2)该程序完成什么功能?程序功能:求两个数的最大公约数(3)若将while循环替换为do-while循环,请写出相应的程序段。
#include <stdio.h>void main( ){ int u,v,a,b,t,r;u=24;v=16;if(u>v){t=u;u=v;v=t;}a=u;b=v;do{ r=b%a;b=a;a=r;}while(r!=0);printf(″b=%d\n″,b);}10.从键盘输入字符A时,写出下面程序的运行结果。
《C语⾔程序设计》第4版何钦铭、颜晖主编课后习题答案第2章 ⽤C语⾔编写程序Page 0201#include<stdio.h>//练习2-32int main(void)3{4 int i,j,k;5 for(int i=1;i<=4;i++)//第i⾏6 {7 for(int j=1;j<=i-1;j++)//j个空格8 {9 printf(" ");10 }11 for(k=1;k<=5-i;k++)//k个*12 {13 printf("* ");14 }15 printf("\n");16 }1718 return 0;19}Page 0231#include<stdio.h>2int main(void)3{4 int f,c;//练习2-55 f=150;6 c=5*(f-32)/9;//或者是c=5/9.0*(f-32)||c=5.0/9*(f-32),但不可以是5/9,会得到0.因为:两个整型数据做除法运算,结果⼀定是整数。
7 printf("华⽒温度%d对应的摄⽒温度为%d.\n",f,c);89 printf("\n");1011 /*计算物体⾃由下落的距离(练习2-6)*/12 int h,g,t;13 t=3;//下落时间14 g=10;//重⼒加速度 10m/s^215 h=g*t*t/2;16 printf("⼀个物体从100⽶的⾼空⾃由下落,前3秒内下落的距离为:%d⽶.\n",h);1718 return 0;19}20Page 0292#include<math.h>3int main(void)4{5 /*计算摄⽒温度(练习2-8)*/6 double c,f;7 printf("输⼊华⽒温度:");8 scanf("%lf",&f);9 c=5*(f-32)/9.0;10 printf("华⽒温度%.2lf对应的摄⽒温度为%.3lf\n",f,c);1112 printf("\n");1314 /*整数四则运算(练习2-9)*/15 int x,y,z_1,z_2,z_3;16 double z_4;17 printf("输⼊两个正整数x,y:");18 scanf("%d %d",&x,&y);19 z_1=x+y;20 z_2=x-y;21 z_3=x*y;22 z_4=x/y;23 printf("%d和%d的和为%d,差为%d,积为%d,商为%lf\n",x,y,z_1,z_2,z_3,z_4); 2425 printf("\n");2627 /*计算分段函数(判断x是否不为0)(练习2-10)*/28 double x_1,y_1;29 printf("输⼊x_1:");30 scanf("%lf",&x_1);31 if(x_1!=0)32 y_1=1/x_1;33 else y_1=0;34 printf("输⼊%.2lf时,对应的y值为%.1lf\n",x_1,y_1);3536 printf("\n");3738 /*计算分段函数(判断x是否⼩于0)(练习2-11)*/39 double x_2,y_2;40 printf("输⼊x_2:");41 scanf("%lf",&x_2);42 if(x_2<0)43 y_2=pow(1+x_2,2)+2*x_2+1/x_2;44 else y_2=sqrt(x_2);45 printf("输⼊%.2lf时,对应的y值为%.2lf\n",x_2,y_2);464748 printf("\n");4950 return 0;51}Page 0372int main(void)3{4 int i,n,flag;//例2-85 double t,sum;6 printf("输⼊⼀个正整数n:");7 scanf("%d",&n);8 sum=0;9 flag=1;10 for(i=1;i<=n;i++)11 {12 t=flag*(1.0/(2*i-1));13 sum+=t;14 flag=(-1)*flag;1516 }17 printf("sum=%lf\n",sum);1819 printf("\n");2021 /*求1+1/2+···的前n项和(练习2-13)*/22 int n_1,j;23 double sum_1=0;24 printf("Enter n_1(n_1>=0):");25 scanf("%d",&n_1);26 for(j=1;j<=n;j++)27 {28 sum_1+=1.0/j;29 }30 printf("sum_1=%.2lf\n",sum_1);3132 printf("\n");3334 /*求1+1/3+1/5+···的前n项和(练习2-14)*/35 int n_2,k;36 double sum_2;37 printf("Enter n_2:");38 scanf("%d",&n_2);39 for(k=1;k<=n_2;k++)40 {41 sum_2+=1.0/(2*k-1);42 }43 printf("sum_2=%.2lf\n",sum_2);4445 printf("\n");4647 /*求1-1/4+1/7-1/10+···的前n项和(练习2-15)*/48 int n_3,m,flag_1=1;49 double sum_3=0;50 printf("Enter n_3:");51 scanf("%d",&n_3);52 for(m=1;m<=n;m++)53 {54 sum_3+=flag_1*1.0/(3*m-2);55 flag_1=flag_1*(-1);56 }57 printf("sum_3=%.2lf\n",sum_3);5859 return 0;60}Page 0402#include<math.h>3int main(void)4{5 int n,i;6 double power;7 printf("Enter n:");8 scanf("%d",&n);9 printf("2的乘⽅表:\n");10 for(i=0;i<=n;i++)11 {12 power=pow(2,i);13 printf("2的%d次⽅为%.0lf\n",i,power);14 }1516 printf("\n");1718 /*3的乘⽅表(练习2-17)*/19 int m,j;20 double power_1;21 printf("Enter m:");22 scanf("%d",&m);23 for(j=0;j<=m;j++)24 {25 power_1=pow(3,j);26 printf("pow(3,%d)=%.lf\n",j,power_1);27 }2829 return 0;30}1#include<stdio.h>//练习2-182double fact(int n)3{4 int i;5 double product;6 product=1;7 for(i=1;i<=n;i++)8 {9 product*=i;10 }1112 return product;13}14int main(void)15{16 int n,m,i;17 double result_1,result_2,result_3,c;18 printf("输⼊两个正整数m和n(m<=n):");19 scanf("%d %d",&m,&n);20 for(i=0;i<=n;i++)21 {22 result_1=fact(i);23 }24 for(i=0;i<=m;i++)25 {26 result_2=fact(i);27 }28 for(i=0;i<=n-m;i++)29 {30 result_3=fact(i);31 }32 c=result_1/(result_2*result_3);33 printf("c=%.lf",c);3435 return 0;36}。
C语言程序设计基本知识点解答(三) 第五章 选择结构程序设计 Q116 如何进行选择结构的程序设计?(选择结构) A116 “选择结构”也可以叫做“分支结构”。在一个合理的“选择结构”中,总是先进行某个条件的判断,然后根据判断的结果选择执行预先设定的操作。其流程图如下:
可见,要想实现“选择结构”,需要2个条件: ① 能表达条件判断的运算符:即关系运算符和逻辑运算符 ② 能实现判断并选择的控制语句:即if和switch语句
Q117 什么是关系运算符?(关系运算符) A117 关系运算符也叫“比较运算符”,用于对两个数据进行比较判断的。C语言中一共有6种关系运算符,分别是 < 小于、<= 小于等于、> 大于、>= 大于等于、== 等于、!= 不等于。用这6种运算符按规定把运算量连接起来构成的式子就是关系表达式。其中,参与关系运算的数据可以是常量、变量或任何合法的表达式。比如:a * a <= 100、NowIndex == MaxIndex。 所有6种关系运算符的优先级都比算术运算符低,而== 等于、!= 不等于两个运算符的优先级又比其它四个关系运算符低。所有6种关系运算符的结合性都是从左向右。
Q118 C语言中如何表示一个关系表达式的值?(关系表达式) A118 关系表达式进行的是关系运算,也就是“比较运算”。比较的结果只可能有两个:“真”或“假”。对应于实际生活中,就是“成立”还是“不成立”,“正确”还是“不正确”,“对”还是“不对”这样一些比较和判断的结果。可见,关系运算的结果的特点是:只有两种可能的结果;任何时候答案只可能是其中的一个;两种可能是相互对立不可能同时出现的。这样的特点正对应于数学上的“逻辑值”:“真”或“假”。所以最终的结论就是:关系表达式的值是“逻辑值”,即“真”或“假”。C语言中分别以“1”和“0”来代表。就是说,如果关系表达式的值为“真”,则得到整数1;如果值为“假”,则得到整数0。比如关系表达式 3 > 5 的值就等于0,而关系表达式5 > 3 的值就等于1。有了这样的处理,一个关系表达式就可以作为其它表达式的一部分从而构成更复杂的表达式了。比如:(3 > 5) + ( 3 != 5)、x = (y == z) 等等。
Q119 当a=3, b=2, c=1时,为什么关系表达式a > b > c 的值却是“假”的?(关系表达式) A119 计算机语言中的表达式并不是数学表达式。如果是一个数学式子a > b > c,它表示b同时大于c和小于a,的确是对的。但是在C语言中,这个关系表达式实际上等价于(a > b) > c。这样计算一下:(a > b)是“真”,值为1;1 > c 当然是“假”。
Q120 什么是逻辑运算符?(逻辑运算符) A120 逻辑运算实际上是复合的关系运算,即要判断一个大命题的成立与否,不仅要判断其中的
AB?YesNoab各个小命题是否成立,还取决于每个小命题的成立与否是如何影响大命题的成立的。C语言有3种逻辑运算符,分别是 && 逻辑与(双目)、|| 逻辑或(双目)、 !逻辑非(单目)。
Q121 逻辑运算符的运算规则是什么?(逻辑运算符) A121 逻辑运算是关系比较运算结果之间进行的运算,所以参与逻辑运算的运算量必须是逻辑量(即值为“真”或“假”的量),而逻辑运算的结果也必然是逻辑值(“真”或“假”,以下分别用“True”或“False”代表)。 &&逻辑与的运算规则是:全部运算量都为“T”,逻辑与运算才为“T”; 只要有一个运算量为“F”,逻辑与运算即为“F” 比如想判断x的绝对值是否小于5,那么对应的逻辑表达式是:x > -5 && x < 5。 ||逻辑或的运算规则是:全部运算量都为“F”,逻辑或运算才为“F”; 只要有一个运算量为“T”,逻辑或运算即为“T” 比如想判断x的绝对值是否大于5,那么对应的逻辑表达式是:x < -5 || x > 5。 !逻辑非的运算规则是:运算量为“T”,逻辑非运算则为“F”; 运算量为“F”,逻辑非运算则为“T” 比如关系表达式 x > 0,实际上和逻辑表达式 ! (x <= 0) 是等价的。 总结一下,逻辑运算的规则就如下表所示:
TFTFFTTTF! aTFF! bTTTTFFa && bFTa || bTFFF
ba
其中:a、b代表逻辑量。T代表“真”值,F代表“假”值。 Q122 既然前面说“参与逻辑运算的运算量必须是逻辑量”,那为什么C语言中还有诸如 5 && 3 这样的逻辑表达式?(逻辑表达式)
A122 这是因为在C语言中,除了可以求解到关系表达式本身就是逻辑值的值,还可以求解出任何合法的表达式的“逻辑值”。这是基于这样的一个规定和处理方式:当需要求解任何一个表达式的逻辑值是“真”是“假”时,认为该表达式的值为非整数0时是“逻辑真”,而等于整数0时是“逻辑假”。按照这样的规定,上述逻辑运算规则表在C语言中就可以扩展为下表了:
10100非0110! a100! b11非0非000a && b01a || b非0000
ba
其中a、b代表任何类型的数据(可以是常量、变量或表达式)。 所以,有5 && 3这样的逻辑表达式也就不奇怪了。按照上表,5和3都是“逻辑真”,则5 && 3仍然是“真”,所以这个表达式的值等于1。
Q123 = 运算符与 == 运算符有什么区别?(赋值运算符)(等于运算符) A123 = 运算符与 == 运算符有本质上的区别,千万不要混淆或误用 = 与 == 运算符。 = 是“赋值运算符”。赋值表达式中,赋值运算符的左边只能是变量。 = = 是“等于关系运算符”。关系表达式中,等于运算符的两边可以是常量、变量或任何合法的表达式。 由于上述的本质区别,所以如果误用或混用,则会产生严重的后果。 比如:(a = 1) == (b = 2) 是一个合法的等于关系表达式,而如果少写一个 = 号,则变成了 (a = 1) = (b = 2),这却是一个非法的赋值表达式了,编译的时候就会给出错误信息。 又比如:假设 a = 1,则判断a是否和100相等的表达式应该是 a == 100 的关系表达式,它的值也应该是“逻辑假”的,即等于0。但是如果一旦少写一个 = 号,则变成了 a = 100 的赋值表达式,这个表达式的值等于100,是“逻辑真”的,显然和正确的结果产生了误差。更严重的是变量a的值还在求解赋值表达式的过程中被改变了。更更严重的是,这样的错误不会在编译时容易地发现,它隐藏的很深,非常不容易排除。
Q124 if语句有哪些语法形式?(if) A124 if语句有两种语法形式: ① 只使用单独的if。其形式为 if (表达式) 语句; 比如 if (x > 0) sign = 1; 其执行过程如右图所示
② 使用成对的if和else。 其形式为 if (表达式) 语句1; else 语句2; 比如:if (x > 0) sign = 1; else sign = -1; 其执行过程如左图所示
其中的“语句”、“语句1”、“语句2”称之为if或else的内嵌语句。注意:C语言规定,if或else的内嵌语句只能是一个语句,不能超过一个语句。
Q125 什么叫if嵌套语句?(if)(嵌套) A125 在if或else的内嵌语句中又包含一个或多个if语句时,称为if语句的嵌套。常用于多重条件,多个分支的选择判断控制。比如: if (x != 0) if (x > 0) y = 1; else y = -1; else y = 0; 其执行流程图如图所示:
语句表达式TF语句1表达式TF语句2
x != 0TFy = 0y = 1x > 0TFy = -1Q126 else能否单独使用构成选择结构?(else)(嵌套) A126 绝对不能。else必须和if在一起构成选择结构语句。也就是说,有一个else就必须有一个if和它配对。其实道理很简单,没有“如果”哪有“否则”呢?
Q127 什么是if嵌套语句中if和else的配对问题?(if)(嵌套) A127 正如上个问题所言,else是不能单独出现的,而if却可以单独构成一个语句,那么,在if嵌套语句中就存在else和if如何配对的问题。即是说,当if和else的数目不相等时,到底每个else和哪个if在一起组成一个语句的问题。 在C语言中,if与else的配对原则是:从if嵌套语句的最里层的else开始向外,依次将else与在它前面的离它最近的还未配对的if 配对。 比如: if (x != 0) if (x > 0) y = 1; else y = -1; else y = 0; 其配对结果是: ①if (x != 0) ②if (x > 0) y = 1; ②else y = -1; ①else y = 0; 而如果是如下语句: if (x != 0) if (x > 0) y = 1; else y = 0; 则配对结果是: ①if (x != 0) ②if (x > 0) y = 1; ②else y = 0;
如果不注意上述配对原则,那么就很有可能出现这样的情况:编译系统的理解和程序员的本意发生偏差,使程序运行结果出错。这样的错误也是很难发现的。
Q128 那么,如何避免在if嵌套语句中出现实际的配对和所设计的配对发生误差的情况?(if)(嵌套)
A128 仔细分析一下就会发现,在if嵌套语句中之所以会发生配对误差,根本的原因在于if可能单独出现。实际效果就是if的数目大于else的数目。针对问题出现的原因,有以下解决办法:①只把要嵌套的语句放在else后面,这样由于每个else前面只有一个if,所以不会出错。 比如: y = 0; if(x >= 0) if(x > 0) y = 1; else y = -1; 容易出错, 而 if(x < 0) y = -1; else if(x > 0) y = 1; else y = 0; 不易出错。 ②如果嵌套语句必须放在if 后面,就把它用大括号括起来,或给每个if语句都加上else。 比如: y = 0; if(x >= 0) { if(x > 0) y = 1; } else y = -1; y = 0; if(x >= 0) if(x > 0) y = 1; else ; else y = -1; 都不易出错。