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

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(arg, int)));                 sptr += 2;                 break;             case 'f':                 print_float((va_arg(arg, double)));                 sptr += 2;                 break;             case 's':                 str = va_arg(arg, char *);                 while(*str != '\0'){                     putchar(*str++);                 }                 sptr += 2;                 break;             case 'c':                 putchar(va_arg(arg, int));                 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.", name, age, pi, mark); }

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 num, char* buffer){     if (num == 0){         return 0;     }     static char* basic_digits[] = {"", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "ELEVEN", "TWELVE", "THIRTEEN",      "FOURTEEN", "FIFTEEN", "SIXTEEN","SEVENTEEN", "EIGHTEEN" "NINETEEN"};     static char* ten_digits[] = {"", "", "TWENTY", "THIRTY", "FORTY", "FIFTY", "SIXTY", "SEVENTY", "EIGHTY", "NINETY"};     if (num /100){         strcat(buffer, basic_digits[num/100]);         strcat(buffer, " ");         strcat(buffer, "HUNDRED");         strcat(buffer, " ");     }     num = num % 100;     if (num < 20){         strcat(buffer, basic_digits[num]);         if (num != 0){             strcat(buffer, " ");         }        }     else{         int ten_num = num / 10;         num = num % 10;         strcat(buffer, ten_digits[ten_num]);         strcat(buffer, " ");         strcat(buffer, basic_digits[num]);         if (num != 0){             strcat(buffer, " ");         }     } }
void written_amount(unsigned int amount, char* buffer){     if(amount == 0){         strcat(buffer, "zero");         return;     }     static char* basic_element[] = {"", "THOUSAND", "MILLION", "BILLION"};     unsigned int div_num[100];     div_num_3(div_num, amount);     int len = div_num[0];     while (len){         num_to_word(div_num[len], buffer);         strcat(buffer, basic_element[len - 1]);         strcat(buffer, " ");         len--;     }
}
int main(){     unsigned int T = 0x12;     unsigned int num_array[100];     char buffer[] = "";     div_num_3(num_array, T);     printf("共有%d组数字\n", num_array[0]);     for (int i = 1; i <= num_array[0]; i++){         printf("第%d组数为:%d\n", i, num_array[i]);     }     written_amount(T, buffer);     printf("The num is: %s\n", buffer);     return 0; }

 

上一篇:ReentrantLock


下一篇:2021-03-15