當前位置:首頁 » 編程語言 » 經典c語言程序

經典c語言程序

發布時間: 2024-07-16 14:53:10

⑴ 10道經典的c語言例題(含參考程序)


1.列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數本身。例如,153是一個「水仙花數」,因為153=1^3+5^3+3^3。

#include

#include

int main()

{

int _wei,shi_wei,ge_wei,i,sum=0;

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

{

_wei=i/100;

shi_wei=(i%100)/10;

ge_wei=i%10;

if(i==pow(_wei,3)+pow(shi_wei,3)+pow(ge_wei,3))

{

printf("%d ",i);

sum++;

if(sum%5==0)

printf(" ");

}

}

printf(" ");

return 0;

}

2.請輸入任意兩個整數x和y,求其最大公約數和最小公倍數。

#include

int main()

{

int x,y,min,max,i;

printf("請輸入任意兩個整數:");

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

min=x>y?y:x;

max=x>y?x:y;

for(i=min;i>0;i--)

if(x%i==0&&y%i==0)

{

printf("這兩個整數的最大公約數為:%d ",i);

break;

}

for(i=max;i<=x*y;i++)

if(i%x==0&&i%y==0)

{

printf("這兩個整數的最小公倍數為:%d ",i);

break;

}

return 0;

}

3.輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。

#include

#include

#define N 50

int main()

{

int sum1=0,sum2=0,sum3=0,sum4,i=0;

char str[N];

printf("請輸入一串字元串:");

scanf("%s",str);

for(i=0;i<strlen(str);i++) p=""> </strlen(str);i++)>

{

if((str[i]>='a'&&str[i]='A'&&str[i]<='Z'))

sum1++;

if(str[i]==' ')

sum2++;

if(str[i]>=Ɔ'&&str[i]<=Ə')

sum3++;

}

sum4=strlen(str)-sum1-sum2-sum3;

printf("英文字母的個數:%d ",sum1);

printf("空格的個數:%d ",sum2);

printf("數字的個數:%d ",sum3);

printf("其他符號的個數:%d ",sum4);

return 0;

}

4.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。

#include

#include

int main()

{

int a,n,s=0,i,x=0,y=0;

printf("請輸入整數a的值:");

scanf("%d",&a);

printf("請輸入相加的個數n:");

scanf("%d",&n);

for(i=0;i<n;i++) p=""> </n;i++)>

{

x=y+2*pow(10,i);

y=x;

s=s+x;

}

printf("s=%d ",s);

return 0;

}

5.一個數如果恰好等於它的因子之和,這個數就稱為「完數」。例如6=1+2+3。編程找出1000以內的所有完數。

#include

int main()

{

int sum=0,i,j;

printf("在1000以內的完數有:");

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

{

for(j=1;j<i;j++) p=""> </i;j++)>

if(i%j==0)

sum=sum+j;

if(sum==i)

printf("%d ",i);

sum=0;

}

printf(" ");

return 0;

}

6.輸入一個不多於5位的正整數,要求:1、求它是幾位數;2、逆序列印出個位數字。

#include

int pows(int a,int n)

{

int sum=1,i;

for(i=0;i<n;i++) p=""> </n;i++)>

sum=sum*a;

return sum;

}

int main()

{

int n,i,k,x;

printf("n=");

scanf("%d",&n);

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

if(n/pows(10,i)==0)

{

printf("%d ",i);

k=i;

break;

}

for(i=0;i<k;i++) p=""> </k;i++)>

{

x=n/pows(10,i)%10;

printf("%d",x);

}

printf(" ");

return 0;

}

7.輸入一個5位數,判斷它是不是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。

#include

int main()

{

int n,a[5],i=0;

printf("請輸入一個5位數:");

scanf("%d",&n);

while(n!=0)

{

a[i]=n%10;

n=n/10;

i++;

}

if(a[0]==a[4]&&a[1]==a[3])

printf("這個數是迴文數 ");

else

printf("這個數不是迴文數 ");

return 0;

}

8.利用遞歸演算法,將所輸入的5個字元,以相反順序列印出來。

#include

void digui(char a[],int n)

{

if(n==1)

printf("%c",a[0]);

else

{

printf("%c",a[n-1]);

digui(a,n-1);

}

}

int main()

{

char str[5];

printf("請輸入5個字元:");

scanf("%s",str);

digui(str,5);

printf(" ");

return 0;

}

9.有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13…球出這個序列的前20項之和。

#include

int main()

{

int i,a=1,b=1;

float sum=0.0;

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

{

sum=sum+(float)(a+i)/b;

b=a+i;

a=i;

}

printf("sum=%f ",sum);

return 0;

}

10.利用遞歸演算法求5!。

#include

int digui(int n)

{

if(n==1)

return 1;

else

return n*digui(n-1);

}

int main()

{

int n,sum;

printf("n:");

scanf("%d",&n);

sum=digui(n);

printf("sum=%d ",sum);

return 0;

}

⑵ c語言編程題經典題目

  • 編寫一個程序,求出1~100之間所有的素數。

  • 編寫一個程序早態友,從鍵盤輸入一個字元串,輸出該字元串中所有的單詞。

  • 編寫一個程序,將輸入的字元串反轉後輸出。

  • 編寫一個程序,求出兩個整數的最大公約數和陸槐最小公倍數。

  • 編寫一個程序,從鍵盤輸入一組數據,對這組數據進行排序並輸出結果。

  • 編寫一個程序,輸入一個正整數,輸出其各位數字的和。

  • 編寫一個程序,求出一個數組中的最大值和最小值。

  • 編寫一個程序,從鍵盤輸入一個字元串,判斷該字元串是否為迴文字元串。

  • 編寫一個程序,實現二分查找演算法。

  • 編寫一個程序,實現快速排序演算法。

  • 這些題目涵蓋閉顫了常見的演算法和數據結構,對於提高編程能力和解決實際問題都非常有幫助。在實際開發中,也可以參考這些題目的思路和實現方式,加快開發進度和提高程序質量。

⑶ C語言經典程序

....1.繪制餘弦曲線

在屏幕上用「*」顯示0~360度的餘弦函數cos(x)曲線
*問題分析與演算法設計
如果在程序中使用數組,這個問題十分簡單。但若規定不能使用數組,問題就變得不容易了。
關鍵在於餘弦曲線在0~360度的區間內,一行中要顯示兩個點,而對一般的顯示器來說,只能按行輸出,即:輸出第一行信息後,只能向下一行輸出,不能再返回到上一行。為了獲得本文要求的圖形就必須在一行中一次輸出兩個「*」。
為了同時得到餘弦函數cos(x)圖形在一行上的兩個點,考慮利用cos(x)的左右對稱性。將屏幕的行方向定義為x,列方向定義為y,則0~180度的圖形與180~360度的圖形是左右對稱的,若定義圖形的總寬度為62列,計算出x行0~180度時y點的坐標m,那麼在同一行與之對稱的180~360度的y點的坐標就
應為62-m。程序中利用反餘弦函數acos計算坐標(x,y)的對應關系。
使用這種方法編出的程序短小精煉,體現了一定的技巧。
*程序說明與注釋

#include<stdio.h>
#include<math.h>
int main()
{
double y;
int x,m;
for(y=1;y>=-1;y-=0.1) /*y為列方向,值從1到-1,步長為0.1*/
{
m=acos(y)*10; /*計算出y對應的弧度m,乘以10為圖形放大倍數*/
for(x=1;x<m;x++) printf(" ");
printf("*"); /*控制列印左側的 * 號*/
for(;x<62-m;x++)printf(" ");
printf("*\n"); /*控制列印同一行中對稱的右側*號*/
}
return 0;
}
*思考題
如何實現用「*」顯示0~360度的sin(x)曲線。
在屏幕上顯示0~360度的cos(x)曲線與直線f(x)=45*(y-1)+31的迭加圖形。其中cos(x)圖形用「*」表示,f(x)用「+」表示,在兩個圖形相交的點上則用f(x)圖形的符號。

2.繪制餘弦曲線和直線
*問題分析與演算法設計
本題可以在上題的基礎上進行修改。圖形迭加的關鍵是要在分別計算出同一行中兩個圖形的列方向點坐標後,正確判斷相互的位置關系。為此,可以先判斷圖形的交點,再分別控制列印兩個不同的圖形。

*程序注釋與說明
#include<stdio.h>
#include<math.h>
int main()
{
double y;
int x,m,n,yy;
for(yy=0;yy<=20;yy++) /*對於第一個y坐標進行計算並在一行中列印圖形*/
{
y=0.1*yy; /*y:屏幕行方向坐標*/
m=acos(1-y)*10; /*m: cos(x)曲線上y點對應的屏幕列坐標*/
n=45*(y-1)+31; /*n: 直線上y點對應的列坐標*/
for(x=0;x<=62;x++) /*x: 屏幕列方向坐標*/
if(x==m&&x==n) printf("+"); /*直線與cos(x)相交時列印「+」*/
else if(x==n) printf("+"); /*列印不相交時的直線圖形*/
else if(x==m||x==62-m) printf("*"); /*列印不相交時的cos(x)圖形*/
else printf(" "); /*其它情況列印空格*/
printf("\n");
}
return 0;
}
*思考題
如何實現sin(x)曲線與cos(x)曲線圖形的同時顯示。

3.繪制圓
在屏幕上用「*」畫一個空心的圓
*問題分析與演算法設計
列印圓可利用圖形的左右對稱性。根據圓的方程:
R*R=X*X+Y*Y
可以算出圓上每一點行和列的對應關系。
*程序說明與注釋
#include<stdio.h>
#include<math.h>
int main()
{
double y;
int x,m;
for(y=10;y>=-10;y–)
{
m=2.5*sqrt(100-y*y); /*計算行y對應的列坐標m,2.5是屏幕縱橫比調節系數因為屏幕的
行距大於列距,不進行調節顯示出來的將是橢圓*/
for(x=1;x<30-m;x++) printf(" "); /*圖形左側空白控制*/
printf("*"); /*圓的左側*/
for(;x<30+m;x++) printf(" "); /*圖形的空心部分控制*/
printf("*\n"); /*圓的右側*/
}
return 0;
}
*思考題
實現函數y=x2的圖形與圓的圖形疊加顯示

