C语言编程练习之循环结构.docx

上传人:b****6 文档编号:5866382 上传时间:2023-01-01 格式:DOCX 页数:20 大小:36.81KB
下载 相关 举报
C语言编程练习之循环结构.docx_第1页
第1页 / 共20页
C语言编程练习之循环结构.docx_第2页
第2页 / 共20页
C语言编程练习之循环结构.docx_第3页
第3页 / 共20页
C语言编程练习之循环结构.docx_第4页
第4页 / 共20页
C语言编程练习之循环结构.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C语言编程练习之循环结构.docx

《C语言编程练习之循环结构.docx》由会员分享,可在线阅读,更多相关《C语言编程练习之循环结构.docx(20页珍藏版)》请在冰豆网上搜索。

C语言编程练习之循环结构.docx

C语言编程练习之循环结构

1.生成3的乘方表3

输入一个非负整数n,生成一张3的乘方表,输出3​0​​~3​n​的值。

可调用幂函数计算3的乘方。

输入格式:

输入在一行中给出一个非负整数n。

输出格式:

按照幂的递增顺序输出n+1行,每行格式为“pow(3,i)=3的i次幂的值”。

题目保证输出数据不超过长整型整数的范围。

输入样例:

3

输出样例:

pow(3,0)=1

pow(3,1)=3

pow(3,2)=9

pow(3,3)=27

(1)编程思路。

简单的循环处理。

程序中无需调用幂函数计算3的乘方。

因为3n=3n-1×3。

(2)源程序。

#include

intmain()

{

inti,n;

longlongp=1;

scanf("%d",&n);

for(i=0;i<=n;i++)

{

printf("pow(3,%d)=%lld\n",i,p);

p=p*3;

}

return0;

}

2.统计学生成绩

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

百分制成绩到五分制成绩的转换规则:

大于等于90分为A;

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

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

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

小于60为E。

输入格式:

输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

输出格式:

在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

输入样例:

7

77549273606569

输出样例:

10231

(1)编程思路。

简单的循环处理。

(2)源程序。

#include

intmain()

{

inti,n;

scanf("%d",&n);

intscore,a=0,b=0,c=0,d=0,e=0;

for(i=1;i<=n;i++)

{

scanf("%d",&score);

if(score>=90)a++;

elseif(score>=80)b++;

elseif(score>=70)c++;

elseif(score>=60)d++;

elsee++;

}

printf("%d%d%d%d%d\n",a,b,c,d,e);

return0;

}

3.输出闰年

输出21世纪中截止某个年份以来的所有闰年年份。

注意:

闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。

输入格式:

输入在一行中给出21世纪的某个截止年份。

输出格式:

逐行输出满足条件的所有闰年年份,即每个年份占一行。

输入若非21世纪的年份则输出"Invalidyear!

"。

若不存在任何闰年,则输出“None”。

输入样例1:

2048

输出样例1:

2004

2008

2012

2016

2020

2024

2028

2032

2036

2040

2044

2048

输入样例2:

2000

输出样例2:

Invalidyear!

(1)编程思路。

闰年的判定条件是:

①能被4整除,但不能被100整除的年份都是闰年,如1996年,2004年是闰年;②能被100整除,又能被400整除的年份也是闰年。

如2000年是闰年。

可以用一个逻辑表达式来表示:

(year%4==0&&year%100!

=0)||year%400==0

当year为某一整数值时,如果上述表达式值为true

(1),则year为闰年;否则year为非闰年。

(2)源程序。

#include

intmain()

