1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去
掉不滿足條件的排列。
程序1程序源代碼:
main()
{
int i,j,k;
printf("\n");
for(i=1;i<5;i++) /*以下為三重循環*/
for(j=1;j<5;j++)
for (k=1;k<5;k++)
{
if (i!=k&&i!=j&&j!=k) /*確保i、j、k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
}
程序2
題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高
於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提
成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於
40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於
100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
1.程序分析:請利用數軸來分界,定位。註意定義時需把獎金定義成長整型。
第1個程序代碼不要復制到工具中編譯,有可能網頁上的空格也算數
下面的應該沒問題了,我會盡力調試好的.
程序2代碼:
#include "stdio.h"
void main()
{ long int i;
double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1=100000*0.1;
bonus2=bonus1+100000*0.075;
bonus4=bonus2+200000*0.05;
bonus6=bonus4+200000*0.03;
bonus10=bonus6+400000*0.015;
if (i<=100000)
bonus=i*0.1;
else if (i<=200000)
bonus=bonus1+(i-100000)*0.075;
else if (i<=400000)
bonus=bonus2+(i-200000)*0.05;
else if (i<=600000)
bonus=bonus4+(i-400000)*0.03;
else if (i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf("bonus=%d",bonus);
}
程序3:
題目:壹個整數,它加上100後是壹個完全平方數,再加上168又是壹個完全平方數,請問該數是多少?
#include "stdio.h"
#include "math.h"
void main()
{
long int x,y,i;
for (i=0;i<=100000;i++)
{x=sqrt(i+100); /*x為加上100後開方的結果*/
y=sqrt(i+268); /*y為x加上168後開方的結果*/
if (x*x==i+100&&y*y==i+268)
printf ("%ld",i);
}
}
程序4
題目:輸入某年某月某日,判斷這壹天是這壹年的第幾天?
1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊
情況,閏年且輸入月份大於3時需考慮多加壹天。
#include "stdio.h"
void main()
{
int day,mouth,year,sum,leap;
printf("\nplease input year,mouth,day\n");
scanf("%d,%d,%d",&year,&mouth,&day);
switch (mouth) /*先計算某月以前月份的總天數*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
defaultrintf("data error");break;
}
sum=sum+day; /* 再加上某天的天數*/
if (year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/
leap=1;
else
leap=0;
if (leap==1&&mouth>2)/*如果是閏年且月份大於2,總數天數應該加1*/
sum++;
printf ("It is the %dth day.",sum);
}
程序5
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。
#include "stdio.h"
void main()
{
int x,y,z,t;
printf("請輸入3個整數:\n");
scanf("%d,%d,%d",&x,&y,&z);
if (x>y)
{t=x;x=y;y=x;}
if (x>z)
{t=x;x=z;z=t;}
if (y>z)
{t=y;y=z;z=t;}
printf("妳輸入3個數從小到大的順序為:%d,%d,%d\n",x,y,z);
}
程序6
題目:用*號輸出字母C的圖案。
1.程序分析:可先用'*'號在紙上寫出字母C,再分行輸出。
不要說簡單哦,慢慢來,熟能生巧嘛~~~~~~~~
#include "stdio.h"
void main ()
{
printf ("Hello C---world!\n");
printf (" *****\n");
printf (" *\n");
printf (" *\n");
printf (" *****\n");
}
下面這壹題我運行的時候處出現幾個漢字外,並沒有像題目說的那樣Very Beautiful!.同誌們看看妳們的結果是什麽.
程序7
題目:輸出特殊圖案,請在c環境中運行,看壹看,Very Beautiful!
1.程序分析:字符***有256個。不同字符,圖形不壹樣。
#include "stdio.h"
void main ()
{
char a=176,b=219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);
}
程序8
題目:輸出9*9口訣。
1.程序分析:分行與列考慮,***9行9列,i控制行,j控制列。
#include "stdio.h"
void main ()
{
int i,j,result;
printf ("\n");
for (i=1;i<10;i++)
{for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result); /*-3d表示左對齊,占3位*/
} printf("\n");/*每壹行後換行*/
}
}
程序9
題目:要求輸出國際象棋棋盤。
1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格。
#include "stdio.h"
void main ()
{
int i,j;
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
if((i+j)%2==0)
printf ("%c%c",219,219);
else
printf (" ");
printf("\n");
}
}
程序10
題目:打印樓梯,同時在樓梯上方打印兩個笑臉。
1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數。
include "stdio.h"
void main()
{
int i,j;
printf("\1 \1\n"); /*輸出兩個笑臉*/
for(i=1;i<11;i++)
{
for (j=1;j<=i;j++)
printf("%c%c",219,219);
printf("\n");
}
}
經典c程序100例==11--20
程序11
題目:古典問題:有壹對兔子,從出生後第3個月起每個月都生壹對兔子,小兔子長到第三個月
後每個月又生壹對兔子,假如兔子都不死,問每個月的兔子總數為多少?
1.程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21....
呵呵~~多謝支持,以後多來阿~~~~~~~~~~~~
好的現在讓我們來討論第11題吧~
這個題目是求Fibonacci數列40個數.其實我們分析壹下這個數有如下特點:第1,2個數為1,1.從第3個數開始,該數是其前面倆個數之和.即:
F1=1 (n=1)
F2=1 (n=2)
Fn=Fn-1+Fn-2 (n>=3)
分析到這我們做題目就不會有多大的難度了 :
11題程序為:
main()
{
long int f1,f2;
int i;
f1=1;f2=1;
for (i=1;i<=20;i++)
{printf("%12ld%12ld",f1,f2);
if(i%2==0)printf("\n");
f1=f1+f2;
f2=f1+f2;}
}
程序12
題目:判斷101-200之間有多少個素數,並輸出所有素數。
1.程序分析:判斷素數的方法:用壹個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數。
#include "stdio.h"
#include "math.h"
void main ()
{
int m,i,k,h=0,leap=1;
printf("\n");
for (m=101;m<=200;m++)
{k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap)
{printf("%-4d",m);
h++;
if(h%10==0)
printf("\n");
}leap=1;
}
printf("\nThe total is %d",h);
}
程序13
題目:打印出所有的"水仙花數",所謂"水仙花數"是指壹個三位數,其各位數字立方和等於該數
本身。例如:153是壹個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。
include "stdio.h"
void main ()
{
int i,j,k,n;
printf("'water flower 'number is :");
for(n=100;n<1000;n++)
{
i=n/100;
j=n/10-i*10;
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("%4d",n);
}
printf("\n");
}
程序14
題目:將壹個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
程序分析:對n進行分解質因數,應先找到壹個最小的質數k,然後按下述步驟完成:
(1)如果這個質數恰等於n,則說明分解質因數的過程已經結束,打印出即可。
(2)如果n<>k,但n能被k整除,則應打印出k的值,並用n除以k的商,作為新的正整數妳n,
重復執行第壹步。
(3)如果n不能被k整除,則用k+1作為k的值,重復執行第壹步。
#include "stdio.h"
void main()
{int n,i;
printf("\nplease input a number :\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{printf("%d*",i);
n=n/i;
}
else
break;
}
}
printf("%d",n);
}
程序15
題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,
60分以下的用C表示。
1.程序分析:(a>b)?a:b這是條件運算符的基本例子。
#include "stdio.h"
void main()
{int chji;
char biaosi;
printf("Please input a chji:\n");
scanf("%d",&chji);
biaosi=chji>=90?'A'chji>=60?'B':'C');
printf("%d belongs to %c\n",chji,biaosi);
}
程序16
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數
第16題
#include
#include
#include
#include "math.h"
main()
{
int a,b,c=1,i,temp;
printf("輸入2個正整數:");
scanf("%d%d",&a,&b);
if(a>b)
{
temp=a;
a=b;
b=temp;
}
for(i=2;i<=a;i++)
{
if(a%i==0&&b%i==0)
c=i;
}
if(c==1)
printf("沒有公約數\n");
else
printf("最大公約數為:%d\n",c);
printf("最小公倍數為:%d\n",a*b/c);
程序17
題目:輸入壹行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
1.程序分析:利用while語句,條件為輸入的字符不為'\n'.
有什麽好的建議可以提啊,
#include "stdio.h"
void main()
{char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some characters\n");
while ((c=getchar())!='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<'Z')
letters++;
else if(c==' ')
space++;
else if (c>='0'&&c<'9')
digit++;
else
others++;
}
printf("all in all:char=%d space=%d digit=%d others=%d\n",letters,space,digit,others);
}
程序18
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是壹個數字。例如2+22+222+2222+22222(此時
***有5個數相加),幾個數相加有鍵盤控制。
1.程序分析:關鍵是計算出每壹項的值。
18題
#include
void main()
{
int a,n,conut=1;
long int sn=0,tn=0;
printf("please input a and n\n");
scanf("%d,%d",&a,&n);
printf("a=%d,n=%d\n",a,n);
while (conut<=n)
{
tn=tn+a;
sn=sn+tn;
a=a*10;
++conut;
}
printf("%ld\n",sn);
}
程序19
題目:壹個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如6=1+2+3.編程
找出1000以內的所有完數。
19
#include "stdio.h"
void main()
{
int i,j,n;
for(i=1;i<=1000;i++)
{
n=0;
for(j=1;j<I;J++)
if(i%j==0)
n+=j;
if(n==i)
{
for(j=1;j<I;J++)
{
if(i%j==0)
printf("%d+",j);
}
printf("\b=%d\n",i);
}
}
}
程序20
題目:壹球從100米高度自由落下,每次落地後反跳回原高度的壹半;再落下,求它在
第10次落地時,***經過多少米?第10次反彈多高?
#include "stdio.h"
void main()
{
float sn=100.0,hn=sn/2;
int n;
for(n=2;n<=10;n++)
{
sn=sn+2*hn;
hn=hn/2;
}
printf("the total of road is %f\n",sn);
printf("the high is %f meter\n",hn);
}
程序21
題目:猴子吃桃問題:猴子第壹天摘下若幹個桃子,當即吃了壹半,還不癮,又多吃了壹個
第二天早上又將剩下的桃子吃掉壹半,又多吃了壹個。以後每天早上都吃了前壹天剩下
的壹半零壹個。到第10天早上想再吃時,見只剩下壹個桃子了。求第壹天***摘了多少。
1.程序分析:采取逆向思維的方法,從後往前推斷。
記得上次說到21題:
#include
void main ()
{
int day,i,j;
day=9;
j=1;
while (day>0)
{
i=(j+1)*2;
j=i;
day--;
}
printf("the total is %d\n",i);
}
程序22
題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定
比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出
三隊賽手的名單。
1.程序分析:判斷素數的方法:用壹個數分別去除2到sqrt(這個數),如果能被整除,
則表明此數不是素數,反之是素數。
#include
void main ()
{
char i,j,k;/*i是a的對手,j是b的,k是c的*/
for (i='x';i<='z';i++)
for (j='x';j<='z';j++)
{if (i!=j)
for (k='x';k<='z';k++)
{if (i!=k&&j!=k)
{if (i!='x'&&k!='x'&&k!='z')
printf("order is a--%c\tb--%c\tc--%c\n",i,j,k);
}
}
}
}
程序23
題目:打印出如下圖案(菱形)
*
***
******
********
******
***
*
1.程序分析:先把圖形分成兩部分來看待,前四行壹個規律,後三行壹個規律,利用雙重
for循環,第壹層控制行,第二層控制列。
這個題用數組:
#include
void main ()
{
char lingxing[][7]={{' ',' ',' ','*'},{' ',' ','*','*','*'},{' ','*','*','*','*','*'},
{'*','*','*','*','*','*','*'},{' ','*','*','*','*','*'},{' ',' ','*','*','*'},{' ',' ',' ','*'}};
int i,j;
for (i=0;i<7;i++)
{ for (j=0;j<7;j++)
printf("%c",lingxing[i][j]);
printf("\n");
}
}
還可以這樣:#include
void main ()
{
int i,j,k;
for (i=0;i<=3;i++)
{
for (j=0;j=2-i;j++)
printf(" ");
for (k=0;k<=2*i;k++)
printf("*");
printf("\n");
}
for (i=0;i<=2;i++)
{
for (j=0;j<=i;j++)
printf(" ");
for (k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
}
用函數調用也可以,自己試試.
程序24
題目:有壹分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。
1.程序分析:請抓住分子與分母的變化規律。
#include
void main ()
{int n,t,number=20;
float a=2,b=1,s=0;
for (n=1;n<=number;n++)
{
s+=a/b;
t=a;a+=b;b=t;//這壹步是關鍵
}
printf("sum is %9.6f\n",s);
}
程序25
題目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加變成了累乘。
#include
void main ()
{
float n,s=0,t=1;
for (n=1;n<=20;n++)
{
t*=n;
s+=t;
}
printf("1+2!...+20!=%e\n",s);
}
還要註意溢出,大家說壹下怎樣判斷.
還有下面的這個題<
程序26
題目:利用遞歸方法求5!。
1.程序分析:遞歸公式:fn=fn_1*4!
#include
void main ()
{
int i;
printf("請輸入求遞歸的數:\n");
scanf("%d",&i);
int fact (int );
printf("%d!=%d\n",i,fact(i));
}
int fact(int j)
{
int sum;
if (j==0)
sum=1;
else
sum=j*fact(j-1);
return sum;
}
考慮壹下怎樣判斷溢出呢?
程序27
題目:利用遞歸函數調用方式,將所輸入的5個字符,以相反順序打印出來。
#include
char a[5];
void f(int n)
{
if (n<5)
{
f(n+1);//註意這裏是重點。好好理解哦!
printf("%c",a[n]);
}
}
void main ()
{
printf("Input the string(lenth is 5):");
scanf("%s",a);
printf("After is :");
f(0);
}
程序28
題目:有5個人坐在壹起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第
3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第壹個人大兩歲。最後
問第壹個人,他說是10歲。請問第五個人多大?
28 題~
#include
age (int n)
{
int c;
if (n==1)
c=10;
else
c=age(n-1)+2;
return (c);
}
void main ()
{
printf("%d",age(5));
}
程序29
題目:給壹個不多於5位的正整數,要求:壹、求它是幾位數,二、逆序打印出各位數字。
#include
main( )
{
long a,b,c,d,e,x;
scanf("%ld",&x);
a=x/10000;/*分解出萬位*/
b=x%10000/1000;/*分解出千位*/
c=x%1000/100;/*分解出百位*/
d=x%100/10;/*分解出十位*/
e=x%10;/*分解出個位*/
if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);
else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);
else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);
else if (d!=0) printf("there are 2, %ld %ld\n",e,d);
else if (e!=0) printf(" there are 1,%ld\n",e);
}
程序30
題目:壹個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同。
#include
main( )
{
long a,b,c,d,e,x;
scanf("%ld",&x);
a=x/10000;/*分解出萬位*/
b=x%10000/1000;/*分解出千位*/
c=x%1000/100;/*分解出百位*/
d=x%100/10;/*分解出十位*/
e=x%10;/*分解出個位*/
if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a);
else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b);
else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c);
else if (d!=0) printf("there are 2, %ld %ld\n",e,d);
else if (e!=0) printf(" there are 1,%ld\n",e);
}
程序30
題目:壹個5位數,判斷它是不是回文數。即12321是回文數,個位與萬位相同,十位與千位相同。
#include
main( )
{
long ge,shi,qian,wan,x;
scanf("%ld",&x);
wan=x/10000;
qian=x%10000/1000;
shi=x%100/10;
ge=x%10;
if (ge==wan&&shi==qian)/*個位等於萬位並且十位等於千位*/
printf("this number is a huiwen\n");
else
printf("this number is not a huiwen\n");
}
程序31
題目:請輸入星期幾的第壹個字母來判斷壹下是星期幾,如果第壹個字母壹樣,則繼續
判斷第二個字母。
#include
#include "conio.h" //getch 的頭文件。
void main ()
{
char letter;
printf("Please input the first letter of someday\n");
while ((letter=getch())!='Y')
{switch (letter)
{
case 'S'rintf("please input second letter\n");
if ((letter=getch())='a')
printf("saturday\n");
else
if((letter=getch())='u')
printf("sunday\n");
else printf("data error\n");
break;
case 'F'rintf("friday\n");
break;
case 'M'rintf("monday\n");
break;
case 'T'rintf("please input second letter\n");
if((letter=getch())='h')
printf("thursday\n");
else
if ((letter=getch())='u')
printf("tuesday\n");
else printf("data error\n");
break;
case 'W'rintf("wednesday\n");
break;
defaultrintf("data error\n");
}
}
}
程序32
題目:Press any key to change color, do you want to try it. Please hurry up!
這個題目在TC中可以運行,在VC中運行不行,誰知道可以告訴我.謝謝!
2.程序源代碼:
#include
void main(void)
{
int color;
for (color = 0; color < 8; color++)
{
textbackground(color);/*設置文本的背景顏色*/
cprintf("This is color %d\r\n", color);
cprintf("Press any key to continue\r\n");
getch();/*輸入字符看不見*/
}
}
33題目:求100之內的素數
#include
#include "math.h"
void main ()
{
int m,i,k,h=0,leap=1;
printf("\n");
for (m=1;m<=100;m++)
{
k=sqrt(m+1);
for(i=2;i<=k;i++)
if (m%i==0)
{leap=0;break;}
if(leap)
{printf("%-4d",m);
h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("the total is %d",h);
}