c语言循环
山东春季高考C语言专项复习资料
C语言编程测试题(第四章)
循环编程专项训练
姓名 成绩
1.编程1+2+3+4+5.输出结果
#include <stdio.h>
main()
{
int sum,i;
sum=0;
i=1;
while(i<=5)
{
sum=sum+i;
i=i+1;
}
printf("1+2+3+4+5=%d",sum);
}
2.输入一个整数,按相反次序输出。例如,输入54321,输出12345.
#include <stdio.h>
main()
{
long num;
int b;
printf("输入一个整数: ");
scanf("%ld",&num);
do
{ b=num%10;
printf("%d",b);
num=num/10;
}while(num);
printf("\n");
getchar();
}
3.从键盘上输入10个整数,求其和并输出。
#include<stdio.h>
main()
{
int i,num,sum;
printf("从键盘上输入10个整数: \n");
sum=0;
for(i=1;i<=10;i++)
{
scanf("%d",&num);
sum=sum+num;
}
printf("这10个整数的和为: %d",sum);
}
4.从键盘上输入若干个整数,直到输入0为止,求它们的乘积并输出。
#include <stdio.h>
main()
{
int n;
long t=1;
printf("从键盘上输入若干个整数,直到输入0为止 \n");
scanf("%d",&n);
while(n!=0)
{ t=t*n;
scanf("%d",&n);
}
printf("%d\n",t);
}
5.打印九九乘法表
#include <stdio.h>
main()
{
int i,j;
for(i=1;i<10;i++)
printf("%5d ",i);
printf("\n-----------------------\n");
for(i=1;i<10;i++)
{ for(j=1;j<=i;j++)
printf("%2d*%d=%-3d",i,j,i*j);
printf("\n");
}
}
6.输入圆柱体的高,求不同半径的圆柱体的体积,只计算体积在100以下的圆柱体。
#include <stdio.h>
#define PI 3.14
main()
{
int r;
float v,h;
printf("请输入圆柱体的高:");
scanf("%f",&h);
for(r=1;r<=10;r++)
{
v=PI*r*r*h;
if(v>100.0) break;
printf("半径等于 %d,体积等于 %.2f \n",r, v);
}
printf("此时r=%d\n",r);
}
7.输出50~100之间所有不能被7整除的数。
#include <stdio.h>
main()
{
int num,cnt=0;
for(num=50;num<=100;num++)
{
if(num%7==0)
continue; /*结束本轮循环*/
printf("%5d",num);
cnt++;
if(cnt%10==0) printf("\n"); /*每行输出10个整数*/
}
}
8.判断一个数是否为素数
#include <stdio.h>
main()
{
int num,j,tag=1,m;
printf("请输入一个自然数:");
scanf("%d",&num);
m=sqrt(num);
for(j=2;j<=m;j++)
if(num%j==0)
{
tag=0;
break;
}
if(tag==1)
printf("%d 是素数\n",num);
else
printf("%d 不是素数\n",num);
}
9.找出100~200之间的所有素数
#include <stdio.h>
#include <math.h>
main()
{
int num,j,tag,m,cnt=0;
for(num=101;num<200;num+=2)
{
tag=1;
m=sqrt(num);
for(j=2;j<=m;j++)
if(num%j==0) {tag=0; break;}
if(tag==1)
{
printf ("%5d",num);
cnt++;
if(cnt%10==0) printf("\n");
}
}
}
10.输入两个整数,求它们的最大公约数。方法是采用“辗转相除法”,即反复模除取余,直到余数为0.
#include <stdio.h>
main()
{
int a,b,r,tmp;
printf ("输入两个整数:");
scanf ("%d%d",&a,&b);
if (a<b) /*若第1个数小于第2个数,则两者互换*/
{tmp=a;a=b;b=tmp;}
do
{
r=a%b;
a=b;
b=r;
}while(r);
printf("最大公约数为: %d\n",a);
getchar();
}
11.“百鸡问题”是我国古代数学家张丘建在他编写的《算经》里提出的一个不定方程问题,即“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡。问鸡翁、母、雏各几?”
#include <stdio.h>
main()
{
int x,y,z;
for(x=0;x<=20;++x)
for(y=0;y<=33;++y)
{z=100-x-y;
if((z%3==0)&&(5*x+3*y+z/3==100))
printf("公鸡:%-2d 母鸡:%-2d 小鸡:%-2d\n",x,y,z);}
}
12.输入一个数字a和一个整数n,s=a+aa+aaa+aaaa+aaa…..a,最后一项为n个a。计算并输出s的值。
#include<stdio.h>
main()
{
int a,n,i;
float s=0,t;
scanf("%d%d",&a,&n);
t=a;
for(i=1;i<=n;i++)
{
s=s+t;
t=t*10+a;
}
printf("%.0f\n",s);
}
13,编写程序输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如153是一个水仙花数,因为153=1*1*1+5*5*5+3*3*3
#include <stdio.h>
main()
{
int a,b,c,i;
for(i=100;i<=999;i++)
{a=i/100;
b=i/10%10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
printf("%d\n",i);}
printf("\n");}
14.编写程序要求用for语句编写,输入两个值x,y求出x的y次方。
#include <stdio.h>
#include <math.h>
main()
{
int x,y,n;
scanf("%d,%d",&x,&y);
n=pow(x,y);
printf("%d",n);
}
15.每个苹果1元,第一天买2个苹果,第二天开始,每天买前一天的3倍,直到购买的苹果达到不超过100的最大值。试用do while编写程序求每天平均花多少钱?
#include <stdio.h>
main()
{
int day=0,buy=2;
float sum,average;
do
{sum+=1*buy;day++;buy*=3;}
while(buy<100);
average=sum/day;
printf("%f\n",average);}
16根据图形,编写程序
*
* * *
* * * * *
* * * * * * *
#include <stdio.h>
main()
{
int i,j;
for(i=1;i<=4;i++)
{for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");}
}
17.输出1!+2!+3!+...+20!的值。
提示5!=1*2*3*4*5=4!*5,累乘的初值为1。
#include<stdio.h>
main()
{
int i,j;
double sum=0,n;
for(i=1;i<=20;i++)
{ n=1;
for(j=1;j<=i;j++)
n=n*j;
sum=sum+n;
}
printf("%.0f\n",sum);
18.任意输入10个数,分别计算输出其中的正数和负数之和。
#include<stdio.h>
main()
{
int i,n,s1=0,s2=0;
for(i=1;i<=10;i++)
{scanf("%d",&n);
if(n>0) s1=s1+n;
else if(n<0) s2=s2+n;
}
printf("所有正数的和=%d\n",s1);
printf("所有负数的和=%d\n",s2);
}
19.一球从100米高空自由落下,每次落地后反跳回原高度的一半:再落下,求他在第十次落地时,共经过多少米?第十次反弹多高?
#include<stdio.h>
main()
{
float h=100,sum=100;
for(int i=2;i<=10;i++){
h=h/2; /*第二次落地前的反弹高度*/
sum=sum+2*h;
}
printf("第10次经过%.2f米\n",sum);
}
20.一个数列是;3/5,5/7,7/9,9/11,….,求这个数列前20项的和。
#include<stdio.h>
main()
{
int i;
float sum=0;
for(i=1;i<=20;i++)
sum=sum+1.0*(2*i+1)/(2*i+3);
printf("3/5+5/7+...+41/43=%f\n",sum);}
21.输入一行字符,直到输入换行结束,分别统计其中的英文字母,空格,数字和其他字符的个数
#include<stdio.h>
main()
{
int i=0,j=0,k=0;
char ch;
while((ch=getchar())!='\n')
{
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
i++;
else if(ch>='0'&&ch<='9')
j++;
else k++;
}
printf("letters:%d\nnumbers:%d\nothers:%d\n",i,j,k);
}
23.已知华氏温度F与摄氏温度C的关系是:C=5/9*(F-32),编写程序,计算华氏温度F为-10,0,10,20,…..290度时摄氏温度C的值。
#include<stdio.h>
main()
{
int f;
float c;
for(f=-10;f<=290;f+=10)
{
c=5.0/9*(f-32);
printf("%-8.2f ",c);
}
printf("\n");
}
24.输入一行字符,输出字母的个数。
#include<stdio.h>
main()
{
int n=0;
char ch;
ch=getchar();
while(ch!='\n')
{
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
n++;
ch=getchar();
}
printf("The number of letters are %d\n",n);
}
25.编写程序,从3个红球,5个白球,6个黑球中任意取出8个球,且其中必须有白球,输出可能的所有方案。
#include<stdio.h>
main()
{
int red,white,black;
for(red=0;red<=3;red++)
{
for(white=1;white<=5;white++)
{
black=8-red-white;
if(black<=6)
printf("red=%d,white=%d,black=%d\n",red,white,black);
}
}
}
26.一个人很倒霉,不小心打碎了一位妇女的一篮子鸡蛋。为了赔偿便询问篮子里有多少个鸡蛋。那个妇女说,他也不清楚,只记得每次拿两个则剩一个,每次拿三个则剩两个,每次拿五个则剩四个,若每个鸡蛋1元,请你帮忙编写程序,计算最少应赔多少钱?(提示,依题意,鸡蛋个数为奇数且模除3为2,模除5为4。)
#include<stdio.h>
main()
{
int n=9;
while(!(n%3==2&&n%5==4)) n+=2;
printf("The price is %d\n",n);
}
27.有1,2,3,4共4个数字,能组成多少个互不相同且无重复数字的三位数?要求输出所有可能的三位数。
#include<stdio.h>
main()
{
int a,b,c;
for(a=1;a<=4;a++)
{ for(b=1;b<=4;b++)
for(c=1;c<=4;c++)
if(a!=b&&a!=c&&b!=c)
printf("%d%d%d ",a,b,c);
printf("\n");
}
}
28.所谓回文数,是从左至右与从右至左读起来都是一样的数字,如121是一个回文数。编写程序,求出100~200范围内所有回文数的和。
#include<stdio.h>
main()
{
int i,a,b,sum=0;
for(i=100;i<=200;i++)
{
a=i%10; /*个位数*/
b=i/100; /*百位数*/
if(a==b)
{printf("%d ",i);
sum=sum+i;}
}
printf("\n%d\n",sum);
}
29.孙悟空在大闹蟠桃园的时候,第一天吃掉了所有桃子总数的一半多一个,第二天又将前一天剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第N天时准备吃的时候只剩下一个桃子了。问第一天原来有多少个桃子。其中N从键盘输入。
#include<stdio.h>
main()
{
int n,s=1,i;
scanf("%d",&n);
for(i=n-1;i>=1;i--)
s=(s+1)*2;
printf("%d\n",s);
}
30.用循环语句编写求2^0+2^1+2^2+2^3+…+2^63的程序。
#include<stdio.h>
#include<math.h>
main()
{
int a=2,i ;
long sum=0;
for(i=0;i<=63;i++)
sum=sum+pow(a,i);
printf("%ld",sum);
}
31.用下面的公式求π的近似值,直到最后一项的绝对值小于0.0001为止:
π/4=1-1/3+1/5-1/7+……
提示:设一个变量sign,用来表示正负号。当sign=1时,表示正号;当sign=-1时,表示负号。通过执行语句“sign=-sign”:实现正负号的切换。每一项乘以sign后在进行累加。
#include<stdio.h>
main()
{
int sign=1,i=1;
double pi=0,n=1;
while(n>=0.0001)
{
pi=pi+sign*n;
i++;
sign=-sign;
n=1.0/(2*i-1);
}
pi=4*pi;
printf("%.2f\n",pi);
}
32.鸡兔同笼,头共有30只,脚共有90只,计算鸡兔各有多少只(要求用for循环编写)。
#include<stdio.h>
main()
{
int ji,tu;
for(ji=1;ji<=29;ji++)
{ tu=30-ji;
if(2*ji+4*tu==90)
printf("鸡是%d只,兔是%d只",ji,tu);
}
}