C語言程式(一)
1. 輸入5實數,輸出其中的最大值、最小值(利用打擂臺方法)。
輸入: 1.0 30.0 12.5 0.0 -40.0
輸出:max is 30.0,min 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,
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.00,x2=-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 0<x≤15
2.5x-10.5 x>15
程式設計:輸入消費的水的噸數,輸出“應交水費為***”。(結果保留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. 輸入成績,要求輸出成績等級A、B、C、D、E或error。90分以上為優秀,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. 輸入兩個正整數m和n,求其最大公約數和最小公倍數。(利用輾轉相除法)
輸入: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+22222,a為2,n為5)
輸入: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人。甲隊為A,B,C 3人,乙隊為X,Y,Z 3人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單,A說他不和X比,C說他不和X,Z比,請程式設計序找出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. 求一個3行4列陣列中的鞍點及所在位置(鞍點即某個數在所在行值最大,同時在所在列最小)。如果有鞍點,輸出“鞍點是**,位置是*行*列!”;如果沒有鞍點,輸出“沒有鞍點”
輸入: 輸入:
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,位置是0行3列! 輸出:沒有鞍點
#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個人,問最後哪些燈開著?輸入n和k,輸出開著燈的編號。(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);
}