【C程序设计教程实验】基础练习题(六)

代码一

//执行下列程序后,a和b的输出值分别是?
 
#include <stdio.h>
int main()
{
    
    
	int a=3,b=5,c;
	c=(a>b)? a++ :b--;
	printf("a=%d,b=%d,c=%d\n",a,b,c); //a=3,b=4,c=5 √
	
	return 0;	
 } 

输出为:

本题基础,答案显而易见呦!
在这里插入图片描述

代码二

//执行下列程序段后,x、y、z的值分别是?
#include <stdio.h>
int main()
{
    
    
	int x=10,y=20,z=30;
	if(x>y) z=x; x=y; y=z;
	
	printf("x=%d,y=%d,z=%d\n",x,y,z); //x=20,y=30,z=30 √ 
  	return 0;
  }  

注意到 if 语句判断后没有加花括号,那麽本题里面,由于x和y不满足if条件语句里面的判断,所以说z=x;不会执行。那么执行的是 x=y; y=z; 这两个语句。
在这里插入图片描述

代码三

//以下程序输出为?
#include <stdio.h>
int main()
{
    
    
	int a=5,b=0,c=0;
	if(a+b+c) printf("***\n"); else printf("$$$\n");
	// *** √ 
	return 0;
 }

输出:
满足 if 语句,即 if 中的条件为真,那么将会直接执行紧跟着 if 语句的打印语句,else后的语句不会执行,所以输出如下结果。
在这里插入图片描述

代码四

 //以下程序输出结果为?
#include <stdio.h>
int main()
{
    
    
	int m=5;
	if(m++>5) 	printf("%d\n",m); // 6
	else 	printf("%d\n",m--); 
	
	return 0;    
} 

结果显然:
在这里插入图片描述
接下来再测试一下:

//测试一下:
#include <stdio.h>
int main()
{
    
    
	int m=4; //这里把m改成4看一下。 
	if(m++>5) 	printf("%d\n",m); 
	else 	printf("%d\n",m--); //5。因为 m-- 是先使用后自减  
	
	printf("m=%d\n",m); //所以说这时m的值为4 
	return 0;    
} 

输入:结合注释里的内容以及上面的例子,可以理解。
在这里插入图片描述

代码五

//执行下列程序后,x的值为?
#include <stdio.h>
int main()
{
    
    
	int a=2,b=5,c=7,d=8;
	int x;
	
	if(a>b)   //不满足,所以直接执行下面else中的x=7 
		if(c>d) x=1;
		else if(a<c)
			if(b<d) x=2;
			else x=3;
		else x=6;
	else x=7;
	
	
	printf("x=%d\n",x);
	
	return 0;
 } 

这个小题主要是理解 if 和哪一个else相匹配。

在这里插入图片描述
可以再测试一下:

//测试 
 //执行下列程序后,x的值为?
#include <stdio.h>
int main()
{
    
    
	int a=2,b=5,c=7,d=8;
	int x;
	
	if(a<b)   //这里 修改为a<b。满足,故继续执行下面的第一个if 
		if(c>d) x=1; //不满足,所以继续执行下面的else-if判断语句   注意喔! 
		else if(a<c) //满足,所以执行下面的if语句 
			if(b<d) x=2; //满足,所以执行x=2。而后跳出循环 
			else x=3;
		else x=6;
	else x=7;
	
	
	printf("x=%d\n",x); //x=2
	
	return 0;
 } 

输出为:
在这里插入图片描述
分析一下:
在这里插入图片描述

代码六:switch、break、

 //运行下列程序,输出结果为?
#include <stdio.h>
int main()
{
    
    
	int x=1,a=0,b=0;
	switch(x){
    
    
		case 0: b++; // 0不满足。所以需要继续执行 
		case 1: a++; // 1。满足,所以执行a++,得到a的值为1 
		case 2:	a++; b++; //上一条语句中没有break,所以这条语句必定会执行 
						//所以a为2,b为1 
	}
	printf("a=%d,b=%d\n",a,b); // a=2,b=1 
	return 0;
   }

输出如下:
在这里插入图片描述
加上break,再测试一下:

//测试
#include <stdio.h>
int main()
{
    
    
	int x=1,a=0,b=0;
	switch(x){
    
    
		case 0: b++; // 0不满足。所以需要继续执行 
		case 1: a++;  break;// 1。满足,所以执行a++,得到a的值为1 
		case 2:	a++; b++; //上一条语句中有break,执行完之后直接跳出break;所以该条语句不执行。 
						//所以a为1,b为0(b仍然为原值) 
	}
	printf("a=%d,b=%d\n",a,b); // a=1,b=0 
	return 0;
   }    
   

输出:
见注释喔!
在这里插入图片描述
如果把上面的break改成continue,那么…则会报错!!!
┭┮﹏┭┮ ┭┮﹏┭┮ ┭┮﹏┭┮ ┭┮﹏┭┮ ┭┮﹏┭┮
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44731019/article/details/123676941
今日推荐