C语言中的问题 新人 麻烦详细过程说明一下谢谢了 百钱买百鸡问题c语言
C语言新手问题~
因为数组是从第0个开始算的,所以删第N个应该是删a[n-1];有9个数,所以最后一个是a[8];所以
for(i=n;i<=10;i++)改成for(i=n-1;i<=8;i++);
希望对你有帮助。。。。
C语言 需要详细过程和流程图
第一个程序可以用你的思想(不过求各位数的时候可以用整除也可以用求余,我这里用的是整除)
第二个程序文件的关键还是求出各位数字(我用的是除10取余的方法,从最低位开始,依次取出该数的各位数字,然后用最低位充当最高位,按反序重新构成新的数)
流程图这里不好话,因为程序比较简单,你对照着画下就可以第一个主要是一个循环,一个判断
第二个只是单纯的一个循环而已。
代码如下:
#include
void print_flower()
{
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=(i-100*a)/10;
c=i-100*a-10*b;
if(i==a*a*a+b*b*b+c*c*c)
printf("%d ",i);
}
printf("\n");
}
int Test_num(int i)
{
for(int newnum=0,oldnum=i;oldnum;newnum=10*newnum+oldnum%10,oldnum=oldnum/10);
return newnum;
}
int main()
{
int i=12345;
print_flower();
printf("%d\n",Test_num(i));
return 0;
}
C语言Hanoi问题求解(要求解释)
move(int n,int x,int y,int z)
的意思就是 把n个盘子从x借助y移动到z
函数执行时 xyz分别对应abc
n=1 就不说了
当n大于一时
执行的是
move(n-1,x,z,y);
printf("%c-->%c\n",x,z);
把a上的一个圆盘直接移到c上;
此时已经完成了最下面的盘子的移动
目前的状态是 n-1个盘子在b上 一个在c上
a是空着的 下面要做的就是吧n-1个盘子
从b移动到c上(借助a)也就是下面的调用
move(n-1,y,x,z);
递归开始的确不好理解 你可以先试一下 n=2的时候 这个很好理解
然后是n=3的时候
这时 我们要把a上面最下面的一个盘子移动到c上的前提 是上面的2个盘子在b上
你可以找个函数来完成 那就是 move(2,a,c,b)(注意abc的顺序)
这个调用就是上面的n=2的过程
这时a上面最下边的盘子就很轻松的移动到c上了
剩下的工作是把 b上的2个盘子移动到c上 那就是调用 move(2,b,a,c)(注意abc的顺序)
在这个移动的过程中 c上面的那个最下边的盘子是不受影响的。
执行完这一步 就OK了。
同理 n=456... 都可以这么分析,明白原理就好了。
c语言新手求教几个问题: 1、a=a+7=c+b为什么语法错误?
你好!1、等号是赋值运算,这就意味着等号左边必须是被赋值的变量,显然a+7是表达式,而不是变量。
2、整形运算是只取整数部分的,你定义的c1,c2,c3均是整数,所以;c3=1.0/c2*c1;进行的是整形运算,那么只取整数部分就是0.
3、注意:在浮点型与整形等混合运算时,系统会将所有类型的数据转化成double型的来运算,然后把结果再根据需要赋给响应变量。
对于你的表达式,c是float的,所以最后结果是要被转化成float赋值给c。
4、逗号运算符,又称顺序求值运算符,但是要区分这个顺序,这里的顺序指的是表达式,逗号运算符使用形式是:表达式1,表达式2,......
这就是说逗号隔开的是表达式,那么对于i=(a=2*3,a*5),a+6;就可以理解了:i=(a=2*3,a*5)是一个表达式,a+6是另外一个表达式。