4 逻辑运算 、分支和循环 的练习

目录

一、逻辑运算

(一)逻辑操作符

        1、闰年的判断

        2、短路求值

(二)条件操作符

        1、使用条件操作符表示下面代码的逻辑

        2、使用条件表达式实现:输入两个数,找两个数中较大值并输出

二、分支

(一)if 语句

        1、输入一个整数,判断是否为奇数

        2、输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数

        3、输入一个年龄,>= 18岁就输出:成年,否则就输出:未成年

        4、要求输入一个整数,判断输⼊的整数是0,还是正数或者负数

        5、输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数

        6、年龄分段判断输出

(二)switch 语句

        1、输入任意⼀个整数值,计算除3之后的余数

        2、打印星期

        3、判断打印"工作日"或"休息日"

三、循环

(一)while 循环

        1、在屏幕上打印 1~10 的值

        2、逆序打印整数

(二)for 循环

        1、在屏幕上打印1~10的值

        2、计算1~100之间3的倍数的数字之和

(三)do...while 循环

        1、在屏幕上打印1~10的值

        2、计算整数的位数

(四)嵌套循环

        1、找出100~200之间的素数,并打印在屏幕上        

四、综合题

(一)写一个猜数字游戏

        1、rand()函数

        2、srand()函数

        3、time()函数

五、有意思的点

(一)生成随机 a~b 之间的数的方法

(二)结束循环的方法


一、逻辑运算

(一)逻辑操作符

        1、闰年的判断

                输入一个年份year,判断year是否是闰年

                闰年判断的规则:① 能被4整除并且不能被100整除是闰年

                                             ② 能被400整除是闰年

        答案:

#include<stdio.h>

int main()
{
	printf("请输入一个年份,判断是否为闰年:\n");
	int year = 0;
	scanf("%d", &year);

	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
		printf("您输入的:%d 年为闰年", year);
	else
		printf("您输入的:%d 年不是闰年", year);

	return 0;
}

        

        2、短路求值

        阅读代码,计算代码输出的结果(可自行改变变量值来自己测试)

#include <stdio.h>

int main()
{
    int i = 0,a=0,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    //i = a++||++b||d++;
    printf("i = %d\n a = %d\n b = %d\n c = %d\nd = %d\n", i, a, b, c, d);

    return 0;
}

        答案:输出 i = 0, a = 1, b = 2, c = 3, d = 4

(二)条件操作符

        1、使用条件操作符表示下面代码的逻辑

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    scanf("%d", &a);
    if (a > 5)
        b = 3;
    else
        b = -3;
    printf("%d\n", b);

    return 0;
}

        答案:

#include <stdio.h>

int main()
{
	int a = 0;
	int b = 0;
	printf("输入a的值:\n");
	scanf("%d", &a);

	b = a > 5 ? 3 : -3;
	printf("b的值为:%d\n", b);

	return 0;
}

        2、使用条件表达式实现:输入两个数,找两个数中较大值并输出

        答案:

#include<stdio.h>

int main()
{
	int a = 0;
	int b = 0;
	printf("请输入a与b的值:");
	scanf("%d %d", &a, &b);
	int c = a > b ? a : b;
	printf("最大值为:%d", c);

	return 0;
}

二、分支

(一)if 语句

        1、输入一个整数,判断是否为奇数

        答案:

#include<stdio.h>

int main()
{
	int a = 0;
	printf("请输入一个数,进行奇数判断\n");
	scanf("%d", &a);
	if (a % 2 != 0)
		printf("您输入的数为奇数");

	return 0;
}

        2、输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数

        答案:

#include<stdio.h>

int main()
{
	int a = 0;
	printf("请输入一个数,进行奇数判断\n");
	scanf("%d", &a);
	if (a % 2 != 0)
		printf("您输入的数为奇数");
	else
		printf("您输入的数为偶数");

	return 0;
}

        3、输入一个年龄,>= 18岁就输出:成年,否则就输出:未成年

        答案:

#include<stdio.h>

int main()
{
	int age = 0;
	printf("请输入一个年龄\n");
	scanf("%d", &age);
	if (age >= 18)
		printf("成年");
	else
		printf("未成年");

	return 0;
}

        4、要求输入一个整数,判断输⼊的整数是0,还是正数或者负数

        答案:

#include<stdio.h>

int main()
{
	int a = 0;
	printf("请输入一个数\n");
	scanf("%d", &a);
	if (a > 0)
		printf("您输入的数为正数");
	else if(a < 0)
		printf("您输入的数为负数");
	else 
		printf("您输入的数为0");

	return 0;
}

        5、输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数

        答案:

