简单c语言概念类题目.
题目一 四舍五入
要求:输入浮点型数字自动四舍五入 (如输入3.1 输出3)
// 因为转换规则内的精度参数可以直接帮我们自动四舍五入。
// 只需要在% f中间加上.0就可以了,这样表示精确到小数点后0位。
// 举一反三,假如说要精确到小数点后两位,那么就是 % .2f这样写,也就是在中间加上.2
#include <stdio.h>
int main() {
double d = 0;
scanf("%lf", &d);
printf("%.0f", d);
return 0;
}
题目二 输入年月日
要求:输入一串数字,输入的数字能自动在输出中分成年月日
(如 输入👉19790506 输出👉你的出生日期是1979年05月06日)
// 所以我们要提前准备好 存放年月日的三个变量 int a,b,c;而非单个的a
小知识点:通过 scanf 函数的 % n 格式(n是实数)控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据。
// { scanf("%4d%2d%2d", &a, &b, &c) ;
// 第一个四个数字,第二 三都是两个数字,所以是 %4 %2 %2 ;
// 输入完成 把他们放到a b c的地址 }
#include<stdio.h>
int main()
{
int a = 0,b = 0,c = 0;
scanf("%4d%2d%2d", &a,&b,&c);
printf("你的出生日期是%d年%d月%d日", a,b,c);
return 0;
}
你以为你对了?hhh
你会发现你输入的19790506,输出的结果中本该出现05月,而却是5月!!! 0呢?0呢??
————嘿嘿,知识点空缺了吧(没错就是作者大大我犯的错误QAQ )
小知识点: printf 函数的 % 0格式控制符,输出数值时指定左面不使用的空位置自动填0。
于是我恍然大悟需要这打印的时候做点什么
——👉 printf (" month =%02d\n", b);
int main()
{
int a = 0, b = 0, c = 0;
scanf("%4d%2d%2d", &a, &b, &c);
printf("你的出生日期是%d年%02d月%02d日", a, b, c);
return 0;
}
分支和循环类题目
题目一 猜数字游戏
首先,我们进入游戏,需要游戏菜单,所以需要一进入页面就显示的菜单,这里我用了do while循环结构,在do阶段先噶菜单
在菜单中,我们还需要游戏按钮选项,点击开始或退出,不同按钮触发我们用的是switch开关结构
开始游戏,猜数字需要 先系统生成随机数字,这里运用的是rand, srand, time的结构
// 这里记录下我de新知识点:
// ①头文件 :rand和srand <stdlib.h>
time<time.h>
// ②随机数运用形式 :(范围a到b的随机数)a + rand ( ) % ( b - a + 1 )
( 如:1-100的随机数: 1 + rand( )% 100 )
srand((unsigned int)time(NULL))
其次,猜数字猜大猜小,需要猜好几次,所以我们考虑用for/while循环
以下是我敲的代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game() //游戏单独调用函数
{
int r = rand() % 100 + 1;//这是随机数生成
int guess = 0;
int count = 7; //设置了机会次数
for(count=7;count<=7&&count>0;) //我用的for循环
{
printf("还剩下%d次机会", count);
printf("请输入你猜的数字:");
scanf("%d", &guess);
count--;
if (guess > r)
{
printf("猜大了\n");
}
else if (guess < r)
{
printf("猜小了\n");
}
else
{
printf("恭喜你猜对了!你真棒!\n");
break;
}
if (count == 0)
{
printf("很遗憾,在规定的时间你没猜出!输了吧!傻逼!!\n");
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL)); //随机数的srand只需调用一次,于是我放前面了
do //菜单放在do的位置
{
printf("***********************\n");
printf("*****1.开始游戏********\n");
printf("*****0.退出游戏********\n");
printf("***********************\n");
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game(); //游戏单独调用函数来作,这样代码没那么臃肿
break;
case 0:
printf("退出成功\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
题目二 求100-200的全部素数以及素数个数
![](https://i-blog.csdnimg.cn/blog_migrate/371203b538543bf5d72f3db67cf8fff6.png)
这题我犯了个错误,导致我运算的结果都只有素数个数等于0
各位看官能看出哪里错了嘛
(咳咳不信都看得出来 /固执 /自我安慰)
int main() 这是含错误的代码
{
int a = 0;//a是100-200内的数
int c = 0;//c是标记非素数的
int count = 0;
for (a = 100; a <= 200; a++)
{
int b = 0;
for (b = 2; b <= a - 1; b++) //是2到(素数-1)的数的范围
{
if (a % b == 0)
{
c = 1;
break;
}
}
if (c == 0)
{
count++;
printf("%d\n", a);
}
}
printf("count=%d", count);
return 0;
}
3
2
1
————公布答案啦
![](https://i-blog.csdnimg.cn/blog_migrate/f6959f4e72b3223a8d7b81c815e78eb4.png)
减肥法
这个得知道这个c是用来干嘛的,我后边标了注释,即c像个标记:
如果不是素数就变为0,是素数就保持1不变
假设第一次变成了0 只能代表当前的数字不为素数,所以下次循环的时候要重新初始化,再去判断下一个数是不是素数
要是放在外面,这个c就不管循环多少次都是0,没有意义了
(嘻嘻给自己讲的真好,夸夸~)