| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5800 人关注过本帖
标题:学写程序,先把《Hello,world!》写好
只看楼主 加入收藏
new335
Rank: 1
等 级:新手上路
帖 子:1
专家分:5
注 册:2011-8-1
收藏
得分:5 
才第一章看完。。。
能解出来不???
我看晕了
2011-08-02 10:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 72楼 new335
我不知道你第一章是什么内容,解这个最少要懂逐个字符输出(即会用putchar()函数)、数学运算(提取每一位数字)。

授人以渔,不授人以鱼。
2011-08-02 10:46
龙骑VS幽鬼
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2011-7-28
收藏
得分:0 
很高兴楼主能回帖,我再改改吧 。
2011-08-02 11:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
下面是我的参考代码
程序代码:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>

char* TransForm(char cBuffer[], int iVar);

void main(void)
{
    char cString[1024];

    // Hello,world!的翻版
    // 原先是这样写的
    // char cString[] = "Hello,world!";
    // 即printf("%s\n", cString);
    // 套上面的格式, 成下面这样, 这种套换方式, 是程序语言的基本用法
    printf("%s\n", TransForm(cString, 1234567));
    printf("%s\n", TransForm(cString, 0));
    printf("%s\n", TransForm(cString, -1234567));
    // 注意与下面变换对比:
    // printf("%d\n", 1234567);
    // 这样就可以猜到printf()内部的动作了

    // 如果要回避printf(), 可以
    // puts(TransForm(cString, 1234567));
    // 不妨比较前后两种版本(printf()版和puts()版)EXE文件的大小
}

char* TransForm(char cBuffer[], int iVar)
{
    int iCount;            // 千位计数器
    bool lNegative;        // 是否负数的标志
    char* p = cBuffer;    // 记录缓冲区的起始地址(p是动指针, cBuffer是不动的, 用于返回)

    if (iVar == 0)
    {
        // 如果传入的数值为0直接返回"0"
        *p++ = '0';        // 数组版本可写成cBuffer[0] = '0';
        *p = '\0';        // 数组版本可写成cBuffer[1] = '\0';
        return cBuffer;
    }

    lNegative = (iVar < 0);
    if (lNegative)
    {
        iVar = -iVar;    // 取正数计算
    }

    iCount = 0;
    while (iVar > 0)
    {
        if (iCount < 3)
        {
            iCount++;
        }
        else
        {
            *p++ = ',';
            iCount = 1;
        }
        *p++ = '0' + (iVar % 10);        // 数组版本应建立一个下标计数器写入数据
        iVar /= 10;
    }
    if (lNegative)        // 补回负数的标识
    {
        *p++ = '-';
    }
    *p = '\0';            // 字符串结束符

    return _strrev(cBuffer);    // 反转缓冲区之后返回
}
// 其实可以不返回缓冲区的地址, 改为返回字符串的字符数, 为0时失败.

授人以渔,不授人以鱼。
2011-08-02 13:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
重复帖清空内容

授人以渔,不授人以鱼。
2011-08-02 13:44
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
回复 72楼 new335
跟你基础 估计差不多 我也是看不懂代码 也不会写  难道有了代码 抄抄都不可以末?
#include <stdio.h>
#include <string.h>

char* TransForm(char cBuffer[], int iVar);

void main(void)
{
    char cString[1024];
    printf("%s\n", TransForm(cString, 1234567));
    printf("%s\n", TransForm(cString, 0));
    printf("%s\n", TransForm(cString, -1234567));
   
}
char* TransForm(char cBuffer[], int iVar)
{
    int iCount;            
    bool lNegative;        
    char* p = cBuffer;     

    if (iVar == 0)
    {
        
        *p++ = '0';        
        *p = '\0';        
        return cBuffer;
    }
    iCount = 0;
    while (iVar > 0)
    {
        if (iCount < 3)
        {
            iCount++;
        }
        else
        {
            *p++ = ',';
            iCount = 1;
        }
        *p++ = '0' + (iVar % 10);        
        iVar /= 10;
    }

    *p = '\0';            

    return _strrev(cBuffer);     
}
图片附件: 游客没有浏览图片的权限,请 登录注册

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-02 14:01
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct node NODE, * PNODE;
typedef const PNODE PCNODE;

