题目:输入非0的三位数,依次输出该数的正(负)号和百位,十位,个位的数字
程序分析:在数学中,我们可用一个数除以10,取余就可得到最后一位数,取商就可去掉最后一位数。即,设x为正整数,求x的最后一位数字用公式:x%10,去掉x的最后一位数字用:x/10
代码如下:
#include<stdio.h>
#include<math.h>
void main()
{
printf("请输入一个三位数/n");
char c1,c2,c3,c4;
int x;
scanf("%d",&x);
c4=(x>0?'+':'-');
x=fabs(x);/*求绝对值*/
c3=x%10+48;/*加48后转换为对应的字符,可查看“字符与ASCII代码对照表”*/
x=x/10;
c2=x%10+48;
c1=x/10+48;
printf("符号位:%c/n",c4);
printf("百位:%c/n",c1);
printf("十位:%c/n",c2);
printf("个位:%c/n",c3);
}
题目:输入一个正整数(短整型),计算并输出该数的各位数之和,和该数有多少位
程序分析:取出莫个数X的末位数字的方法是“X%10”,去掉莫个数末位数字的方法是“X/10”,
用循环不断不断去掉末尾数,当得到0时,可以得出该数的位数
代码如下:
#include<stdio.h>
void main()
{
printf("请输入一个正整数(短整型)/n");
int x,y,sum,n;
sum=0;
n=0;
scanf("%d",&x);
while(x!=0)
{
y=x%10;
x=x/10;
n++;
sum+=y;
}
printf("共有%d位数/n",n);
printf("各位数之和:%d/n",sum);
}
用Π/4=1-1/3+1/5-1/7+......公式求Π的近似值,直到莫一项的绝对值小于为止
程序分析:由公式可以看出,每项有符号(在正与负之间变换)、分子(全为1)、分母(不断+2,为奇数)组成。可以设s为符号,n存放分母,t存放当前值。
代码如下:
#include<stdio.h>
#include<math.h>
void main()
{
float pi=0.0,n=1.0,s=1.0,t;
do
{
t=s/n;/*求当前项*/
pi+=t;
s=-s;/*求下一项符号*/
n+=2;/*求下一项分母*/
}
while(fabs(t)>1e-6);
pi*=4;
printf("pi=%10.6f/n",pi);
}
题目:判断m是否素数
程序分析:让m被2至除,如果m能被2~之中任何一个数整除,则结束循环,此时i必然小于或等于k(即),如果i不能被2~k(即)之中任何一个数整除,则在完成最后循环后,i还要加1,因此i=k+1,。即在循环后判断i的值是否大于或等于k+1,来表明不曾被2~之间任一数整除过,因此是素数
代码如下:
#include<stdio.h>
#include<math.h>
void main()
{
int m,i,k;
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)break;
if(i>k)
printf("%d是素数/n",m);
else
printf("%d不是素数/n",m);
}
任何一个自然数n的立方都等于n个连续奇数之和,
例如=1;=3+5;=7+9+11。
要求程序对每个输入的自然数计算并输出相应的连续奇数,直到输入的自然数为0是止。
程序分析:
1)要求“直到输入的自然数为0是止”,所以要用循环,循环条件的自然数不是0,就继续循环。
2)有题目可知,这些公式存在的规律只是输入自然数n,则n的立方等于n个奇数的和。所以只能从奇数1开始找起,找连续n个奇数之和。
3)大体操作:
A、设奇数k1初值为1;
B、用循环求出从k1开始的连续n个奇数之和;
C、若找到了如题目要求,就输入这n个连续奇数;
否则,使k1指向下一个奇数(k1+2),转步骤B。
代码如下:
#include<stdio.h>
void main()
{
int n,k,k1,m,i;
scanf("%d",&n);
while(n!=0)
{
k1=1;
do{/*每次开始都从1开始查找连续n个奇数*/
k=k1;
m=0;/*用来记录n个奇数和,此处要先清0*/
for(i=1;i<=n;i++)/*计算从k开始的连续n个奇数和*/
{
m=m+k;
k=k+2;/*指向下一个奇数*/
}
if(m==n*n*n)break;/*满足条件推出*/
else k1=k1+2;/*指向下一个奇数*/
}while(1);
printf("%d^3=",n);
for(i=1;i<=n;i++)/*输出从k1开始的n个连续奇数*/
{
if(i==1)
{
printf("%d",k1);
}
else
{
printf("+%d",k1);
}
k1+=2;
}
printf("/n");
scanf("%d",&n);
}
}