您的位置:首页 > 编程语言 > C语言/C++

C和指针课后习题(第七章)

2014-05-08 15:47 239 查看
7.1

/*The Hermite Polynomials are defined as follows:
Write a recursive function to compute the
value of Hn(x). Your function should match this prototype:
int hermite( int n, int x );*/

#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;
printf("please input a n and x:\n");
scanf("%d%d",&n,&x);
printf("the result of hermite is %d\n",hermite(n,x));
return 0;
}


7.2

递归

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

int gcd(int m,int n)
{
int a,b;
int R;
if(m>n)
{
a = m;
b = n;
}
else
{
a = n;
b = m;
}
if(a<=0||b<=0)
return 0;
else if(0==a%b)
return (b);
else
{
R = a%b;
while(R>0)
{
a = b;
b = R;
return gcd(a,b);
}
}
}

int main()
{
int a,b;
printf("please input 2 numbers:\n");
scanf("%d%d",&a,&b);
printf("the result is %d\n",gcd(a,b));
return 0;
}


7.3

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAX_LEN 128

int ascii_to_integer(char *string)
{
int string_len = 0;
int number = 0;
int i=0;
//printf("string = %s\n",string);
//printf("hello world!\n");
while(string[i++]!='\0')
string_len++;
printf("the length of string is %d\n",string_len);
for(i=0;i<string_len;i++)
if(!isdigit(string[i]))
return 0;
else
number = number*10 + string[i]-'0';
printf("number is %d\n",number);
return number;
}
int main()
{
char *string;
//memset(string,0,10);
int k;
string = (char *)malloc(sizeof(char)*MAX_LEN);
memset(string,0,MAX_LEN);
printf("please input a string:");
scanf("%s",string);
printf("the input string is %s\n",string);
printf("the string means number is:\n ");
k = ascii_to_integer(string);
printf("%d\n",k);
return 0;
}


7.4

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
/*
说明:
本题目中没有表示长度的第一个参数,但是使用stdarg需要在列表前有一个参数。
解决方法:将列表的第一个元素 作为使用stdarg需要的第一个参数。
而且,由于列表以负数结尾,即如果第一个元素为负数时,表示列表中没有元素;
*/

int max_list( int first, ... );

int main(){
/* 测试max_list函数 */
int max = max_list(2, 4, 5, 6, 7, 1, -1);
printf("%d\n", max);

max = max_list(-1);
printf("%d\n", max);

max = max_list(2, -10);
printf("%d\n", max);

getchar();
return EXIT_SUCCESS;
}
int max_list( int first, ... ){
va_list arg;
int max; /* 用来保存结果 */
/* first为负数时,说明列表为空,返回0 */
if( first<0 ){
return 0;
}

/* 用va_start初始化arg, 第一个参数为va_list的名字,第二个为省略号前的最后一个变量 */
va_start( arg, first );

/* 寻找最大数 */
max = first;
int temp = va_arg( arg, int );
while( temp>=0 ){
if( temp>max ){
max = temp;
}
temp = va_arg(arg, int);
}

/* 结束时要调用va_end */
va_end(arg);

return max;
}


7.5

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

void print(char *format,...)
{
va_list arg;
char ch;
char *str;
va_start(arg,format);
//get the format one by one
while((ch=*format++)!='\0')
{
if(ch!='%')
{
//not a format code
putchar(ch);
continue;
}
//format code
switch(*format!='\0'?*format++:'\0')
{
case 'd':
print_integer(va_arg(arg,int));
break;
case 'f':
print_float(va_arg(arg,float));
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 number;
//printf("please input a number:\n");
//scanf("%d",&number);
//printf("the number is %d\n",number);
return EXIT_SUCCESS;
}
上面这个程序没有写完,感觉自己对变参数理解的不到位

7.6

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define MAX_LEN 128

static char *digits[] =
{
"","ONE ","TWO ","THREE ","FOUR ","FIVE ",
"SIX ","SEVEN ","EIGHT ","NINE ","TEN ",
"ELEVEN ", "TWELVE ", "THIRTEEN ",
"FOURTEEN ", "FIFTEEN ", "SIXTEEN ",
"SEVENTEEN ", "EIGHTEEN ","NINETEEN"
};

static char *tens[] =
{
"", "", "TWENTY ", "THIRTY ", "FORTY ",
"FIFTY ", "SIXTY ", "SEVENTY ","EIGHTY ",
"NINETY "
};

static char *magnitudes[] =
{
"", "THOUSAND ", "MILLION ", "BILLION "
};

/*	Convert the last 3–digit group of amount to words.
Amount is the value to be converted,
buffer is where to put the words,
and magnitude is the name of the 3–digit
group we’re working on.
*/

static void
do_one_group(unsigned int amount,char *buffer,char **magnitude)
{
int value;
value = amount / 1000;
if(value>0)
do_one_group(value,buffer,magnitude+1);
amount = amount % 1000;
value = amount / 100;
if(value > 0)
{
strcat(buffer,digits[value]);
strcat(buffer,"HUNDRED ");
}
value = amount % 100;
if(value >= 20)
{
strcat(buffer,tens[value / 10]);
value = value % 10;
}
if(value>0)
strcat(buffer,digits[value]);
if(amount>0)
strcat(buffer,*magnitude);
}

void
written_amount(unsigned int amount,char *buffer)
{
if(amount == 0)
strcpy(buffer,"ZERO ");
else
{
do_one_group(amount,buffer,magnitudes);
}
printf("the string of number is %s\n",buffer);
}

int
main()
{
unsigned int number;
printf("please input a number:\n");
scanf("%d",&number);
char *buffer = (char *)malloc(sizeof(char)*MAX_LEN);
memset(buffer,0,MAX_LEN);
written_amount(number,buffer);
return EXIT_SUCCESS;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息