case后面的“二维数组常量表达式式”的值,都必须是整型的或字符型的,不允许是实数,也不允许含有运算符。

优先级:当表达式中存在不同优先级的运算符参与操作;(1)算数运算符;算数运算符是C语言中使用较多的的运算符号,不同的;表3-1-4算术运算;虽然对于基本数据类型的变量进行++、--运算完全;n=n±1则要对应3条机器指令;自增、自减运算符的运算对象只能是简单变量,不能是;赋值运算符:“=”;(2)关系运算符;关系运算符用来测试两个操作数之间的关系;表3-1-
优先级:当表达式中存在不同优先级的运算符参与操作时,优先级较高的先于优先级 较低的进行运算。
结合性:当表达式中各种运算符优先级相同时,由运算符的结合性确定表达式的运算顺序。一类运算符的结合性为从左到右(占多数运算符),这是人们习惯的运算顺序;另一类运算符的结合性是从右到左,即单目、三目和赋值运算符。
(1)算数运算符
算数运算符是C语言中使用较多的的运算符号,不同的运算符用法见表表2-1-4所示,为了便于了解运算符的应用,表中假设a等于8,b等于2。
表3-1-4算术运算
虽然对于基本数据类型的变量进行++、--运算完全可以用n=n±1完成,但使用++、--运算可以提高程序的执行效率。这是因为++、--运算只需要一条机器指令就可以完成,而
n=n±1则要对应3条机器指令。
自增、自减运算符的运算对象只能是简单变量,不能是常量或是带有运算符的算式。例如,123++、(x+y)++是错误的。
赋值运算符:“=”。 赋值运算符是一个双目运算符,其结合性是从右至左。赋值运算符的左边部分称为左值,左值只能是一个变量;赋值运算符的右边部分称为右值,右值可以是一个表达式。赋值表达式:由“=”连接的式子称为赋值表达式。其功能是将赋值号右边表达式的结果送到左边的变量中保存。“==”和“=”是两种完全不同的运算符,前者为关系运算符中的相等运算符,后者为赋值运算符。
(2)关系运算符
关系运算符用来测试两个操作数之间的关系。C语言中的关系运算符均为双目运算符,包括&(大于),&(小于),&=(大于等于),&=(小于等于),==(等于),!=(不等于),其中前4个的优先级相同且高于后两个的优先级(后两个的优先级相同)。关系运算符主要用在条件语句中,其结果为逻辑值(或称为布尔值)。如果比较后关系式成立,则称之为“真”(结果为非0);如果比较后关系式不成立,则称之为“假”(结果为0)。如表2-1-5所示。
(3)逻辑运算符
逻辑运算符用于对几个关系运算表达式的运算结果进行组合,做出综合的判断。逻辑运算的结果以非0为“真”,0为“假”。如果A代表一个关系表达式的运算结果,B代表另一个关系表达式的运算结果,则A和B的各种逻辑运算的真值关系如表2-1-6所示。
逻辑运算真值表
对于与运算,全真为真,有假为假;对于或运算,有真为真,全假为假。 C语言程序中可以使用以下的逻辑运算,逻辑运算的结果是一个布尔值:TRUE 或FALSE。在以下的运算中,假设a=8,如表2-1-6所示。
逻辑运算 (4)位运算符
位逻辑运算是针对运算元的每一个位逐一地实施逻辑运算。在以下的运算中假设
a=5,如表3-1-7所示。
位运算 3.1.3程序的三种基本控制结构
程序的三种基本控制结构为顺序结构、选择结构和循环结构,这三种基本结构可以组成所有的复杂程序。
一、顺序结构
顺序结构是C语言程序最简单的程序结构,是构成复杂程序的基础。仅包含顺序结构的程序会按照语句的书写顺序执行。
C语言程序是由若干语句组成的,每个语句以分号作为结束符。C语言的语句可以分为5类,分别是控制语句、表达式语句 、函数调用语句、空语句和复合语句。除了控制语句外,其余4类都属于顺序执行语句。
(1)表达式语句
表达式语句由表达式加上分号组成的,最常见的就是赋值语句,它是由一个赋值表达
式后跟一个分号形成。例如:
//将7赋值给变量
事实上,任何表达式都可以加上分号而成为语句,例如:
//使i变量的值加1
(2)函数调用语句
由函数调用加上分号组成,例如:
//调用延时函数
函数是一段程序,这段程序可能存在于函数库中,也可能是由用户自己定义的当调用函数时会转到该程序执行。但函数调用语句与前后语句之间的关系是按顺序执行的。
(3)空语句
只有分号组成的语句称为空语句。在程序中,如果没有什么操作需要进行,但从语句的结构上来说必须有一个语句在进,可以书写一个空语句。
(4)复合语句
把多个语句用大括号“{}”括号来组成一个语句称复合语句。 例如:
delay(); LED=!LED;
复合语句内的各条语句都必须以分号结尾,在大括号外不能加分号。 二、选择结构
在解决实际问题中,有进需要根据给定的条件来做决定,即条件满足时做什么,条件不满足时做什么。选择结构程序可解决这类问题,其作用是根据所给定的两个或多个分支中,选择其中的一个分支来执行。C语言中有两种选择结构语句,即if语句和switch-case语句。
(1)if语句
1) 单分支if语句结构
if(条件)语句1;
如果表达式的值为真,则执行其后的语句,否则不执行该语句;
2)双分支if 语句
双分支if语句的语法格式如下:
if(表达式)语句1; else 语句2;
如果表达式的值的为真,则执行语句1,否则执行语句2其中else的部分可以省略。电脑首先判断if后面的条件是真还是假,如果是真就执行语名1,否则就执行语句2。else子句不能作为语句单独使用,必须与if配对使用。例如:
if(i&3) i=0; else i=2;
嵌套if语句是指if语句中又有if语句,:
当if语句嵌套使用时,会出现if与else的配对问题。C语言规定,else总是与其上面最近的if 配对。如果要改变这种默认的配对关系,可以在相应的if选择语句上加上”{}”来重新确定配对关系。
3)多分支if 语句
多分支语句的语法格式如下:
if (表达式1)语句1; else if(表达式2)语句2;
else if (表达式n)语句n;
else 语句n+1;
依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行。
(2)switch-case语句
使用语句的嵌套结构实现多分支选择功能时,程序的结构显得不够清晰,因此使用switch语句。switch 语名的格式:
switch (变量)
case 常量1:语句1; case 常量2:语句2; case 常量3:语句3; ......
计算表达式的值,并将其逐个与其后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,而不再进行判断,但继续执行case后面所有的语句;如果表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
case后的语句既可以是单个语句,也可以是复合语句,不需要用大括号括起来。case常量表达式和default子句可以按任何顺序出现,但其本身不改变控制流程。
switch号内的表达式的值和case后面常量表达式的值,都必须是整型的或字符型的,不允许是实数在后的各个常量表达式的值不能相同。否则会出现错误。
三、循环结构
循环是计算机解题的一个重要特征。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了5种循环语句:while语句、do-while语句、for语句、goto语句和if语句。
(1)for循环
for 循环格式如下:
for(表达式1;表达式2;表达式3)
语句或{程序};
执行过程是:(1)计算“表达式1”;(2)进行第一轮循环:“计算表达式2”,若值为假,则退出循环;否则执行“语句”;(3)计算“表达式3”;(4)进行第二轮循环:计算“表达式2”,若值为假,则退出循环;否则执行“语句”;(5)计算“表达式3”??其执行过程如图所示。
图2.1.1 for循环语句的执行流程
for(i=1;i&=200;i++)
//延时一段时间
for(j=1;j&=200;j++);
//前一个for语句的循环体
“表达式1”、“表达式2”,和“表达式3”都是选择项,可以省略,但其后的分号不能省略。省略“表达式1”,表示不对循环控制变量赋初值。省略“表达式2”,则不作其他处理时变成为死循环,需要在循环体中用break等语句退出循环。省略表达式3,则不对循环控制变量进行操作,这进可在语句体中加入修改循环控制变量的语句。“表达式1”和“表达式3”可以同时省略,需要使用相关语句保证循环结束。3个表达式都可省略。例如,for(; ;)语句相当于while(1)语句。
(2)while 循环
while语句的使用格式:
while(表达式)语句;
计算表达式的值,当值为真(非0)时,执行循环体语句。例如:
while(i--) a=a++;
当循环体由多个语句组成时,必须用大括号括起来,使其形成复合语句。
while(i&5)
下面是一个无穷while循环:
(3)do/while 循环
do-while语句的使用格式如下:
语句或{程序}; while(表达式);
do-while 循环与while循环的不同在于,do-while循环语句先执行循环中的语
三亿文库包含各类专业文献、行业资料、生活休闲娱乐、文学作品欣赏、各类资格考试、幼儿教育、小学教育、外语学习资料、第三讲-C语言基础03等内容。 
 95页 免费 第三讲-C语言基础 26页 免费 C语言基础知识 10页 2财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...  第三讲-C语言基础 26页 免费 C++与C语言基础 132页 5财富值 第1章 C语言基础 38页 免费 c语言的基础 2页 免费 第2章 c语言基础 45页 2财富值 c语言基...  第三讲-C语言基础 26页 免费 第1章 C语言基础 38页 免费 第2章 c语言基础 45页 2财富值 C语言基础题 30页 2财富值 c语言公共基础 2页 2财富值 C语言...  C语言基础 43页 5财富值 C语言基础 78页 免费 C语言基础 6页 2财富值 第三讲-C语言基础 26页 免费 第1章 C语言基础 38页 免费 第2章 c语言基础 45页...  C语言基础 78页 免费 第三讲-C语言基础 26页 免费 第1章 C语言基础 38页 免费 第二讲 C语言基础知识 暂无评价 42页 免费 C语言基础题 30页 2财富值喜欢...  C语言基础 43页 5财富值 C语言基础 78页 免费 C语言基础 6页 2财富值 第三讲-C语言基础 26页 免费 第1章 C语言基础 38页 免费 第2章 c语言基础 45页...  第三讲-C语言基础 26页 免费 C++与C语言基础 132页 5财富值 第1章 C语言基础 38页 免费 第2章 c语言基础 45页 2财富值 c语言基础第5章 7页 免费喜欢...  C语言基础 43页 5财富值 C语言基础 78页 免费 C语言基础 6页 2财富值 第三讲-C语言基础 26页 免费 C++与C语言基础 132页 5财富值 第1章 C语言基础 38...  第三讲-C语言基础 26页 免费 第1章 C语言基础 38页 免费 第2章 c语言基础 45页 2财富值 C语言基础题 30页 2财富值 C语言基础试题 5页 5财富值 C语言...本文所属图书&>&
