注册 登录
编程论坛 C++教室

c语言初学求大神指导一下几个程序问题

luguolian 发布于 2013-07-26 19:42, 652 次点击
下面是这几天在家学习c的过程中遇到的几个问题,在这里请教一下大神
1.
#include<stdio.h>                    
void main()
{
    int x,i;
    for(i=1;i<=100;i++)
    {x=i;                                    
     if(++x%2==0)
         if(++x%3==0)
             if(++x%7==0)
                 printf("%4d",x);
             }
    printf("\n");
}
关于这个程序我不知道结果是怎么运算得到的?为什么结果是28和70这两个数值呢?  
2.
#include<stdio.h>
void main()
{
    int x=2;                 不懂,为什么结果是-1。主要是while里面那个表达式的意思不懂(应该不是自减那么简单吧?)
    while(x--);
    printf("%d\n",x);
}
3.#include<stdio.h>
void main()
{
    int i=0,sum=1;
    do                          
    {sum+=i++;}
    while(i<5);
    printf("%d\n",sum);
}
这个程序的结果为什么是11而不是17呢?对于sum+=i++我的理解是i先自增一次然后再求和。但是得到的结果不对!



4.#include <stdio.h>
void main()
{ int h10,h7,h5;
  for(h10=1; h10<8; h10++)
    for(h7=1;h7<8; h7++)
      for(h5=1; h5<8; h5++)
        if(h10+h7+h5==8 && h10*10+h7*7+h5*5==53)
          printf("h10=%d\th7=%d\th5=%d\n",h10,h7,h5);
   }
和下面的这个程序
#include<stdio.h>
void main()
{ int a,b,c;
  for(a=0;a<=5;a++)
   {for(b=0;b<=6;b++)
     {for(c=0;c<=10;c++)
       if(10*a+7*b+5*c==53&&a+b+c==8)
       printf("\t\n%d\t%d\t%d",a,b,c);
      }
    }
}
前面和后面的程序得到的结果是一样的。两个程序的差别就在于第二个和第三个for都被前面一个用大括号括起来了,我一直不理解一个程序中存在多个for语句时用括号和不用括号的区别!或者说我还是不太理解有多个for语句时候到底是怎么运算的?这个问题困扰了我很久!
6 回复
#2
love云彩2013-07-26 20:06
那么多,怎么解释呀
#3
TonyDeng2013-07-27 13:05
楼主还没有学会看程序流程的方法就整这种测试用代码
#4
luguolian2013-07-28 08:18
回复 3楼 TonyDeng
这个是我在学习C语言的时候遇到的几个不懂的程序!并不是都不懂,只是在一两个小地方实在是弄不出清楚是怎么运算的。所以发帖问问
#5
额外覆盖2013-07-28 16:43
以下是引用luguolian在2013-7-26 19:42:24的发言:

下面是这几天在家学习c的过程中遇到的几个问题,在这里请教一下大神
1.
#include                    
void main()
{
    int x,i;
    for(i=1;i<=100;i++)
    {x=i;                                    
     if(++x%2==0)//if判断语句  当括号内的值为真(就是非0)就执行接下来的语句 假就跳过
         if(++x%3==0)
             if(++x%7==0)
                 printf("%4d",x);
             }
    printf("\n");
}
关于这个程序我不知道结果是怎么运算得到的?为什么结果是28和70这两个数值呢?  
2.
#include
void main()
{
    int x=2;                 不懂,为什么结果是-1。主要是while里面那个表达式的意思不懂(应该不是自减那么简单吧?)
    while(x--);//while循环 括号内为判断是否继续的依据 为真继续循环  后置自减 先取值再自减
    printf("%d\n",x);
}
3.#include
void main()
{
    int i=0,sum=1;
    do                          
    {sum+=i++;}
    while(i<5);//do {}while();先执行一次再判断 为真则继续和while的区别就是先执行一次在判断 也就是不管真假都至少可以执行一次
    printf("%d\n",sum);
}
这个程序的结果为什么是11而不是17呢?对于sum+=i++我的理解是i先自增一次然后再求和。但是得到的结果不对!



4.#include
void main()
{ int h10,h7,h5;
  for(h10=1; h10<8; h10++)
    for(h7=1;h7<8; h7++)
      for(h5=1; h5<8; h5++)
        if(h10+h7+h5==8 && h10*10+h7*7+h5*5==53)
          printf("h10=%d\th7=%d\th5=%d\n",h10,h7,h5);
   }
和下面的这个程序
#include
void main()
{ int a,b,c;
  for(a=0;a<=5;a++)//for循环 每循环一次就执行一次括号内的语句  但你这里有无括号无区别  你可以去看看循环语句的嵌套
   {for(b=0;b<=6;b++)
     {for(c=0;c<=10;c++)
       if(10*a+7*b+5*c==53&&a+b+c==8)
       printf("\t\n%d\t%d\t%d",a,b,c);
      }
    }
}
前面和后面的程序得到的结果是一样的。两个程序的差别就在于第二个和第三个for都被前面一个用大括号括起来了,我一直不理解一个程序中存在多个for语句时用括号和不用括号的区别!或者说我还是不太理解有多个for语句时候到底是怎么运算的?这个问题困扰了我很久!

靠 之前写的全没了
怎么回事 引用时直接先在里面写了就点不出来了  发表时会“字节不够”  一返回之前写的全没了........我容易吗
楼主  你的基础语法不行啊  这几个循环以后会大量用的  自己一定要搞清楚
#6
luguolian2013-07-30 09:01
回复 5楼 额外覆盖
非常感谢你的回答,我是个初学者 为的就是今年9月23号的国二考试。听说C在国家计算机考试中算是比较难的我们学校也要求我们考,所以我就利用暑假的时间好好补习一下
#7
peach54602013-07-30 09:03
以下是引用luguolian在2013-7-30 09:01:51的发言:

非常感谢你的回答,我是个初学者 为的就是今年9月23号的国二考试。听说C在国家计算机考试中算是比较难的我们学校也要求我们考,所以我就利用暑假的时间好好补习一下

背会题库,包过
1