目录
2、输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数
3、输入一个年龄,>= 18岁就输出:成年,否则就输出:未成年
5、输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数
一、逻辑运算
(一)逻辑操作符
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跳出循环
博客内容仅供分享