文章教程

全国计算机等级考试二级C语言5.3if语句和用if语句构成的选择结构

8/22/2020 10:24:52 PM 人评论 次浏览

5.3 if语句和用if语句构成的选择结构

if语句用来对所给定的条件进行判定,判断其表达式的值是否满足某种条件,并根据判定的结果(真或假)决定执行给出的两种操作中的哪一种。

考点3 if语句的几种形式

真考链接

考点3 无论是在选择题或操作题,都是一个重中之重,考核概率为80%。

(1)if(表达式)语句。例如:

if(a>b)printf("The answer is right!\n");

其中,if是C语言的关键字,a>b是条件判断表达式。表达式两侧的括号不可少,并且只能是圆括号,不能用其他括号替代。紧跟着的是一条输出语句,称为if子句,如果在if子句中需要多个语句,则应该使用大括号({})把一组语句括起来构成复合语句,这样在语法上满足“一条语句”的要求。

(2)if(表达式)语句1。

else 语句2

例如:

if(a>b)printf("The answer is right.\n");

else printf("The answer is wrong.\n");

(3)if(表达式1)语句1。

elseif(表达式2)语句2

elseif(表达式3)语句3

elseif(表达式m)语句m

else语句n

“语句1”是if子句,“语句2…语句m”是elseif子句。这些子句在语法上要求是一条语句,当需要执行多条语句时,应该使用花括号({})把这些语句括起来组成复合语句。

小提示

else不能独立成为一条语句,它只是if语句的一部分,不允许单独出现在程序中,else必须与if配对,共同组成if…else语句。

真题精选

【例1】若变量已正确定义,有以下程序段

int a = 3,b = 5,c = 7;

if(a > b)a = b;c = a;

if(c!= a)c= b;

printf("% d,% d,% d\n",a,b,c);

则程序输出结果为(  )。

A.程序段语法错    B.3,5,3    C.3,5,5    D.3,5,7

【答案】 B

【解析】两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变化,程序输出的结果为3,5,3。所以正确的答案为B。

【例2】下列给定程序中,函数fun()的功能是:如果参数是大写字母则转换为对应的小写字母,如果是小写字母则转换为对应的大写字母,其他字符则返回字符#,请在标号处填入正确的内容,使程序得出正确的结果。

试题程序

char fun(char c)

