C程序设计(2)

来源:互联网 发布:花生壳域名ping不通 编辑:程序博客网 时间:2024/05/17 17:59

题目:输入非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是否素数

程序分析:让m2除,如果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);

}

}

原创粉丝点击