{

intendyear;

scanf("%d",&endyear);

inti,cnt=0;

if(endyear<=2000||endyear>2100)

printf("Invalidyear!

\n");

else

{

for(i=2001;i<=endyear;i++)

{

if(i%4==0&&i%100!

=0||i%400==0)

{

printf("%d\n",i);

cnt++;

}

}

if(cnt==0)printf("None\n");

}

return0;

}

4.寻找250

对方不想和你说话,并向你扔了一串数……而你必须从这一串数字中找到“250”这个高大上的感人数字。

输入格式:

输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。

输出格式:

在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。

题目保证输出的数字在整型范围内。

输入样例:

888666123-23325013250-222

输出样例:

5

(1)编程思路。

由于输入的数据个数未知,因此采用循环while(scanf("%d",&x)!

=EOF)输入各数据。

(2)源程序。

#include

intmain()

{

intans=0,cnt=0,x;

while(scanf("%d",&x)!

=EOF)

{

cnt++;

if(x==250&&ans==0)ans=cnt;

}

printf("%d\n",ans);

return0;

}

5.最佳情侣身高差

专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:

(女方的身高)×1.09=(男方的身高)。

如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。

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

输入格式:

输入第一行给出正整数N(≤10),为前来查询的用户数。

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

输出格式:

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

输入样例:

2

M1.75

F1.8

输出样例:

1.61

1.96

(1)编程思路。

简单的循环处理。

(2)源程序。

#include

intmain()

{

intn;

scanf("%d",&n);

for(inti=1;i<=n;i++)

{

charsex;

floatheight;

getchar();

scanf("%c%f",&sex,&height);

if(sex=='M')

printf("%.2f\n",height/1.09);

else

printf("%.2f\n",height*1.09);

}

return0;

}

6.作品评分

全国中小学生Scratch作品大赛拉开了序幕。

每个参赛选手可以通过网络直接上传作品。

本次比赛人人可做评委。

每个网络评委可以通过网络对每一件作品进行打分。

评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。

输入格式:

输入数据包括两行:

第一行为n,表示n个评委,n>2。

第二行是n个评委的打分,分数之间有一个空格。

打分是可以带有小数部分的。

输出格式:

输出平均分,结果保留两位小数。

输入样例:

6

10987.999.5

输出样例:

8.88

(1)编程思路。

定义变量min、max和sum分别保存选手的最低分、最高分和总分,先输入第1个评委的打分score,且置min=max=score,即第1个分数既是最低分,也是最高分,同时置sum=score;之后用循环依次输入第2~第n个评委的打分,对每次输入的score,累加到sum中(sum+=score),若score>max,置max=score;若score

(2)源程序。

#include

intmain()

{

intn;

scanf("%d",&n);

floatscore,min,max,sum=0;

scanf("%f",&score);

min=max=score;

sum+=score;

for(inti=2;i<=n;i++)

{

scanf("%f",&score);

sum+=score;

if(min>score)min=score;

if(max

}

printf("%.2f\n",(sum-min-max)/(n-2));

return0;

}

7.求平方根序列前N项和

本题要求编写程序,计算平方根序列​的前N项之和。

可包含头文件math.h,并调用sqrt函数求平方根。

输入格式:

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

输出格式:

在一行中按照“sum=S”的格式输出部分和的值S,精确到小数点后两位。

题目保证计算结果不超过双精度范围。

输入样例:

10

输出样例:

sum=22.47

(1)编程思路。

简单的循环累加求和。

(2)源程序。

#include

#include

intmain()

{

intn;

scanf("%d",&n);

doublesum=0;

for(inti=1;i<=n;i++)

{

sum+=sqrt(1.0*i);

}

printf("sum=%.2f\n",sum);

return0;

}

8.求分数序列前N项和

本题要求编写程序,计算序列2/1+3/2+5/3+8/5+...的前N项之和。

注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

输入格式:

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

输出格式:

在一行中输出部分和的值,精确到小数点后两位。

题目保证计算结果不超过双精度范围。

输入样例:

20

输出样例:

32.66

(1)编程思路。

本题中分子和分母分别来自斐波那契数列数列的相邻两项,分子取后一项,分母取前一项。

设斐波那契数列的前两项分别为y=1,x=2,用循环迭代求斐波那契前n项,在循环中执行

z=y+x;//计算下一项的值

y=x;x=z;//为下次迭代作准备

将前n项的x/y累加起来即得所求答案。

(2)源程序。

#include

#include

intmain()

{

intn;

scanf("%d",&n);

doublesum=0;

doublex=2,y=1,z;

sum=x/y;

for(inti=2;i<=n;i++)

{

z=x+y;

y=x;

x=z;

sum+=x/y;

}

printf("%.2f\n",sum);

return0;

}

9.打印九九口诀表

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

1*1=1

1*2=22*2=4

1*3=32*3=63*3=9

1*4=42*4=83*4=124*4=16

1*5=52*5=103*5=154*5=205*5=25

1*6=62*6=123*6=184*6=245*6=306*6=36

1*7=72*7=143*7=214*7=285*7=356*7=427*7=49

1*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=64

1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81

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

输入格式:

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

输出格式:

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

输入样例:

4

输出样例:

1*1=1

1*2=22*2=4

1*3=32*3=63*3=9

1*4=42*4=83*4=124*4=16

(1)编程思路。

程序写成一个嵌套的二重循环,外循环i控制输出的行数(1~n),内循环j控制每行中输出i个乘法算式。

(2)源程序。

#include

intmain()

{

intn;

scanf("%d",&n);

for(inti=1;i<=n;i++)

{

for(intj=1;j<=i;j++)

printf("%d*%d=%-4d",j,i,i*j);

printf("\n");

}

return0;

}

10.统计素数并求和

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

输入格式:

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

输出格式:

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

输入样例:

1031

输出样例:

7143

(1)编程思路。

判断一个数m是否为素数的方法是:

用2~sqrt(m)中的每一个整数i去除m,若某一个i能整除m,则m不是素数;否则,m是素数。

该操作可以写成一个循环,如下:

for(i=2;i<=sqrt(1.0*m);i++)

if(m%i==0)break;

循环执行后,若i>sqrt(1.0*m),则m是素数,因为这种情况下,循环中的break语句没有被执行,即2~sqrt(m)中的每一个整数i都不能整除m。

求m~n之间的所有素数,写成一个循环,在循环中嵌套一个循环判断每个整数i是否为素数,若是,则计数并累加求和。

(2)源程序。

#include

#include

intmain()

{

intm,n;

intcnt=0,sum=0;

inti,j;

scanf("%d%d",&m,&n);

if(m==1)m++;

for(i=m;i<=n;i++)

{

intt=(int)sqrt(1.0*i);

for(j=2;j<=t;j++)

if(i%j==0)break;

if(j>t)

{

cnt++;

sum+=i;

}

}

printf("%d%d\n",cnt,sum);

return0;

}

11.输出三角形字符阵列

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

输入格式:

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

输出格式:

输出n行由大写字母A开始构成的三角形字符阵列。

格式见输出样例,其中每个字母后面都有一个空格。

输入样例:

4

输出样例:

ABCD

EFG

HI

J

(1)编程思路。

程序写成一个嵌套的二重循环,外循环i控制输出的行数(1~n),内循环j控制每行中输出n+1-i个字符。

由于输出的字符从A开始,因此增加一个计数器cnt,每输出一个字符cnt加1,初始时cnt=0,这样当前输出的字符为’A’+cnt。

(2)源程序。

#include

intmain()

{

intn,cnt=0;

scanf("%d",&n);

for(inti=1;i<=n;i++)

{

for(intj=1;j<=n+1-i;j++)

{

printf("%c",'A'+cnt);

cnt++;

}

printf("\n");

}

return0;

}

12.特殊a串数列求和

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

输入格式:

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

输出格式:

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

输入样例:

23

输出样例:

s=246

(1)编程思路。

aa⋯a(n个a)可以看成由n-1个a乘以10加上a得到。

初始时设num=0,每次循环执行num=num*10+a。

显然,第1次循环(i=1)时,num=0*10+a=a;第2次循环(i=2)时,num=a*10+a=aa;…;第n次循环(i=n)时,num=aa⋯a(n-1个a)*10+a=aa⋯a(n个a)。

将每次循环得到的num累加起来就是所求答案。

(2)源程序。

#include

#include

intmain()

{

inta,n,num=0,sum=0;

scanf("%d%d",&a,&n);

for(inti=1;i<=n;i++)

{

num=num*10+a;

sum+=num;

}

printf("s=%d\n",sum);

return0;

}

13.约分最简分式

分数可以表示为分子/分母的形式。

编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。

最简分式是指分子和分母不具有可以约分的成分了。

如6/12可以被约分为1/2。

当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。

输入格式:

输入在一行中给出一个分数,分子和分母中间以斜杠/分隔,如:

12/34表示34分之12。

分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。

提示:

在scanf的格式字符串中加入/,让scanf来处理这个斜杠。

输出格式:

在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用分子/分母的形式表示分数。

如5/6表示6分之5。

输入样例:

66/120

输出样例:

11/20

(1)编程思路。

本题的实质是求输入的分子和分母的最大公约数。

利用转辗相除法求两个整数的最大公约数。

例如,求整数m=48,n=18两个数的最大公约数的方法如下图所示。

具体做法是:

,若m%n==0,则n是最大公约数,否则,计算r=m%n,置m=n,n=r,重复这个过程,直到m%n==0。

(2)源程序。

#include

intmain()

{

intm,n,r,a,b;

scanf("%d/%d",&a,&b);

m=a;n=b;

while(m%n!

=0)

{

r=m%n;

m=n;

n=r;

}

printf("%d/%d\n",a/n,b/n);

return0;

}

14.输出N以内的所有素数

编程找出N(2≤N≤500)以内(即小于等于N)的所有素数。

输入格式:

输入整数N(2≤N≤500)。

输出格式:

每8个一行输出N以内的所有素数。

注意每个数据均占5列,且采用右对齐。

输入样例:

50

输出样例:

235711131719

23293137414347

(1)编程思路。

判断一个数m是否为素数的方法是:

用2~sqrt(m)中的每一个整数i去除m,若某一个i能整除m,则m不是素数;否则,m是素数。

该操作可以写成一个循环,如下:

for(i=2;i<=sqrt(1.0*m);i++)

if(m%i==0)break;

循环执行后,若i>sqrt(1.0*m),则m是素数,因为这种情况下,循环中的break语句没有被执行,即2~sqrt(m)中的每一个整数i都不能整除m。

求2~n之间的所有素数,写成一个循环,在循环中嵌套一个循环判断每个整数i是否为素数,若是,则计数并输出,输出时每输出8个数后换行。

(2)源程序。

#include

#include

intmain()

{

intn;

intcnt=0;

inti,j;

scanf("%d",&n);

for(i=2;i<=n;i++)

{

intt=(int)sqrt(1.0*i);

for(j=2;j<=t;j++)

if(i%j==0)break;

if(j>t)

{

printf("%5d",i);

cnt++;

if(cnt%8==0)printf("\n");

}

}

if(cnt%8!

=0)printf("\n");

return0;

}

15.跟奥巴马一起画方块

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。

2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:

在屏幕上画一个正方形。

现在你也跟他一起画吧!

输入格式:

输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。

输出格式:

输出由给定字符C画出的正方形。

但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。

输入样例:

10a

输出样例:

aaaaaaaaaa

aaaaaaaaaa

aaaaaaaaaa

aaaaaaaaaa

aaaaaaaaaa

(1)编程思路。

程序写成一个嵌套的二重循环,外循环控制输出的行数(1~(n+1)/2),内循环控制每行中删除n个字符c。

(2)源程序。

#include

intmain()

{

intn;

charc;

inti,j;

scanf("%d%c",&n,&c);

for(i=1;i<=(n+1)/2;i++)

{

for(j=1;j<=n;j++)

printf("%c",c);

printf("\n");

}

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1