4.歌星大獎賽
在歌星大獎賽中,有10個評委為參賽的選手打分,分數為1~100分。選手最後得分為:去掉一個最高分和一個最低分後其餘8個分數的平均值。請編寫一個程序實現。
*問題分析與演算法設計
這個問題的演算法十分簡單,但是要注意在程序中判斷最大、最小值的變數是如何賦值的。
*程序說明與注釋
#include<stdio.h>
int main()
{
int integer,i,max,min,sum;
max=-32768; /*先假設當前的最大值max為C語言整型數的最小值*/
min=32767; /*先假設當前的最小值min為C語言整型數的最大值*/
sum=0; /*將求累加和變數的初值置為0*/
for(i=1;i<=10;i++)
{
printf("Input number %d=",i);
scanf("%d",&integer); /*輸入評委的評分*/
sum+=integer; /*計算總分*/
if(integer>max)max=integer; /*通過比較篩選出其中的最高分*/
if(integer<min)min=integer; /*通過比較篩選出其中的最低分*/
}
printf("Canceled max score:%d\nCanceled min score:%d\n",max,min);
printf("Average score:%d\n",(sum-max-min)/8); /*輸出結果*/
}
*運行結果
Input number1=90
Input number2=91
Input number3=93
Input number4=94
Input number5=90
Input number6=99
Input number7=97
Input number8=92
Input number9=91
Input number10=95
Canceled max score:99
Canceled min score:90
Average score:92
*思考題
題目條件不變,但考慮同時對評委評分進行裁判,即在10個評委中找出最公平(即評分最接返平均分)和最不公平(即與平均分的差距最大)的評委,程序應該怎樣實現?
5.求最大數
問555555的約數中最大的三位數是多少?
*問題分析與演算法設計
根據約數的定義,對於一個整數N,除去1和它自身外,凡能整除N的數即為N的約數。因此,最簡單的方法是用2到N-1之間的所有數去除N,即可求出N的全部約數。本題只要求取約數中最大的三位數,則其取值范圍可限制在100到999之間。
*程序說明與注釋
#include<stdio.h>
int main()
{
long i;
int j;
printf("Please input number:");
scanf("%ld",&i);
for(j=999;j>=100;j–)
if(i%j==0)
{
printf("The max factor with 3 digits in %ld is:%d,\n",i,j);
break;
}
}
*運行結果
輸入:555555
輸出:The max factor with 3 digits in 555555 is:777
6.高次方數的尾數
求13的13次方的最後三位數
*問題分析與演算法設計
解本題最直接的方法是:將13累乘13次方截取最後三位即可。
但是由於計算機所能表示的整數范圍有限,用這種「正確」的演算法不可能得到正確的結果。事實上,題目僅要求最後三位的值,完全沒有必要求13的13次方的完整結果。
研究乘法的規律發現:乘積的最後三位的值只與乘數和被乘數的後三位有關,與乘數和被乘數的高位無關。利用這一規律,可以大大簡化程序。
*程序說明與注釋
#include<stdio.h>
int main()
{
int i,x,y,last=1; /*變數last保存求X的Y次方過程中的部分乘積的後三位*/
printf("Input X and Y(X**Y):");
scanf("%d**%d",&x,&y);
for(i=1;i<=y;i++) /*X自乘Y次*/
last=last*x%1000; /*將last乘X後對1000取模,即求積的後三位*/
printf("The last 3 digits of %d**%d is:%d\n",x,y,last%1000); /*列印結果*/
}
*運行結果
Input X and Y(X**Y):13**13
The last 3 digits of 13**13 is:253
Input X and Y(X**Y):13**20
The last 3 digits of 13**20 is:801
7.階乘尾數零的個數
100!的尾數有多少個零?

*問題分析與演算法設計
可以設想:先求出100!的值,然後數一下末尾有多少個零。事實上,與上題一樣,由於計算機所能表示的整數范圍有限,這是不可能的。

為了解決這個問題,必須首先從數學上分析在100!結果值的末尾產生零的條件。不難看出:一個整數若含有一個因子5,則必然會在求100!時產生一個零。因此問題轉化為求1到100這100個整數中包含了多少個因子5。若整數N能被25整除,則N包含2個因子5;若整數N能被5整除,則N包含1個因子5。
*程序說明與注釋
#include<stdio.h>
int main()
{
int a,count =0;
for(a=5;a<=100;a+=5) //循環從5開始,以5的倍數為步長,考察整數
{
++count; //若為5的倍數,計數器加1
if(!(a%25)) ++count; //若為25的倍數,計數器再加1
}
printf("The number of 0 in the end of 100! is: %d.\n",count); //列印結果
return 0;
}
*運行結果
The number of 0 in the end of 100! is: 24.
*問題進一步討論
本題的求解程序是正確的,但是存在明顯的缺點。程序中判斷整數N包含多少個因子5的方法是與程序中的100有關的,若題目中的100改為1000,則就要修改程序中求因子5的數目的演算法了。

*思考題
修改程序中求因子5的數目的演算法,使程序可以求出任意N!的末尾有多少個零。
8.借書方案知多少
小明有五本新書,要借給A,B,C三位小朋友,若每人每次只能借一本,則可以有多少種不同的借法?
*問題分析與演算法設計
本問題實際上是一個排列問題,即求從5個中取3個進行排列的方法的總數。首先對五本書從1至5進行編號,然後使用窮舉的方法。假設三個人分別借這五本書中的一本,當三個人所借的書的編號都不相同時,就是滿足題意的一種借閱方法。
*程序說明與注釋
int main()
{
int a,b,c,count=0;
printf("There are diffrent methods for XM to distribute books to 3 readers:\n");
for(a=1;a<=5;a++) /*窮舉第一個人借5本書中的1本的全部情況*/
for(b=1;b<=5;b++) /*窮舉第二個人借5本書中的一本的全部情況*/
for(c=1;a!=b&&c<=5;c++) /*當前兩個人借不同的書時,窮舉第三個人借5本書
中的1本的全部情況*/
if(c!=a&&c!=b) /*判斷第三人與前兩個人借的書是否不同*/
printf(count%8?"%2d:%d,%d,%d ":"%2d:%d,%d,%d\n ",++count,a,b,c);
/*列印可能的借閱方法*/
}
*運行結果
There are diffrent methods for XM to distribute books to 3 readers:
1: 1,2,3 2: 1,2,4 3: 1,2,5 4: 1,3,2 5: 1,3,4
6: 1,3,5 7: 1,4,2 8: 1,4,3 9: 1,4,5 10:1,5,2
11:1,5,3 12:1,5,4 13:2,1,3 14:2,1,4 15:2,1,5
16:2,3,1 17:2,3,4 18:2,3,5 19:2,4,1 20:2,4,3
21:2,4,5 22:2,5,1 23:2,5,3 24:2,5,4 25:3,1,2
26:3,1,4 27:3,1,5 28:3,2,1 29:3,2,4 30:3,2,5
31:3,4,1 32:3,4,2 33:3,4,5 34:3,5,1 35:3,5,2
36:3,5,4 37:4,1,2 38:4,1,3 39:4,1,5 40:4,2,1
41:4,2,3 42:4,2,5 43:4,3,1 44:4,3,2 45:4,3,5
46:4,5,1 47:4,5,2 48:4,5,3 49:5,1,2 50:5,1,3
51:5,1,4 52:5,2,1 53:5,2,3 54:5,2,4 55:5,3,1
56:5,3,2 57:5,3,4 58:5,4,1 59:5,4,2 60:5,4,3
9.楊輝三角形
在屏幕上顯示楊輝三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
………………………………..
*問題分析與演算法設計
楊輝三角形中的數,正是(x+y)的N次方冪展開式各項的系數。本題作為程序設計中具有代表性的題目,求解的方法很多,這里僅給出一種。
從楊輝三角形的特點出發,可以總結出:
1)第N行有N+1個值(設起始行為第0行)
2)對於第N行的第J個值:(N>=2)
當J=1或J=N+1時:其值為1
J!=1且J!=N+1時:其值為第N-1行的第J-1個值與第N-1行第J個值
之和
將這些特點提煉成數學公式可表示為:
1 x=1或x=N+1
c(x,y)=
c(x-1,y-1)+c(x-1,y) 其它
本程序應是根據以上遞歸的數學表達式編制的。
*程序說明與注釋
#include<stdio.h>
int main()
{
int i,j,n=13;
printf("N=");
while(n>12)
scanf("%d",&n); /*控制輸入正確的值以保證屏幕顯示的圖形正確*/
for(i=0;i<=n;i++) /*控制輸出N行*/
{
for(j-0;j<24-2*i;j++) printf(" "); /*控制輸出第i行前面的空格*/
for(j=1;j<i+2;j++) printf("%4d",c(i,j)); /*輸出第i行的第j個值*/
printf("\n");
}
}
void int c(int x,int y) /*求楊輝三角形中第x行第y列的值*/
{
int z;
if((y==1)||(y==x+1)) return 1; /*若為x行的第1或第x+1列,則輸出1*/
z=c(x-1,y-1)+c(x-1,y); /*否則,其值為前一行中第y-1列與第y列值之和*/
return z;
}
*思考題
自行設計一種實現楊輝三角形的方法

