PTA 循环结构设计(C语言)

文章目录

    • 1.求交错序列前N项和 (15 分)
    • 2.统计素数并求和 (20 分)
    • 3.求分数序列前N项和 (15 分)
    • 4.猴子吃桃问题 (15 分)
    • 6.近似求PI (15 分)
    • 6.最佳情侣身高差 (10 分)
    • 7. Fibonacci数列 (16 分)
    • 8.统计数字字符和空格 (15 分)
    • 9.数列求和 (300 分)
    • 10.C程序设计 实验3-1 (10 分)
    • 11.实验3-2 (10 分)
    • 12. 实验3-3 (10 分)
    • 13.for循环练习:输出1到X间所有数的平方根并按行输出。 (3 分)
    • 14.饮料换购 (20 分)
    • 15.输出三角形字符阵列 (15 分)
    • 16.找完数 (20 分)
    • 17. 求1!+3!+5!+……+n! (10 分)
    • 18.输出2到n之间的全部素数 (20 分)
    • 19.打印上三角乘法口诀表 (10 分)
    • 20.百钱买百鸡问题 (10 分)
    • 21. 1000以内所有各位数字之和为n的正整数 (10 分)
    • 22.画出一个金字塔图形 (10 分)
    • 23.求1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的和 (2 分)
    • 24.统计学生平均成绩与及格人数 (15 分)

1.求交错序列前N项和 (15 分)

本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中输出部分和的值,结果保留三位小数。

输入样例:
5

输出样例:
0.917

#include
#include
int main() 
{
	int n,i;
	double sum;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
    {
	sum+=pow((-1),(i-1))*i/(2*i-1);
    }
	printf("%.3f\n",sum);
}

2.统计素数并求和 (20 分)

本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:
10 31

输出样例:
7 143

#include
int main()
{
	int j,i;
    int m,n;
    int num=0,sum=0;
	scanf("%d %d",&m,&n);
	for(i=m;i<=n;i++)
	{
		for(j=2;j<=i;j++)
		{
			if(i%j==0)
			break;
        }
        if(j==i)
        {
		sum += i;
        num++;
        }
	}
	printf("%d %d\n",num,sum);
 } 

3.求分数序列前N项和 (15 分)

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:
20

输出样例:
32.66

#include
int main()
{
	int n,i;
	double sum,m=2,s=1,t;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		sum=sum+m/s;
		t=m;
		m=s+m;
		s=t;
	}
	printf("%.2f",sum);
 } 

4.猴子吃桃问题 (15 分)

一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

