c語言循環(huán)
山東春季高考C語言專項復習資料
C語言編程測試題(第四章)
循環(huán)編程專項訓練
?
姓名????????????? 成績
?
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;??????????????????? /*結束本輪循環(huán)*/
??? ??? 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.用循環(huán)語句編寫求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時,表示負號。通過執(zhí)行語句“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循環(huán)編寫)。
#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);
}
}