10.數制轉換
將任一整數轉換為二進制形式
*問題分析與演算法設計
將十進制整數轉換為二進制的方法很多,這里介紹的實現方法利用了C語言能夠對位進行操作的特點。對於C語言來說,一個整數在計算機內就是以二進制的形式存儲的,所以沒有必要再將一個整數經過一系列的運算轉換為二進制形式,只要將整數在內存中的二進製表示輸出即可。
*程序說明與注釋
#include<stdio.h>
void printb(int,int);
int main()
{
int x;printf("Input number:");
scanf("%d",&x);
printf("number of decimal form:%d\n",x);
printf(" it's binary form:");
printb(x,sizeof(int)*8); /*x:整數 sizeof(int):int型在內存中所佔的位元組數
sizeof(int)*8:int型對應的位數*/
putchar('\n');
}
void printb(int x,int n)
{
if(n>0)
{
putchar('0'+((unsigned)(x&(1<<(n-1)))>>(n-1))); /*輸出第n位*/
printb(x,n-1); /*歸調用,輸出x的後n-1位*/
}
}
*運行結果
輸入:8
輸出:
number of decimal form:8
it's bunary form:0000000000001000
輸入:-8
輸出:number of decimal form:-8
it's binary form:1111111111111000
輸入:32767
輸出:number of decimal form:32767
it's binary form:0111111111111111
輸入:-32768
輸出:number of decimal form:-32768
it's binary form:1000000000000000
輸入:128
輸出:number of decimal form:128
it's binary form:0000000010000000
*問題的進一步討論
充分利用C語言可以對位進行操作的特點,可以編寫許多其它高級語言不便於編寫甚至根本無法編寫的程序。位操作是C語言的一大特點,在深入學習C語言的過程中應力求很好掌握。
程序中使用的位運算方法不是最佳的,也可以不用遞歸操作,大家可以自行對程序進行優化。
*思考題
將任意正整數轉換為四進制或八進制數

⑷ 經典C語言程序例子

題目01:在一個已知的字元串中查找最長單詞,假定字元串中只含字母和空格,空格用來分隔不同的單詞。

(4)經典c語言程序擴展閱讀:

C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

⑸ C語言經典程序n個人n盞燈第一個人關掉所有的燈!第二個人把二的倍數的燈取反!第三個人把三的倍數取反

你把問題想簡單了
提點建議:對程序提問,最好是有一定的注釋,並對自己的程序設計思想有所闡述,這樣會比較方便別人的理解!
這道題的關鍵點是,如果第2個人開燈,那麼第4、6、8號的燈都開了。等到第4個人開燈的時候,他會把第4、8號燈又都關上了!因此這是關鍵點!
所以我採取的設計思想是:設關燈為0,開燈為1;設燈的狀態為a,那麼對燈進行一次操作後變為|a-1|,如果燈一開始是關的(0),操作後變為|0-1|=1(燈開了),如果一開始燈飾開的(1),操作後變為|1-1|=0(燈關了)!代碼如下:
#include<stdio.h>
#include<math.h>
#define Max 100

int main()
{
int n; //n個燈,n個人
printf("請輸入n的值:");
scanf("%d", &n);
int a[Max]; //定義一個數組,放置n個燈的狀態,0為關燈,1為開燈;

for (int i = 0; i < n; i++){ //將所有燈泡對應的狀態設為0(即都關燈);
a[i] = 0;
}

for (int i = 2; i <= n; i++){ //從第2個人開始進行操作
for (int j = 1; j <= n; j++){ //遍歷1~n,找出i的倍數。這里注意,由於數組的特性,j=1的話對應的是a[0]
if (j%i == 0)
a[j-1] = abs(a[j-1] - 1); //abs()是取絕對值,如果一開始是0,減1後取絕對值為1;如果一開始為1,減1後為0;
}
}
printf("0為關燈,1為開燈\n");
for (int i = 0; i < n; i++){
printf("%d ", a[i]); //輸出每一盞燈的開關狀態,你也可以自己統計開燈關燈的數目!
}
return 0;
}
如果有什麼不懂追問吧

