C语言程序(一)
1. 输入5实数,输出其中的最大值、最小值(利用打擂台方法)。
输入: 1.0 30.0 12.5 0.0 -40.0
输出:max is 30.0,min is -40.0
#include
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=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
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
#include
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
int main()
{
int y,m,d,i,days=0,total=0;
scanf("%d-%d-%d",&y,&m,&d);
for(i=1;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
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
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
#include
#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
int main()
{
int n,i;
scanf("%d",&n);
for(i=2;i
if(n%i==0)
break;
if(i==n)
printf("%d是素数!\n",n);
else
printf("%d不是素数!\n",n);
return 0;
}
方法2:
#include
#include
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
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
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
int main()
{
float i,h=100,s=100;
int n;
scanf("%d",&n);
for(i=1;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
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
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
int main()
{
int m,n,c,d,t;
scanf("%d%d",&n,&m);
if(m
{
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
int main()
{
int i,n;
double sum=0.0,a=1.0,flag;
printf("n=");
scanf("%d",&n);
for(i=0;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
#include
int main()
{
int s=0,m,i,j,a,n,sum=0;
printf("a,n=");
scanf("%d,%d",&a,&n);
for(j=0;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
#include
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
输出:
2 4
3 6 9
……
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
#include
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
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
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
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
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
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
int main()
{
int i,j,k,sum;
for(i=1;i<=1000;i++)
{
sum=0;
for(j=1;j
{
if(i%j==0)
sum=sum+j;
}
if(sum==i)
{
printf("%d 是一个完数,它的因子是 ",i);
for(k=1;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
int main()
{
int n1,n2,n,i,m;
scanf("%d",&n);
for(n1=2;n1<=n/2;n1++)
{
for(i=2;i
if(n1%i==0)
break;
if(i==n1)
{
n2=n-n1;
for(m=2;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
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
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
#include
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
#include
int main()
{
char a[100];
int i,l,j=0,s[100];
gets(a);
l=strlen(a);
for(i=0;i
{
if(a[i]>=48&&a[i]<=57)
s[j++]=a[i]-48;
}
for(i=0;i
printf("%d",s[i]);
}
30. 输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
输入:12321 输出:12321是回文数!
输入:12322 输出:12322不是回文数!
#include
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
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
int main()
{
int n,i,j,t,a[100];
printf("n=");
scanf("%d",&n);
printf("原始数列:");
for(i=0;i
scanf("%d",&a[i]);
printf("\n");
for(j=0;j
for(i=0;i
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("由小到大排序后:");
for(i=0;i
printf(" %d",a[i]);
printf("\n");
}
33. 将一个数组中的值按逆序重新存放。
输入:n=5
原始数列:8 6 5 4 1
输出:逆序为:1 4 5 6 8
#include
int main()
{
int i,n,t,a[10];
printf("n=");
scanf("%d",&n);
printf("原始数列:");
for(i=0; i
scanf("%d",&a[i]);
for(i=0; i
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
printf("逆序为:");
for(i=0; 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
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
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
int main()
{
int n,i,j,min,t,a[100];
printf("n=");
scanf("%d",&n);
printf("原始数列:");
for(i=0;i
scanf("%d",&a[i]);
printf("\n");
for(i=0;i
{
min=i;
for(j=i+1;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
printf(" %d",a[i]);
printf("\n");
}
36. 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
输入:I am a superman!
输出:4个单词。
#include
#include
int main()
{
char a[100];
int i,l,total=1;
gets(a);
l=strlen(a);
for(i=0;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
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;
}
{
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
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;
}
{
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
#include
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
{
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
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
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
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
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++)
{
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 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
#include
int main()
{
int n,i,j,k;
scanf("%d",&n);
int a[n][n];
for(i=0;i
{
a[i][0]=1;
a[i][i]=1;
}
for(i=2;i
for(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i
{
for(k=0;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
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
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
int main()
{
int r,i,j,x,temp,time;
printf("人数为:");
scanf("%d",&r);
int a[r];
printf("分别去的楼层为:");
for(i=0;i
scanf("%d",&a[i]);
for(i=0;i
for(j=0;j
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
for(i=0;i
if(a[i]!=a[i+1])
x++;
time=6*a[r-1]+4*a[r-1]+r+5*x;
printf("总时间为%d秒!",time);
}