1.编写程序利用公式:ex=1+x+x2/2!+x3/3!+......+xn/n!求的近似值。
找出并改正以下源程序中错误,得出正确的运行结果。
源程序如下:
#include <stdio.h>
#include <math.h>
void main()
{
int i;
float a,e,x;
printf("请输入x的值:");
scanf("%d",&x);
e=0;
i=0;
a=1;
while(a>1e-6);
{
a=a*x/i;
e=e+a;
i++;
}
printf("exp(x)=%f\n",exp(x));
printf("循环次数为:%d次\ne的x次方为:%f\n",i,e);
}
程序正确的运行结果为:
1.0
exp(x)=2.718282
循环次数为:11次
e的x次方为:2.718282
Press any key to continue
#include <stdio.h> #include <math.h> void main() { int i=0,sum=1; double
a=1,e=0,x; scanf("%lf",&x); while(a>1e-6) { a=pow(x,i)/sum; if(i>=1)
sum=sum*(i+1); e=e+a; i++; }printf("exp(x)=%lf\n",exp(x));
printf("循环次数为:%d次\ne的x次方为:%lf\n",i,e); }
2.编程输出n行*组成的图形。n值由用户输入。
第一行n个*,第二行n-1个*,依此类推,第n行1个*。
#include <stdio.h> int main() { int n,i,j; scanf("%d",&n); for(j=n;j>0;j--) {
for(i=j;i>0;i--) printf("*"); printf("\n"); } }
3.编程输出n行*组成的图形。n值由用户输入。第一行1个*,第二行2个*,依此类推。
#include <stdio.h> int main() { int n,i,j; scanf("%d",&n); for(i=1;i<=n;i++) {
for(j=1;j<=i;j++) printf("*"); printf("\n"); } }
4.输出所有大于100小于等于200的3位偶数,且该偶数的各位数字两两不相同。要求每行输出10个数,每个数字占6位宽度
#include <stdio.h> int main() { int n=100,a,b,c,m=0; for(;n<=200;n++)
if(n%2==0) { a=n/100; b=(n-a*100)/10; c=n%10; if(a!=b&&b!=c&&c!=a) {
printf("%6d",n);m++; if(m%10==0&&m!=0) printf("\n"); } } }
5.求1!+2!+…+n!,其中n(1<=n<=10)值由用户输入
#include <stdio.h> int main() { int n,i,sum=0,a=1; scanf("%d",&n);
for(i=1;i<=n;i++) { a=a*i; sum=sum+a; } printf("%d",sum); }
6.统计输入的一串字符中每个元音字母(a,e,i,o,u)出现的次数,输入#以作为结束。
#include <stdio.h> void main() { char ch; int a=0,e=0,i=0,o=0,u=0;
ch=getchar(); while(ch!='\n') { if(ch=='a') a++; if(ch=='e') e++; if(ch=='i')
i++; if(ch=='o') o++; if(ch=='u') u++; if(ch=='#') break; ch=getchar();}
printf("a:%d\n",a); printf("e:%d\n",e); printf("i:%d\n",i); printf("o:%d\n",o);
printf("u:%d\n",u); }
7.输出m--n间的全部素数。要求每个数输出字宽为5个字符,每输出5个素数换一行。
#include <stdio.h> int main() { int n,m,i,j,t=0; scanf("%d%d",&n,&m);
for(i=n;i<=m;i++) { for(j=2;j<i;j++) if(i%j==0) break; if(j==i) { t++;
printf("%5d ",i); if(t%5==0&&t!=0) printf("\n"); } } }
8.从键盘输入一个大于1的正整数x,打印所有小于x的斐波那契数列(数列的第一项、第二项为1,数列从第三项开始,每一项都等于前两项的和)。打印所有小于x的斐波那契数列(数列的第一项、第二项为1,数列从第三项开始,每一项都等于前两项的和)。
#include <stdio.h> int main() { int a=1,b=1,c,x; scanf("%d",&x); if(x==1)
printf("%3d",a); if(x==2) printf("%3d%3d",a,b); if(x>2) { printf("%3d%3d",a,b);
for(;a+b<=x;) { c=a+b; printf("%3d",c); a=b; b=c; } } }
9.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
要求这些三位数由小到大输出。
#include <stdio.h> main() { int a,b,c; for(a=1;a<=4;a++) { for(b=1;b<=4;b++) {
for(c=1;c<=4;c++) { if(a!=b,b!=c,a!=c) printf("%d%d%d\n",a,b,c); } } } }
10.有4名专家对4款赛车进行评论。
A说:2号赛车是最好的。
B说:4号赛车是最好的。
C说:3号赛车不是最好的。
D说:B说错了。
事实上只有一款赛车是最好的,且只有一名专家说对了,其他3人都说错了,编程输出最好的赛车编号。
#include <stdio.h> int main() { int car; int a,b,c,d; for(car=1;car<5;car++) {
a=(car==2); b=(car==4); c=(car!=3); d=(car!=4); if( a+b+c+d==1)
printf("最好的赛车编号为%d",car); } }
11.编写程序,找出1~99之间的全部同构数。同构数是这样一组数,它出现在平方数的右边。例如:5是25的右边的数,25是625右边的数,5和25都是同构数。
要求:这些同构数由小到大输出。
#include <stdio.h> int main(void) { int a,b; for(a=1;a<=99;a++) { if(a<=10)
b=a*a%10; else if(a>10) b=a*a%100; if(a==b) printf("%d\n",a); } }
12.一个小于10000的正整数,它加上100后是一个完全平方数,它加上268又是一个完全平方数,请问该数是多少?输出所有这样的数字。要求用for循环完成。
注:若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数,例如4=2*2,9=3*3,25=5*5
#include <stdio.h> #include <math.h> int main(void) { int a; double b,c;
for(a=1;a<10000;a++) { b=sqrt(a+100); c=sqrt(a+268);
if(b-(int)b==0&&c-(int)c==0) printf("%d\n",a); } }
13.输入一个大于1的正整数,将其分解质因数。例如:输入90,输出90=2*3*3*5。
要求用while循环完成
#include <stdio.h> int main() { int a,c; scanf("%d",&a); printf("%d=",a);
for(c=2;c<=a;c++) if(a%c==0) { if(a==c) break; if(a!=c) printf("%d*",c); a=a/c;
c--; } printf("%d",c); }
14.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
一.倒序
#include <stdio.h> int main() { int n,i; n=1; for(i=1;i<10;i++) n=(n+1)*2;
printf("猴子第一天摘了%d个桃子",n); }
二.正序
#include <stdio.h> int main() { int n,i; float j; for(n=1;;n++) { j=n;
for(i=1;i<10;i++) j=j-j/2-1; if(j==1) { printf("猴子第一天摘了%d个桃子\n",n); break; } } }
15.一球从n米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米(包括第10次反弹的高度)?第10次反弹多高?要求 n
(n>=100)由键盘输入。
#include <stdio.h> int main() { double a[11],n; int i; scanf("%lf",&n);
a[0]=n; for(i=1;i<11;i++) { a[i]=a[i-1]*0.5; if(i<10) n=n+a[i]*2; } n=n+a[10];
printf("第10次落地时共经过%lf米\n第10次反弹%lf米",n,a[10]); }
二刷~
#include <stdio.h> int main() { int j; double i,t; scanf("%lf",&i); t=-i;
for(j=1;j<11;j++) { t=t+i*2; i=i/2; } t=t+i;
printf("第10次落地时共经过%lf米\n第10次反弹%lf米",t,i); }
16.一个正整数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
编程输出1000以内的所有完数。
#include <stdio.h> int main() { int a,b,c; for(a=2;a<=1000;a++) { c=0;
for(b=1;b<a;b++) if(a%b==0) c=c+b; if(c==a) printf("%d\n",a); } }
17.打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=13+53+33。
#include <stdio.h> int main() { int n,a,b,c; for(n=100;n<=999;n++) { a=n/100;
b=(n-a*100)/10; c=n%10; if(n==a*a*a+b*b*b+c*c*c) printf("%d ",n); } }
18.
求Sn(a)=a+aa+aaa+…+aa…aaa(有n个a,n<=7)之值,其中a是某一个数字。例如:2+22+222+2222+22222(n=5),a和n由键盘输入。
要求输入语句为:scanf("%d%d",&a,&n);
#include <stdio.h> int main() { int a,n,i,j,b; scanf("%d%d",&a,&n); j=a; b=a;
for(i=2;i<=n;i++) { b=a+b*10; j=j+b; } printf("S%d(%d)=%d",n,a,j); }
19.输入两个正整数m和n,求其最大公约数和最小公倍数。
#include <stdio.h> int main() { int m,n,a,b,c,d; scanf("%d,%d",&m,&n); a=m%n;
b=m*n; while(a!=0) { m=n; n=a; a=m%n; } b=b/n; printf("最大公约数是%d\n",n);
printf("最小公倍数是%d\n",b); }
20.输入一行字符(以换行符结束),分别统计出其中英文字母、空格、数字和其他字符的个数。
#include <stdio.h> int main() { int a=0,b=0,c=0,d=0; char s;
while((s=getchar())!='\n') { if(s>='A'&&s<='Z'||s>='a'&&s<='z') a++; else
if(s>='0'&&s<='9') b++; else if(s==' ') c++; else d++; } printf("字母数:%d\n",a);
printf("空格数:%d\n",c); printf("数字数:%d\n",b); printf("其它字符数:%d",d); }