标题:本人新手求大神给解释下这个代码中的问题,谢谢
只看楼主
myc53210
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-1-13
 问题点数:0 回复次数:4 
本人新手求大神给解释下这个代码中的问题,谢谢
#include <stdio.h>
#define false 0
#define true 1
typedef int bool;

int main(viod)
{

    bool digit_seen[10] = {0};    //最关键的问题 是怎么确定一个bool数组什么时候是真,什么时候是假
    int digit;
    long n;
   
    printf("enter a number:\n");
    scanf("%ld",&n);
   
    while(n > 0)
    {
        digit = n % 10;
        if(digit_seen[digit])      //数组初始为false,那么此处每个迭代都应该是false,这个break语句不是多次一举吗?
        break;
        digit_seen[digit] = true;    //这里把数组设为true意义何在?
        n /= 10;
    }
    if(n > 0)
        printf("有重复数位\n");        //请求各位大神详细说明 ,万分感谢
    else
        printf("没有重复数位\n");
   

    return 0;
   
}
搜索更多相关主题的帖子: 代码 int digit 数组 printf 
2019-01-13 22:26
了无此生
Rank: 3Rank: 3
来 自:粤地潮州
等 级:论坛游侠
威 望:3
帖 子:82
专家分:121
注 册:2018-11-14
得分:0 
程序代码:
#include <stdio.h>
#include <stdbool.h>

 
int main(void)
{

    bool digit_seen[10] = {0};    //当数组元素出现过一次时即为真 
    int digit;
    long n;
    
    printf("enter a number:\n");
    scanf("%ld",&n);
    
    while(n > 0)
    {
        digit = n % 10;
        if(digit_seen[digit])    //数组初始为false,当0~9出现第一次时,不会退出循环,但当某个数出现第二次时,则退出循环,此时n将大于0,即有重复数位
        break;
        digit_seen[digit] = true;    //为了让if语句判断是否出现第二次了 
        n /= 10;
    }
    if(n > 0) 
        printf("有重复数位\n");    
    else
        printf("没有重复数位\n");
    

    return 0;
    
} 


[此贴子已经被作者于2019-1-13 22:45编辑过]


睡不醒的学渣(^・ω・^ )
2019-01-13 22:44
myc53210
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-1-13
得分:0 
回复 2楼 了无此生
非常感谢,我消化一下,还有不懂的希望下次能多指导
2019-01-13 22:47
zzz
Rank: 1
等 级:新手上路
帖 子:44
专家分:8
注 册:2019-1-12
得分:0 
2019-01-15 22:14
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
得分:0 
#include <stdio.h>
#define false 0
#define true 1
typedef int bool;

int main(viod)
{

    bool digit_seen[10] = {0};    //最关键的问题 是怎么确定一个bool数组什么时候是真,什么时候是假 ------这是声明一个int类型(typedef int bool;)的含有10个元素名字为digit_seen的数组并都初始化为0
    int digit;
    long n;
   
    printf("enter a number:\n");
    scanf("%ld",&n);     //输入一个数并判断它是否有重复位,也就是这个数里有没有相同的数字,如232,就有相同的数字2,在个位和百位
   
    while(n > 0)
    {
        digit = n % 10;//做余运算,若输入232,那么digit=232%10=2,算出个位  (第一步)
        if(digit_seen[digit])      //数组初始为false,那么此处每个迭代都应该是false,这个break语句不是多次一举吗?----digit_seen[2]=0,所以这个不执行 (第二步)
        break;     //若digit_seen[digit]=1,则跳出循环 (第四步)
        digit_seen[digit] = true;    //这里把数组设为true意义何在? -------把digit_seen[2]赋值为1,原本是0(第三步)
        n /= 10;//这个除运算就是把个位剔除,n/=10  等同 n=n/10;所以n 若是232那么经过232/10后,n=23 (第五步),回到(第一步)

    }
    if(n > 0) //若有重复位,程序都会在(第四步)跳出循环,没有执行n/=10,因一个数总是(0-9)小于10,任何小余10又大于0的数 经过除运算后,都是等于0的,所以若在(第四步)跳出循环,那么最后一个数肯定大于0
        printf("有重复数位\n");        //请求各位大神详细说明 ,万分感谢
    else   //不是大于0,就是说明没有重复位
        printf("没有重复数位\n");
   

    return 0;
   
}


学C语言从底层开始,学编程从问题开始,一日学会C!!!
2019-01-17 16:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492672-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.304324 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved