九周mooc+循环结构程序设计 2

A. 落地反弹(循环)

一球从某一初始高度h(米)自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?

(注:中间的每次计算结果都要四舍五入保留小数点后2位,

例如:x是浮点类型(float),可以用x=(int)((x*1000+5)/10) / 100.0 来实现上述功能)

输入

球的初始高度h和落地次数n

输出

第n次落地时共经过的距离(米)和第n次反弹会有多高(米)

#include <stdio.h>
int main()
{
	float h,x,y;
	int n,i;
	scanf("%f%d",&h,&n);
	for(i=1,x=h;i<=n;i++)
	{
		x=x/2;
		if(x==h/2)
		y=h;
		else
		y=y+4*x;
		x=(int)((x*1000+5)/10)/100.0;
		y=(int)((y*1000+5)/10)/100.0;
	}
	printf("%.2f\n",y);
	printf("%.2f",x); 
 }

B. 素数和(循环)

输入数字范围n,m(n>=0, m>=0, n<=m),输出[n,m]区间中的所有素数和。

输入

测试次数T

每组测试数据一行,数字范围n m

输出

对每组测试数据,如果有素数,输出二行:

第一行:输出[n,m]间的素数

第二行:输出[n,m]间的素数和

如果没有素数,输出NO

#include <stdio.h>
#include <math.h>
int main()
{
	int t,n,m;//次数,区间数
	int i,j,k;//循环变量
	int sum,num;//素数和
	scanf("%d",&t);
	for(i=1;i<=t;i++)
	{
		scanf("%d%d",&n,&m);
		sum=0;
		for(j=n;j<=m;j++)
		{
			if(j>=2)//排除1,2
			{
				num=0;//判断有没有素数
				for(k=2;k<=sqrt(j);k++)//判断j是不是
				{
					if(j%k==0)
					{
						num=1;break;
					}
				}
					if(num==0)
					{
						printf("%d ",j);
						sum=sum+j;
					}
			}	
		}
		if(sum==0)
		printf("NO\n");
		else
		printf("\n%d\n",sum);
	 } 
}

C. 打印漏斗

打印出一个底部有n个*的漏斗

输入

第一行输入一个T;表示有T组测试数据

下面每一行都有一个n表示漏斗底部*的个数

n保证是奇数

输出

输出打印结果

两个测试答案之间要用换行分割

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int T,n;//测试参数,底部*个数 
	int size1,size2;//*个数和空格个数 
	scanf("%d",&T);
	for(int i=0;i<T;i++)//判断执行参数是否到达T次 
	{
		scanf("%d",&n);
		if(n%2==0) exit(-1);//判断n是否为偶数 
		for(int i=1;i<=n;i++)
		{
			if(i<=(n+1)/2) size1=n-(i-1)*2;
			else size1=1+2*(i-(n+1)/2);
			size2=(n-size1)/2;//确定两种符号的个数 
			for(int i=0;i<size2;i++) printf(" ");
			for(int i=0;i<size1;i++) printf("*");
			printf("\n");
		}printf("\n"); 
	}
}

A. 数字直角

给出n,请输出一个直角边长度是n的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。

n<=13

输入

输出

#include<stdio.h>
int main()
{
	int n,k=1,m;
	scanf("%d",&n);
	m=n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			printf("%02d",k);
			k++;
		}printf("\n");
		--m;
	}
 }

B. 五位以内的对称素数(循环)

判断一个数是否为对称且不大于五位数的素数。

意思是小于100,000的数

输入

第一行:测试数据组数T

接下来包含T行,每行由1个不大于五位数的正整数构成。

输出