struct node {
    char bits[4];
    PNODE next;
};

void *         check(void * p);
PCNODE         init_stack(void);
PCNODE         push(PNODE pTop, const char * bits);
const char *   pop(PNODE pTop);
int            is_empty(PCNODE pTop);
void           kill_stack(PNODE top);
char *         number_format(long num, char * buf);

void * check(void * p) {
    if(!p) {
        fprintf(stderr, "There's a error in program and then program will to exit.\n");
        system("pause");
        exit(1);
    }
    return p;
}

PCNODE init_stack(void) {
    PNODE pTop = (PNODE)malloc(sizeof(NODE));
    check(pTop);
    pTop->next = NULL;
    return pTop;
}

PCNODE push(PNODE pTop, const char * bits) {
    PNODE pNewNode = (PNODE)malloc(sizeof(NODE));
    check(pNewNode);

    strcpy(pNewNode->bits, bits);
    pNewNode->next = pTop->next;
    pTop->next = pNewNode;

    return pNewNode;
}

const char * pop(PNODE pTop, char * bits) {
    PNODE pTemp = pTop->next;

    if(is_empty(pTop))
        return NULL;

    strcpy(bits, pTemp->bits);
    pTop->next = pTemp->next;

    free(pTemp);
    return bits;
}

void kill_stack(PNODE pTop) {
    char buf[4];
    while(pop(pTop, buf))
        ;
    free(pTop);
}

int is_empty(PCNODE pTop) {
    return pTop->next == NULL;
}

char * number_format(long num, char * buf) {
    int             isNage = num < 0;
    char *          pTemp = buf;
    char            bits[4];
    PNODE           pTop = init_stack();
    unsigned long   temp = isNage ? ~(unsigned long)num + 1 : (unsigned long)num;

    while(temp) {
        sprintf(bits, "%d", temp % 1000);
        push(pTop, bits);
        temp /= 1000;
    }
    if(isNage) {
        strcpy(buf, "-");
        strcat(buf, pop(pTop, bits));
    } else
        strcpy(buf, pop(pTop, bits));
    while(pop(pTop, bits)) {
        strcat(buf, ",");
        strcat(buf, bits);
    }
    kill_stack(pTop);
    return buf;
}

int main(void) {
    char    fileName[128];
    char    buf[100];
    long    size;
    long    value;
    FILE *  fp;
   
    scanf("%s", fileName);
    check(fp = fopen(fileName, "rb"));
    fseek(fp, 0L, SEEK_END);
    size = ftell(fp);
    printf("Size of \"%s\" is %s bytes.\n", fileName, number_format(size, buf));

    scanf("%ld", &value);
    printf("%s\n", number_format(value, buf));

    system("pause");
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册


不知道您现在还满意不呢?

[ 本帖最后由 lz1091914999 于 2011-8-2 14:24 编辑 ]

My life is brilliant
2011-08-02 14:23
icysky
Rank: 5Rank: 5
来 自:心灵世界
等 级:职业侠客
威 望:1
帖 子:172
专家分:399
注 册:2011-5-17
收藏
得分:0 
十进制->BCD码->移位

不管怎么走、总有一个终点...
2011-08-02 14:27
淡定是罪
Rank: 2
等 级:论坛游民
帖 子:44
专家分:28
注 册:2011-3-23
收藏
得分:0 
有一些难度
2011-08-02 18:12
a9517495424
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:305
专家分:139
注 册:2011-7-20
收藏
得分:0 
回复 68楼 TonyDeng
呵~这个只是对付这种问题的权宜之法,大了不抵用。  我想用循环代替手工的,不过只有一点想法,还做不出来,也不知道能不能。
2011-08-02 19:28
快速回复:学写程序,先把《Hello,world!》写好
数据加载中...
 
   



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

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