{ if 【1】

c = c - 32;

else if 【2】

c = c + 32;

【3】

c = '#';

return c;

【答案】【1】c>='a'&&c<= 'z'

【2】c>= 'A'&&c<= 'Z'

【3】else

【解析】本题考查if语句的使用。标号【1】判断是否为小写字母,标号【2】判断是否为大写字母,标号【3】表示除了大写字母和小写字母之外的其他字符,所以填入else。

【例3】以下程序的输出结果是(  )

试题程序

#include <stdio.h>

main()

{ int a,b,c;

a=10;b=50;c=30;

if(a>b)

a=b,b=c;

c=a;

printf("a=% d,b=% d,c=% d",a,b,c);

A.a=10,b=50,c=10    B.a=10,b=30,c=10

C.a=50,b=30,c=10    D.a=50,b=30,c=50

【答案】 A

【解析】本题考查了if语句的执行流程

【例4】编写函数fun(),其功能是:求出1~1000能被7或11整除,但不能同时被7和11整除的所有整数,并将其放在a所指的数组中,通过n返回这些数的个数。

注意:部分源程序给出如下。

请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

void fun(int *a,int *n){

void main()

{ int aa[1000],n,k;

fun(aa,&n);

for(k=0;k<n;k++)

if((k+1)% 10==0)

{ printf("% 5d",aa[k]);

printf("\n");

} /*一行写9个数*/

else

printf("% 5d ",aa[k]);

【答案】void fun(int *a,int *n)

{ int i,j=0;

for(i=1;i< =1000;i++)/*求1~1000能被7或11整除,但不能同时被7和11整除的所有整数,并放入数组a中*/

if((i% 7==0||i% 11==0)&&i% 77!=0)

a[j++] =i;

*n=j;/*传回满足条件的这些数的个数*/

【解析】本题考查if语句,用来判断能被7整除或者能被11整除,但是又不能同时被7和11整除的数,在这里充分理解“逻辑与”和“逻辑或”的区别;for循环语句的循环变量用来控制取值范围。

该题需要运用循环判断结构来实现,其中循环语句比较容易编写,只要确定循环变量的范围即可,下面就来看判断语句,题目要求找出能被7或11整除,但不能同时被7和11整除的所有整数。能同时被7和11整除的整数一定能被77整除,且不能被77整除的数不一定就是能被7 或11 整除的数,所以可得出程序中的if语句。注意:(i%7==0||i%11==0)两边必须要有小括号。

考点4 if语句的嵌套

真考链接

考点4 是选择题中必考的知识点。往往出现在选择题的读程序题中,考核概率为40%。

在if语句中又包含一个或多个if语句结构,称为if语句的嵌套,一般有以下两种形式。

(1)在if子句中嵌套含有else子句的if语句。

一般形式为:

if()

if()语句1

else语句2

else

if()语句3

else语句4

(2)在else子句中嵌套if语句。

一般形式为:

if(表达式1)语句1

elseif(表达式2)语句2

elseif(表达式3)语句3…

elseif(表达式m)语句m

else语句n

应当注意,else总是与它上面的最近的、没有与else配对的if配对。

真题精选

【例1】有以下程序

#include <stdio.h>

main()

{ int x = 1,y = 2,z = 3;

if(x > y)

if(y < z)printf("% d",++z);

else printf("% d",++y);

printf("% d\n",x++);

程序的运行结果是(  )。

A.331    B.41    C.2    D.1

【答案】 D

【解析】该题目考查if条件语句,else语句和最近的一个if语句配对。由于x>y为假,所以直接执行最后一行代码

【例2】下列给定的程序中,fun()函数的功能是将p所指的字符串中每个单词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。

例如,若输入:Iamastudenttotaketheexamination

则应输出:IaM AstudenTtOtakEthEexaminatioN

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include <ctype.h>

#include <stdio.h>

void fun(char *p)

{ int k=0;

for(;*p;p++)

if(k)

{ /*****found*****/

if(p== ' ')

{ k=0;

/*****found*****/

*p=toupper(*(p-1));

else k=1;

*p=toupper(*p);

void main()

{ char chrstr[64];

int d;

printf("\nPlease enter an English sentence within 63 letters:");

gets(chrstr);

d=strlen(chrstr);

chrstr[d] = ' ';

chrstr[d+1] =0;

printf("\nBefore changing:\n % s", chrstr);

fun(chrstr);

printf(" \nAfter changing:\n % s", chrstr);

【答案】(1)if(*p=='')

(2)*(p-1)=toupper(*(p-1));

【解析】本题考查:嵌套的if语句,toupper函数的用法,该函数功能是将小写字母转换为大写字母;指针型变量

(1)本题重点考查考生对指针的理解,当引用指针指向的元素时,应使用指针运算符*号。

(2)当p指向空格时,将前面的字符转换为大写,因此此处应为*(p-1)而不是*p。

考点5 由条件运算符构成的选择结构

真考链接

考点5是必考内容,通过条件运算符实现程序的选择结构。

在选择题中,此知识点考核概率为70%。属于应重点掌握知识点,在操作题中此知识点的考核概率为10%。

有以下语句:

if(x<y)

min=x; /*求两数中较小的一个*/

else min=y;

可以用min=(x<y)?x:y来替换,其中(x<y)?x:y是一个条件表达式,“?:”就是条件运算符。该表达式是这样执行的:如果(x<y)条件成立,则整个条件表达式取值x,否则取值y。

优先级:条件运算符高于赋值运算符,但低于逻辑运算符、关系运算符和算术运算符。

常见问题

if语句是如何实现程序的选择结构的?如果if的条件表达式为空语句,则程序运行流程如何?

if语句根据是否满足表达式的要求来选择程序执行的流程。如果if的条件表达式为空,就表示任何条件都满足,直接执行后面的语句。

真题精选

【例1】有以下程序:

#include <stdio.h>

main()

{ int x = 1,y = 2,z = 3;

if(x > y)

printf("% d",y<x?1:2);

else

printf("% d",z<x?2:3);

程序的运行结果是(  )。

A.1    B.2    C.3    D.4

【答案】 C

【解析】该题目考查if构成的选择结构和(x<y)?x:y形式的条件运算。因为x<y,所以if(x>y)不满足而进入else分支。因为z<x为假,所以打印冒号后面的数值3。

【例2】下列说法正确的是(  )

A.条件运算符是单目运算符

B.条件运算符是双目运算符,因为它有2个运算符号

C.条件运算符是三目运算符,因为它有3个运算对象

D.条件运算符的优先级高于赋值运算符和逻辑运算符

【答案】 C

【解析】本题比较全面地考查了条件运算符的基本知识点,选项C的说法是正确的

教程类别