循环编程题及解.docx
- 文档编号:7449623
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:17
- 大小:19.77KB
循环编程题及解.docx
《循环编程题及解.docx》由会员分享,可在线阅读,更多相关《循环编程题及解.docx(17页珍藏版)》请在冰豆网上搜索。
循环编程题及解
循环编程题及解
————————————————————————————————作者:
————————————————————————————————日期:
【程序1】
题目:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
1.程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:
#include
intmain()
{
inti,j,k;
intsum=0;
printf("\n");
for(i=1;i<5;i++)/*以下为三重循环*/
for(j=1;j<5;j++)
for(k=1;k<5;k++)
{
if(i!
=k&&i!
=j&&j!
=k)/*确保i、j、k三位互不相同*/
{
sum=sum+1;
printf("%d%d%d\n",i,j,k);
}
}
printf("sumis%d\n",sum);
return0;
}
【程序2】
题目:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:
在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
请看具体分析:
2.程序源代码:
#include"math.h"
intmain()
{
longinti,x,y,z;
for(i=1;i<100000;i++)
{
x=sqrt(i+100);/*x为加上100后开方后的结果*/
y=sqrt(i+268);/*y为再加上168后开方后的结果*/
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
printf("\n%ld",i);
}
return0;
}
【程序3】
题目:
打印出杨辉三角形(要求打印出10行如下图)
1.程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
2.程序源代码:
#include
intmain()
{
inti,j;
inta[10][10];
printf("\n");
for(i=0;i<10;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i<10;i++)
for(j=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
return0;
}
【程序4】
题目:
输出9*9口诀。
1.程序分析:
分行与列考虑,共9行9列,i控制行,j控制列。
2.程序源代码:
#include
intmain()
{
inti,j,result;
printf("\n");
for(i=1;i<10;i++)
{
for(j=1;j<=i;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
return0;
}
【程序5】
题目:
两个乒乓球队进行比赛,各出三人。
甲队为a、b,、c三人,乙队为x,、y、z三人。
已抽签决定比赛名单。
有人向队员打听比赛的名单。
a说他不和x比,c说他不和x、,z比,请编程序找出三队赛手的名单。
1.程序分析:
2.程序源代码:
main()
{
chari,j,k;/*i是a的对手,j是b的对手,k是c的对手*/
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
{
if(i!
=j)
for(k='x';k<='z';k++)
{if(i!
=k&&j!
=k)
{if(i!
='x'&&k!
='x'&&k!
='z')
printf("orderisa--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
}
==============================================================
【程序6】
题目:
打印出如下图案(菱形)
*
***
******
********
******
***
*
1.程序分析:
先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
2.程序源代码:
#include
intmain()
{
inti,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)
printf("");
for(k=0;k<=2*i;k++)
printf("*");
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=i;j++)
printf("");
for(k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
return0;
}
【程序7】
题目:
每个苹果0.8元,第一天买2个苹果,第二天开始买前一天的2倍,直至购买的苹果个数达到不超过100的最大值。
编写程序求每天平均花多少钱。
参考程序:
#include
main()
{intday=0,buy=2;
floatsum=0,ave;
do
{sum=sum+0.8*buy;
day++;buy=buy*2;
}while(buy<=100);
ave=sum/day;
printf("average=%f\n",ave);
}
==============================================================
【程序8】
题目:
判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:
判断素数的方法:
用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
2.程序源代码:
#include
intmain()
{
intm,i,k,h=0,leap=1;
printf("\n");
for(m=101;m<=200;m++)
{
k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{
leap=0;break;
}
if(leap)
{
printf("%-4d",m);h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThetotalis%d\n",h);
return1;
}
==============================================================
【程序9】
题目:
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:
#include
intmain()
{
inti,j,k,n;
printf("'waterflower'numberis:
");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}
==============================================================
【程序10】
题目:
将一个正整数分解质因数。
例如:
输入90,打印出90=2*3*3*5。
程序分析:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
2.程序源代码:
/*zhengintisdividedyinshu*/
#include
intmain()
{
intn,i;
printf("\npleaseinputanumber:
\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!
=i)
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else
break;
}
}
printf("%d\n",n);
return1;
}
==============================================================
【程序11】
题目:
输入两个正整数m和n,求其最大公约数和最小公倍数。
1.程序分析:
利用辗除法。
2.程序源代码:
#include
intmain()
{
inta,b,num1,num2,temp;
printf("pleaseinputtwonumbers:
\n");
scanf("%d,%d",&num1,&num2);
if(num1>num2)
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!
=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:
%d\n",a);
printf("gongbeishu:
%d\n",num1*num2/a);
return0;
}
==============================================================
【程序12】
题目:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:
利用while语句,条件为输入的字符不为'\n'.
2.程序源代码:
#include
intmain()
{
charc;
intletters=0,space=0,digit=0,others=0;
printf("pleaseinputsomecharacters\n");
while((c=getchar())!
='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
elseif(c=='')
space++;
elseif(c>='0'&&c<='9')
digit++;
else
others++;
}
printf("thecharacterinall:
char=%dspace=%ddigit=%dothers=%d\n",letters,space,digit,others);
return0;
}
==============================================================
【程序13】
题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?
第10次反弹多高?
1.程序分析:
见下面注释
2.程序源代码:
main()
{
floatsn=100.0,hn=sn/2;
intn;
for(n=2;n<=10;n++)
{
sn=sn+2*hn;/*第n次落地时共经过的米数*/
hn=hn/2;/*第n次反跳高度*/
}
printf("thetotalofroadis%f\n",sn);
printf("thetenthis%fmeter\n",hn);
}
==============================================================
【程序14】
题目:
海滩上有一堆桃子,五只猴子来分。
第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
1.程序分析:
分析:
设x个桃子,因为第一只猴子拿一个扔入海中,正好可以分成5堆,所以,(x-1)mod5=0,
第一个猴子就拿了其中一堆,就是(x-1)*(1/5),剩下的桃子为:
4/5*(x-1)
第二只猴子又拿走了一堆(同样,包括老猴子的一个),同理,第三,第四和第五。
假设n=5,最后,剩下的桃子是(x-1)*(4/5)*(4/5)*(4/5)*(4/5)*(4/5)=(x-1)*(4/5)^5,这应该是个整数.
2.程序源代码:
#include
intmain()
{
inttemp,total_num=1;
intkk=0;
inti;
while
(1)
{
total_num+=5;
temp=total_num;
for(i=1;i<=5;i++)
{
if((temp-1)%5!
=0)
break;
kk=(temp-1)/5;//每个猴子获得的桃子树
temp=temp-1-kk;//每次拿后剩下的桃子树4*(temp-1)/5
}
if(i>5)//说明每个猴子获得的桃子树都为整数
break;
}
printf("thetotalis%d\n",total_num);
return0;
}
==============================================================
【程序15】
题目:
判断一个素数是否能被999整除
#include
#include
intmain()
{
intk,n,i,count=0;
intflag;
while
(1)
{
scanf("%d",&n);
k=sqrt(n);
flag=0;
for(i=2;i<=k;i++)
{
if(n%i==0)
{
flag=1;//说明不是素数
break;
}
}
if(flag==0)//说明是素数
break;
}
if(n%999==0)
printf("ncandivided9999");
else
printf("ncannotdivided9999");
return0;
}
==============================================================
【程序16】
题目:
要求输出国际象棋棋盘。
1.程序分析:
用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
2.程序源代码:
#include
intmain()
{
inti,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
if((i+j)%2==0)
printf("%c%c",219,219);
else
printf("");
printf("\n");
}
return0;
}
==============================================================
【程序17】
题目:
打印楼梯,同时在楼梯上方打印两个笑脸。
1.程序分析:
用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
2.程序源代码:
#include
intmain()
{
inti,j;
printf("\1\1\n");/*输出两个笑脸*/
for(i=1;i<11;i++)
{
for(j=1;j<=i;j++)
printf("%c%c",219,219);
printf("\n");
}
return1;
}
【程序18】
编写程序,找出1至99之间的全部同构数。
同构数是这样一组数:
它出现在平方数的右边。
例如,5是25右边的数,25是625右边的数,5和25就是同构数。
参考程序:
#include
intmain()
{
inti;
for(i=1;i<100;i++)
if(i*i%10==i||i*i%100==i)printf("%3d",i);
return1;
}
【程序19】
5.107编写程序,求一个整数任意次方的最后三位数。
即求xy值的最后三位数,要求x,y从键盘输入。
参考程序:
#include
intmain()
{
intx,y,i,s=1;
printf("Inputxandy:
");
scanf("%d%d",&x,&y);
for(i=1;i<=y;i++)
s=s*x%1000;
printf("Thelast3digitof%d*%dis:
%d\n",x,y,s);
return1;
}
【程序20】
编写程序,从键盘输入6名学生的五门成绩,分别统计出每个学生的平均成绩。
参考程序:
#include
intmain()
{
inti,j;
floats,sum,ave;
for(i=0;i<6;i++)
{
sum=0;
for(j=1;j<=5;j++)
{
scanf("%f",&s);
sum=sum+s;
}
ave=sum/5;
printf("No.%dave=%6.2f\n",i+1,ave);
}
return1;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 编程