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

C语言经典例题100(17~21)

2013-08-11 14:04 190 查看
十七、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#include<stdio.h>

int main()
{
char mychar;
int c_num,sp_num,num_num,oc_num,all_num;
c_num=sp_num=num_num=oc_num=all_num=0;
printf("请输入一串字符,以换行符结尾\n");
mychar=getchar();
while(mychar!='\n')
{
if(mychar>='0'&&mychar<='9')
num_num++;
else
{
if(((mychar>='A')&&(mychar<='Z'))||((mychar>='a')&&(mychar<='z')))
c_num++;
else
{
if(mychar==' ')
sp_num++;
else
oc_num++;
}
}
all_num++;
mychar=getchar();
}
printf("总共有%d个字符\n",all_num);
printf("其中字母有%d个;数字有%d个;空格有%d个;其他字符有%d个。\n",c_num,num_num,sp_num,oc_num);

getch();
return 0;
}


十八、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

程序分析:

第一次为a;第二次为aa;第三次为aaa...

可推出,第(n+1)次比n次新增项设为(n+1)个a连续组成的数,设第n次新增数为M,运算结果为N,则第(n+1)次新增数为M*10+a;(n+1)次运算结果为N+M*10+a;

当n=1时,结果为a;

当n>1时,以第二次为基础,第二次新增数为aa,结果为(a+aa);

长整型数据表示范围为4294967296,因此当次数输入超过10次或者:次数为10次且a>3时会发生溢出。

#include<stdio.h>

int main()
{
int a,n,i,M;
long sum;
printf("请输入一个个位数和运算的次数:\n");
scanf("%d%d",&a,&n);
if((n>10)||((n==10)&&(a>3)))
{
printf("error!\n");
getch();
return 0;
}
if(n==1)
sum=a;
else
{
M=a*10+a;
sum=a+M;
for(i=1;i<(n-1);i++)
{
M=M*10+a;
sum=sum+M;
}
}
printf("结果为:%ld\n",sum);

getch();
return 0;

}


十九、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

#include<stdio.h>

int main()
{
int n,i,sum;
for(n=1;n<1001;n++)
{
sum=0;
for(i=1;i<n;i++)
if(n%i==0)
sum+=i;
if(sum==n)
printf("\t%d",n);
}
getch();
return 0;
}


二十、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在10次落地时,共经过多少米?第10次反弹多高?

#include<stdio.h>

int main()
{
int i;
float h0,s,hx;
h0=100.0;
hx=100.0;
s=100.0;
for(i=2;i<11;i++)
{
hx=hx/2.0;
s+=hx*2;
}
printf("总共行程为%f米,最后一次高度为%f米。\n",s,hx);
getch();
return 0;
}


二十一、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

#include<stdio.h>

int main()
{
int n,p=1;
for(n=9;n>0;n--)
{
p=(p+1)*2;
}
printf("摘了%d个桃子.\n",p);
getch();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: