超级甲鱼粉 发表于 2019-11-15 00:02:16

c语言初学者

想打一个程序,输出由1,2,3,4组成的所有三位数,组成的数字不能重复。请问我打的程序错在哪里了,谢谢。
#include<stdio.h>

void main()

{
        int a, b, c;
        for(a = 1;a<=4;a++)
        {
                for(b = 1;b<=4;)
                {
                        if(b == a) goto tiaoyue1;
tiaoyue1: b = b + 1;
                        for(c = 1;c<=4;)
                        {
                                if( b == c || c == a) goto tiaoyue2;
                                printf("%d%d%d\n",a,b,c);
tiaoyue2: c = c + 1;
                        }
                }
        }
}

jackz007 发表于 2019-11-15 00:31:36

本帖最后由 jackz007 于 2019-11-15 01:13 编辑

      给你一个参考答案,你还是自己找出代码的问题吧。
#include <stdio.h>

int main(void)
{
      int a , b , c                                                ;
      for(a = 1 ; a <= 4 ; a ++) {
                for(b = 1 ; b <= 4 ; b ++) {
                        for(c = 1 ; c <= 4 ; c ++) {
                              if(a != b && a != c && b != c) {
                                        printf("%d%d%d\n" , a , b , c) ;
                              }
                        }
                }
      }
      return 0                                                       ;
}

倒戈卸甲 发表于 2019-11-15 23:56:17

本帖最后由 倒戈卸甲 于 2019-12-3 22:55 编辑

存在语法问题,在b=2及c=2时无限循环,没有离开循环的方案

liuyanxiong 发表于 2019-11-16 09:16:21

jackz007 发表于 2019-11-15 00:31
给你一个参考答案,你还是自己找出代码的问题吧。

大佬,问个问题:这样确实可以找到所有的数,但这样看的太费力,如果要一行5个三位数要怎么改?{:10_301:}

jackz007 发表于 2019-11-16 09:56:18

liuyanxiong 发表于 2019-11-16 09:16
大佬,问个问题:这样确实可以找到所有的数,但这样看的太费力,如果要一行5个三位数要怎么改?{:10_301: ...

#include <stdio.h>

int main(void)
{
      int a , b , c , d                                          ;
      for(d = 0 , a = 1 ; a <= 4 ; a ++) {
                for(b = 1 ; b <= 4 ; b ++) {
                        for(c = 1 ; c <= 4 ; c ++) {
                              if(a != b && a != c && b != c) {
                                        if(! (d % 5)) {
                                                if(d) printf("\n")   ;
                                                printf("\t")         ;
                                        } else {
                                                printf(" , ")      ;
                                        }
                                        printf("%d%d%d" , a , b , c) ;
                                        d ++                         ;
                              }
                        }
                }
      }
      return 0                                                   ;
}
    编译、运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
      123 , 124 , 132 , 134 , 142
      143 , 213 , 214 , 231 , 234
      241 , 243 , 312 , 314 , 321
      324 , 341 , 342 , 412 , 413
      421 , 423 , 431 , 432
C:\Bin>

liuyanxiong 发表于 2019-11-16 15:50:37

jackz007 发表于 2019-11-16 09:56
编译、运行实况:

能解释一下10到14行和17行代码的意思吗{:10_245:}{:10_245:}

jackz007 发表于 2019-11-16 16:17:19

liuyanxiong 发表于 2019-11-16 15:50
能解释一下10到14行和17行代码的意思吗

                                        if(! (d % 5)) {               // 如果已打印次数是 5 的整数倍
                                                if(d) printf("\n")   ;// 如果打印次数非零,输出一个回车符
                                                printf("\t")         ;// 行首打印一个水平制表符
                                        } else {                        // 否则,如果打印次数不是 5 的整数倍
                                                printf(" , ")      ;// 输出一个 ' , ' 作为项之间的分隔符
                                        }
                                        printf("%d%d%d" , a , b , c) ;// 正常输出要打印的三位数
                                        d ++                         ;// 打印次数计数增 1
页: [1]
查看完整版本: c语言初学者