# include <stdio.h>
int main (void)
{
int x=17,y=4;
printf ("x除以y等于%f \n",x*1.0/y);
}(x+n-1)/n
我觉得如果把 hour = 11; minute = 59; 写成 hour = 11; minute = 59; 代码更美观易读易于接受。 变量声明亦是如此。
在printf中加入计算实际上是不符合结构化程序设计的。 很多情况下我们都不知道那个计算到底是在计算什么。 更好的方法是使用一个变量来保存计算结果。 之后再用printf输出这个变量的值。 建议添加这一点。
数学的魅力真是无穷呀,宋老师说的一点都没错
(x+n-1)/n=x/n+(n-1)/n 就是在原来结果的基础上加一个极限为1的小数,应该这么理解吧
这个。。。我怎么没看明白你的理解。。。 我觉得这个问题不需要从小数和极限来理解吧,就是一个整数问题。
如果输入的两个数字是30和2,那ceiling的结果就是15。可是如果按照(x+n-1)/n的算法那就是8了?。。。
上面那个写错了应该是16
我写的程序,宋老师帮忙看一下
#include <stdio.h>
#include <math.h>
int main(void)
{
float num1,num2;
float s1,s2,s3;
printf("Input the first number1:");
scanf("\n%f",&num1);
printf("\nInput the first number2:");
scanf("\n%f",&num2);
s1=(int)(num1/num2);
printf("\nS1=%f",s1);
s2=num1/num2;
printf("\nS1=%f",s2);
s3=s2-s1;
if (s3==0)
{
printf("\nRes is:%f",s2);
}
else printf("\nRes is:%f",s1+1);
}这样行不行?
#include <math.h>
#include <stdio.h>
int main(void) {
double x = 16, n = 4;
int res = ceil(x/n);
printf("%d", res);
return 0;
}楼上的程序我运行了一下,但由于有math.h头文件的存在,需要在编译时加上-lm选项,请问这是为什么呢?请不吝赐教!
老师帮忙看看我做的练习有没有做对。
各位也帮忙评评我做的有没有做对吧。谢谢。
[code]
#include <stdio.h>
int ReCeiling(int m)
{
//printf("%d",m);
return m;
}
int main()
{
float x=17,n=4,m;
int c;
m=x/n;
c=ReCeiling(m);
if(m>c)c=m+1;
printf("\nGet Ceiling is %d \n",c);
}
[/code]我是新手,这个题目有谁知道答案的发一下 给参考下好吗?
本来老师给了答案,我也不好说什么,上面发了很多代码的同学我估计老师再有耐心也不会看下去的 (x+n-1)/n可以很好实现要求
#include <stdio.h>
void main()
{
int first,second,result;
printf("first=");
scanf("%d",&first);
printf("second=");
scanf("%d",&second);
result = first*1.0/second > first/second ? first/second + 1 : first/second;
printf("result=%d\n",result);
}其实,这仅仅是一个初级的数学题,和C没有任何关系。 记得大学时有个老师说过: 计算机专业是1/4个数学专业。 由于中国计算机远远落后于英语国家,所以计算机专业也有1/4是英语专业。 但是如果想要达到一种高度的话,必须要以哲学的角度去考虑问题,所以计算机专业也含有1/4的哲学专业。 最后的1/4就是本身了。 不管他说得对不对,至少数学对于编程是非常重要的吧。
我是自己看的,现在好像刚懂了一点可是距离自己编程还差的远呢!
不认为(x+n-1)/n是很理想的答案。 无疑增加了代码的维护难度。
我想知道的是老师是怎么思考得到这个 (X+n-1)/n这个结果的,有哪位可以说一下这个思路吗??
Dear lingshiying here is one way to understand it if a % b = c, a / b = d, so a = b * d + c; if c >= 1 e = c + b -1;// e >= b so (a + b - 1) / b is ceiling
膜拜宋老师 哈哈 自己加油啊
的确是个单纯的数学问题,整数取模问题。
#include <stdio.h>
int main(void)
{
int x = 17, n = 4;
printf("Floor : %d\n",x/n);
printf("*** : %d\n",x%n);
printf("Ceiling : %d\n",x/n+x%n);
return 0;
}/* 1、假设变量x和n是两个正整数,我们知道x/n这个表达式的结果要取Floor,
* 例如x是17,n是4,则结果是4。如果希望结果取Ceiling应该怎么写表达式呢?
* 例如x是17,n是4,则结果是5;x是16,n是4,则结果是4。
*/
#include <stdio.h>
int ceiling(int dividend, int divisor);
int main (void)
{
int x, n;
x = 17;
n = 4;
printf ("%d\n", x / n);
printf ("%d\n", ceiling(x, n));
x = 16;
n = 4;
printf ("%d\n", ceiling(x, n));
x = 30;
n = 2;
printf ("%d\n", ceiling(x, n));
return 0;
}
int ceiling(int dividend, int divisor)
{
int v = 0, t = 0;
v = dividend % divisor;
if ( v != 0)
t = dividend / divisor + 1;
else
t = dividend / divisor;
return t;
}楼上的做法都把问题复杂化了,题目的要求是用一个表达式解决问题。 (x+n-1)/n就够了。 如果x/n正好除尽,n-1因为Floor被舍去; 如果x/n有余数,那么这个余数肯定大于等于1且小于n,于是这个多出来的部分加上n-1得出的值一定大于n且小于2n。相当于x/n + 1。 Bingo!问题解决!
(x+n-1)/n=x/n+1-1/n 情况1. x/n要么正好等于一个整数。 情况2. x/n要么等于一个整数加一个大于等于1/n的小数。 以上是数学分析 以下是c语言分析 由情况1.得:(x/n+1-1/n)表达式的值为x/n的商加1。因为1/n的值为0 由情况2.得:(x/n+1-1/n)表达式的值为x/n的整数部分加1。因为(一个大于等于1/n的小数减1/n)的值为0
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!