c语言 第七章作业,C和指针 第七章 习题

7.1 hermite递归函数

int hermite(int n, int x)

{

if (n <= 0) {

return 1;

}

if (n == 1) {

return 2 * x;

}

return 2 * x * hermite(n - 1, x) - 2 * (n - 1) * hermite(n - 2, x);

}

7.2两个整型值M和N(m、n均大于0)的最大公约数计算公式:

gcd(M,N)

当M % N = 0;  N

当M % N =R, R > 0; gcd(N,R)

unsigned int gcd(unsigned int M, unsigned int N)

{

if (M % N == 0) {

return N;

}

unsigned int R;

R = M % N;

return gcd(N, R);

}

7.3 为原型编写函数定义,

int ascii_to_interger(char *string)

每遇到一位数,把当前总值乘以10,加上遇到的数。

int ascii_to_interger(char *string)

{

static total = 0;

int num = *string - ‘0‘;

//到达字符串末尾或遇到非法字符直接返回总计值

if (*string == ‘\0‘ || (*string - ‘0‘ > 9)) {

return total;

}

//每遇到一个数,把当前值乘以10,加上遇到的数

total = 10 * total + num;

//string右进一位

return ascii_to_interger(string + 1);

}

7.4  可变参数函数需要第一个参数必须为命名的确定参数。编写可变函数max_list求最大值。

#include

int max_list(int first_arg, ...)

{

//指向参数栈的指针

va_list va_arg;

//初始化指针

va_start (va_arg, first_arg);

int value = va_arg(va_arg, int);

int max = first_arg;

while (value > 0) {

if (max < value) {

max = value;

}

//循环取出值

value = va_arg(va_arg, int);

}

//将指针指向为NULL

va_end(va_arg);

return max;

}

7.5实现简化版本的printf函数,能够处理%d %f %s %c格式码,假设以及存在print_interger和print_float,其他的两个用putchar打印。

#include

#include

void print_integer(int integer)

{

printf("%d", integer);

}

void print_float(float floatNum)

{

printf("%f", floatNum);

}

//mini版printf只支持 %d %f %c %s

void mini_prinf(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;

}

//遇到%后面有格式符,进行判断类型,然后读取打印参数,每次跳2位包括% 和后面的格式码

switch (*(sPtr + 1)){

case ‘d‘:

print_integer(va_arg(arg, int));

sPtr += 2;

break;

case ‘f‘:

/*C语言中,调用一个不带原型声明的函数时:

调用者会对每个参数执行“默认实际参数提升(default argument promotions)”。

同时,对可变长参数列表超出最后一个有类型声明的形式参数之后的每一个实际参数,也将执行上述提升工作。*/

//所以这里写double

print_float(va_arg(arg, double));

sPtr += 2;

break;

case ‘c‘:

//字符也是小整型,直接当int取,char读出来

putchar(va_arg(arg, int));

sPtr += 2;

break;

case ‘s‘:

str = va_arg(arg, char *);

while (*str != ‘\0‘) {

putchar(*str++);

}

sPtr += 2;

break;

default:

sPtr += 2;

break;

}

}

}

整型提升:

——float类型的实际参数将提升到double

——char、short和相应的signed、

——unsigned类型的实际参数提升到int

——如果int不能存储原值,则提升到unsigned int

7.6 编写函数:

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

实现amount为16312,buffer中储存SIXTEEN THOUSAND THREE HUNDRED TEWLVE

原文:http://www.cnblogs.com/yangxunwu1992/p/5785502.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值