2.12 分支、循环练习

2024-02-12 19:44
文章标签 练习 循环 分支 2.12

本文主要是介绍2.12 分支、循环练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、选择题

1.1、以下程序的输出结果是  A  

    main()

   {  

 int k1=1,k2=2,k3=3,x=15;

if(!k1)  x--;

else if(k2)

 if(k3)  x=4;

else x=3;

       printf(“x=%d\n”,x);

    }

   A x=4      B x=15     C x=14      D x=3

解析:if(!k1) x--; 检查 k1 是否为0。因为 k1 的值为1,所以该条件不成立,x 的值不变(仍为15)。接下来,else if(k2) 检查 k2 是否为非0值。因为 k2 的值为2,该条件成立。进入 if(k3) x=4;k3 的值为3,所以该条件成立,x 被赋值为4。由于 k3 的条件成立,所以 else x=3; 这部分代码不会被执行。所以打印出x=4

1.2、有以下程序,while循环执行   A   次。

int   main()

{

int  k=2; 

while(k=1)  

printf(“%d”,k);  

k--;  

printf(“\n”);

}

 A) 无限次       B) 2  C 1     D 0

解析:while 循环的条件是 k=1,这是一个赋值表达式,它将 k 的值设置为 1,并返回 1 作为表达式的值。赋值表达式的结果是被赋的值,因此 k=1 的结果是 1,这是一个非零值,所以 while 循环的条件始终为真。由于 while 循环的条件始终为真,循环将无限次地执行,直到被外部因素(如用户干预或程序崩溃)中断。每次循环迭代都会执行 printf(“%d”,k); 语句,打印当前 k 的值,然后 k-- 语句将 k 的值减 1。然而,由于 while 循环的条件是 k=1(它总是将 k 重新设置为 1),k 的值永远不会减小到 0 或负数,因此循环不会自然终止。所以,while 循环将执行无限次

1.3有以下程序

int  main()

{

   int  a=1,b;

   for(b=1;b<=10;b++)

   {

      if(a>=8)   break;

      if(a%2==1)  {  a+=5;  continue;} 

      a-=3;             

   }

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

}

程序运行后的输出结果是       B      

A)3     B)4    C)5     D)6

解析:在每次循环中,程序首先检查a是否大于等于8。如果是,则使用break语句退出循环。如果不是,则继续执行。接下来,程序检查a是否是奇数(即a%2==1)。如果是奇数,a增加5,并使用continue语句跳过当前循环的剩余部分,进入下一次循环。如果a是偶数,则a减去3,然后继续执行下一次循环。第一次循环:a是奇数,a加5,a变为6,continue,跳过剩余部分,进入下一次循环。第二次循环:a是偶数,a减3,a变为3,继续执行下一次循环。第三次循环:a是奇数,a加5,a变为8,continue,跳过剩余部分,进入下一次循环。a大于等于8,break,退出循环。所以最终b的值是4

1.4有以下程序

#include <sthio.h>

int  main()

{

int s=0,n;

for (n=0;n<3;n++)     0   1  2

{

switch(s)

{ case 0:

case 1:s+=1;

case 2:s+=2;break;

case 3:s+3;

case 4:s+=4;

}

printf((%d\n,s);

}

}

程序运行后的结果是        C       

A)1,2,4 B) 3,10,10 C) 3,6,10 D) 3, 7, 7

解析:初始时,s 被赋值为 0。进入第一个 for 循环迭代(n = 0)。s 的值是 0,进入 case 0:,执行 s += 1;s 变为 1。由于没有 break 语句,继续执行 case 2:,执行 s += 2;s 变为 3。输出 s 的值,即 3。进入第二个 for 循环迭代(n = 1)。s 的值是 3,进入 case 3:,执行 s += 3;s 变为 6。输出 s 的值,即 6。进入第三个 for 循环迭代(n = 2)。s 的值是 6,进入 case 4:,执行 s += 4;s 变为 10。输出 s 的值,即 10

1.5、有以下程序

#include<stdio.h>

int  main()

{int a=1b=0;

if(-a) b++;

else if(a=0)b+=2else b+=3;

printf("%d\n"b)

)

