2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C语言 基于循环结构的程序设计(PTA)

C语言 基于循环结构的程序设计(PTA)

时间:2021-05-10 01:38:51

相关推荐

C语言 基于循环结构的程序设计(PTA)

一、实验目的

1.学习循环语句for、while和do-while语句的使用方法。

2.学习用循环语句实现各种算法,例如穷举法、迭代法等。

二、实验内容

1找出最小值

本题要求编写程序,找出给定一系列整数中的最小值。

输入格式:输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔.。输出格式:在一行中按照“min = 最小值”的格式输出n个整数中的最小值。

2 打印九九口诀表

下面是一个完整的下三角九九口诀表:

1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

1*4=4 2*4=8 3*4=12 4*4=16

1*5=5 2*5=10 3*5=15 4*5=20 5*5=25

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

本题要求对任意给定的一位正整数N,输出从1*1到N*N的部分口诀表

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

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

3 计算阶乘和

对于给定的正整数N,需要你计算 S=1!+2!+3!+...+N!。

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

输出格式:在一行中输出S的值。

4 求整数段和

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

输入格式:输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。

输出格式:首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。

5 统计学生成绩

本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

• 大于等于90分为A;

• 小于90且大于等于80为B;

• 小于80且大于等于70为C;

• 小于70且大于等于60为D;

• 小于60为E。

输入格式:输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。 输出格式:在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

6 特殊a串数列求和 (20分)

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:

输入在一行中给出不超过9的正整数a和n。

输出格式:

在一行中按照“s = 对应的和”的格式输出。

输入样例:

2 3

输出样例:

s = 246

7 水仙花数

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1

​3

​​ +5

​3

​​ +3

​3

​​ 。 本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3≤N≤7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:

3

输出样例:

153

370

371

407

8 打印沙漏 (20分)

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

*****

***

*

***

*****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:

19 *

输出样例:

*****

***

*

***

*****

2

、实验源程序及结果截图

1 找出最小值

#include <stdio.h>int main(){int n,i = 0,j,min;do{scanf("%d ",&n);}while(n <= 0);//控制n的范围for(i = 0;i < n;i++){scanf("%d ",&j);//输入n个整数if(i == 0) {min = j; //令第一个数等于min}else{if(j < min)//如果j比min小则把j的值赋给min{min = j;}}i++;}printf("min = %d",min); //输出最小值return 0;}

2 打印九九口诀表

#include <stdio.h>int main(){int N,i,j;do{scanf("%d",&N);}while(N <= 0); //控制N的范围for(i = 1;i <= N;i++) //控制打印的行数{for(j = 1;j <= i;j++) //控制每一行的geshu{printf("%d*%d=%-4d",j,i,i*j);}printf("\n"); //控制换行}return 0;}

3 计算阶乘和

#include <stdio.h>int main(){int N,sum = 0,S,i,j;do{scanf("%d",&N); }while(N <= 0 || N > 10); //控制N的范围for(i = 0;i < N;i++) //外层循环控制累乘的个数{for(j = 0;j <= i;j++)//内层循环控制每一个累乘的终点{S = S * (j + 1);}sum = sum + S; //对累乘求和S = 1; //初始化S}printf("%d",sum); //输出总和return 0;}

4 求整数段和

#include <stdio.h>int main(){int A,B,i,j = 1,sum = 0;do{scanf("%d %d",&A,&B);}while(A<-100||A>100 || B<-100||B>100||A>B);//控制A和B的范围for(i = A;i <= B;i++,j++) //从A到B的所有数{printf("%5d",i); //输出数字并占五个字符宽度右对齐sum = sum + i; //求和if(j % 5 == 0)printf("\n");//每五个数换行}if((j - 1) % 5 != 0) //如果最后一行不足五个数输出换行printf("\n");printf("Sum = %d",sum);return 0;}

5 统计学生成绩

