输入一个非负整数n,生成一张3的乘方表,输出30 ~3n 的值。可调用幂函数计算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
int main()
{
int i,n;
long long p=1;
scanf("%d",&n);
for (i=0;i<=n;i++)
{
printf("pow(3,%d) = %lld\n",i,p);
p=p*3;
}
return 0;
}
2.统计学生成绩本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
输入样例:
7
77 54 92 73 60 65 69
输出样例:
1 0 2 3 1
(1)编程思路。
简单的循环处理。
(2)源程序。
#include
int main()
{
int i,n;
scanf("%d",&n);
int score,a=0,b=0,c=0,d=0,e=0;
for (i=1;i<=n;i++)
{
scanf("%d",&score);
if (score>=90) a++;
else if (score>=80) b++;
else if (score>=70) c++;
else if (score>=60) d++;
else e++;
}
printf("%d %d %d %d %d\n",a,b,c,d,e);
return 0;
}
3.输出闰年输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入格式:
输入在一行中给出21世纪的某个截止年份。
输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
输入样例1:
2048
输出样例1:
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
输入样例2:
2000
输出样例2:
Invalid year!
(1)编程思路。
闰年的判定条件是:①能被4整除,但不能被100整除的年份都是闰年,如1996年,2004年是闰年;②能被100整除,又能被400整除的年份也是闰年。如2000年是闰年。可以用一个逻辑表达式来表示:
(year%4==0&&year%100! =0) | | year%400==0
当year为某一整数值时,如果上述表达式值为true(1),则year为闰年;否则year为非闰年。
(2)源程序。
#include
int main()
{
int endyear;
scanf("%d",&endyear);
int i,cnt=0;
if (endyear<=2000 || endyear>2100)
printf("Invalid year!\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");
}
return 0;
}
4.寻找250对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。
输入格式:
输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”。
输出格式:
在一行中输出第一次出现的“250”是对方扔过来的第几个数字(计数从1开始)。题目保证输出的数字在整型范围内。
输入样例:
888 666 123 -233 250 13 250 -222
输出样例:
5
(1)编程思路。
由于输入的数据个数未知,因此采用循环 while (scanf("%d",&x)!=EOF) 输入各数据。
(2)源程序。
#include
int main()
{
int ans=0,cnt=0,x;
while (scanf("%d",&x)!=EOF)
{
cnt++;
if (x==250 && ans==0) ans=cnt;
}
printf("%d\n",ans);
return 0;
}
5.最佳情侣身高差专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。
下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。
输入格式:
输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。
输出格式:
对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。
输入样例:
2
M 1.75
F 1.8
输出样例:
1.61
1.96
(1)编程思路。
简单的循环处理。
(2)源程序。
#include
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
char sex;
float height;
getchar();
scanf("%c%f",&sex,&height);
if (sex=='M')
printf("%.2f\n",height/1.09);
else
printf("%.2f\n",height*1.09);
}
return 0;
}
6.作品评分全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。
输入格式:
输入数据包括两行: 第一行为n,表示n个评委,n>2。 第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。
输出格式:
输出平均分,结果保留两位小数。
输入样例:
6
10 9 8 7.9 9 9.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
int main()
{
int n;
scanf("%d",&n);
float score,min,max,sum=0;
scanf("%f",&score);
min=max=score;
sum+=score;
for (int i=2;i<=n;i++)
{
scanf("%f",&score);
sum+=score;
if (min>score) min=score;
if (max
}
printf("%.2f\n",(sum-min-max)/(n-2));
return 0;
}
7.求平方根序列前N项和本题要求编写程序,计算平方根序列的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后两位。题目保证计算结果不超过双精度范围。
输入样例:
10
输出样例:
sum = 22.47
(1)编程思路。
简单的循环累加求和。
(2)源程序。
#include
#include
int main()
{
int n;
scanf("%d",&n);
double sum=0;
for (int i=1;i<=n;i++)
{
sum+=sqrt(1.0*i);
}
printf("sum = %.2f\n",sum);
return 0;
}
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
int main()
{
int n;
scanf("%d",&n);
double sum=0;
double x=2,y=1,z;
sum=x/y;
for (int i=2;i<=n;i++)
{
z=x+y;
y=x;
x=z;
sum+=x/y;
}
printf("%.2f\n",sum);
return 0;
}
9.打印九九口诀表下面是一个完整的下三角九九口诀表:
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位、左对齐。
输入样例:
4
输出样例:
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)编程思路。
程序写成一个嵌套的二重循环,外循环i控制输出的行数(1~n),内循环j控制每行中输出i个乘法算式。
(2)源程序。
#include
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=i;j++)
printf("%d*%d=%-4d",j,i,i*j);
printf("\n");
}
return 0;
}
10.统计素数并求和本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
(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
int main()
{
int m,n;
int cnt=0,sum=0;
int i,j;
scanf("%d%d",&m,&n);
if (m==1) m++;
for (i=m;i<=n;i++)
{
int t=(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);
return 0;
}
11.输出三角形字符阵列本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
输入格式:
输入在一行中给出一个正整数n(1≤n<7)。
输出格式:
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。
输入样例:
4
输出样例:
A B C D
E F G
H I
J
(1)编程思路。
程序写成一个嵌套的二重循环,外循环i控制输出的行数(1~n),内循环j控制每行中输出n+1-i个字符。
由于输出的字符从A开始,因此增加一个计数器cnt,每输出一个字符cnt加1,初始时cnt=0,这样当前输出的字符为’A’+cnt。
(2)源程序。
#include
int main()
{
int n,cnt=0;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n+1-i;j++)
{
printf("%c ",'A'+cnt);
cnt++;
}
printf("\n");
}
return 0;
}
12.特殊a串数列求和给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
输入格式:
输入在一行中给出不超过9的正整数a和n。
输出格式:
在一行中按照“s = 对应的和”的格式输出。
输入样例:
2 3
输出样例:
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
int main()
{
int a,n,num=0,sum=0;
scanf("%d%d",&a,&n);
for (int i=1;i<=n;i++)
{
num=num*10+a;
sum+=num;
}
printf("s = %d\n",sum);
return 0;
}
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)编程思路。
本题的实质是求输入的分子和分母的最大公约数。
word/media/image1.png利用转辗相除法求两个整数的最大公约数。例如,求整数m=48,n=18两个数的最大公约数的方法如下图所示。
具体做法是:,若m%n==0,则n是最大公约数,否则,计算 r=m%n,置m=n,n=r,重复这个过程,直到m%n==0。
(2)源程序。
#include
int main()
{
int m,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);
return 0;
}
14.输出N以内的所有素数编程找出N(2≤N≤500)以内(即小于等于N)的所有素数。
输入格式:
输入整数N(2≤N≤500)。
输出格式:
每8个一行输出N以内的所有素数。注意每个数据均占5列,且采用右对齐。
输入样例:
50
输出样例:
2 3 5 7 11 13 17 19
23 29 31 37 41 43 47
(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
int main()
{
int n;
int cnt=0;
int i,j;
scanf("%d",&n);
for (i=2;i<=n;i++)
{
int t=(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");
return 0;
}
15.跟奥巴马一起画方块美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
(1)编程思路。
程序写成一个嵌套的二重循环,外循环控制输出的行数(1~(n+1)/2),内循环控制每行中删除n个字符c。
(2)源程序。
#include
int main()
{
int n;
char c;
int i,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");
}
return 0;
}
《C语言编程练习之循环结构》相关文档:
C语言编程练习之循环结构10-27
练习点钞的心得体会01-26
《红楼梦》71-120回练习及答案02-12
《红楼梦》71-120回练习及答案剖析02-12
艺人练习生培训合同02-21
物流工程随堂练习及标准答案03-24
国际货物运输和保险练习04-27
单证练习与答案04-27
二年级下册数学思维练习补充练习105-18