C语言经典例题100(17~21)
十七、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
#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; }