#include<stdio.h>

int main()
{
	int a = 0;
	printf("请输入一个数\n");
	scanf("%d", &a);
	if (a > 0)
	{
		if(a % 2 == 0)
			printf("您输入的数为偶数");
		else
			printf("您输入的数为奇数");
	}
	else 
		printf("非正数");

	return 0;
}

        6、年龄分段判断输出

                {

                输入一个人的年龄

                如果年龄<18岁,打印"少年"

                如果年龄在18岁至44岁打印"青年"

                如果年龄在45岁至59岁打印"中老年"

                如果年龄在60岁至89岁打印"老年"

                如果90岁及以上打印"老寿星"

                }

        答案:

#include<stdio.h>

int main()
{
	int a = 0;
	printf("请输入一个年龄\n");
	scanf("%d", &a);
	if (a < 18)
		printf("少年");
	else if (a < 45)
		printf("青年");
	else if (a < 60)
		printf("中老年");
	else if (a < 90)
		printf("老年");
	else
		printf("老寿星");

	return 0;
}

(二)switch 语句

        1、输入任意⼀个整数值,计算除3之后的余数

        tip:余数一定比除数小

        答案:

#include<stdio.h>

int main()
{
	int a = 0;
	printf("请输入一个数:\n");
	scanf("%d", &a);

	switch (a % 3)
	{
		case 0:
			printf("除3之后的余数为:0\n");
			break;
		case 1:
			printf("除3之后的余数为:1\n");
			break;
		case 2:
			printf("除3之后的余数为:2\n");
			break;
	}
		
	return 0;
}

        错点:

                switch后不加【大括号 { } 】,只能使用一个case,所以记得加;

                break也绝对不能忘记

                

        2、打印星期

                {

                输入一个1~7的数字,打印对应的星期几

                如果 day 的输入不是1~7的值,如果我们要提示:输入错误

                例如:

                输入:1  输出:星期一

                输入:2  输出:星期二

                输入:3  输出:星期三

                . . .

                }

        答案:

#include<stdio.h>

int main()
{
	int day = 0;
	printf("请输入1至7的数:\n");
	scanf("%d", &day);

	switch (day)
	{
	case 1:
		printf("星期一\n");
		break;
	case 2:
		printf("星期二\n");
		break;
	case 3:
		printf("星期三\n");
		break;
	case 4:
		printf("星期四\n");
		break;
	case 5:
		printf("星期五\n");
		break;
	case 6:
		printf("星期六\n");
		break;
	case 7:
		printf("星期日\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}

	return 0;
}

        3、判断打印"工作日"或"休息日"

                {

                输入1~5,输出的是“工作日”

                输入6~7,输出“休息日”

                }

        答案:

#include<stdio.h>

int main()
{
	int day = 0;
	printf("请输入1至7的数:\n");
	scanf("%d", &day);

	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("工作日\n");
		break;
	case 6:
	case 7:
		printf("休息日\n");
		break;
	default:
		printf("输入错误");
		break;
	}

	return 0;
}

三、循环

(一)while 循环

        1、在屏幕上打印 1~10 的值

        答案:

#include<stdio.h>

int main()
{
	int a = 1;
	while (a <= 10)
	{
		printf("%d ",a);
		a++;
	}
	return 0;
}

        2、逆序打印整数

                {

                输入一个正的整数,逆序打印这个整数的每一位

                例如:

                输入:1234,输出:4 3 2 1

                输入:521,输出:1 2 5

                }

        答案:

#include<stdio.h>

int main()
{
	int a = 0;
	printf("请输入一个正数:\n");
	scanf("%d", &a);
	
	while (a)
	{
		printf("%d ", a % 10);
		a /= 10;
	}
	
	return 0;
}

        tip:

                一个数%10,会得到最后一位;

                一个数/10,会少一位

(二)for 循环

        1、在屏幕上打印1~10的值

        答案:

int main()
{
	for (int a = 1; a <= 10; a++)
	{
		printf("%d ", a);
	}

	return 0;
}

        2、计算1~100之间3的倍数的数字之和

        答案:

#include<stdio.h>

int main()
{
	int total = 0;
	for (int a = 1; a <= 100; a++)
	{
		if (a % 3 == 0)
			total += a;
	}
	printf("%d\n", total);

	return 0;
}

(三)do...while 循环

        1、在屏幕上打印1~10的值

        答案:

#include<stdio.h>

int main()
{
	int a = 1;
	do
	{
		printf("%d ", a);
		a++;
	} 
	while (a <= 10);

	return 0;
}

        2、计算整数的位数

                {

                输入一个正整数,计算这个整数是几位数?

                例如:

                输入:1234 输出:4

                输入:12 输出:2

                }

        答案:

#include<stdio.h>

int main()
{
	int a = 0;
	int count = 0;
	printf("请输入一个正整数:\n");
	scanf("%d", &a);
	do
	{
		a /= 10;
		count++;
	} 
	while (a);
	printf("输入的数有%d位数", count);

	return 0;
}

(四)嵌套循环

                1、找出100~200之间的素数,并打印在屏幕上        

                        注:素数又称质数,只能被1和本身整除的数字。

         答案:

#include<stdio.h>

int main()
{
	for (int a = 100; a <= 200; a++)
	{
		int flag = 1;  //假设是素数
		for (int i = 2; i <= a - 1; i++)
		{
			if (a % i == 0)
			{
				flag = 0; //经过考验后改值:不是素数
			}
		}
        //中间这段看作是判断素数的过程
		if (flag == 1)
			printf("%d ", a);
	}

	return 0;
}

四、综合题

        

(一)写一个猜数字游戏

        游戏要求:

        1. 电脑自动生成1~100的随机数

        2. 玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束

        答案:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void menu()
{
	printf("***************************\n");
	printf("***** 输入 1 开始游戏 *****\n");
	printf("***** 输入 0 结束游戏 *****\n");
	printf("***************************\n");
}

void game()
{
	int guess = rand()%100 + 1;
	int b = 0;
	while (1)
	{
		printf("猜一个数:\n");
		scanf("%d", &b);
		if (b > guess)
			printf("猜大了\n");
		else if (b < guess)
			printf("猜小了\n");
		else 
		{
			printf("猜对了\n");
			break;
		}
	}
}

int main()
{
	srand((unsigned int)time(NULL)); 
	//利用不断变化的时间作为设置【随机函数种子】的函数参数
	//一次程序只设置一次就行,后面调用【随机函数rand()】都是不同的值

	int a = 0;
	//1.先写出游戏框架,不管3721,先打印出游戏菜单 do...while
	do
	{
		//2.打印菜单
		menu();
		//选择菜单
		printf("请选择:");
		scanf("%d", &a);
		//3.玩游戏
		switch (a)
		{
			case 1:
				game();
				break;
			case 0:
				printf("游戏结束");
				break;
			default:
				printf("选择错误,请重新选择");
				break;
		}
	} 
	while (a);

	return 0;
}

        

        相关函数分析:

        1、rand()函数

                生成随机数的函数 rand() ,使用包涵头文件stdlib.h,返回一个伪随机数,范围一般在0~32767之间;

                在本次程序运行时每次调用函数确实会生成随机数,但问题是【下一次程序运行时(再次从main函数开始)的返回值都和上次程序运行时每次调用函数的返回值一样】,因为 rand()函数是对“种子”的值进行运算得出来的,默认的“种子”值为1;

                简而言之:【本次程序的每次函数调用】的返回值确实不同,但【下一次程序运行的每次函数调用】的返回值和【上一次程序运行的每次函数调用】的返回值一模一样。

        2、srand()函数

                调用 rand()之前先用 srand()初始化设置“种子”的值参数是 unsigned int 类型(其他参数类型需要强制类型转换),“种子”不同,rand()的值才会不一样,如何得到不同的种子呢,需要一个不断变化的值就行了;

                疑问解决:只需设置一次srand()就行,因为在本次程序运行时每次调用函数确实会生成随机数,但因为参数是不断变化的,下一次程序运行时每次函数调用的返回值都不一样。

        3、time()函数

                时间是不断变化的,所以可以获得当下的时间来设置“种子”值,用一个函数 time(),返回值是时间戳(【当下时间】和【计算机起始时间】的一个差值),返回的类型是 time_t 类型,本质是整型,参数是指针类型,这次练习参数先写 null ; 使用 time 包涵头文件 time.h。
 

五、有意思的点

(一)生成随机 a~b 之间的数的方法

        生成随机 0~99 之间的数的方法  rand( )%100(余数一定比除数小);

        生成随机 1~100 之间的数的方法  rand( )%100+1(每个余数0~99都加1);

        生成随机 100~200 之间的数的方法  rand( )%100+1+100(每个余数1~100都加100);

        生成随机 a~b 之间的数的方法  a + rand( )%( b - a + 1 )
 

(二)结束循环的方法

        表达式不满足

        使用转向语句break 或 goto跳出循环


        

        博客内容仅供分享

  • 39
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值