几道简单的C语言题目

1.#include<stdio.h>
void main()
{ int x[4]={17,15,-21,9},i,d=0,c=11;
for(i=0;i<4;i++){
if ( x[i]>c ){
d=d+x[i];
c=x[i];
}
else d=d-c;
printf("%d#",d)
输出:17#0#-17#-34#
问题:为什么答案是这个呢?怎么计算出来的?

2. #include <stdio.h>
void main()
{ int a[4]={1,5,7,4},i,j,k,m;
for(i=0;i<3;i++)
{ k=a[3];
for(j=2;j>=0;j--)
a[j+1]=a[j];
a[0]=k;
for(m=0;m<4;m++)
printf("%2d",a[m]);
putchar('\n');
}
}
输出: 4157
7415
5741
问题:帮忙解释每个语句的作用和怎么得出这个答案的。谢谢啦。

3. 计算1!+2!+3!.....10!。

#include <stdio.h>
void main()
{
int i,n;
int s=0,y;
for(n=1; (2) ; n++){
y= (3) ;
for(i=1; i<=n; i++)
y*=i;
(4) s+=y;
}
printf("1!+2!+3!.....10!=%d\n",s);
}

(2) n<=10或n<11 (3) 0; (4)s+=y
问题:帮忙解释下这个程序,,横线上为什么这么填?谢谢啦。

1.#include<stdio.h>
void main()
{
int x[4]={17,15,-21,9},i,d=0,c=11;
for(i=0;i<4;i++)
{
if ( x[i]>c )
{
d=d+x[i];
c=x[i];
}
else d=d-c;
}
printf("%d#",d)
}
输出:17#0#-17#-34#
=============================
首先我们看for循环,第一次循环中,i == 0, x[i] == 17, c == 11,d == 0,if语句中,逻辑表达式的结果显然为真,执行if语句后的内容,即两个赋值操作,此后,d == 17, c == 17,格式化输出17#,然后i自增1,进入下一次循环;第二次循环中, i == 1, x[i] == 15, c == 17,d == 17,if语句中,逻辑表达式的结果显然为假,执行else语句后的内容,即一个赋值操作,此后,d == 0, c == 17,格式化输出0#,然后i自增1,进入下一次循环;第三次循环中, i == 2, x[i] == -21, c == 17,d == 0,if语句中,逻辑表达式的结果显然为假,执行else语句后的内容,即一个赋值操作,此后,d == -17, c == 17,格式化输出-17#,然后i自增1,进入下一次循环;第四次循环中, i == 3, x[i] == 9, c == 17,d == -17,if语句中,逻辑表达式的结果显然为假,执行else语句后的内容,即一个赋值操作,此后,d == -34, c == 17,格式化输出-34#,然后i自增1,此时 i == 4,i<4为假,循环结束,主函数结束。最终的输出结果是四次输出结果的累加,即17#0#-17#-34#。
2. #include <stdio.h>
void main()
{
int a[4]={1,5,7,4},i,j,k,m;
for(i=0;i<3;i++)
{
k=a[3];
for(j=2;j>=0;j--)
a[j+1]=a[j];
a[0]=k;
for(m=0;m<4;m++)
printf("%2d",a[m]);
putchar('\n');
}
}
输出: 4157
7415
5741
问题:帮忙解释每个语句的作用和怎么得出这个答案的。谢谢啦。
========================================
呃。。好难写。。嘛,我写简单一点
外圈循环第一次:
第一个是赋值语句,完毕后,k == 4,然后进入内圈循环,循环三次,分别将a[2]的值赋给a[3],a[1]的值赋给a[2],a[0]的值赋给a[1],此时整型数组中存放的值的状态是:1 1 5 7,再经过一个赋值语句,整型数组存放的值的状态变为:4 1 5 7,然后进入第二个内圈循环,这个循环是为输出准备的,按顺序输出a[0]~a[3],每次输出宽度为2,默认右对齐,即最后输出效果应该是: 4 1 5 7,输入转义字符'\n'换行。
此后进入第二次外圈循环,后面步骤类似就不写了,其实第一个内圈循环的作用只是改变数组内值的情况(从1 5 7 4到 4 1 5 7 到7 4 1 5到5 7 4 1),第二个内圈循环只是为了格式化输出改变后的数组状态。。
3. 计算1!+2!+3!.....10!。

#include <stdio.h>
void main()
{
int i,n;
int s=0,y;
for(n=1; (2) ; n++)
{
y= (3) ;
for(i=1; i<=n; i++)
y*=i;
(4) s+=y;
}
printf("1!+2!+3!.....10!=%d\n",s);
}

(2) n<=10或n<11 (3) 0; (4)s+=y
问题:帮忙解释下这个程序,,横线上为什么这么填?谢谢啦。
======================================
这是算阶乘的一个简单函数= =、
我需要算1到10的阶乘之和,首先要算出1的阶乘,然后是2的阶乘,and so on。。。
显然我要算10次,这就是为神马(2)中要填n <= 10或n < 11【这个不用我解释了吧。。汗一个】
一共循环10次,每次循环中,算出一个数的阶乘,这个数就是n。
重点来了,我们要如何算出n的阶乘呢?有点数学知识的人都知道,n的阶乘即是1*2*3*…*n,然后我可以明白的告诉你,(3)错了,y = 1才对,否则这货算出来的输出是0,因为y*=i;即y = y * i;如果y为0的话,它这辈子也别想变成其他的数,所以,(3)中应该填1。当n == 1时,内圈循环一次,y = y*i,即1,这便是1的阶乘,此后s = s+y,s记录下了第一个阶乘的值。。。然后n == 2,内圈循环两次,第一次, y = y*i,此时i = 1,所以赋值完毕后,y == 1,再一次y = y*i,此时i == 2,所以循环完最终结果得y是2的阶乘,然后再加到s里面去。。。以此类推,最后,算完收工,打印出s的值,即所求结果。

参考资料:自己写的,话说你分给太少了= =、

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-06
在第一个代码分析for循环:
程序首先执行for语句:i+1=0+0=1;
然后执行if:判断x[0]>d即17>15吗?是。
执行if语句块:d=d+x[0]=0+17=17;c=x[0]=17;
printf:17#;
再次返回到for循环:i+1=1+1=2;
If:判断x[1]>d即15>17?否;
执行else:d=d-c=17-17=0;
printf:0#;
后面的分析相同。希望对你有所帮助。
第2个回答  2011-06-06
1、第一次循环i=0,x[i]=17,c=11,满足x[i]>c,d=d+x[i]=17,c=x[i]=17,输出17#
第二次循环i=1,x[i]=15,c=17,不满足x[i]>c,d=d-c=17-17=0 输出0#
第三次循环i=2,x[i]=-21,c=17,不满足x[i]>c,d=d-c=-0-17=-17 输出-17#
第四次循环i=3,x[i]=9,c=17,不满足x[i]>c,d=d-c=-17-17=-34,输出-34#
第3个回答  2011-06-07

BCABBCCCBAACCADBBB

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网