21、题目:利用递归方法求5!。
int main()
{
int i;
int fact();
for(i=0;i<=5;i++)
printf("\40:%d!=%d\n",i,fact(i));
}
int fact(j)
int j;
{
int sum;
if(j==0)
sum=1;
else
sum=j*fact(j-1);
return sum;
}
22、题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
printf("请输入5个字符");
char c1[5];
scanf("%s",c1);
int i;
for(i=4;i>=0;i--)
{
printf("%c",c1[i]);
}
printf("\n");
-------------------------------------------------------
int main()
{
int i=5;
void palin(int n);
printf("请输入5个字符\40:\40");
palin(i);
printf("\n");
}
void palin(n)
int n;
{
char next;
if(n<=1)
{
next=getchar();
printf("相反顺序输出结果\40:\40");
putchar(next);
}
else
{
next=getchar();
palin(n-1);
putchar(next);
}
}
23、有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
int age(n)
int n;
{
int AGE;
if(n == 1)
AGE = 10;
else
AGE = age(n-1)+2;
return (AGE);
}
int main(int argc,char *argv[])
{
printf("%d\n",age(5));
return 0;
}
24、题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析:学会分解出每一位数,如下解释。
long a,b,c,d,e,x;
printf("请输入 5 位数字:");
scanf("%ld",&x);
a=x/10000; /*分解出万位*/
b=x%10000/1000; /*分解出千位*/
c=x%1000/100; /*分解出百位*/
d=x%100/10; /*分解出十位*/
e=x%10; /*分解出个位*/
if (a!=0)
{
printf("为 5 位数,逆序为: %ld %ld %ld %ld %ld\n",e,d,c,b,a);
}
else if(b!=0)
{
printf("为 4 位数,逆序为: %ld %ld %ld %ld\n",e,d,c,b);
}
else if(c!=0)
{
printf("为 3 位数,逆序为:%ld %ld %ld\n",e,d,c);
}
else if(d!=0)
{
printf("为 2 位数,逆序为: %ld %ld\n",e,d);
}
else if(e!=0)
{
printf("为 1 位数,逆序为:%ld\n",e);
}
25、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
程序分析:学会分解出每一位数。
long a,b,c,d,e,x;
printf("请输入 5 位数字:");
scanf("%ld",&x);
a=x/10000; /*分解出万位*/
b=x%10000/1000; /*分解出千位*/
c=x%1000/100; /*分解出百位*/
d=x%100/10; /*分解出十位*/
e=x%10; /*分解出个位*/
if(a == e && b == d)
{
printf("%ld是回文数!\n",x);
}
else
{
printf("%ld不是回文数!\n",x);
}
26、题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
char first;
char c;
printf("pls input first char:");
scanf("%c",&first);
switch(first)
{
case 'm':
printf("is monday!\n");
break;
case 't':
printf("pls input next char:");
scanf("%s",&c);
if(c == 'h')
printf("is thursday!\n");
else
printf("is tuesday!\n");
break;
case 'w':
printf("is wednesday!\n");
break;
case 'f':
printf("is friday!\n");
break;
case 's':
printf("pls input next char:");
scanf("%s",&c);
if(c == 'a')
printf("is saturday!\n");
else
printf("is sunday!\n");
break;
default:
printf("error!pls input again!\n");
break;
}
27、题目:删除一个字符串中的指定字母,如:字符串 "aca",删除其中的 a 字母。
char* deleteCharacters(char * str, char * charSet)
{
int hash [256];
if(NULL == charSet)
return str;
for(int i = 0; i < 256; i++)
hash[i] = 0;//清空数组
for(int i = 0; i < strlen(charSet); i++)
hash[charSet[i]] = 1;
int currentIndex = 0;
for(int i = 0; i < strlen(str); i++)
{
if(!hash[str[i]])
str[currentIndex++] = str[i];
}
str[currentIndex] = '\0';
return str;
}
int main()
{
char s[2] = "a"; // 要删除的字母
char s2[5] = "aca"; // 目标字符串
printf("%s\n", deleteCharacters(s2, s));
return 0;
}
28、题目:对10个数进行排序。
程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换, 下次类推,即用第二个元素与后8个进行比较,并进行交换。
printf("pls input ten number:");
int num,i,a[10],j,temp;
for(i=0;i<10;i++)
{
scanf("%d",&num);// 15 48 10 24 45 31 18 4 19 20
a[i] = num;
}
printf("排序前:");
for(i=0;i<10;i++)
{
printf("%d->",a[i]);
}
printf("\n");
for(j=0;j<9;j++)
{
int min = j;
for(i=j+1;i<10;i++)
{
if(a[min]>a[i])
min = i;
}
if(min!=j)
{
temp=a[min];
a[min]=a[j];
a[j]=temp;
}
}
printf("排序后:");
for(i=0;i<10;i++)
{
printf("%d->",a[i]);
}
printf("\n");
29、题目:求一个3*3矩阵对角线元素之和
程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。
int i,j,a[N][N],sum=0;
printf("请输入矩阵(3*3):\n");
for(i=0;i
30、 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
int a[11] = {10,20,25,35,46,55,60,75,80,85};
int number,i,j,temp1,temp2;
printf("pls input number:");
scanf("%d",&number);
if(number > a[9])
a[10] = number;
else
{
for(i=0;i<10;i++)
{
if(number < a[i])
{
temp1 = a[i];//temp1=25
a[i] = number; //a[2]=25
for(j=i+1;j<11;j++)
{
temp2=a[j];//temp2=35
a[j]=temp1;//a[3]=25
temp1=temp2;//temp1=35
}
break;
}
}
}
for(i=0;i<11;i++)
{
printf("%d-",a[i]);
}
printf("\n");