首页 > 其他 > 详细

C和指针 学习(二)第七章习题第五题、第六题

时间:2021-05-19 16:48:31      阅读:11      评论:0      收藏:0      [点我收藏+]

5、实现一个简化的printf函数 (假设已经有了print_integer和print_float)

注意:

1、满足printf的四种形式:%f %s %d %c

2、满足printf中可以输入任意参数的性质

3、熟练掌握指针技巧

 

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

void print_integer(int integer){
    printf("%d"integer);
}

void print_float(float f){
    printf("%f"f);
}

void easy_printf(char *format, ...){
    va_list arg;
    va_start(arg,format);
    char *sptr = format;
    char *str;
    float flt;
    while (*sptr != \0){
        if (*sptr != ‘%‘){
            putchar(*sptr++);
            continue;
        }
        if (*sptr == ‘%‘ && *(sptr+1) == ‘%‘){
            putchar(*sptr++);
            *sptr++;
            continue;
        }
        switch(*(sptr+1)){
            case ‘d‘:
                print_integer((va_arg(argint)));
                sptr += 2;
                break;
            case ‘f‘:
                print_float((va_arg(argdouble)));
                sptr += 2;
                break;
            case ‘s‘:
                str = va_arg(argchar *);
                while(*str != \0){
                    putchar(*str++);
                }
                sptr += 2;
                break;
            case ‘c‘:
                putchar(va_arg(argint));
                sptr += 2;
                break;
            default:
                sptr += 2;
                break;
        }
    }
    va_end(arg);
}

int main(){
    char *name = "Peter";
    int age = 26;
    double pi = 3.14;
    char mark = ‘Y‘;
    mini_printf("My name is %s. I am %d years old. The value of pi is %f. The answer is %c."nameagepimark);
}

6、编写如下函数:

void written_amount(unsigned int amount, char* buffer);

它把amount表示的值转换为单词形式。

 

注意:

1、将数字根据英文分组,每3位一组;

2、将20以下的数字单独排出;

3、注意0;

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void div_num_3(unsigned int num_array[]unsigned int num){
    unsigned int div_num;
    int loc = 1;
    while(num){
        div_num = num % 1000;
        num = num / 1000;
        num_array[loc] = div_num;
        loc++;
    }
    num_array[0] = loc - 1;
}

int num_to_word(unsigned int numcharbuffer){
    if (num == 0){
        return 0;
    }
    static charbasic_digits[] = {"""ONE""TWO""THREE""FOUR""FIVE""SIX""SEVEN""EIGHT""NINE""TEN""ELEVEN""TWELVE""THIRTEEN"
    "FOURTEEN""FIFTEEN""SIXTEEN","SEVENTEEN""EIGHTEEN" "NINETEEN"};
    static charten_digits[] = {"""""TWENTY""THIRTY""FORTY""FIFTY""SIXTY""SEVENTY""EIGHTY""NINETY"};
    if (num /100){
        strcat(bufferbasic_digits[num/100]);
        strcat(buffer" ");
        strcat(buffer"HUNDRED");
        strcat(buffer" ");
    }
    num = num % 100;
    if (num < 20){
        strcat(bufferbasic_digits[num]);
        if (num != 0){
            strcat(buffer" ");
        }   
    }
    else{
        int ten_num = num / 10;
        num = num % 10;
        strcat(bufferten_digits[ten_num]);
        strcat(buffer" ");
        strcat(bufferbasic_digits[num]);
        if (num != 0){
            strcat(buffer" ");
        }
    }
}

void written_amount(unsigned int amountcharbuffer){
    if(amount == 0){
        strcat(buffer"zero");
        return;
    }
    static charbasic_element[] = {"""THOUSAND""MILLION""BILLION"};
    unsigned int div_num[100];
    div_num_3(div_numamount);
    int len = div_num[0];
    while (len){
        num_to_word(div_num[len], buffer);
        strcat(bufferbasic_element[len - 1]);
        strcat(buffer" ");
        len--;
    }

}

int main(){
    unsigned int T = 0x12;
    unsigned int num_array[100];
    char buffer[] = "";
    div_num_3(num_arrayT);
    printf("共有%d组数字\n"num_array[0]);
    for (int i = 1i <= num_array[0]; i++){
        printf("第%d组数为:%d\n"inum_array[i]);
    }
    written_amount(Tbuffer);
    printf("The num is: %s\n"buffer);
    return 0;
}

 

C和指针 学习(二)第七章习题第五题、第六题

原文:https://www.cnblogs.com/ELFTE/p/14784899.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!