本书根据计算机专业C语言程序设计课程的教学大纲编写,全书共分9章,分别介绍了C语言概述、数据类型及其运算、选择语句和循环语句、数组、指针、函数、结构体和共用体、预处理和位段、文件。每章由基本知识点和例...&&
1. 单项选择题
【例3-1-1】以下错误的语句为&&&&& 。
A. if(x&y);
B. if(x=y)&&(x!=0) x+=y;
C. if(x!=y) scanf(&%d&,&x);else scanf(&%d&,&y);
D. if(x&y) {x++;y++;}
&解:if语句的条件表达式必须包含在一个括号中。本题答案为B。
【例3-1-2】以下错误的if语句形式是&&&&& 。
A. if(x&y&&x!=y);
B. if(x==y) x+=y;
C. if(x!=y) scanf(&%d&,&x) else scanf(&%d&,&y);
D. if(x&y) {x++;y++;}
&解:选项C中if后面的scanf函数之后掉了一个语句结束符&;&。本题答案为C。
【例3-1-3】C语言的if语句中,用作判断的条件表达式为&& &&&。
A. 任意表达式&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B. 逻辑表达式
C. 关系表达式&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D. 算术表达式
&解:在C语言中没有逻辑型变量,它是一种&表达式&化了的语言,故任何类型的表达式都可以用作类型判断,且判断的标准是零值为假,非零值即真。本题答案为A。
【例3-1-4】为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else 子句总是与&&& 配对。
A. 缩排位置相同的if &&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B. 同一行上的if
C. 其之后最近的if&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& D. 其之前最近的if
&解:本题答案为D。
【例3-1-5】已知int a,b;,对于以下if语句:
if (a=b) printf(&a=b\n&);
在编译时,C编译程序&&&&& 。
A. 能指出该语句有语法错误&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B. 不能指出该语句有语法错误
C. 编译正确,其功能是当b为0时输出&a=b&& D. 以上都不对
&解:&a=b&可以看成是一个条件表达式,由b的值决定其真假,当b为0时,a=b返回0表示条件为假,不会输出&a=b&。本题答案为B。
【例3-1-6】若执行以下程序时从键盘上输入9,则输出结果是&&&&& 。
#include &stdio.h&
void main()
&&& scanf(&%d&,&n);
&&& if(n++&10) printf(&%d\n&,n);
&&& else printf(&%d\n&,n--);
A. 11& &&&&&&&&&&&&&&&&&&&&&&&&&&& B. 10&&&&& &&&&&&&&&&&&&&&&&&&& C. 9&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D. 8
&解:n=9,执行n++返回9,n=10,所以n++&10为真,输出n值。本题答案为B。
【例3-1-7】以下程序的输出结果是&&&&& 。
#include &stdio.h&
void main()
{ &&int x=2,y=-1,z=2;
&&& if(x&y)
&&&&&&& if(y&0) z=0;
&&&&&&& else z+=1;
&&& printf(&%d\n&,z);
A. 3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B. 2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& C. 1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D. 0
&解:x&y为假,直接执行printf语句。本题答案为B。
【例3-1-8】有如下程序:
#include &stdio.h&
void main()
{& &float x=2.0,y;
&&& if(x&0.0) y=0.0;
&& &else if(x&10.0) y=1.0/x;
&&& else y=1.0;
&&& printf(&%f\n&,y);
该程序的输出结果是&&&&& 。
A. 0.000000 &&&&&&&&&&&&&&&&& B. 0.250000&&&&&&&&&&&&&&&& C. 0.500000&&&&&&&&&&&&&&&& D. 1.000000
&解:依条件执行y=1.0/x=0.5。本题答案为C。
【例3-1-9】有以下程序:
#include &stdio.h&
void main()
{& &int &i=1,j=1,k=2;
&&& if((j++ || k++) && i++)
&&&&&&& printf(&%d,%d,%d\n&,i,j,k);
执行后输出结果是&&&&& 。
A. 1,1,2&&&& &&&&&& &&&&&& &&&&&& B. 2,2,1&&&&&&&&&&&&&&&&&&&&&& C. 2,2,2&&&&&&&&&&&&&&&&&&&&&& D. 2,2,3
&解:执行j++,j=2,返回1为真,不执行k++,k值不变,再执行i++,i=2,返回1为真,所以表达式((j++ || k++) && i++)为真,执行printf语句。本题答案为C。
【例3-1-10】有以下程序:
#include &stdio.h&
void main()
{&& int&&& a=5,b=4,c=3,d=2;
&&& if(a&b&c)
&&&&&&& printf(&%d\n&,d);
&&& else if((c-1&=d)==1)
&&&&&&& printf(&%d\n&,d+1);
&&&&&&& printf(&%d\n&,d+2);
执行后输出结果是&&&&& 。
A. 2&&&&&&&&&&&&&&&&&&&&&&& B. 3&&&&&&&&&&&&&&&&&&&&&&&&&&& C. 4&&&&&&&&&&&&&&&&&&&& D. 编译时有错,无结果
&解:a&b为真即1,1&c为假,c-1&=d为真即1,执行printf(&%d\n&,d+1)语句。本题答案为B。
【例3-1-11】以下程序的运行结果为&&&&& 。
#include &stdio.h&
void main()
{&& int a=2,b=-1,c=2;
&&& if (a&b)
&&& &&&&if(a&b) c=0;
&&& &&&&else c+=1;
&&& printf(&%d\n&,c);
A. 0&& &&&&&&&&&&&&&&&&&&&&&&&&&&& B. 1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& C. 2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D. 3
&解:a&b为假,直接执行printf语句。本题答案为C。
【例3-1-12】有一函数,,以下程序段中不能根据x值正确计算出y值的是&&&&& 。
A. if(x&0) y=1;&&&&&&&&&&&&&& &&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& B. y=0;
else if(x==0) y=0;&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&& & if(x&0) y=1;
else y=-1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&& & else if(x&0) y=-1;
C. y=0;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&& &&&&&&&&&&&&& D. if(x&=0)
if(x&=0);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&& &if(x&0) y=1;
if(x&0) y=1;&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&& &else y=0;
else y=-1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & &&&&&&&&&&&&&else y=-1;
&解:在选项C中,若x=0,先执行y=0,if (x&0)的条件为假,执行else包含的y=-1语句,结果x=0,y=-1,错误。本题答案为C。
【例3-1-13】若a、b、c1、c2、x、y均是整型变量,正确的switch语句是&&&&& 。
A. switch(a+b);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B. switch(a*a+b*b)&&&&&&
& {& case 1:y=a+b;&&&&&&&&&&&&&&&& &{ &&&&& case 3:
&& && case 0:y=a-b;&&&&&&&&&&&&&&&&&& &&&&&& case 1:y=a+b;
& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&& case 3:y=b-a,
& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
C. switch a&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D. switch(a-b)
& {&&&& case c1:y=a-b;&&&&&&&&&&&&&&& &{&&&& default:y=a*b;
& &&&&&& &case c2: x=a*d;&&&&&&&&&&&&&&& &&&& case 3:case 4:x=a+b;
& &&&&&& &default:x=a+b;&&&&&&&&&&&&&&&&&&&&&& &&&& case 10:case 11:y=a-b;
& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&}
&解:选项A中switch(a+b)后的分号错误,选项B中出现重复的常量表达式;选项C中条件应包含在括号中。本题答案为D。
【例3-1-14】若有定义 int a,,则合法的switch语句是&&&&& 。
A. switch(w)&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&& B. switch(a);
& &{ & case 1.0: printf(&*\n&);&&&&&&& &&&&&&& &&&&&&{ &&&&&& case 1 printf(&*\n&);
&& &&&& case 2.0: printf(&**\n&);&&&&&&&& &&&&&&&&&&&&&&&&&& case 2 printf(&**\n&);
& &}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&& &&}
C. switch(b)&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&& D. switch(a+b);
& &{ & case 1: printf(&*\n&);&&&&&&& &&&&&&&&&& &&&&&&{ &&&&&& case 1:printf(&*\n&);
&&& &&default: printf(&\n&);&&&&&&&&&& &&&&&&&&&&&&&&&&&& case 2: printf(&**\n&);
&& &&&case 1.0+2: printf(&**\n&);&&&&&&&& &&&&&&&&&&&&&& default: printf(&\n&);
& &}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & &&&&&&}
&解:选项A中常量表达式不为整型;选项B中&case 常量表达式&后没有&:&号;选项C中&case 1.0+2:&错误。本题答案为D。
【例3-1-15】若a、b均是整型变量,正确的switch语句是&&&&& 。
A. swich(a)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B. switch(a)
&&&{ & case 1.0:printf(&i\n&);&&&&&&&&&&&&&&&&&&&&&&&& &{& case b:printf(&i\n&);
&& &&& case 2:printf(&you\n&);&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case 1:printf(&you\n');
& }&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
C. switch(a+b)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& D. switch(a+b)
& {&&&& case 1:printf(&i\n&);&&&&&&&&&&&&&&&&&&&&&&&&&&& & {& case 1:printf(&i\n&);
&& &&& case 2*a:printf(&you\n&);&&&&&&&&&&&&&&&&&&&&&&&&&& case 2:printf(&you\n&);
& }&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&解:选项A中常量表达式不为整型;选项B中常量表达式中包含变量;选项C中&case 2*a:&错误。本题答案为D。
【例3-1-16】有以下程序:
#include &stdio.h&
void main()
{& &int a=15,b=21,m=0;
&&& switch(a%3)
&&& case 0:m++;
&&& case 1:m++;
&&& &&&&&switch(b%2)
&&&&&&& &{
&&&&&&& &default:m++;
&&&&&&& &case 0:m++;
&&&&&&& &}
&&& printf(&%d\n&,m);
程序运行后的输出结果是&&&&& 。
A. 1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& B. 2&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& C. 3&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&& D. 4
&解:a%3=0,执行m++和printf语句。本题答案为A。
【例3-1-17】有如下程序:
#include &stdio.h&
void main()
{&& int x=1,a=0,b=0;
&&& switch(x)
&&& case 0:b++;
&&& case 1:a++;
&&& case 2:a++;b++;
&&& printf(&a=%d,b=%d\n&,a,b);
该程序的输出结果是&&&&& 。
A. a=2,b=1&&&&&&&&&&&&&&&&&&&& B. a=1,b=1&&&&&&&&&& C. a=1,b=0&&&&&&&&&&&&&&&&& D. a=2,b=2
&解:执行case 1对应的语句,由于没有break语句,实际执行a++,a++,b++。本题答案为A。
【例3-1-18】有如下程序:
#include &stdio.h&
void main()
{& &float& x=2.0,y;
&&& if (x&0.0) y=0.0;
&&& else if(x&10.0) y=1.0/x;
&&& else y=1.0;
&&& printf(&%f\n&,y);
该程序的输出结果是&&&&& 。
A. 0.000000&&&&& &&&&&&&&&&&&& B. 0.250000&&&&&&&&&&&&&&&& C. 0.500000&&&&&&&&&&&&&&&& D. 1.000000
&解:x&0.0为假,x&10.0为真,执行y=1.0/x=0.5。本题答案为C。
【例3-1-19】若从键盘输入58,则以下程序输出的结果是& &&&&。
#include &stdio.h&
void main()
&&& scanf(&%d&,&a);
&&& if(a&50)& printf(&%d&,a);
&&& if(a&40)& printf(&%d&,a);
&&& if(a&30)& printf(&%d&,a);
&解:a=58,三个if语句的条件都成立。本题答案为585858。
【例3-1-20】下列程序的输出结果是&& &&&。
#include &stdio.h&
void main()
{& &int n='c';
&&& switch(n++)
&&& default: printf(&error&);
&&& case 'a':case 'A':case 'b':case 'B':
&&&&&&& printf(&good&);
&&& case 'c':case 'C':printf(&pass&);
&&& case 'd':case 'D':printf(&warn&);
&解:n为int型变量,执行n++后,n为'd'对应的ASCII码,但该表达式仍返回'c'对应的ASCII码,与case 'c'匹配,由于其后的语句没有break语句,故执行printf(&pass&)和printf(&warn&)两个语句。本题答案为passwarn。
【例3-1-21】根据以下if语句写出与其功能相同的switch语句(x的值在0~100之间)。if语句:
if (a&40) b=1;
else if (a&50) b=11;
else if (a&60) b=111;
else if (a&70) b=1111;
else if (a&80) b=11111;
switch语句:
switch(& ①& )
& ②& &b=1;
case 4:b=11;
case 5:b=111;
case 6:b=1111;
& ③& &b=11111;
&解:本题答案为①a/10 ②case 0:case 1:case 2:case 3:③case 7:。
【例3-1-22】以下程序的输出结果是&&&& 。
#include &stdio.h&
void main()
{&& int x=0,y=2,z=3;
&&& switch(x)
&&& case 0: witch(y==2)
&&&&&&& &&&&{
&&&&&&&&&&& case 1:printf(&*&);
&&&&&&&&&&& case 2:printf(&%&);
&&&&&&&&&&& }
&&& case 1: switch(z)
&&& &&&&&&&&{
&&&&&&&&&&& case 1:printf(&$&);
&&&&&&& &&&&case 2:printf(&*&);
&&& &&&&&&&&default:printf(&#&);
&&&&&&& &&&&}
&解:x=0,y=2,执行外层switch的case 0的语句,输出&*&,再执行执行外层switch的case 1的语句,输出&#&。本题答案为*#。
【例3-1-23】判断以下叙述的正确性。
(1)在&if (表达式) 语句1 else 语句2&的结构中,如果表达式为a&10,则else的条件隐含为a&10。
(2)C语言规定,else总是与它上面、最近的、尚未配对的if配对。
(3)在if语句的三种形式中,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。
(4)各种形式的if语句是不能互相嵌套的。
(5)if (a&b) printf(&%d&,a)'else printf(&%d&,b);语句可以用printf(&%d&,a&b?a:b);替代。
&解:(1)错误。else的条件隐含为a&10。
(2)正确。&&&&&&&&&&&&& (3)正确。
(4)错误。各种形式的if语句可以互相嵌套。
(5)正确。
【例3-1-24】判断以下叙述的正确性。
(1)switch&case结构中case后的表达式必须为常量表达式。
(2)可以用swicth结构实现的程序都可以使用if语句来实现。
(3)switch&case结构中条件表达式和常量表达式值可以为float类型。
(4)switch语句在执行break语句或者遇到switch语句的&}&时结束。
(5)由float x=3e-6,y=3e-6;可得x==y的逻辑值总是为真。
&解:(1)正确。&&&& (2)正确。
(3)错误。switch&case结构中条件表达式和常量表达式值都必须是整型或字符型,不允许是浮点型。
(4)正确。&&&&&&&&&&&&& (5)错误。通常不要比较几个浮点数是否相等。
【例3-1-25】下面的程序:
#include &stdio.h&
void main()
{&& int a,b,m,n;
&&& scanf(&%d%d,\n&,&a,&b);
&&& m=1;n=1;
&&& if (a&0) m=m+n;
&&& if (a&b) n=2*m;
&&& else if (a==b) n=5;
&&& else n=m+1;
&&& printf(&m=%d n=%d\n&,m,n);
回答以下问题:
(1)当输入为-1 -2↙时,程序的运行结果是什么?
(2)当输入为1 0↙时,程序的运行结果是什么?
(3)为了输出n=4,变量a和b应具备什么条件?
&解:(1)m=1,n=1,输入后,a=-1,b=-2,a&0为假,a&b和a==b都为假,执行语句n=m+1=2;所以输出为m=1 n=2。
(2)m=1,n=1,输入后,a=1,b=0,a&0为真,执行语句m=m+n=2;a&b和a==b都为假,执行语句n=m+1=3;所以输出为m=2 n=3。
(3)要使n=4,就应执行语句m=m+n和n=2*m,为此要求满足条件a&0和a&b,即0&a&b。
5. 程序设计题
【例3-1-26】编写一个程序,将给定的百分制成绩转换为成绩等级A、B、C、D、E。90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。
&解:使用switch语句进行转换。对应的程序如下:
#include &stdio.h&
void main()
&&& printf(&分数:&);
&&& scanf(&%d&,&s);
&&& switch(s/10)
&&& case 9:
&&& case 10:printf(&A\n&);
&& &case 8:printf(&B\n&);
&&& case 7:printf(&C\n&);
&&& case 6:printf(&D\n&);
&&& case 5: case 4: case 3: case 2: case 1: case 0:
&&&&&&& printf(&E\n&);
【例3-1-27】编写一个程序,输入年份和月份,判断该年是否是闰年,并根据给出的月份判断是什么季节和该月有多少天?闰年的条件是年份能被4整除但不能被100整除,或者能被400整除。
&解:直接根据闰年的定义求解,如果是闰年,2月份为29天;否则为28天,其他月份相同。规定3~5月为春季,6~8月为夏季,9~11月为秋季,1、2和12月为冬季。程序如下:
#include &stdio.h&
void main()
{& &int y,m,leap,season,
&&& printf(&年份,月份:&);
&&& scanf(&%d,%d&,&y,&m);
&&& if ((y%4==0 && y%100!=0) || (y%400==0))
&&&&&&& leap=1;&&&&&&&&&&&&&&&&&&& /*为闰年*/
&&&&&&& leap=0;&&&&&&&&&&&&&&&&&&& /*为平年*/
&&& if (m&=3 && m&=5)
&&&&&&& season=1;
&&& else if (m&=6 && m&=8)
&&&&&&& season=2;
&&& else if (m&=9 && m&=11)
&&&&&&& season=3;
&&&&&&& season=4;
&&& switch (m)
&&& case 1:case 3:case 5:case 7:case 8:case 10:
&&& case 12:days=31;&&&&&&& /*1、3、5、7、8、10、12月份为31天*/
&&& case 4:case 6:case 9:
&&& case 11:days=30;&&&&&&& /*4、6、9、11月份为30天*/
&&& case 2:if (leap==1) days=29;
&&&&&&&&&&& else days=28;
&&& printf(&%d年%s闰年\n&,y,(leap==1 ? &是& :& &不是&));
&&& printf(&该季节是&);
&&& switch(season)
&&& case 1:printf(&春季\n&);
&&& case 2:printf(&夏季\n&);
&&& case 3:printf(&秋季\n&);
&&& case 4:printf(&冬季\n&);
&&& printf(&当月天数:%d\n&,days);
【例3-1-28】编写一个程序,根据用户输入的三角形的三条边长判定是何种三角形,对于有效三角形,求其面积。
&解:判定几类三角形的过程如下。
(1)能够组成三角形:满足两边之和大于第三边的条件,又分为以下三种情况。
l等边三角形:三边相等。
l等腰三角形:两边相等(三种情况)。
l直角三角形:两边平方和等于第三边平方(三种情况)。
l一般三角形。
(2)不能组成三角形:不满足两边之和大于第三边的条件。
对应的程序如下:
#include &stdio.h&
#include &math.h&
void main()
{& &float a,b,c;
&&& float s,
&&& printf(&a,b,c=&);
&&& scanf(&%f,%f,%f&,&a,&b,&c);
&&& if (a+b&c && b+c&a && a+c&b)
&&& {&& s=(a+b+c)/2;
&&&&&&& area=sqrt(s*(s-a)*(s-b)*(s-c));
&&&&&&& printf(&area=%f\n&,area);
&&&&&&& if (a==b && b==c)
&&&&&&&&&&& printf(&等边三角形\n&);
&&&&&&& else if (a==b || a==c || b==c)
&&&&&&&&&&& printf(&等腰三角形\n&);
&&&&&&& else if ((a*a+b*b==c*c) || (a*a+c*c==b*b) ||(b*b+c*c==a*a))
&&&&&&&&&&& printf(&直角三角形\n&);
&&&&&&& else
&&&&&&&&&&& printf(&一般三角形\n&);
&&&&&&& printf(&不能组成三角形\n&);
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。

我要回帖

更多关于 c 常量表达式 的文章

 

随机推荐