1. 程式人生 > 其它 >C語言程式(一)

C語言程式(一)

1. 輸入5實數,輸出其中的最大值、最小值(利用打擂臺方法)。

輸入: 1.0  30.0  12.5  0.0  -40.0

輸出:max is  30.0min is  -40.0

#include<stdio.h>

int main()

{

float a[5],max,min;

int i;

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

scanf("%f",&a[i]

max=a[0];

min=a[0];

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

{

if(a[i]<min)

min=a[i];

if(a[i]>max)

max=a[i];

}

printf("max is:%.1f

min is:%.1f\n",max,min);

return 0;

}

 

2. 公司規定,男職工到65歲退休,女職工到60歲退休。編寫一個程式,輸入職工的性別和年齡,判斷出該職工是已退休還是在職

輸入:m, 50      輸出:在職

輸入:f, 61      輸出:已退休

#include<stdio.h>

int main()

{

char x;

int age;

scanf("%c,%d",&x,&age);

if(x=='m')

{

if(age>=65)

printf("已退休\n");

else

printf("在職\n");

}

if(x=='f')

{

if(age>=60)

printf("已退休\n");

else

printf("在職\n");

}

return 0;

}

3. 求一元二次方程ax2+bx+c=0的解。(a為非零的值,考慮b2-4ac三種情況)

輸入:1  2  1       輸出x1=-1.00x2=-1.00

輸入:1  5  6       輸出x1=-2.00,x2=-3.00

輸入:3  4  5       輸出無實數解!

#include<stdio.h>

#include<math.h>

int main()

{

    double a,b,c,disc,x1,x2 ;

    scanf("%lf%lf%lf",&a,&b,&c);

    if(fabs(a)<=1e-6)

        printf("不是一元二次方程\n");

    else

    {

        disc=b*b-4*a*c;

        if(fabs(disc)<=1e-6)

{

x1=-b/(2*a);

            printf("x1=%.2lf, x2=%.2lf\n",x1,x1);

}

        else if(disc>1e-6)

        {

            x1=(-b+sqrt(disc))/(2*a);

            x2=(-b-sqrt(disc))/(2*a);

            printf("x1=%.2lf,x2=%.2lf\n",x1,x2);

        }

        else

            printf("無實數解!\n");

    }

    return 0;

}

4. 輸入某年某月某日,判斷這一天是這一年的第幾天?(注意是否為閏年)

輸入: 2012-3-17    輸出:這一天是這一年的第77天。

#include<stdio.h>

int main()

{

int y,m,d,i,days=0,total=0;

scanf("%d-%d-%d",&y,&m,&d);

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

{

switch(i)

{

case 1: case 3: case 5: case 7:

case 8: case 10: case 12:

days=31;

break;

case 4: case 6: case 9: case 11:

days=30;

break;

case 2:

if((y%400==0)||(y%100!=0)&&(y%4==0))

days=29;

else

days=28;

break;

}

total=total+days;

}

total=total+d;

printf("這一天是這一年的第%d\n",total);

return 0;

}

5. 分段計算水費

           0        x≤0

y=f(x)=    4x/3    0x≤15

          2.5x-10.5   x15

程式設計:輸入消費的水的噸數,輸出應交水費為***”。(結果保留1位小數)

輸入: 0      輸出:該使用者用水: 0.0噸,應交水費為0.0元。

輸入:10      輸出:該使用者用水:10.0噸,應交水費為13.3元。

輸入:20      輸出:該使用者用水:20.0噸,應交水費為39.5元。

#include<stdio.h>

int main()

{

float x,y;

scanf("%f",&x);

if(x<=0)

{

y=0;

printf("該使用者用水:%.1f噸,應交水費為%.1f元。\n",x,y);

}

else if(x>0&&x<=15)

{

y=4*x/3;

printf("該使用者用水:%.1f噸,應交水費為%.1f元。\n",x,y);

}

else

{

y=2.5*x-10.5;

printf("該使用者用水:%.1f噸,應交水費為%.1f元。\n",x,y);

}

return 0;

}

 

6. 輸入成績,要求輸出成績等級ABCDEerror90分以上為優秀,80~89分為良好,70~79分為中等,60~69分為及格,0~60分為不及格。若輸入成績低於0分和高於100分則輸出”Enter data error”。(利用switch語句)

輸入:95.5        輸出:grade=A

輸入:123         輸出:Enter data error!

#include<stdio.h>

int main()

{

float grade;

scanf("%f",&grade);

if(grade<0||grade>100)

printf("Enter data error!\n");

else

{

  switch((int)grade/10)

{

case 10:

case 9:printf("grade=A\n");break;

case 8:printf("grade=B\n");break;

case 7:printf("grade=C\n");break;

case 6:printf("grade=D\n");break;

default:printf("grade=E\n");break;

}

}

return 0;

}

7. 輸入三角形的三邊a,b,c(都為正整數),判斷a,b,c,能否構成三角形,若能,進一步判斷三角形形狀,輸出特殊三角形!還是一般三角形!,否則輸出無法構成三角形

輸入:1  2  3     輸出無法構成三角形!

輸入:3  4  5     輸出特殊三角形!

輸入:3  4  6     輸出一般三角形!

#include<stdio.h>

#include<math.h>

#define EPS 1e-1

int main()

{

  float a,b,c;

  scanf("%f%f%f",&a,&b,&c);

  if (a+b>c&&b+c>a&&a+c>b)

  {

if (fabs(a-b)<=EPS||fabs(b-c)<=EPS||fabs(a-c)<=EPS)

printf("特殊三角形!");

else if (fabs(a*a+b*b-c*c)<=EPS||fabs(a*a+c*c-b*b)<=EPS||fabs(b*b+c*c-a*a)<=EPS)

printf("特殊三角形!\n");

else

printf("一般三角形!\n");

  }

  else

    printf("無法構成三角形!\n");

}

8. 輸入一個整數,判斷該數是否為素數。若是素數,則輸出?為素數!,否則,輸出?不是素數!

輸入:26      輸出:26不是素數!

輸入:37      輸出:37為素數!

方法1

#include<stdio.h>

int main()

{

int n,i;

scanf("%d",&n);

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

if(n%i==0)

break;

if(i==n)

printf("%d是素數!\n",n);

else

printf("%d不是素數!\n",n);

return 0;

}

方法2

#include<stdio.h>

#include<math.h>

int main()

{

int m,k,n,i;

scanf("%d",&m);

k=sqrt(m);

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

{

if(m%i==0)

break;

}

if(i==k+1)

printf("%d是迴文數!",m);

else

printf("%d不是迴文數!",m);

 }

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

輸入:My address is “#123 Anyang Road”.    

輸出:letters=21,space=5,digit=3,other=4

#include<stdio.h>

int main()

{

    int letter=0,space=0,digit=0,other=0;

    char c;

    while((c=getchar())!='\n')

    {

        if(c>='a'&&c<='z'||c>='A'&&c<='Z')

            letter++;

        else if(c==' ')

            space++;

        else if(c>='0'&&c<'9')

            digit++;

        else

            other++;

    }

    printf("letter=%d space=%d digit=%d other=%d\n",

           letter,space,digit,other);

    return 0;

}

10. Fibonacci數列的前20個數,並按每行5個數輸出。

輸出:  1      1      2      3      5

        8     13     21     34     55

       89    144    233    377    610

      987   1597   2584   4181   6765  

#include<stdio.h>

int main()

{

    int i,a[20]={1,1};

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

        a[i]=a[i-1]+a[i-2];

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

    {

        printf("%6d",a[i]);

        if((i+1)%5==0)

            printf("\n");

    }

    return 0;

}

11. 一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第n次落地時,共經過多少米?第n次反彈多高?

輸入:n=10

輸出:第10次落地共經過299.609375

10次落地反彈0.097656

#include<stdio.h>

int main()

{

    float i,h=100,s=100;

int n;

scanf("%d",&n);

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

    {

        h=h/2;

        s=s+2*h;

    }

    printf("10次落地共經過%f\n",s);

    printf("10次落地反彈%f\n",h/2);

    return 0;

}

12. 從鍵盤任意輸入一個5位數x,程式設計計算x的每一位數字相加之和。(要求使用迴圈實現取每一位上的數字)

輸入:x=51234

輸出:x的每一位數字相加之和為:15

#include<stdio.h>

int main()

{

    int i,a,n,sum=0;

    printf("x=");

    scanf("%d",&n);

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

    {

        a=n%10;

        n=n/10;

        sum=sum+a;

    }

    printf("x的每一位數字相加之和為:%d\n",sum);

    return 0;

}

13. 1+2!+4!+6!+n!的和(n<20)

輸入:n=8

輸出:1+2!+4!+6!+8! = 41067

#include<stdio.h>

int main()

{

int i,j,p,n;

long sum=1;

printf("n=");

scanf("%d",&n);

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

{

p=1;

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

p=p*j;

sum=sum+p;

}

printf("1+2!+4!+6!+%d! = %ld\n",n,sum);

}

 

14. 輸入兩個正整數mn,求其最大公約數和最小公倍數。(利用輾轉相除法)

輸入:8,12

輸出:最大公約數為4,最小公倍數為24

#include<stdio.h>

int main()

{

int m,n,c,d,t;

scanf("%d%d",&n,&m);

if(m<n)

{

t=n;

n=m;

m=t;

}

d=n*m;

while(n!=0)

{

c=m%n;

m=n;

n=c;

}

printf("最大公約數為:%d, ",m);

printf("最小公倍數為:%d\n",d/m);

return 0;

}

15. 編寫一個程式,計算1-1/3+1/5-1/7+1/9+...的前20項之和,小數點後保留5位數字。

輸入:n=20

輸出:前20項之和為0.77291

#include<stdio.h>

int main()

{

    int i,n;

    double sum=0.0,a=1.0,flag;

    printf("n=");

    scanf("%d",&n);

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

    {

        flag=a/(1+i*2);

        sum=sum+flag;

        a=-a;

    }

    printf("20項之和為%.5lf\n",sum);

    return 0;

}

 

16. s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字,n表示a的位數。

(例如:2+22+222+2222+22222a2n5

輸入:a,n =2,5    

輸出:s=24690

#include<stdio.h>

#include<math.h>

int main()

{

int s=0,m,i,j,a,n,sum=0;

printf("a,n=");

scanf("%d,%d",&a,&n);

for(j=0;j<n;j++)

{

sum=0;

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

{

m=a*pow(10,i);

sum=sum+m;

}

s=sum+s;

}

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

}

17. 輸入一個八進位制數,並將其轉換為十進位制。(要求使用迴圈實現,如輸入17,轉換後為15

輸入:輸入一個八進位制數:17

輸出:八進位制17——>十進位制為:15

#include<stdio.h>

#include<math.h>

int main()

{

int a,b,c=0,i,n,t;

printf("輸入一個八進位制數:");

scanf("%d",&n);

t=n;

for(i=0;n>0;i++)

{

a=n%10;

c=c+a*pow(8,i);

n=n/10;

}

printf("八進位制%d——>十進位制為:%d\n",t,c);

return 0;

}

18. 程式設計輸出如下形式的九九乘法表

輸入n=9

輸出:

1

2       4

3       6       9

……

8       16      24    32      40     48     56    64    

9       18      27    36      45     54     63    72     81

#include<stdio.h>

int main()

{

int i,j,n;

printf("n=");

scanf("%d",&n);

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

{

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

printf("%d\t",i * j);

printf("\n");

}

return 0;

}

19. 輸出上三角圖案。

輸入n=5

輸出:

 

*

***

*****

*******

*********

#include<stdio.h>

int main()

{

    int n,m,i,k;

    printf("n=");

    scanf("%d",&n);

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

    {

        for(k=1;k<=5-i;k++)

            printf(" ");

        for(m=1;m<=2*i-1;m++)

            printf("*");

        printf("\n");

    }

    return 0;

}

20. 輸出倒三角形式的9*9口訣表。

輸入n=9

輸出:

9*1=9  9*2=18  9*3=27  9*4=36……                  9*9=81

8*1=8  8*2=16  8*3=24  8*4=32               8*8=64

……

1*1=1

#include<stdio.h>

int main()

{

    int n,i,j,result;

    printf("n=");

    scanf("%d",&n);

    for(i=n;i>=1;i--)

    {

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

        {

            result=i*j;

            printf("%d*%d=%-3d",i,j,result);

        }

        printf("\n");

    }

    return 0;

}

21. 輸出下三角圖案

輸入n=5

輸出:

 

*********

*******

*****

***

*

 

#include<stdio.h>

int main()

{

    int n,m,i,j,k;

    printf("n=");

    scanf("%d",&n);

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

    {

        for(k=1;k<=i-1;k++)

            printf(" ");

        for(m=1;m<=(11-2*i);m++)

            printf("*");

        printf("\n");

    }

    return 0;

}

22. 輸出國際象棋棋盤圖案。

輸入n=8

輸出:

#  #  #  #           

     #  #  #  #

#  #  #  #

  #  #  #  #

#  #  #  #

  #  #  #  #

#  #  #  #

  #  #  #  #

#include<stdio.h>

int main()

{

int i,j,n;

printf("n=");

scanf("%d",&n);

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

{

if(i%2==1)

{

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

{

if(j%2==1)

printf("#");

else

printf("  ");

}

printf("\n");

}

else

{

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

{

if(j%2==1)

printf("  ");

else

printf("#");

}

printf("\n");

}

}

return 0;

}

 

23. 輸入5個整數放在一維陣列中,編寫程式列印下面的方陣:

輸入:1  2  8  2  10

輸出:

1  2  8  2   10

2  8  2  10  1

8  2  10  1  2

2  10  1  2  8

#include<stdio.h>

int main()

{

int i,j,t,a[5];

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

scanf("%d",&a[i]);

printf("\n");

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

{

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

printf("%d ",a[j%5]);

printf("\n");

}

return 0;

}

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

輸出:6是一個完數,它的因子是1 2 3

28是一個完數,它的因子是1 2 4 7 14

496是一個完數,它的因子是1 2 4 8 16 31 62 124 248

#include<stdio.h>

int main()

{

    int i,j,k,sum;

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

    {

        sum=0;

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

        {

            if(i%j==0)

                sum=sum+j;

        }

        if(sum==i)

        {

            printf("%d 是一個完數,它的因子是 ",i);

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

            {

                if(i%k==0)

                    printf("%d ",k);

            }

            printf("\n");

        }

    }

    return 0;

}

25. 驗證哥德巴赫猜想,任何大於2的偶數可以分成兩個素數之和。

輸入:44

輸出:44= 3+41

44= 7+37

44=13+31

#include<stdio.h>

int main()

{

    int n1,n2,n,i,m;

    scanf("%d",&n);

    for(n1=2;n1<=n/2;n1++)

    {

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

            if(n1%i==0)

                break;

        if(i==n1)

        {

            n2=n-n1;

            for(m=2;m<n2;m++)

                if(n2%m==0)

                break;

            if(n2==m)

                printf("%d=%d+%d\n",n,n1,n2);

        }

    }

    return 0;

}

 

26. 猴子選大王:一群猴子要選新猴王。新猴王的選擇方法是:讓n只猴子圍成一圈,從某位置順序編號為1~n號。從第1號開始報數,報到3的猴子即退出圈子,接著又從緊鄰的下一隻猴子開始同樣報數。如此不斷迴圈,最後剩下的一隻猴子就選為猴王。請問是原來的第幾號猴子當選猴王?

輸入:17      輸出:11號猴子當選猴王!

#include<stdio.h>

int main()

{

int i,n,monkey[100]={0};

scanf("%d",&n);

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

monkey[i]=i;

 

int flag=0,cout=n;

for(i=0;cout>1;i++)

{

if(monkey[i%n +1]!=-1)

flag++;

if(flag==3)

{

monkey[i%n +1]=-1;

cout--;

flag=0;

}

}

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

if(monkey[i]!=-1)

printf("%d號猴子當選猴王!",i);

return 0;

}

27. 兩個乒乓球隊進行比賽,各出3人。甲隊為ABC 3人,乙隊為XYZ 3人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單,A說他不和X比,C說他不和XZ比,請程式設計序找出3對選手的名單。

輸出:A---Z

B---X

C---Y

#include<stdio.h>

int main()

{

int i;

char A,B,C;

for(A='X';A<='Z';A++)

for(B='X';B<='Z';B++)

for(C='X';C<='Z';C++)

if(A!='X'&&C!='X'&&C!='Z'&&A!=B&&A!=C&&B!=C)

printf("A---%2c\nB---%2c\nC---%2c\n",A,B,C);

return 0;

}

28. 4個字串{“Chinese”,” American”,” Swedish”,”Englishman”},要求按由小到大的順序排列輸出。(採用選擇法排序)

輸出:American

Chinese

Englishman

Swedish

#include<stdio.h>

#include<string.h>

int main()

{

char s[100],a[4][100];

int i,j,p;

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

gets(a[i]);

printf("\n");

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

{

p=i;

strcpy(s,a[i]);

for(j=i+1;j<4;j++)

if(strcmp(a[j],s)<0)

p=j;

if(p!=i)

{

strcpy(s,a[i]);

strcpy(a[i],a[p]);

strcpy(a[p],s);

}

}

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

puts(a[i]);

printf("\n");

}

29. 提取一個字串中的所有數字字元(' 0'~'9')將其轉換為一個整數輸出。

輸入:"zy5a2b0"

輸出: 520

#include<stdio.h>

#include<string.h>

int main()

{

char a[100];

int i,l,j=0,s[100];

gets(a);

l=strlen(a);

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

{

if(a[i]>=48&&a[i]<=57)

s[j++]=a[i]-48;

}

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

printf("%d",s[i]);

}

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

輸入:12321      輸出:12321是迴文數!

輸入:12322      輸出:12322不是迴文數

#include<stdio.h>

int main()

{

int n,t,e,i=0,a[10];

scanf("%d",&n);

t=n;

while(t!=0)

{

e=t%10;

a[i++]=e;

t=t/10;

}

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

printf("%d是迴文數!\n",n);

else

printf("%d不是迴文數!\n",n);

return 0;

}

31. 將任意一個4*4矩陣,將矩陣的外圍元素順時針旋轉90度。

輸入             輸出

21 12 13 24            42 29 25 21

25 16 47 38            21 16 47 12

29 11 32 54            33 11 32 13

42 21 33 10            10 54 38 24

#include<stdio.h>

int main()

{

int i,j,a[4][4],s[4][4];

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

for(j=0;j<4;j++)

scanf("%d",&a[i][j]);

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

for(j=0;j<4;j++)

{

if(i==1&&j==1||i==1&&j==2)

s[i][j]=a[i][j];

else if(i==2&&j==1||i==2&&j==2)

s[i][j]=a[i][j];

else

s[i][j]=a[3-j][i];

}

printf("\n");

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

{

for(j=0;j<4;j++)

printf("%d ",s[i][j]);

printf("\n");

}

}

32. 輸入n個整數,用起泡法對這10個數排序,並該由小到大順序在螢幕上輸出。

輸入:n=10

      原始數列:9  8  7  6  5  4  3  2  1  0

輸出:由小到大排序後:0  1  2  3  4  5  6  7  8  9

#include<stdio.h>

int main()

{

int n,i,j,t,a[100];

printf("n=");

scanf("%d",&n);

printf("原始數列:");

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

scanf("%d",&a[i]);

printf("\n");

for(j=0;j<n-1;j++)

for(i=0;i<n-1-j;i++)

if(a[i]>a[i+1])

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}

printf("由小到大排序後:");

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

printf(" %d",a[i]);

printf("\n");

}

33. 將一個數組中的值按逆序重新存放。

輸入:n=5

      原始數列:8  6  5  4  1

輸出:逆序為:1  4  5  6  8

#include<stdio.h>

int main()

{

int i,n,t,a[10];

printf("n=");

scanf("%d",&n);

    printf("原始數列:");

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

        scanf("%d",&a[i]);

    for(i=0; i<n/2; i++)

    {

        t=a[i];

        a[i]=a[n-1-i];

        a[n-1-i]=t;

    }

    printf("逆序為:");

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

        printf(" %d",a[i]);

    printf("\n");

    return 0;

}

34. 有一個已降序排列的陣列{0,10,20,30,40,50,60,70,80,90},要求輸入一個數後,按原來排序的規律將它插入陣列中。(不借助其他陣列完成,不能使用排序)

輸入:插入資料:56

輸出:新數列:0  10  20  30  40  50  56  60  70  80  90

 

 

方法1   

#include<stdio.h>

  int main()

  {

    int a[11]={0,10,20,30,40,50,60,70,80,90};

    int temp1,temp2,num,end,i,j;

    printf("array a:\n");

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

        printf("%5d",a[i]);

    printf("\n");

    printf("insert data:");

    scanf("%d",&num);

    end=a[9];

    if(num>end)

        a[10]=num;

    else

    {

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

        {

            if(a[i]>num)

            {

                temp1=a[i];

                a[i]=num;

                for(j=i+1;j<11;j++)        

                {

                    temp2=a[j];

                    a[j]=temp1;

                    temp1=temp2;

                }

                break;

            }

        }

    }

    printf("Now array:\n");

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

        printf("%5d",a[i]);

    printf("\n");

    return 0;

  }

 

 

方法2

#include<stdio.h>

  int main()

  {

    int a[11]={0,10,20,30,40,50,60,70,80,90};

    int t,num,end,i,j;

    printf("array a:\n");

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

        printf("%5d",a[i]);

    printf("\n");

    printf("insert data:");

    scanf("%d",&num);

    end=a[9];

    if(num>end)

        a[10]=num;

    else

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

        if(a[i]>num)

        {

            t=a[i];

            a[i]=num;    

            for(j=9;j>i;j--)                

               a[j+1]=a[j];

            a[j+1]=t;    

        break;               

        }

    printf("Now array:\n");

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

        printf("%5d",a[i]);

    printf("\n");

    return 0;

  }

35. 輸入10個整數{0,1,2,3,4,5,6,7,8,9},用選擇法優化演算法對這10個數排序,並該由大到小順序在螢幕上輸出。

輸入:n=10

      原始數列:0  1  2  3  4  5  6  7  8  9

輸出:由大到小排序後:9  8  7  6  5  4  3  2  1  0

#include<stdio.h>

int main()

{

int n,i,j,min,t,a[100];

printf("n=");

scanf("%d",&n);

printf("原始數列:");

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

scanf("%d",&a[i]);

printf("\n");

for(i=0;i<n-1;i++)

{

min=i;

for(j=i+1;j<n;j++)

if(a[min]<a[j])

min=j;

if(min!=i)

{

t=a[i];

a[i]=a[min];

a[min]=t;

}

}

printf("大到小排序後:");

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

printf(" %d",a[i]);

printf("\n");

}

36. 輸入一行字元,統計其中有多少個單詞,單詞之間用空格分隔開。

輸入:I am a superman!

輸出:4個單詞。

#include<stdio.h>

#include<string.h>

int main()

{

char a[100];

int i,l,total=1;

gets(a);

l=strlen(a);

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

if(a[i]==' ')

total++;

printf("%d個單詞。\n",total);

return 0;

 }

37. 程式設計實現:一個長度為10 的整型{-3,4,7,9,13,45,67,89,100,180}陣列,利用折半查詢實現查詢功能。

輸入:9      輸出:a[3]=9

  輸入:10     輸出:沒有此數!

方法1

#include<stdio.h>

int main()

{

int a[11]={-3,4,7,9,13,45,67,89,100,180};

int low=0,high=9,mid=(low+high)/2;

int b;

scanf("%d",&b);

while(b!=a[mid])

{

if(b>a[mid])

{

low=mid+1;

mid=(low+high)/2;

}

else if(b<a[mid])

{

high=mid-1;

mid=(low+high)/2;

}

if(mid==low)

break;

}

if(b==a[mid])

printf("a[%d]=%d\n",mid,a[mid]);

else if(b==a[high])

printf("a[%d]=%d\n",high,a[high]);

else

printf("沒有此數!\n");

return 0;

}

 

 

方法2

#include<stdio.h>

int main()

{

int a[11]={-3,4,7,9,13,45,67,89,100,180};

int low=0,high=9,mid=(high+low)/2,flag=0;

int b;

scanf("%d",&b);

while(low<=high)

{

if(b>a[mid])

{

low=mid+1;

mid=(low+high)/2;

}

else if(b<a[mid])

{

high=mid-1;

mid=(low+high)/2;

}

else

{

flag=1;

break;

}

}

if(flag==1)

printf("a=[%d]=%d\n",mid,a[mid]);

else

printf("沒有此數!\n");

return 0;

}

38. 刪除一個字串{“I am a superman!”}中指定的字元。

輸入:要刪除的字元: (一個空格)

輸出:刪除後新字串:Iamasuperman!

#include<stdio.h>

#include<string.h>

int main()

{

char x,s[100],a[100]="I am a superman!";

int l,i,j=0;

printf("要刪除的字元:");

scanf("%c",&x);

l=strlen(a);

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

{

if(a[i]==x)

continue;

else

s[j++]=a[i];

}

s[j]='\0';

puts(s);

printf("\n");

return 0;

}

39. 刪除一個升序排列的陣列{2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}中重複的數字,重複數字只保留一個

2,3,4,5,6,7,8,9,10

#include<stdio.h>

int main()

{

int i,j=1,s[20],a[20]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10};

s[0]=a[0];

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

{

if(a[i]!=a[i-1])

s[j++]=a[i];

else

continue;

}

for(i=0;i<j-1;i++)

printf("%d ",s[i]);

printf("\n");

}

40.一次考試中,共考了5門課,有10名學生,統計10個學生中至少有2門課成績高於88分的人數。

score[10][5]={{89,76,78,90,77},{82,86,78,89,79},{92,87,88,84,80},{84,86,88,82,90},{80,76,78,89,87},{81,77,78,91,79},{79,85,90,85,78},{85,84,76,91,100},{84,83,78,92,91},{87,93,90,88,85}};

輸出:至少有2門課成績高於88分的人數為4人。

#include<stdio.h>

int main()

{

int i,j,k=0,s=0;

int a[10][5]={{89,76,78,90,77},{82,86,78,89,79},{92,87,88,84,80},{84,86,88,82,90},

{80,76,78,89,87},{81,77,78,91,79},{79,85,90,85,78},

{85,84,76,91,100},{84,83,78,92,91},{87,93,90,88,85}};

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

{

k=0;

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

if(a[i][j]>88)

k++;

if(k>=2)

s++;

}

printf("至少有2門課成績高於88分的人數為%d人。\n",s);

return 0;

}

 

41. 求一個34列陣列中的鞍點及所在位置(鞍點即某個數在所在行值最大,同時在所在列最小)。如果有鞍點,輸出鞍點是**,位置是**列!;如果沒有鞍點,輸出沒有鞍點

輸入:                            輸入:

1  2  3  4                         1  2  3  11

2  4  6  8                         2  4  6  12

3  6  8  12                        3  6  9   7

輸出:鞍點是4,位置是03列!    輸出:沒有鞍點

#include<stdio.h>

int main()

{

int i,j,h,row,list,max,flag=0,k=0,a[3][4];

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

for(j=0;j<4;j++)

scanf("%d",&a[i][j]);

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

{

flag=0;

max=a[i][0];

for(j=0;j<4;j++)

if(max<a[i][j])

{

max=a[i][j];

row=i;

list=j;

}

for(h=0;h<3;h++)

if(max>a[h][list])

flag=1;

if(flag==0)

printf("鞍點是%d,位置是%d%d列!",max,row,list);

else if(flag==1)

k++;

}

if(k==3)

printf("沒有鞍點");

return 0;

}

42. 程式設計:輸入n,輸出對應的楊輝三角形。如輸入6,輸出如下:

1

                         1     1

                      1     2      1

                   1     3     3      1

               1      4     6      4     1

            1     5     10     10     5     1

#include<stdio.h>

int main()

{

int n,i,j,k;

scanf("%d",&n);

int a[n][n];

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

{

a[i][0]=1;

a[i][i]=1;

}

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

for(j=1;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

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

{

        for(k=0;k<n-i;k++)

  printf("   ");

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

printf("%-6d",a[i][j]);

printf("\n");

}

return 0;

}

43. 一個班5個人,每人有4門課程成績,編寫程式,求每個人的平均分和每門課的平均分。(資料進行初始化)

英語 高數 計算機 物理 平均分

 88   79    89    70    81.5

 90   86    72    74    80.5

 81   89    85    91    86.5

      77   82    72    88    79.8

      78   87    89    93    86.8

平均分 82.8  84.6   82    83.2

#include<stdio.h>

int main()

{

float sum,a[5][4],r[5],k[4];

int i,j;

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

for(j=0;j<4;j++)

scanf("%f",&a[i][j]);

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

{

sum=0;

for(j=0;j<4;j++)

sum=sum+a[i][j];

r[i]=sum/4;

}

printf("\n");

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

{

sum=0;

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

sum=sum+a[j][i];

k[i]=sum/5;

}

printf("個人平均分:\n");

printf(":%.1f :%.1f :%.1f :%.1f :%.1f\n",r[0],r[1],r[2],r[3],r[4]);

printf("各科平均分:\n");

printf("英語:%.1f 高數%.1f 計算機%.1f 物理%.1f\n",k[0],k[1],k[2],k[3]);

return 0;

}

44. 開燈問題:有n盞燈,編號為1~n,第一個人把所有燈開啟,第2個人按下所有是2的倍數的開關,第3個人按下所有編號為3的倍數的開關(其中關著的燈將被開啟,開啟的燈將被關閉),以此類推,一共有k個人,問最後哪些燈開著?輸入nk,輸出開著燈的編號。(k<=n<=1000)。

輸入:7  3      

輸出:開著燈的編號為:1  5  6  7

#include<stdio.h>

int main()

{

int n,k,i,j,m=0,a[1000];

scanf("%d%d",&n,&k);

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

a[i]=1;

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

for(j=i;j<=n;j=j+i)

{

if(a[j]==1)

a[j]=0;

else

a[j]=1;

}

printf("開著燈的編號為:");

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

if(a[i]==1)

printf("%d ",i);

}

45. 電梯的故事:電梯每向上執行一層需要6秒鐘,向下執行一層需要4秒鐘,每開門一次需要5秒鐘(如果有人到達才開門),並且每下一個人需要加1秒。

電梯最開始在0層,並且最後必須再回到0層才算一趟任務結束。假設在開始時一直電梯內的每個人要去的樓層,你能計算出完成本趟任務需要的總時間嗎?

輸入:人數為:4,分別去的樓層為:2  4  3  2

輸出:總時間為59!

輸入:人數3,分別去的樓層為:10  10  10

輸出:總時間為108秒!

#include<stdio.h>

int main()

{

int r,i,j,x,temp,time;

printf("人數為:");

scanf("%d",&r);

int a[r];

printf("分別去的樓層為:");

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

scanf("%d",&a[i]);

for(i=0;i<r-1;i++)

for(j=0;j<r-1-i;j++)

if(a[i]>a[i+1])

{

temp=a[i];

a[i]=a[i+1];

a[i+1]=temp;

}

for(i=0;i<r-2;i++)

if(a[i]!=a[i+1])

x++;

time=6*a[r-1]+4*a[r-1]+r+5*x;

printf("總時間為%d!",time);

 }