程序运行后的输出结果(   B   )。 

A)0 B)1 C)2 D)3

解析:int a=1, b=0;:变量 a 初始化为1,变量 b 初始化为0。if(-a) b++;:由于 -a 的值是 -1(因为 a 是1),这是一个非零值,所以条件为真,执行 b++,此时 b 的值变为1。else if(a==0) b+=2;和else b+=3;都不会执行,所以打印出b为1

1.6有以下程序

#include<stdio.h> 

int  main()

{

int a=7

while(a--)

printf("d\n"a)

}

程序运行后的输出结果(  B  )

A)-1 B)0 C)1 D)7

解析:while(a--);:这是一个 while 循环,其条件是 a--。在每次循环迭代中,a 的值会减1,并且由于 a-- 是一个后缀递减操作,它在表达式中保持其原始值(在递减之前)。循环将一直执行,直到 a 的值变为0。由于 a 初始值为7,循环将执行7次。printf("%d\n", a);:在 while 循环结束后,a 的值将是0(因为循环执行了7次,每次减1)。这行代码将打印出 a 的值,即0。因此,程序运行后的输出结果是 0

2、填空题

  2.1、以下程序运行结果是(  2  )。

#include<stdio.h>

int  main()

{

int x=2,y=-1,z=2;

if(x<y)

if(y<0) z=0; 

else    z+=1;

printf("%d\n",z);

}

解析:初始时,x 的值为 2,y 的值为 -1,z 的值为 2。程序首先检查 if(x<y)。由于 x 的值是 2,而 y 的值是 -1,2 不小于 -1,所以这个条件为假。因此,接下来的 if(y<0) z=0; else z+=1; 代码块不会被执行。所以,z 的值保持为初始值 2,并且最终程序输出 z 的值,即 2。

2.2以下程序的执行结果是(  20  )。

#include<stdio.h>

int   main()

{

int a,b,c,d,x;

a=c=0;

b=1;

d=19;

if(a)  d=d-10;

if(!c)

x=15;

else 

x=25;

d++ ;  

printf("d=%d\n",d);

}

解析:由于 a 的值为 0,所以条件 if(a) 为假,不会执行 d=d-10d 的值仍然是 19。由于 c 的值为 0,!c(即 c 的非值)为真,因此会执行 x=15,将 x 的值设置为 15。d 的值增加 1,从 19 变为 20。最后,程序输出 d 的值:20

2.3以下程序的执行结果是(   first      third    )。

#include<stdio.h>

int main()

int x=1,y=0;

switch(x)

{

case 1:

switch(y)

{

case 0:printf("first\n");break;

case 1:printf("second\n");break;

}

    case 2:printf("third\n");

}

}

解析:初始化变量 x 为 1,y 为 0。进入外层 switch 语句,检查 x 的值。由于 x 的值为 1,执行 case 1: 下的代码块。进入内层 switch 语句,检查 y 的值。由于 y 的值为 0,执行 case 0: 下的 printf("first\n");,并遇到 break; 语句,退出内层 switch 语句。由于内层 switch 语句中没有其他 break; 语句来退出外层 switch 语句,因此会继续执行外层 switch 语句中 case 1: 之后的代码,即 case 2: 下的 printf("third\n");。因此,程序的执行结果是:first  third

2.4 以下程序在输入52之后的执行结果是(  s=2,t=3  )。

#include<stdio.h>

int  main()

{

int s,t,a,b;

scanf("%d,%d",&a,&b);

s=1;

t=1;

if(a>0)  s=s+1;

if(a>b)  t=s+t;

else if(a==b) 

t=5;

else 

t=2*s;

printf("s=%d,t=%d\n",s,t);

}

解析:因为a是5,大于0,所以s将增加1,变为2。if(a>b):因为a是5,b是2,所以a大于b,条件成立,t将被赋值为s+t,即2+1=3。由于if(a>b)的条件已经成立,后面的else ifelse块将不会被执行。最后,程序输出st的值:s=2,t=3

