| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1128 人关注过本帖, 1 人收藏
标题:初学c的练习题 有谁能帮我解释解释
只看楼主 加入收藏
martyxu
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2010-4-22
结帖率:71.43%
收藏(1)
已结贴  问题点数:20 回复次数:10 
初学c的练习题 有谁能帮我解释解释
练习题1
制作一个输入十六进制显示10进制的程序

Q:\hello> inputhex         

Input Hex? 3E8            
Answer: 1000
要求:必须使用如下实例进行改进(也就是说必须使用getchar语句 不能用scanf)
实例:
#include <stdio.h>

main()
{
    int number;
    int ch;

    printf("input?");
   
    number=0;
    ch=getchar();
    while (ch!='\n') {
        if ('0'<=ch&&ch<='9') {
            number=number*10;
            number=number+(ch-'0');
        }
        ch=getchar();
    }

    printf("your input number is %d\n",number);
}



搜索更多相关主题的帖子: 练习题 初学 解释 
2010-06-28 09:59
martyxu
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2010-4-22
收藏
得分:0 
自己顶一下
请老师们帮帮忙

2010-06-28 10:33
pbreak
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:83
专家分:558
注 册:2007-5-10
收藏
得分:0 
这段代码看行不:
long nThRoot(const int root, int power)
{
    if(power == 0)
        return 1;
    long values = root;
    while(power > 1 )
    {
        --power;
        values  = values * root;
    }
    return values;
}

int main(int argc, char* argv[])
{
    int number;
    int ch;
    int len = 0;   
    printf("input?");   
    number=0;
    ch=getchar();
    len = stdin->_cnt;
    while (ch!='\n') {
       if ('0'<=ch&&ch<='9') {
            number=number+(ch -'0') * nThRoot(16,(--len));
       }
       else if('a'<= ch && ch <= 'f')
       {
            number=number+((ch -'a') + 10) * nThRoot(16,(--len));
       }
       else if('A' <= ch && ch <= 'F')
       {

           number=number+((ch -'A') + 10) * nThRoot(16,(--len));
       }
       else
       {
           printf("this a invalid number!!\n");
           return 0;
       }
        ch=getchar();
    }   
    printf("your input number is %d\n",number);
    return 0;
}


[ 本帖最后由 pbreak 于 2010-6-28 13:10 编辑 ]
2010-06-28 12:55
aitajiujiage
Rank: 2
等 级:论坛游民
帖 子:21
专家分:34
注 册:2010-5-10
收藏
得分:0 
我这有一个输入10进制输出任何进制的源程序,你看能否解你的燃眉之急:
#define Maxsize 100
#define NULL 0
#define FALSE 0;
#include<stdio.h>
typedef int datatype;
typedef struct
{int stack[Maxsize];
    int top;
}seqstack;
seqstack *initstack()
{seqstack *S;
    S=(seqstack *)malloc(sizeof(seqstack));
    if(!S)
    {printf("空间不足\n");
    return NULL;
    }
    else
    {S->top=-1;
    return S;
    }
}
seqstack *push(seqstack *S,int x)
{if(S->top==Maxsize-1)
    {printf("栈已满\n");
    return NULL;
    }
    else
    {S->top++;
        S->stack[S->top]=x;
        return S;
    }
}
int stackempty(seqstack *S)
{if(S->top==-1)
    return 1;
    else
    return 0;
}
int  pop(seqstack *S)
{int t;
    if(S->top==-1)
    {printf("栈为空\n");
        return FALSE;
    }
    else
    {S->top--;
        t=S->stack[S->top+1];
        return t;
    }
}
void conversion(int N,int r)
{int x=N,y=r;
    seqstack *S;
    S=initstack();
    while(N!=0)
    {push(S,N%r);
        N=N/r;
    }
    printf("\n十进制的数%d所对应的%d进制数为:\n",x,y);
    while(!stackempty(S))
    printf("%d",pop(S));
    printf("\n");
}
main()
{int a,b;
    clrscr();
    printf("请您输入待转换的十进制数和待转换的进制:\n");
    scanf("%d%d",&a,&b);
    conversion(a,b);
    printf("按任意键以继续!\n");
    getch();
    return main();
    }

   
2010-06-28 13:20
liu1987lang
Rank: 2
等 级:论坛游民
帖 子:42
专家分:44
注 册:2007-4-22
收藏
得分:0 
#include <stdio.h>
int power(int base,int pow);
int _tmain(int argc, _TCHAR* argv[])
{
    int number[100],i = 0,sum=0;
    int ch;
    printf("input?");
    ch=getchar();
    while (ch!='\n') {
        switch(ch)
        {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':number[i++]=ch-'0';break;
        case 'A':number[i++]=10;break;
        case 'B':number[i++]=11;break;
        case 'C':number[i++]=12;break;
        case 'D':number[i++]=13;break;
        case 'E':number[i++]=14;break;
        case 'F':number[i++]=15;break;
        }
        ch=getchar();
    }
   
    for(int j=i-1;j>=0;j--)
    {
        sum+=number[j]*power(16,i-j-1);
    }
    printf("your input number is %d\n",sum);
    return 0;
}