对于每个正整数,如果该数是不大于五位数的对称素数,则输出”Yes”,否则输出”No”,每个判断结果单独列一行。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
	int t;
	int a,b,c;
	int flaga,flagb,flagc;
	scanf("%d",&t);
	for(int i=1;i<=t;i++){
		scanf("%d",&a);
		flaga=0;
		if(a>=100000||a<10)//判断有没有超五位 
		{
			printf("No\n");
			flaga=1;
		}
		if(flaga==1)  continue;
		flagb=0;
		c=a;b=0;
		while(c){//判断是不是对称数 
			b=b*10+c%10;
			c/=10;
		}
		if(a!=b){
			printf("No\n");
			flagb=1;
		}
		if(flagb==1) continue;
		flagc=0;
		for(int j=2;j<=(int)sqrt(a);j++){//判断是不是素数
			if(a%j==0){
			flagc=1;}
		}
		if(flagc==1) printf("No\n");
		if(flagc==1) continue;
		printf("Yes\n");
	}
}

C. 质数因子(循环)

p { margin-bottom: 0.21cm; }

输入一个正整数,求它可由哪些质数因子相乘构成(如180的质数因子为2、2、3、3、5)

输入

正整数n

输出

相乘为n 的所有的质因数

#include<stdio.h>
#include<stdlib.h> 
#include<math.h>
int main()
{
	int n,a,b;
	scanf("%d",&n);
	for(a=2;a<=sqrt(n);a++)
	{
		for(;n%a==0;)//多次输出a 
		{
		n=n/a;
		printf("%d ",a);
		}
	}
	if(n!=1)
	printf("%d",n);
}

D. 砖石奖励(循环)

海盗们决定用“投环套物”的方式来奖励最近一次行动中贡献最大的人。他们将1克拉钻石排成矩阵,通过投掷圆环决定奖励的钻石的数量。假设每个钻石的x和y坐标都是0到99的整数,输入矩阵长、宽及圆形,计算这个人能获得多少克拉的钻石。

输入

 

测试次数

每组测试数据包含两行,第一行为矩阵的行数和列数,第二行为圆心坐标点及半径。

输出

对每组测试数据,输出圆形内的钻石克拉数(包括边界上的钻石)。

#include<stdio.h>
#include<math.h>
int main()
{
	int t;
	float m,n,x,y,r;
	int sum;
	scanf("%d",&t);
	for(int i=1;i<=t;i++){//处理多组数据 
		sum=0;
		scanf("%f%f",&m,&n);
		scanf("%f%f%f",&x,&y,&r);
		for(int j=0;j<=n;j++){//从y轴开始直到矩形右边界 
			for(int k=0;k<=m;k++)//从x轴开始直到矩形上边界
			if(r>=(float)sqrt((j-x)*(j-x)+(k-y)*(k-y)))
			sum+=1;
		}
		printf("%d\n",sum);
	}
 }

E. 车牌号(循环)

一卡车违反交通规则,撞人逃逸。三人目击事件,没有记住车号,但记下车的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的;丙说:四位的车号正好是一个整数的平方。请根据以上线索求出车号。

输入

输入n(0<n<5)

输出

输出车牌号的第n位(1对应个位,2对应十位,3对应百位,4对应千位)

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
	int a,b,t,flag;
	int n;
	scanf("%d",&t);
	for(a=1;a<=9;a++){
		for(b=0;b<=9;b++){
			flag=0;
			n=a*1000+a*100+b*10+b;
			if(sqrt(n)==(int)sqrt(n)){
			flag=1;
			break;}
		}
		if(flag==1) break;
	}
	switch(t){
	case 1:
	case 2:printf("%d",b);break;
	case 3:
	case 4:printf("%d",a);break; 
	}
}

F. 迭代法求平方根(循环)

用迭代法求 。求a的平方根的迭代公式为: X[n+1]=1/2(X[n]+a/X[n]) 要求前后两次求出的得差的绝对值少于0.00001。 输出保留3位小数

输入

X

输出

X的平方根

#include<stdio.h>
#include<math.h>
int main() 
{
 float x1, x2;
 float a;
 scanf("%f",&a);
 x2=1.0;
 for(;;) 
 {
  x1=x2;
  x2=(x1+a/x1)/2.0;
  if (fabs(x1 - x2)<0.00001) 
   {                      
   printf("%.3f",x2);
   break;
  }
 }
 return 0 ;
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值