25、用递归法将一个整数n转换成字符串(例如输入4679,应输出字符串“4679”),n为不确定数,可以是位数不超过5,且数值在-32768~32767之间和任意整数。
#include<conio.h>
#include<stdio.h>
void convert(int n)
{
int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0'); //the Ascii of char '0' is 48
}
void main()
{
int number;
clrscr();
printf("\ninput an integer:");
scanf("%d",&number);
printf("\n\nOutput string is : ");
if(number<0)
{
putchar('-');
number=-number;
}
convert(number);
getch();
}
26、有一个字符串,包括n个字符。写一个函数,将此字符串从第m个字符开始的全部字符复制成另一个字符串。要求在主函数输入字符串及m值并输出复制结果。
#include <stdio.h>
#include <ctype.h>
main()
{ int m;
char *str1[80],*str2[80];
printf("Input a string(length<80:");
scanf("%s",str1);
printf("\nWhich character starting from?");
scanf("%d",&m);
if(strlen(str1)<m)
printf("\nError input !");
else
{ copystr(str1,str2,m);
printf("\nResult is : %s",str2);
}
}
copystr(p1,p2,m)
char *p1,*p2;
int m;
{
int n;
n=0;
while(n<=m-1)
{ n++;
p1++;
}
while(*p1!='\0')
{ *p2=*p1;
p1++;
p2++;
}
*p2='\0';
}
27、在主函数中输入6个字符串,用另一个函数对他们按从小到大的顺序,然后在主函数中输出这6个已经排好序的字符串。要求使用指针数组进行处理。
#define MAXLINE 20
main()
{ int i;
char *pstr[6],str[6][MAXLINE];
for(i=0;i<6;i++)
pstr[i]=str[i];
printf("Input 6 string (1 string at each line):\n");
for(i=0;i<6;i++)
scanf("%s",pstr[i]);
sort(pstr);
printf("The string after sorting :\n");
for(i=0;i<6;i++)
printf("%s\n",pstr[i]);
}
sort(pstr)
char *pstr[6];
{
int i,j;
char *p;
for(i=0;i<6;i++)
{ for(j=i+1;j<6;j++)
{ if(strcmp(*(pstr+i),*(pstr+j))>0)
{ p=*(pstr+i);
*(pstr+i)=*(pstr+j);
*(pstr+j)=p;
}
}
}
}
28、编写一个函数实现对两个字符串的比较。不用使用C语言提供的标准函数strcmp。要求在主函数中输入两个字符串,并输出比较的结果(相等的结果为0,不等时结果为第一个不相等字符的ASCII差值)。
strcmp(p1,p2)
char *p1,*p2;
{ int i;
i=0;
while(*(p1+i)==*(p2+i))
if(*(p1+i++)=='\0') return(0);
return(*(p1+i)-*(p2+i));
}
main()
{ int m;
char str1[20],str2[20],*p1,*p2;
printf("Input two strings(1 string at each line):\n");
scanf("%s",str1);
scanf("%s",str2);
p1=&str1[0];
p2=&str2[0];
m=strcmp(p1,p2);
printf("The result of comparison :%d\n",m);
}
29、有一个unsigned long型整数,先要分别将其前2个字节和后2个字节用为两个unsigned int型整数输出(设一个int型数据占2个字节),试编写一函数partition实现上述要求。要求在主函数输入该long型整数,在函数partition中输出结果。
void partition(unsigned long num)
{ union a
{
unsigned int part[2];
unsigned long w;
} n,*p;
p=&n;n.w=num;
printf("long integer=%lx\n",num);
printf("\nlong integer=%0x,high-part number=%0x\n",p->part[0],p->part[1]);
}
void main()
{ unsigned long x;
printf("Input a long number:");
scanf("%lx",&x);
partition(x);
}
30、编一程序,能把从终端读入的一个字符中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存(用字符!表示输入字符串的结束)。
#include <stdio.h>
void main()
{ FILE *fp;
char str[100];
int i=0;
if((fp=fopen("test","w"))==NULL)
{ printf("Can't open this file.\n");
exit(0);
}
printf("Input a string : \n");
gets(str);
while(str[i]!='!')
{ if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-32;
fputc(str[i],fp);
i++;
}
fclose(fp);
if((fp=fopen("test","r"))==NULL)
{ printf("can't open test r\n");
exit(0);
}
fgets(str,strlen(str)+1,fp);
printf("Output is : %s",str);
fclose(fp);
}
31、有五个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人多少岁?他说比第3个人大2岁。问第3个人多少岁?他说比第3个人大2岁。问第2个人多少岁?他说比第1个人大2岁。最后问第1个人多少岁?他说是10岁。请问第5个人多大?(这是一个递归问题)
#include <stdio.h>
int age(int n)
{ if(n==1) return(10);
else return age(n-1)+2;
}
void main()
{ int n;
n=5;
printf("The fifth age is %d.\n",age(n));
}