當前位置:編程學習大全網 - 編程語言 - 求C語言經典編程282例,求這本書的PDF或是其他文檔的文件,我郵箱zhouqg_2008@126.com

求C語言經典編程282例,求這本書的PDF或是其他文檔的文件,我郵箱zhouqg_2008@126.com

程序1

題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?

1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去

    掉不滿足條件的排列。

2.程序源代碼:

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)

  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.程序分析:請利用數軸來分界,定位。註意定義時需把獎金定義成長整型。      

2.程序源代碼:

main()

{

long int i;

int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;

scanf("%ld",&i);

bonus1=100000*0.1;bonus2=bonus1+100000*0.75;

bonus4=bonus2+200000*0.5;

bonus6=bonus4+200000*0.3;

bonus10=bonus6+400000*0.15;

 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又是壹個完全平方數,請問該數是多少?

1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後

    的結果滿足如下條件,即是結果。請看具體分析:

2.程序源代碼:

#i nclude "math.h"

main()

{

long int i,x,y,z;

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

 { x=sqrt(i+100); /*x為加上100後開方後的結果*/

y=sqrt(i+268); /*y為再加上168後開方後的結果*/

 if(x*x==i+100&&y*y==i+268)/*如果壹個數的平方根的平方等於該數,這說明此數是完全平方數*/

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

 }

}

程序4

題目:輸入某年某月某日,判斷這壹天是這壹年的第幾天?

1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊

    情況,閏年且輸入月份大於3時需考慮多加壹天。

2.程序源代碼:

main()

{

int day,month,year,sum,leap;

printf("\nplease input year,month,day\n");

scanf("%d,%d,%d",&year,&month,&day);

switch(month)/*先計算某月以前月份的總天數*/

{

 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;

 default: printf("data error");break;

}

sum=sum+day; /*再加上某天的天數*/

 if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/

leap=1;

 else

leap=0;

if(leap==1&&month>2)/*如果是閏年且月份大於2,總天數應該加壹天*/

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最小。

2.程序源代碼:

main()

{

int x,y,z,t;

scanf("%d%d%d",&x,&y,&z);

if (x>y)

{t=x;x=y;y=t;} /*交換x,y的值*/

if(x>z)

{t=z;z=x;x=t;}/*交換x,z的值*/

if(y>z)

{t=y;y=z;z=t;}/*交換z,y的值*/

printf("small to big: %d %d %d\n",x,y,z);

}

程序6

題目:用*號輸出字母C的圖案。

1.程序分析:可先用'*'號在紙上寫出字母C,再分行輸出。

2.程序源代碼:

#i nclude "stdio.h"

main()

{

printf("Hello C-world!\n");

printf(" ****\n");

printf(" *\n");

printf(" * \n");

printf(" ****\n");

}

程序7

題目:輸出特殊圖案,請在c環境中運行,看壹看,Very Beautiful!

1.程序分析:字符***有256個。不同字符,圖形不壹樣。      

2.程序源代碼:

#i nclude "stdio.h"

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控制列。

2.程序源代碼:

#i nclude "stdio.h"

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的和的變化來控制輸出黑方格,還是白方格。

2.程序源代碼:

#i nclude "stdio.h"

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的變化來控制輸出黑方格的個數。

2.程序源代碼:

#i nclude "stdio.h"

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");

 }

}

程序11

題目:古典問題:有壹對兔子,從出生後第3個月起每個月都生壹對兔子,小兔子長到第三個月

 後每個月又生壹對兔子,假如兔子都不死,問每個月的兔子總數為多少?

1.程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21....

2.程序源代碼:

main()

