学习任何一种语言不能只停留在看的层面上,最后还是要自己写代码才能成长,下面就是一些C语言中经典的变成问题
1.年龄问题:*有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁。问第4个人多少岁,他说比第3个人大2岁。问第3人多少岁,他说比第2个人大2岁。问第2个人多少岁,他说比第1个人大2岁。最后问第1个人,他说他是10岁。编写程序,当输入第几个人时求出其对应的年龄。
//使用递归的思想解题
int age(int n)
{
if(n==1)
return 10;
else
return age(n-1)+2;
}
2.字符串功能实现:请编写程序,实现以下功能:在字符串中的所有数字字符前加一个$字符。例如,输入 A1B23CD45,输出 A$1B$2$3CD$4$5。
int Insert(char *s)
{
char t[80];
int i,j;
for(i=0;s[i]!='\0';i++)
{
t[i]=s[i];
}
t[i]='\0';
for(i=0;j=0;t[i]!-'\0';i++;)
{
/*对于数字字符先写一个$符号,再写该数字字符*/
if(t[i]>='0' && t[i]<='9')
{
s[j++]='$';
s[j++]=t[i];
}
/*对于非数字字符原样写入串s*/
else
s[j++]=t[i];
}
s[j]='\0'; /*在串s结尾加结束标志*/
return 0;
}
3.顶塔层数问题:八层灯塔,每一层都是上一层的两倍,一共765盏灯,求最底层的灯有几盏
void fun()
{
//first表示第一层的灯盏数,last表示最后一层灯盏数
int count,first=1,last,sum,i;//这里假设第一层只有一盏灯
while(1)
{
last=first;
sum=0;
for(i=1;i<s;i++)
{
last*=2;
sum+=last;
}
sum+=first;
if(sum==765)
{
printf("底层灯一共有%d盏",last);
}
first++;
}
}
4.输入一句英文句子,计算这句话中有多少个单词(单词使用’ '隔开)
void fun()
{
char ch[200];
printf("请输入一句英文句子");
gets(ch);
int i,flag=0,sum=0;
for(i=0;ch[i]!='\0';i++)
{
if(flag==0&&(((ch[i]>'a'&&ch[i]<'z'))||((ch[i]>'A'&&ch[i]<'Z')))
{
flag=1;
sum++;
}
if(ch[i]=' ')
{
flag=0;
}
}
printf("英文句子中一共有%d个单词",sum);
}
5.假定输入的字符串只包含字母和号,请编写函数fun,他的功能是:将字符串尾部的号全部删除,前面和中间的号不删除 eg:输入的字符串内容是ABCDEFG******,删除后,字符串的内容应该为:ABCDEFG,不能使用C语言提供的字符串函数
void fun(char *str)
{
char *p,*q;
p=q=str;
int i=0;
//将指针p移动到str字符串末尾的操作
while(*p)
p++;
p--;
//删除字符串str后面的*操作
while(*p=='*')
p--;
while(q<p)
{
str[i]=*q;
++i;
++q;
}
str[i]='\0';
}