《C和指针》第七章书后编程

在这里插入图片描述
在这里插入图片描述

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

int hermite(int n,int x)
{
    if(n<=0) return 1;
    else if(n==1) return 2*x;
    else return 2*x*hermite(n-1,x)-2*(n-1)*hermite(n-2,x);
}
int main()
{
    int n,x;
    n=3;
    x=2;
    printf("%d",hermite(n,x));
    return 0;
}

在这里插入图片描述

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

int gcd(int m,int n)
{
    if(m <= 0 || n <= 0)
        return 0;
    if(m % n ==0)
        return n;
    else
        return gcd(n,m%n);
}
int main()
{
    int m,n;
    m=99;
    n=77;
    printf("%d",gcd(m,n));
    return 0;
}

在这里插入图片描述

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

int ascii_to_integer(char *string)
{
    int res=0;
    while(*string != '\0')
    {
        if(*string < '0' || *string > '9')
            return 0;
        else
        {
            res = res * 10 + *string - '0';
        }
        string++;
    }
    return res;
}
int main()
{
    char str[]="4342121";
    puts(str);
    printf("%d",ascii_to_integer(str));
    return 0;
}

在这里插入图片描述

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

int max_list(int first,...)
{
    va_list var_arg;
    int max=first,temp;

    va_start(var_arg,first);
    while((temp=va_arg(var_arg,int))>=0)
    {
        if(temp>max)
            max=temp;
    }
    va_end(var_arg);
    return max;
}
int main()
{
    printf("%d",max_list(1,2,101,56,54,3,6,-1));
    return 0;
}

在这里插入图片描述

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

void my_printf(char *format,...)
{
    va_list arg;
    char ch;
    char *str;

    va_start(arg,format);

    while((ch = *format++) != '\0')
    {
        //遇到普通字符直接输出
        if(ch != '%')
        {
            putchar(ch);
            continue;
        }

        //遇到格式码,根据格式码读取后面的参数
        switch(*format != '\0' ? *format++ : '\0')
        {
            case 'd':
                //pritn_integer(va_arg(arg,int));
                printf("%d",va_arg(arg,int));
                break;
            case 'f':
                //print_float(va_arg(arg,float));
                printf("%f",(float)va_arg(arg,double));
                break;
            case 'c':
                putchar(va_arg(arg,int));
                break;
            case 's':
                str=va_arg(arg,char *);
                while(*str!='\0')
                    putchar(*str++);
                break;
        }
    }
}

int main()
{
    int a=81;
    float b=3.14;
    char c='s';
    char *d="robot";
    my_printf("%d %f %c %s\n",a,b,c,d);
    return 0;
}

这里 float 型和 char 型在使用 va_arg 时指明的类型分别是 double 和 int,因为在看不到函数原型声明的参数类型时,会进行默认参数提升,具体见这篇文章
https://blog.csdn.net/qq_27833589/article/details/103218339

在这里插入图片描述

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

char *digits[]={"","ONE ","TWO ","THREE ","FOUR ","FIVE ","SIX ","SEVEN ","EIGHT ","NINE ","TEN ",
"ELEVEN ","TWELVE ","THIRTEEN ","FOURTEEN ","FIFTEEN ","SIXTEEN ","SEVENTEEN ","EIGHTEEN ","NINETEEN "};
char *tens[]={"","","TWENTY ","THIRTY ","FORTY ","FIFTY ","SIXTY ","SEVENTY ","EIGHTY ","NINETY "};
char *magnitudes[]={"","THOUSAND ","MILLION ","BILLION "};

void written_three(unsigned int amount,char *buffer,char **magnitudes)
{
    int value;
    value=amount/1000;
    if(value != 0)
        written_three(value,buffer,magnitudes+1);

    amount %= 1000;
    if(amount != 0)
    {
        value = amount / 100;
        if(value != 0)
        {
            strcat(buffer,digits[value]);
            strcat(buffer,"HUNDRED ");
            //printf("%s HUNDRED ",digits[value]);
        }
        value = amount % 100;
        if(value < 20)
            strcat(buffer,digits[value]);
            //printf("%s ",digits[value]);
        else
        {
            strcat(buffer,tens[value/10]);
            strcat(buffer,digits[value%10]);
            //printf("%s %s ",tens[value/10],digits[value%10]);
        }
        strcat(buffer,*magnitudes);
        //printf("%s ",*magnitudes);
    }
}
void written_amount(unsigned int amount, char *buffer)
{
    if(amount == 0)
        //printf("ZERO\n");
        strcpy(buffer,"ZERO");
    else
    {
        *buffer='\0';//一开始错误写成了 buffer='\0',这里把buffer赋为空字符串开始往后面添加字符串
        written_three(amount,buffer,magnitudes);
    }
}
int main()
{
    char buffer[500];
    written_amount(975034105,buffer);
    puts(buffer);
    return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值