{

long f1,f2;

int i;

f1=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(這個數),如果能被整除,

    則表明此數不是素數,反之是素數。     

2.程序源代碼:

#i nclude "math.h"

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個數,每個數分解出個位,十位,百位。

2.程序源代碼:

main()

{

int i,j,k,n;

printf("'water flower'number is:");

 for(n=100;n<1000;n++)

 {

i=n/100;/*分解出百位*/

j=n/10%10;/*分解出十位*/

k=n%10;/*分解出個位*/

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

 {

 printf("%-5d",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的值,重復執行第壹步。

2.程序源代碼:

/* zheng int is divided yinshu*/

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這是條件運算符的基本例子。

2.程序源代碼:

main()

{

 int score;

 char grade;

 printf("please input a score\n");

 scanf("%d",&score);

 grade=score>=90? 'A': (score>=60? 'B':'C');

 printf("%d belongs to %c",score,grade);

}

程序16

題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。

1.程序分析:利用輾除法。

2.程序源代碼:

main()

{

 int a,b,num1,num2,temp;

 printf("please input two numbers:\n");

 scanf("%d,%d",&num1,&num2);

 if(num1 { temp=num1;

num1=num2;

num2=temp;

 }

a=num1;b=num2;

while(b!=0)/*利用輾除法,直到b為0為止*/

 {

temp=a%b;

a=b;

b=temp;

 }

printf("gongyueshu:%d\n",a);

printf("gongbeishu:%d\n",num1*num2/a);

}

程序17

題目:輸入壹行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

1.程序分析:利用while語句,條件為輸入的字符不為'\n'.

    

2.程序源代碼:

#i nclude "stdio.h"

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.程序分析:關鍵是計算出每壹項的值。

2.程序源代碼:

main()

{

 int a,n,count=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(count<=n)

 {

tn=tn+a;

sn=sn+tn;

a=a*10;

++count;

 }

printf("a+aa+...=%ld\n",sn);

}

程序19

題目:壹個數如果恰好等於它的因子之和,這個數就稱為“完數”。例如6=1+2+3.編程

 找出1000以內的所有完數。

1. 程序分析:請參照程序<--程序14.

2.程序源代碼:

main()

{

static int k[10];

int i,j,n,s;

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

 {

 n=-1;

 s=j;

for(i=1;i {

 if((j%i)==0)

 {n++;

  s=s-i;

  k[n]=i;

 }

}

 if(s==0)

 {

 printf("%d is a wanshu",j);

 for(i=0;i printf("%d,",k);

 printf("%d\n",k[n]);

 }

}

}

程序20

題目:壹球從100米高度自由落下,每次落地後反跳回原高度的壹半;再落下,求它在

 第10次落地時,***經過多少米?第10次反彈多高?

1.程序分析:見下面註釋

2.程序源代碼:

main()

{

float sn=100.0,hn=sn/2;

int n;

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

 {

sn=sn+2*hn;/*第n次落地時***經過的米數*/

hn=hn/2; /*第n次反跳高度*/

 }

printf("the total of road is %f\n",sn);

printf("the tenth is %f meter\n",hn);

}

其他的等整理出來再發! :) :)

程序21

題目:猴子吃桃問題:猴子第壹天摘下若幹個桃子,當即吃了壹半,還不癮,又多吃了壹個

 第二天早上又將剩下的桃子吃掉壹半,又多吃了壹個。以後每天早上都吃了前壹天剩下

 的壹半零壹個。到第10天早上想再吃時,見只剩下壹個桃子了。求第壹天***摘了多少。

1.程序分析:采取逆向思維的方法,從後往前推斷。

2.程序源代碼:

main()

{

int day,x1,x2;

day=9;

x2=1;

while(day>0)

 {x1=(x2+1)*2;/*第壹天的桃子數是第2天桃子數加1後的2倍*/

 x2=x1;

 day--;

 }

printf("the total is %d\n",x1);

}

==============================================================

程序22

題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定

 比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出

 三隊賽手的名單。

1.程序分析:判斷素數的方法:用壹個數分別去除2到sqrt(這個數),如果能被整除,

    則表明此數不是素數,反之是素數。     

2.程序源代碼:

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循環,第壹層控制行,第二層控制列。

2.程序源代碼:

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.程序分析:請抓住分子與分母的變化規律。

2.程序源代碼:

main()

{

int n,t,number=20;

float a=2,b=1,s=0;

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

 {

 s=s+a/b;

 t=a;a=a+b;b=t;/*這部分是程序的關鍵,請讀者猜猜t的作用*/

 }

printf("sum is %9.6f\n",s);

}

==============================================================

程序25

題目:求1+2!+3!+...+20!的和

1.程序分析:此程序只是把累加變成了累乘。

2.程序源代碼:

main()

{

float n,s=0,t=1;

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

 {

 t*=n;

 s+=t;

 }

printf("1+2!+3!...+20!=%e\n",s);

}

==============================================================

程序26

題目:利用遞歸方法求5!。

1.程序分析:遞歸公式:fn=fn_1*4!

2.程序源代碼:

#i nclude "stdio.h"

main()

{

int i;

int fact();

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

 printf("\40:%d!=%d\n",i,fact(i));

}

int fact(j)

int j;

{

int sum;

if(j==0)

 sum=1;

else

 sum=j*fact(j-1);

return sum;

}

==============================================================

程序27

題目:利用遞歸函數調用方式,將所輸入的5個字符,以相反順序打印出來。

1.程序分析:

2.程序源代碼:

#i nclude "stdio.h"

main()

{

int i=5;

void palin(int n);

printf("\40:");

palin(i);

printf("\n");

}

void palin(n)

int n;

{

char next;

if(n<=1)

 {

 next=getchar();

 printf("\n\0:");

 putchar(next);

 }

else

 {

 next=getchar();

 palin(n-1);

 putchar(next);

 }

}

==============================================================

程序28

題目:有5個人坐在壹起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第

 3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第壹個人大兩歲。最後

 問第壹個人,他說是10歲。請問第五個人多大?

1.程序分析:利用遞歸的方法,遞歸分為回推和遞推兩個階段。要想知道第五個人歲數,需知道

    第四人的歲數,依次類推,推到第壹人(10歲),再往回推。

2.程序源代碼:

age(n)

int n;

{

int c;

if(n==1) c=10;

else c=age(n-1)+2;

return(c);

}

main()

{ printf("%d",age(5));

}

==============================================================

程序29

題目:給壹個不多於5位的正整數,要求:壹、求它是幾位數,二、逆序打印出各位數字。

1. 程序分析:學會分解出每壹位數,如下解釋:(這裏是壹種簡單的算法,師專數002班趙鑫提供)

2.程序源代碼:

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是回文數,個位與萬位相同,十位與千位相同。   

1.程序分析:同29例

2.程序源代碼:

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

題目:請輸入星期幾的第壹個字母來判斷壹下是星期幾,如果第壹個字母壹樣,則繼續

 判斷第二個字母。

1.程序分析:用情況語句比較好,如果第壹個字母壹樣,則判斷用情況語句或if語句判斷第二個字母。

2.程序源代碼:

#i nclude <stdio.h>

void main()

{

char letter;

printf("please input the first letter of

someday\n");

while ((letter=getch())!='Y')/*當所按字母為Y時才結束*/

{ switch (letter)

{case 'S':printf("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':printf("friday\n");break;

case 'M':printf("monday\n");break;

case 'T':printf("please input second letter\n");

   if((letter=getch())=='u')

    printf("tuesday\n");

   else if ((letter=getch())=='h')

       printf("thursday\n");

     else printf("data error\n");

   break;

case 'W':printf("wednesday\n");break;

default: printf("data error\n");

}

 }

}

==============================================================

程序32

題目:Press any key to change color, do you want to

try it. Please hurry up!

1.程序分析:            

2.程序源代碼:

#i nclude <conio.h>

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

題目:學習gotoxy()與clrscr()函數   

1.程序分析:

2.程序源代碼:

#i nclude <conio.h>

void main(void)

{

clrscr();/*清屏函數*/

textbackground(2);

gotoxy(1, 5);/*定位函數*/

cprintf("Output at row 5 column 1\n");

textbackground(3);

gotoxy(20, 10);

cprintf("Output at row 10 column 20\n");

}

==============================================================

程序34

題目:練習函數調用

1. 程序分析:

2.程序源代碼:

#i nclude <stdio.h>

void hello_world(void)

{

printf("Hello, world!\n");

}

void three_hellos(void)

{

int counter;

for (counter = 1; counter <= 3; counter++)

hello_world();/*調用此函數*/

}

void main(void)

{

three_hellos();/*調用此函數*/

}

  • 上一篇:ui設計軟件好上手嘛
  • 下一篇:嶽陽市富嶽科技職業學校專業有哪些?專業介紹
  • copyright 2024編程學習大全網