⑹ c語言經典程序演算法

經典C源程序100例
【程序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) /*確保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.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。
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.程序源代碼:
#include "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;

作者: zhlei81 2005-1-22 11:29 回復此發言

--------------------------------------------------------------------------------

2 經典C源程序100例
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.程序源代碼:
#include "stdio.h"
main()
{
printf("Hello C-world!\n");
printf(" ****\n");
printf(" *\n");
printf(" * \n");
printf(" ****\n");
}
==============================================================
【程序7】
題目:輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful!
1.程序分析:字元共有256個。不同字元,圖形不一樣。
2.程序源代碼:
#include "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.程序源代碼:
#include "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.程序源代碼:
#include "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.程序源代碼:
#include "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");
}
}

作者: zhlei81 2005-1-22 11:29 回復此發言

--------------------------------------------------------------------------------

3 回復:經典C源程序100例
【程序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.程序源代碼:
#include "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,求其最大公約數和最小公倍數。

作者: zhlei81 2005-1-22 11:30 回復此發言

--------------------------------------------------------------------------------

4 回復:經典C源程序100例
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.程序源代碼:
#include "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[i]);
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);
}

作者: zhlei81 2005-1-22 11:30 回復此發言

--------------------------------------------------------------------------------

⑺ 「水仙花數」C語言程序

代碼如下:

#include <stdio.h>

int main()

{

printf("輸出水仙花數: ");

int i=100;

for( ; i<1000; i++){

int num_0 = i%10;

int num_1 = i/10%10;

int num_2 = i/10/10%10;

if(i==(num_0*num_0*num_0+num_1*num_1*num_1+num_2*num_2*num_2))

printf("%d ", i);

}

return 0;

}

(7)經典c語言程序擴展閱讀

自冪數是指一個 n 位數,它的每個位上的數字的 n 次冪之和等於它本身。

n為1時,自冪數稱為獨身數。顯然,0,1,2,3,4,5,6,7,8,9都是自冪數。

n為2時,沒有自冪數。

n為3時,自冪數稱為水仙花數,有4個:153,370,371,407;

n為4時,自冪數稱為四葉玫瑰數,共有3個:1634,8208,9474;

n為5時,自冪數稱為五角星數,共有3個:54748,92727,93084;

n為6時,自冪數稱為六合數, 只有1個:548834;

n為7時,自冪數稱為北斗七星數, 共有4個:1741725,4210818,9800817,9926315;

n為8時,自冪數稱為八仙數, 共有3個:24678050,24678051,88593477;

n為9時,自冪數稱為九九重陽數,共有4個:146511208,472335975,534494836,912985153;

n為10時,自冪數稱為十全十美數,只有1個:4679307774。

熱點內容
ftp工具可以上傳嗎 發布:2024-11-26 08:55:04 瀏覽:569
壓縮量密封 發布:2024-11-26 08:52:10 瀏覽:581
java把一個list 發布:2024-11-26 08:38:38 瀏覽:585
混沌珠演算法 發布:2024-11-26 08:29:17 瀏覽:163
阿里雲解析不到伺服器 發布:2024-11-26 07:57:59 瀏覽:493
python矩陣的行數 發布:2024-11-26 07:56:25 瀏覽:355
街頭籃球手游腳本 發布:2024-11-26 07:51:18 瀏覽:752
閃迪加密器 發布:2024-11-26 07:44:08 瀏覽:553
我的世界伺服器顯示村民名字 發布:2024-11-26 07:37:16 瀏覽:479
php注冊與登錄 發布:2024-11-26 07:31:21 瀏覽:796