#include <stdio.h>int main(){int N,i,j,a=0,b=0,c=0,d=0,e=0;//定义各级初值do{scanf("%d",&N);}while(N > 1000 || N <= 0); //控制N的范围for(i = 0;i < N;i++) { scanf("%d",&j);if(j >= 90){a++; //成绩大于90时a加一}else if(j >= 80 && j < 90){b++; //成绩大于80小于90时b加一}else if(j >= 70 && j < 80){c++; //成绩大于70小于80时b加一}else if(j >= 60 && j < 70){d++; //成绩大于70小于60时b加一}else{e++; //成绩小于60时e加一}}printf("%d %d %d %d %d",a,b,c,d,e);return 0;}

6 特殊a串数列求和

#include <stdio.h>int main(){int a,n,i;double s = 0.0,x = 0.0;do{scanf("%d %d",&a,&n);}while(a<=0 || a > 9 || n <= 0 || n > 9); //控制a和n的范围for(i = 0;i < n;i++){x = x*10 + a; //计算每一个aa……a的值s = s + x;//求和}printf("s = %.0lf",s);//输出整数return 0;}

7 水仙花数

#include <stdio.h>#include <math.h>int main(){int N,i,j,k,s=1,sum=0,e,a;scanf("%d",&N);for(i=pow(10,N-1);i<pow(10,N);i++) //查找所有N位数{e=i;for(k=1;k<=N;k++){a=i%10; //求个位数i=i/10;for(j=1;j<=N;j++){s=s*a; //算a的N次方}sum=sum+s;s=1;}if(sum==e) //如果符合条件{printf("%d\n",e);}sum=0;i=e;}return 0;}

8 打印沙漏

#include <stdio.h>int main(){int N,i,j=0,m,n,sum=0;char c;scanf("%d %c",&N,&c);for(i=1;1+2*(i*i-1)<=N;i++){j++;}//算最大上半部分沙漏的行数for(m=1;m<=j;m++)//打印上半部分沙漏{for(n=1;n<=2*j-m;n++){if(n<=m-1)//每一行打印不同的空格数和字符数printf(" ");else{printf("%c",c);sum++;//记录下打印了多少字符}}printf("\n");}for(m=1;m<j;m++)//打印下半部分沙漏{for(n=1;n<=j+m;n++){if(n<=j-1-m)//每一行打印不同的空格和字符printf(" ");else{printf("%c",c);sum++;//记录下打印了多少字符}}printf("\n");//换行}printf("%d",N-sum);//输出剩余的字符数return 0;}

四、实验的分析与思考

1、 找出最小值

先令第一个数等于最小值,然后通过循环比较后面的数,小于最小值则赋值给最小值。

2 打印九九口诀表

利用双重循环分别对行和列进行控制。

3 计算阶乘和

先利用循环进行阶乘运算,然后求和。

4 求整数段和

把两个数中间的数打印出来,一个数字占五位并记录打印的次数,每当打印次数为5的倍数的时候,换行一次,当打印总次数为五的倍数的时候最后不换行。

5 统计学生成绩

根据学生的成绩通过循环进行和条件的比较,符合条件则相应数加一。

6 特殊a串数列求和

先利用循环求出aa...a的值,再求和

7 水仙花数

把每一位数都算出来,利用循环来求他们的N次方,再求和,判断是否符合条件。

8 打印沙漏

先算出能打印沙漏的上半部分行数的最大值,然后在根据数量关系打印上半部分沙漏,之后再根据数量关系打印下班部分沙漏。

假设N=5,上半部分最大行数为j=3

行数 空格 字符 sum 所以行数于sum的关系为sum=N+1-行数

1 0 5 5 空格数于行数的关系为空格数等于行数-1

2 1 3 4

3 2 1 3

行数 空格 字符 sum 所以行数于sum的关系为sum=行数+j

1 1 3 4空格数于行数的关系为空格数等于j-1-行数

2 0 5 5空格数逐渐增大就加行数,逐渐减小就减行数

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。