输入格式:
输入在一行中给出正整数N(1

输出格式:
在一行中输出第一天共摘了多少个桃子。

输入样例:
3

输出样例:
10

#include
int main()
{
	int d,x1=0,x2=1;
	scanf("%d",&d);
	for(int i=d;i>1;i--)
	{
		x1=(x2+1)*2;
		x2=x1;
	}
	printf("%d",x1);
}

6.近似求PI (15 分)

本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。
在这里插入图片描述
输入格式:
输入在一行中给出精度eps,可以使用以下语句来读输入:

scanf("%le", &eps);

输出格式:
在一行内,按照以下格式输出π的近似值(保留小数点后5位):
PI = 近似值

输入样例:
1E-5

输出样例:
PI = 3.14158

#include
int main()
{
	double fun(double eps);
	double eps;
	scanf("%le",&eps);
	printf("PI = %.5lf",fun(eps));
}
double fun(double eps)
{
	int i;
	double a=1,pi=1;
	for(i=1;a>=eps;i++){
		a=a*i/(2*i+1);
		pi+=a;
	}
	return(2*pi);
}

6.最佳情侣身高差 (10 分)

专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。

下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。

输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。

输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。

输入样例:
2
M 1.75
F 1.8

输出样例:
1.61
1.96

#include
int main()
{
	int n;
	float h;
	char sex;
	scanf("%d\n",&n);
	{
		while(n--)
		{
		scanf("%c %f\n",&sex,&h);
		if(sex=='M')
		{
		printf("%.2f\n",h/1.09);
	    }
		else
		{
		printf("%.2f\n",h*1.09);
		}
	    }
	}
}

7. Fibonacci数列 (16 分)

Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 随机输入一个整数n,求得 Fn除以10086的余数是多少

输入格式:
输入一个整数n

输出格式:
输出一个整数Fn除以10086的余数

输入样例:
3

输出样例:
2

#include
int main()
{
	int i,n,f1=1,f2=1,fn;
	scanf("%d",&n);
	if(n==1||n==2)
	fn=1;
	else
	{
	    for(i=3;i<=n;i++)
	{
	    fn=f1%10086+f2%10086;
        f1=f2;
        f2=fn;
	}
	}
	printf("%d",fn);
}

8.统计数字字符和空格 (15 分)

本题要求编写程序,输入一行字符,统计其中数字字符、空格和其他字符的个数。建议使用switch语句编写。

输入格式:
输入在一行中给出若干字符,最后一个回车表示输入结束,不算在内。

输出格式:
在一行内按照

blank = 空格个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

输入样例:
在这里给出一组输入。例如:

Reold 12 or 45T

输出样例:
在这里给出相应的输出。例如:

blank = 3, digit = 4, other = 8

#include
int main()
{
	int b=0,d=0,o=0;
	char c;
	while((c=getchar())!='\n')
	{
		if(c==' ') {
		b++;
	}
		else if(c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9'){
		d++;
	}
		else {
		o++;
	}
	}
	printf("blank = %d, digit = %d, other = %d\n",b,d,o);
 } 

9.数列求和 (300 分)

输入一个整数n,求出1到n的累加和。

输入格式:
输入一个n值。

输出格式:
输出结果。

输入样例:
在这里给出一组输入。例如:

5

输出样例:
在这里给出相应的输出。例如:

15

#include
int main()
{
    int i,n,sum;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        sum=sum+i;
        printf("%d",sum);
}

10.C程序设计 实验3-1 (10 分)

计算1+3+5+7+…+99+101的值。

输入格式:
无需输入。

输出格式:
按输出样例的形式输出累加的结果。

输入样例:
输出样例:
sum=2601

#include
int main()
{
	int i,sum;
	for(i=1;i<=101;i+=2)
	{
    sum=sum+i;
    }
    printf("sum=%d",sum);
}

11.实验3-2 (10 分)

计算1∗2∗3+3∗4∗5+…+99∗100∗101

输入格式:
无需输入。

输出格式:
按输出样例的形式输出累加的结果。

输入样例:
输出样例:
sum=13002450

#include
int main()
{
	int i,sum=0;
	for(i=1;i<100;i+=2)
	{
	 sum=sum+i*(i+1)*(i+2);
    }
    printf("sum=%d",sum);
}

12. 实验3-3 (10 分)

计算a+aa+aaa+…+aa…a(n个a)的值,a和n的值由键盘输入。a和n均为正整数,累加的结果定义为双精度实型。

输入格式:
a和n的值在一行输入,中间以空格分隔。

输出格式:
输出时结果只保留整数部分,并按输出样例的形式输出。

输入样例:
2 5

输出样例:
在这里给出相应的输出。例如:

sum=24690

#include
int main()
{
	int i,a,n;
	double t,sum=0;
	scanf("%d %d",&a,&n);
    t=a;
	for(i=1;i<=n;i++)
	{
		sum+=t;
		t=a+t*10;
	}
	printf("sum=%.0lf",sum);
}

13.for循环练习:输出1到X间所有数的平方根并按行输出。 (3 分)

读入1个10以内的正整数X(程序内变量名不一定是X,自定),输出1到X间(含X)所有数的平方根表。

输入格式:
输入一个正整数X的值。

输出格式:
分行输出1到X之间所有数的平方根,取两位小数。

输入样例:
在这里给出一组输入。例如:

4

输出样例:
在这里给出相应的输出。例如:

1.00
1.41
1.73
2.00

#include
#include
int main()
{
	int x,i;
	double a;
	scanf("%d",&x);
	for(i=1;i<=x;i++)
	{
		a=sqrt(i);
		printf("%.2lf\n",a);
	}
}

14.饮料换购 (20 分)

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。

输入格式:
输入:一个整数n,表示开始购买的饮料数量(0

输出格式:
输出:一个整数,表示实际得到的饮料数

输入样例:
在这里给出一组输入。例如:

100

输出样例:
在这里给出相应的输出。例如:

149

#include
int main()
{
	int n,sum;
	scanf("%d",&n);
	while((n/3)>0)
	{
		sum=sum+n;
		n=n/3;
	}
	 printf("%d\n",sum); 
} 

15.输出三角形字符阵列 (15 分)

本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。

输入格式:
输入在一行中给出一个正整数n(1≤n<7)。

输出格式:
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。

输入样例:
4

输出样例:
A B C D
E F G
H I
J

#include
int main()
{
	int i,n,m=65;
	scanf("%d",&n);
	for(;n>0;n--)
	{
		for(i=1;i<=n;i++)
		{
		  printf("%c ",m);
		  m++;
		}
		printf("\n");
	}
} 

16.找完数 (20 分)

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

输入格式:
输入在一行中给出2个正整数m和n(1

输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

输入样例:
2 30

输出样例:
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

#include
int main()
{
	int i,j,m,n,s,k,count=0;
	scanf("%d %d",&m,&n);
	for(i=m;i<=n;i++)
	{
		s=0;
		for(j=1;j<i;j++)
		{
			if(i%j==0)
			{
			s+=j;
		    }
		}
		if(s==i)
	  {
		printf("%d = 1",i);
		for(k=2;k<i;k++)
		{
			if(i%k==0)
			{
			printf(" + %d",k);
		    }
		}
		printf("\n");
		count++;
	  }
    }
    if(count==0)
    {
    	printf("None\n");
	}
	return 0;
 } 

17. 求1!+3!+5!+……+n! (10 分)

求1!+3!+5!+……+n!的和,要求用循环嵌套设计,n<12。

输入格式:
输入在一行中给出一个不超过12的正整数n。

输出格式:
在一行中按照格式“n=n值,s=阶乘和”的顺序输出,其中阶乘和是正整数。

输入样例:
5

输出样例:
n=5,s=127

#include
int main()
{
    int i,k,n,s=0,f=1;
    scanf("%d",&n);
	for(i=1;i<=n;i+=2) 
	 {
	 	for(k=1;k<=i;k++)
	 	{
	 		f = f*k;
		}
		s += f;
		f = 1;
	 }
	 printf("n=%d,s=%d",n,s);
}

18.输出2到n之间的全部素数 (20 分)

本题要求输出2到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。

输入格式:
输入在一行中给出一个长整型范围内的整数。

输出格式:
输出素数,每个数占6位,每行输出10个。如果最后一行输出的素数个数不到10个,也需要换行。

输入样例:
10

输出样例:
2 3 5 7

#include
int main()
{
	int i,j,n,m=0;
	scanf("%d",&n);
	for(i=2;i<=n;i++)
	{
		for(j=2;j<=i;j++)
		{
			if(i%j==0) break;
		}
		if(j==i)
		{
			printf("%6d",i);
			m++;
			if(m%10==0&&m%10<10)
			{
				printf("\n");
			}
		}
	}
	return 0;
} 

19.打印上三角乘法口诀表 (10 分)

本题要求对任意给定的一位正整数N,打印从N到1的上三角乘法口诀表(详见样例)。

输入格式:
输入在一行中给出一个正整数N(1≤N≤9)。

输出格式:
输出上三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:
6

输出样例:
16=6 26=12 36=18 46=24 56=30 66=36
15=5 25=10 35=15 45=20 55=25
1
4=4 24=8 34=12 44=16
1
3=3 23=6 33=9
12=2 22=4
1*1=1

#include
int main()
{
	int n,i,k;
	scanf("%d",&n); 
	while(n>0)
	{
		for(i=1;i<=n;i++)
		{
		k=i*n;
		printf("%d*%d=%-4d",i,n,k);
	    }
	    printf("\n");
	    n--;
	}
    return 0;
}

20.百钱买百鸡问题 (10 分)

公鸡每只5元,母鸡每只3元,小鸡1元3只,而且鸡必须整只买。100元钱买100只鸡(每一种鸡都要有),公鸡、母鸡、小鸡各多少只?请编写程序给出各种购买方案。

输入格式:
输入为一个正整数n,表示要求输出前n种可能的方案。方案的顺序,是按照公鸡只数从少到多排列的。

输出格式:
显示前n种方案中公鸡、母鸡、小鸡各多少只。每行显示一种方案,数字之间空一格,最后一个数字后没有空格。

注意:如果全部方案不到n种,就顺序输出全部可能的方案。

输入样例:
5

输出样例:
在这里给出相应的输出。例如:

4 18 78
8 11 81
12 4 84

#include 
int main ()
{
   int l=0,x,y,z,n;
   scanf("%d",&n);
   if(l!=n)
   {
   for(x = 1;x <= 20;x++)
      {
	  for(y = 1;y <= 34;y++)
      {
         for(z = 1;z <= 100;z++)
            	if(x+y+z == 100&&5*x+3*y+z/3 == 100&&z%3 == 0)
            	{
				printf("%d ",x);
            	printf("%d ",y);
            	printf("%d",z);
            	printf("\n");
            	l++;
            	if(l==n) break;
                }
        if(l==n) break;
     }
    if(l==n) break;
    }
   }
    return 0;            
}

21. 1000以内所有各位数字之和为n的正整数 (10 分)

输出1000以内所有各位数字之和为n的正整数,例如:如果输入的n是6,那么,105的各位数字之和1+0+5=6, 123的各位数字之和1+2+3=6,两者都满足要求。每行输出6列,每个整数占8位宽度右对齐。

输入格式:
从键盘输入整数n的值。

输出格式:
每行输出6列,每个整数占8位宽度右对齐。如果最后一行不足6列,也需要换行。

输入样例:
在这里给出一组输入。例如:

6

输出样例:
在这里给出相应的输出。例如:

   6      15      24      33      42      51
  60     105     114     123     132     141
 150     204     213     222     231     240
 303     312     321     330     402     411
 420     501     510     600
#include
int main()
{
	int a,b,c,n,i,m=0;
	scanf("%d",&n);
	for(i=1;i<1000;i++)
	{
		a=i%10;
		b=i%100/10;
		c=i/100;
		if(a+b+c==n)
		{
		printf("%8d",i);
		m++;
		if(m%6==0&&m%6<6) printf("\n");
	    }
	}
} 

22.画出一个金字塔图形 (10 分)

编写一段程序,输入一个整数,像右面这样显示出输入整数层的金字塔形状。

提示: 第 i 行显示(i-1)×2 +1 个 ‘* ’

让我们来画一个金字塔。
金字塔有几层:3
在这里插入图片描述

输入样例:
3

输出样例:
让我们来画一个金字塔。
金字塔有几层:
在这里插入图片描述

#include 
int main ()
{
	int n,i,j,k;
		scanf("%d",&n);
	printf("让我们来画一个金字塔。\n");
	printf("金字塔有几层:\n");
	for (i=1; i<=n; i++) 
	{
		for (j=1; j<=n-i; j++)
		 {  
			printf(" ");
		}
		for(k=1; k <= (2*i-1); k++) 
		{ 
			printf("*");
		}                 
		printf("\n");
	}
	return 0;
}

23.求1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的和 (2 分)

求1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的和

输入格式:
输入一个整数。

输出格式:
输出所求的和。

输入样例:
在这里给出一组输入。例如:

3

输出样例:
在这里给出相应的输出。例如:

sum = 10

#include
int main()
{
	int i,k,n,sum=0,s=0;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		for(k=1;k<=i;k++)
		{
			s=s+k;
		}
		sum+=s;
		s=0;
	}
	printf("sum = %d",sum);
} 

24.统计学生平均成绩与及格人数 (15 分)

本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。

输入格式:
输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。

输出格式:
按照以下格式输出:

average = 成绩均值
count = 及格人数
其中平均值精确到小数点后一位。

输入样例:
5
77 54 92 73 60
输出样例:
average = 71.2
count = 4

#include
int main()
{
	int i,n;
	int count=0;
	double average;
	double sum=0.0;
	scanf("%d",&n);
		int a[n];
	if(n==0){
		printf("average = 0.0\n");
		printf("count = 0");
	}
	else{
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{
		sum=sum+a[i];
		if(a[i]>=60){ 
	    count++;
	    } 
	}
	average=(sum*1.0)/n;
	printf("average = %.1lf\n",average);
	printf("count = %d",count);
	return 0;
}
}

你可能感兴趣的:(C语言,c语言)