2.5 以下程序的执行结果是(   #   )

#include<stdio.h>

int  main()

{

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

switch(a>0)

{

case 1:

switch(b<0)

   {

       case 1:printf("@");break;

       case 2:printf("!");break;

   }

case 0:

switch(c==5)

   {

       case 0:printf("*");break;

           case 1:printf("#");break;

       case 2:printf("$");break;

   }

default:printf("&");

}

printf("\n");

}

解析:因为 a 的值是 2,显然 a > 0 是真的,所以外层 switch 语句将执行 case 1: 下的代码块。接下来,我们进入内层第一个 switch 语句:由于 b 的值是 7,b < 0 是假的,因此内层第一个 switch 语句不会执行任何 case。由于缺少 break 语句,控制流将继续执行到外层 switch 语句的下一个 case。现在,进入外层 switch 语句的 case 0:因为 c 的值是 5,所以 c == 5 是真的,内层第二个 switch 语句将执行 case 1: 下的代码块输出字符 #,并且由于有 break 语句,内层第二个 switch 语句结束。

2.6 以下程序运行结果是(   5   5   5   )。

#include <stdio.h>

int main()

{

int x,y=1;

if(y!=0) x=5;

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

if(y==0) x=4;

else x=5;

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

x=1;

if(y<0)

if(y>0) x=4;

else x=5;

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

}

解析:第一个 if 语句检查 y 是否不等于0。由于 y 的值为1,这个条件为真,因此 x 被赋值为5。第一个 if 语句检查 y 是否不等于0。由于 y 的值为1,这个条件为真,因此 x 被赋值为5。打印 x 的值,此时 x 为5。第二个 if-else 语句检查 y 是否等于0。由于 y 的值为1,这个条件为假,因此执行 else 分支,x 再次被赋值为5。再次打印 x 的值,此时 x 仍为5。第三个 if-else 语句是嵌套的。首先检查 y 是否小于0,这个条件为假,因此不会执行内部的 if (y > 0) 分支。而是直接执行 else 分支,将 x 赋值为5。最后,打印 x 的值,此时 x 仍为5。

2.7 以下程序的运行结果是(   4 -2 4 0 -2 -2   )

#include<stdio.h>

int   main()

{

int x , y=-2, z=0;

if ((z=y)<0)  x=4;

else if (y==0)

x=5;

else 

x=6;

printf("\t%d\t%d\n" ,x, z);

if(z=(y==0))

x=5;

x=4;

printf("\t%d\t%d\n" ,x,z);

if(x=z=y)  x=4;

printf("\t%d\t%d\n" ,x,z);

解析:变量y被初始化为-2,z被初始化为0。在if语句中,(z=y)y的值-2赋给z,并返回-2,因此(z=y)<0为真,所以x被赋值为4。z的值为-2。输出为4 -2,z=(y==0)会检查y是否等于0,由于y的值为-2,所以(y==0)为假,即0。因此,z被赋值为0,并且if语句的条件为假,所以不会执行x=5。接下来,x被明确赋值为4。输出为4 0,x=z=y会先将y的值-2赋给z,然后再将z的值-2赋给x。因此,xz现在都等于-2。然后,if(x=z=y)的结果为-2,这是一个非零值,所以条件为真,但由于x=4前面没有else,所以这个赋值不会执行。输出为-2 -2,

3编程题、

3.1 编写程序实现:服装店经营套服,也单件出售,若买的不少于50套,每套80元;不足50套的每套90元;只买上衣每件60元;只买裤子每条45元。输入所买上衣c和裤子t的件数,计算应付款m

#include <iostream>
using namespace std;
int main()
{int c,t;double m;//输入上衣和裤子的数量cout << "请输入购买上衣的数量: ";cin >> c;cout << "请输入购买裤子的数量: ";cin >> t;//根据输入计算应付款int suits=c<t?c:t;//计算可以组成多少套服int tops=c-suits;//计算剩余上衣数量int pants=t-suits;//计算剩余裤子数量if(suits>=50){//如果套服数量不少于50套,每套80元m=suits*80.0;}else{//如果套服数量不足50套,每套90元m=suits*90.0;}//加上剩余上衣和裤子的费用m+=tops*60.0;m+=pants*45.0;//输出应付款cout << "应付款为: " << m << "元" << endl;return 0;
}

结果:

4.思考题

4.1  下面是C语言中两种if语句判断方式。请问哪种写法更好?为什么?

     int n;

     if (n == 10) // 第一种判断方式

     if (10 == n) // 第二种判断方式

答:在C语言中,两种if语句的判断方式都是有效的,并且可以产生相同的结果。然而,从编程习惯和可读性的角度来看,通常推荐使用“常量在前,变量在后”的写法,即第二种判断方式 if(10==n)。因为:

  1. 防止误操作:将常量放在前面可以防止因为误输入赋值操作符(=)而导致的逻辑错误。例如,如果你不小心写成了 if (n = 10),这实际上是一个赋值操作,而不是比较操作,这将导致n被赋值为10,而条件判断始终为真。但如果使用 if (10 = n),编译器会立即报错,因为这个表达式是不合法的。
  2. 提高可读性:将常量放在前面是一种广泛接受的编程习惯,这有助于其他开发者更快地理解代码的逻辑。这种写法在C语言社区中更为常见。
  3. 一致性:保持代码风格的一致性对于维护代码的可读性和可维护性非常重要。如果你在一个项目中混合使用这两种写法,可能会使代码看起来混乱。

综上所述,虽然两种写法在功能上是等效的,但从避免错误和提高代码可读性的角度来看,推荐使用第二种判断方式 if(10==n)

4.2   思考一下,计算1+2+3+……+100的和,最优化的算法是? 编程实现

答:C++中,计算1到100的和的最优化算法是使用高斯求和公式,也被称为等差数列求和公式。这个公式是:S=n/2*(a1+an)其中,S 是和,n 是项数,a1 是第一项,an 是最后一项。对于1到100的序列,n=100a1=1an=100。将这些值代入公式,我们得到:S=100/2*(1+100)=50*101=5050

#include <iostream>
using namespace std;
int main()
{int n=100;//求和的总项数int a1 = 1;//首项a1的值int an = 100; //尾项an的值int sum = n/2 * (a1 + an);//高斯公式cout << "The sum of numbers from 1 to 100 is: " << sum << endl; return 0;
}

结果:

4.3   嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?

答:在程序末尾加一句while(1);

while(1)创建了一个无限循环,因为1在C语言中始终为真。printf语句会在每次循环迭代时执行,打印出一条消息。由于循环是无限的,所以return 0;语句永远不会被执行。

注意,无限循环可能会消耗大量的系统资源,因此在嵌入式系统中使用时需要格外小心。在大多数情况下,你应该在循环中添加一些条件来中断循环,或者提供一个退出循环的方法。

这篇关于2.12 分支、循环练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703436

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

校验码:奇偶校验,CRC循环冗余校验,海明校验码

文章目录 奇偶校验码CRC循环冗余校验码海明校验码 奇偶校验码 码距:任何一种编码都由许多码字构成,任意两个码字之间最少变化的二进制位数就称为数据检验码的码距。 奇偶校验码的编码方法是:由若干位有效信息(如一个字节),再加上一个二进制位(校验位)组成校验码。 奇校验:整个校验码中1的个数为奇数 偶校验:整个校验码中1的个数为偶数 奇偶校验,可检测1位(奇数位)的错误,不可纠错。

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

react笔记 8-17 属性绑定 class绑定 引入图片 循环遍历

1、绑定属性 constructor(){super()this.state={name:"张三",title:'我是一个title'}}render() {return (<div><div>aaaaaaa{this.state.name}<div title={this.state.title}>我是一个title</div></div></div>)} 绑定属性直接使用花括号{}   注

如何快速练习键盘盲打

盲打是指在不看键盘的情况下进行打字,这样可以显著提高打字速度和效率。以下是一些练习盲打的方法: 熟悉键盘布局:首先,你需要熟悉键盘上的字母和符号的位置。可以通过键盘图或者键盘贴纸来帮助记忆。 使用在线打字练习工具:有许多在线的打字练习网站,如Typing.com、10FastFingers等,它们提供了不同难度的练习和测试。 练习基本键位:先从学习手指放在键盘上的“家位”开始,通常是左手的