int power(int base,int pow)//求16的n次方
{
    if(pow==0)
        return 1;
    else
        return power(base,pow-1)*base;
}
看看合要求不
2010-06-28 14:47
灯、、
Rank: 4
等 级:业余侠客
威 望:2
帖 子:142
专家分:288
注 册:2010-6-21
收藏
得分:0 
以下是引用aitajiujiage在2010-6-28 13:20:29的发言:

我这有一个输入10进制输出任何进制的源程序,你看能否解你的燃眉之急:
#define Maxsize 100
#define NULL 0
#define FALSE 0;
#include
typedef int datatype;
typedef struct
{int stack[Maxsize];
    int top;
}seqstack;
seqstack *initstack()
{seqstack *S;
    S=(seqstack *)malloc(sizeof(seqstack));
    if(!S)
    {printf("空间不足\n");
    return NULL;
    }
    else
    {S->top=-1;
    return S;
    }
}
seqstack *push(seqstack *S,int x)
{if(S->top==Maxsize-1)
    {printf("栈已满\n");
    return NULL;
    }
    else
    {S->top++;
        S->stack[S->top]=x;
        return S;
    }
}
int stackempty(seqstack *S)
{if(S->top==-1)
    return 1;
    else
    return 0;
}
int  pop(seqstack *S)
{int t;
    if(S->top==-1)
    {printf("栈为空\n");
        return FALSE;
    }
    else
    {S->top--;
        t=S->stack[S->top+1];
        return t;
    }
}
void conversion(int N,int r)
{int x=N,y=r;
    seqstack *S;
    S=initstack();
    while(N!=0)
    {push(S,N%r);
        N=N/r;
    }
    printf("\n十进制的数%d所对应的%d进制数为:\n",x,y);
    while(!stackempty(S))
    printf("%d",pop(S));
    printf("\n");
}
main()
{int a,b;
    clrscr();
    printf("请您输入待转换的十进制数和待转换的进制:\n");
    scanf("%d%d",&a,&b);
    conversion(a,b);
    printf("按任意键以继续!\n");
    getch();
    return main();
    }

   
这个程序根本运行不了啊,错误太多
2010-06-28 15:58
aitajiujiage
Rank: 2
等 级:论坛游民
帖 子:21
专家分:34
注 册:2010-5-10
收藏
得分:0 
回复 6楼 灯、、
你是在哪里运行出现错误的?
2010-06-28 17:18
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
呵呵,你看看我这有代码,很不错哦
#include <stdio.h>
void main()
{
    int x,y;
    printf("No.1:Input a Decimal number,"
        "Output a Decimal number:\n Input a Decimal:\n");
    scanf("%d",&x);
    printf("The Decimal Number is:%d\n",x);
    printf("No.2:Input an Octal number,"
        "Output a Decimal number:\n Input a Octal:\n ");
    scanf("%o",&x);
    printf("The Decimal Number is:%d\n",x);
    printf("No.3:Input a Decimal number,"
    "Output a Hexadecimal number:\n Input a Decimal:\n");
        scanf("%d",&x);
    printf("The Hexadecimal Number is :%x\n",x);
    x=100;y=050;
    printf("(1)%d,(2)%o,(3)%x\n",x+y,x+y,x+y);
   
    /*其中,“Octal number”、“Decimal Number”和“Hexadecimal number”分别表示八进制数、十进制数和十六进制数*/
}

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-06-29 13:04
bitterain
Rank: 2
等 级:论坛游民
帖 子:19
专家分:70
注 册:2009-11-13
收藏
得分:20 
#include <stdio.h>

int main()
{
    int number;
    int ch;

    printf("input Hex?");
   
    number=0;
    ch=getchar();
    while (ch!='\n') {
        if ('0'<=ch&&ch<='9') {
           number=number * 16+(ch-'0');
        }
        if('a'<=ch&&ch<='e'){
            number=number*16 +(ch-'a'+10);
        }
        if('A'<=ch&&ch<='E'){
            number=number*16 +(ch-'A'+10);
        }
        ch=getchar();
    }

    printf("Answer: %d\n",number);
    return 0;
}
这个就是按照要求改写好的,可以运行,结果正确。但是要注意输入的十六进制数据各位数字必须是0~9、A(a)、B(b)、C(c)、D(d)、E(e),程序当中没有对输入的其他字符进行判断。
2010-06-29 13:38
pykuyuan
Rank: 2
等 级:论坛游民
帖 子:46
专家分:34
注 册:2009-6-26
收藏
得分:0 
#include <stdio.h>

void main()
{
    int number;
    int ch;

    printf("input?");
   
    number=0;
    ch=getchar();
    while (ch!='\n')
    {
        if ('0'<=ch&&ch<='9')
        {
            number=number * 16+(ch-'0');
        }
        else
             if(('a'<=ch&&ch<='e')||('A'<=ch&&ch<='E'))
             {
                number=number*16 +(ch-'a'+10);
             }
        ch=getchar();
    }

    printf("your input number is %d\n",number);
    return 0;
}这个哪里出错了呢?  我输入1  输出49

[ 本帖最后由 pykuyuan 于 2010-6-29 15:15 编辑 ]

逐渐变黑
2010-06-29 15:06
快速回复:初学c的练习题 有谁能帮我解释解释
数据加载中...
 
   



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

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