BC39 牛牛的水杯
题目描述
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int h, r;
float a, b;
scanf("%d %d", &h, &r);
a = 10000 / (3.14 * h * r);
b = 10000.0 % (3.14 * h * r);
if (b == 0)
printf("%d", (int)a);
else
printf("%d", (int)a + 1);
return 0;
}
报错
犯了一个最基本的错误------%的用法
使用%求余数时,应当保证它的左右两侧的数都是整数
下面我们可以来复习一下%在C语言中常见的用法
%的常见用法
取余运算
使用时,记住:“%”两边均为整数。
但我们使用除法时,如果“/”两边,有一边是小数,则结果为小数,否则为整数。
作为C语言格式符的组成部分
常见的有:
占位符 | 作用 |
---|---|
%c | 字符 |
%s | 字符串 |
%d | 十进制的整数 |
%f | 小数 |
%与#相结合
可以使输出保留进制的前缀符号
代码示例
#include <stdio.h>
//%#再加上相应的前缀符号
int main()
{
int a = 014;
int b = 0xae;
printf("a1 = %o\n",a);
printf("a2 = %#o\n",a);
printf("b1 = %x\n",b);
printf("b2 = %#x\n",b);
return 0;
}
运行结果
%与*结合
说明:
(1)主要在 scanf( ) 函数起到了,跳过对应的输入的作用,使得%这次的输入跳过不被输入执行。
(2)在 printf( ) 函数中应用同理,会跳过对应的输出对象。
代码示例
#include <stdio.h>
int main()
{
int a = 100;
scanf("%*d",&a);//%*跳过了输入的数据
printf("a = %d\n",a);//仍然打印100
return 0;
}
运行结果
拓展了这么多知识,接下来回归这道题目本身
解题
解法一:
牛牛一杯一杯喝,则对应的变量一次一次加
//一杯一杯喝,d++
#include <stdio.h>
int main(void)
{
int h = 0, r = 0;
scanf("%d%d", &h, &r);
float v = h * 3.14 * r * r;
int c = 10000;
int d = 0;
while (c > 0)
{
c = c - v;
d++;
}
printf("%d", d);
return 0;
}
解法二:
用除法
第一种表达
#include <stdio.h>
int main()
{
int h, r, c;
scanf("%d%d", &h, &r);
float v = h * 3.14 * r * r;
c = (int)10000 / v;
if (c * v == 10000)
printf("%d\n", c);
else
printf("%d\n", c + 1);
return 0;
}
第二种表达
#include<stdio.h>
int main()
{
int h, r,c;
scanf("%d%d", &h, &r);
float v = h * 3.14 * r * r;
c = (int)10000 / v;
if(10000/v==c)
printf("%d\n", c);
else
printf("%d\n", c + 1);
return 0;
}
解法三(ceil):
用数学函数中的ceil
#include<math.h>
#include<stdio.h>
int main()
{
int h, r, c;
scanf("%d%d", &h, &r);
float v = h * 3.14 * r * r;
c = ceil(10000 / v);
printf("%d\n", c);
return 0;
}
拓展:ceil—计算不小于变量的最小整数值
定义
典型示例
#include <math.h>
#include <stdio.h>
int main(void)
{
printf("ceil(+2.4) = %+.1f\n", ceil(2.4));
printf("ceil(-2.4) = %+.1f\n", ceil(-2.4));
}
总结
不仅仅是会写这道题目了,并且我们也复习了“%”的常见用法和函数ceil的基本用法。
感谢大家观看,希望也能得到大家的一键三连。