C语言自解题目
1计算定期存款本利之和:
设银行定期存款的年利率rate 为2.25%,并已知存款期为n 年,存款本金为capital 元,试编程计算n 年后的本利之和deposit 。要求定期存款的年利率rate 、存款期n 和存款本金capital 均由键盘输入。 解:#include
#include
int main()
{
double rate,capital,deposit,a;
scanf("%lf%lf%lf",&rate,&capital,&a);
deposit=capital*pow((1+rate),a);
printf("deposit=%lf",deposit);
}
2、求三个数中最小的一个。(若是求最大值就将min 改为max ) 解:#include
int main()
{ float min(float,float);
float a,b,c,d;
scanf("%f%f%f",&a,&b,&c);
d=min(a,min(b,c));
printf("min=%f\n",d);
return 0;
}
float min(float x,float y)
{float z;
x
return(z);
}
3、求四个数中最大的一个:
#include
int main()
{int a,b,c,d,max;
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a>=b&&a>=c)
max=a;
else if(b>=a&&b>=c)
max=b;
else max=c;
if(max
max=d;
printf("max=%d\n",max);
}
4、求五个学生的年龄,第五个比第四个大2岁;第四个比第三个大2岁;第三个比第二个大2岁;第二个比第一个大2岁;第一个是10岁。(课本186页有另解)
解:#include
int main()
{int k,age(int k);
scanf("%d",&k);
printf("age(k):%d\n",age(k));
return 0;
}
int age(int k)
{int m;
if(k==1)
m=10;
else
return age(k-1)+2;
return m;
}
5、用递归法求n!.
解:#include
int main()
{float fac(int n);
int n;
scanf("%d",&n);
printf("fac=%f\n",fac(n));
return 0;
}
float fac(int n)
{if(n>1)
return n*fac(n-1);
return 1; (其中应该返回“1”,而不是“0”,应该与定义函数中的对应) }
6、将n 个数按从小到大的顺序输出
解:#include
int main()
{int a[4];(求n 个数时将“4”改为“n ”的值,后面随着改过来就是的了) int i,j,t;
for(i=0;i
scanf("%d",&a[i]);(若是从大到小就将大于和小于号,改变一下啊)
for(j=0;j
for(i=0;i
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
for(i=0;i
printf("%3d\n",a[i]);
return 0;
}
7. 对输入的每个
x 值,计算出相应的y 值。0≤x ≤13≤x ≤4
当x 取其他值时
解:#include
#include
void main()
{ double x,y;
scanf("%lf",&x);
if(x>=0&&x
y=exp(sqrt(x))-1;
else if(x>=3&&x
y= fabs(x)+2;
else
y=sin(x*x);
printf("x=%lf,y=%lf",x,y);
}
8. 素数是除了1和其本身以外,不能被其他自然数整除的自然数。从键盘输入一个数,判断该数是不是素数?
解:#include
void main( )
{ int i, x;
printf("Enter one natural integer: ");
scanf("%d ",&x);
for(i=2;i
if(x%i==0) break;(这一步是将‘2’一直到‘n-1’的所有值付给‘i ’;若
if(x%i==0) printf("%d is Not a prime number\n",x);没有这一步,输出结 else printf("%d is a prime number\n",x); 果中会有重复输出‘n-3’遍。 }
解法二:#include 算法不一样,这个只将n 的前一半计算即可。 #include
void main( )
{ int i, x;
printf("Enter one natural integer: ");
scanf("%d ",&x);
for(i=2;i
if(x%i==0) break;
if(x%i==0) printf("%d is Not a prime number\n",x);
else printf("%d is a prime number\n",x);
}
9. 显示所有的水仙花数。谓水仙花数,是指一个3位数,其各位数字立方和等于该数字本身。例,153是水仙花数,因为153=13+53+33 。有两种解题思路
解:#include
int main()
{
int i,j,k,n;
for(i=1;i
for(j=0;j
for(k=0;k
{n=i*100+j*10+k;
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%d ",n);
}
}
}
解法二:#include
int main()
{
int i,j,k,n;
for(n=100;n
{
i=n/100;
j=n/10-i*10;
k=n%10;
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%d ",n);
}
}
}
10. 输出
解:#include
int main()
{int i,j,k;
for(i=0;i
{for(j=0;j
printf(" ");
for(k=0;k
printf("*");
printf("\n");
}
for(i=0;i
{for(j=0;j
printf(" ");
for(k=0;k
printf("*");
printf("\n");
}
}
11. 编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
解:#include
#define N 11
int main()
{int a[N];
int i,j,t,k,m;
printf("Please input 10 numbers:\n"); for(i=0;i
scanf("%d",&a[i]);
for(j=0;j
for(i=0;i
if(a[i]
{t=a[i];a[i]=a[i+1];a[i+1]=t;} for(i=0;i
printf("%4d",a[i]);
printf("please input a number:"); scanf("%d",&k);
for(i=0;i
{if(a[i]>=k)m=i+1;}
for(i=9;i>=m;i--)
a[i+1]=a[i];
a[m]=k;
for(i=0;i
printf("%d ",a[i]);
printf("\n");
}