寒假作业21-40题
第二十一题:求5*5的二维数组的每行元素的平均值。
#include"stdio.h"
void main()
{
int arr[5][6];
int i,j;
printf("please input the arr:\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&arr[i][j]);
for(i=0;i<5;i++)
arr[i][5]=0;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",arr[i][j]);
printf("\n");
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
arr[i][5]+=arr[i][j];
arr[i][5]=arr[i][5]/5;
}
printf("the result is :\n");
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
printf("%5d",arr[i][j]);
printf("\n");
}
第二十二题:
韩信点兵:在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。
据说韩信的数学水平也非常高超,他在点名的时候,为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:
按从1到5报数,记下最末一个士兵报的数为1;
按从1到6报数,记下最末一个士兵报的数为5;
按从1到7报数,记下最末一个士兵报的数为4;
按1从11报数,最末一个士兵报的数是10;
你知道韩信至少有多少兵吗?试编写相应程序。
#include"stdio.h"
void main()
{
int i;
for(i=10;;i++)
{
if(i%5==1&&i%6==4&&i%7==4&&i%11==10)
{
printf("总人数为:%d\n",i);
break;
}
}
}
第二十三题://求序列前n项的和:输入一个正整数n,输出2/1+3/2+5/3+8/5+.......的前n项之和(该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子),保留2位小数。试编写相应程序。
#include"stdio.h"
void main()
{
double a=2,t;
double b=1;
double sum=0;
int n=0,num=1;
printf("请输入N:");
scanf("%d",&n);
while(num<=n)
{
sum=sum+a/b;
t=b;
b=a;
a=t+b;
num++;
}
printf("前%d项之和是:%.2f\n",n,sum);
}
第二十四题:求序列和,输入两个正整数a和n,求a+aa+aaa+aa....a(n个a)之和。比如输入2和3,输出246(2+22+222)。试编写相应程序。
#include"stdio.h"
void main()
{
int a,n,s=0;
printf("Input a: ");
scanf("%d",&a);
printf("Input n:");
scanf("%d",&n);
while(n>=0)
{
s=a*n+s;
a=a*10;
n--;
}
printf("s= %d\n",s);
}
第二十五题:兔子繁衍问题:一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到n对?试编写相应程序。
#include"stdio.h"
main()
{
int i,j,n,a=0,b_3=0,b_1=1,b_2=0;
scanf("%d",&n);
for(i=1;j<n;i++)
{
b_3=b_2;
b_2=b_1;
a=a+b_3;
b_1=a;
j=a+b_1+b_2;
}
printf("%d",i);
}
第二十六题:在海军节开幕式上,有A、B、C三艘军舰要同时开始鸣放礼炮各21响。已知A舰每隔5秒放一次,B舰每隔6秒放一次,C舰每隔7秒放一次,假设各炮手对时间的掌握非常准确,请编程计算观众总共可以听到几次礼炮声。
#include<stdlio.h>
void main()
{
int i,count=0;
int all[141];
for(i=0;i<141;i++)
all[i]=0;
for(i=0;i<=5*20;i+=5)
{
all[i]++;
}
for(i=0;i<=6*20;i+=6)
{
all[i]++;
}
for(i=0;i<=7*20;i+=7)
{
all[i]++;
}
for(i=0;i<141;i++)
{
if(all[i]!=0)
{
count++;
printf("%4d",i);}
}
printf("count=%d",count);
}
第二十七题:有一个5*5的二维数组,要求找出每行上最大的元素,并将其值赋为0。
#include"stdio.h"
void main()
{
int a[5][5]={1,42,3,45,5,6,7,78,9,10,11,12,34,77,19,22,15,36,28,40,99,66,2,100,38},b[5];
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
for(i=0;i<5;i++)
{
b[i]=a[i][0];
for(j=1;j<5;j++)
if(a[i][j]>b[i])
b[i]=a[i][j];
}
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(a[i][j]==b[i])
a[i][j]=0;
}
printf("\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
第二十八题:从键盘输入10个正负相间的整数,输出个位数是奇数、十位数是偶数的所有数。
#include "stdio.h"
void main()
{
int arr[10];
int i;
printf("please input the numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&arr[i]);
for(i=0;i<10;i++)
if(arr[i]%10%2!=0&&arr[i]/10%2==0)
printf("%d\t",arr[i]);
}
第二十九题:计算两点间的距离:给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离(保留两位小数)
#include<stdio.h>
#include<math.h>
int main()
{
double a, b, x, y;
scanf("%lf%lf%lf%lf",&a,&b,&x,&y);//读入
printf("%.2f\n",sqrt((a - x) * (a - x) + (b - y) * (b - y)));
}
第三十题:输入两个正整数m和n(1<=m,n<=500),统计并输出m和n之间的素数的个数以及这些素数的和。
#include "stdio.h"
void main()
{
int m,n,sum=0,counter=0;
int i,j;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
if(j==i)
{
sum=sum+i;
counter++;
}
}
printf("counter=%d,sum=%d\n",counter,sum);
}
第三十一题:从键盘中输入全班同学们的C语言课程的成绩,输入-1时停止,统计出各分数段的人数,并输出。(<60、60-69、70-79、80-89、90-100)
#include "stdio.h"
void main()
{
int score[200];
int counter1=0,counter2=0,counter3=0,counter4=0,counter5=0;
int i=0;
for(i=0;i<200;i++)
{
scanf("%d",&score[i]);
if((score[i] == -1))
break;
else if(score[i]>=90)
counter1++;
else if(score[i]>=80)
counter2++;
else if(score[i]>=70)
counter3++;
else if(score[i]>=60)
counter4++;
else
counter5++;
}
printf(" <60 is %d\n 60-69 is %d\n 70-79 is %d\n 80-89 is %d\n 90-100 is %d\n ",counter5,counter4,counter3,counter2,counter1);
}
第三十二题:输入两个正整数a和n,编程求a+aa+aaa+aa…a(n个a)之和。要求定义并调用函数fn(a,n),它的功能是返回aa…a(n个a)。例如fn(3,2)的返回值是36。
#include"stdio.h"
int fn(int a,int n)
{
int s;
while(n>=0)
{
s=a*n+s;
a=a*10;
n--;
}
return s;
}
void main()
{
int a1,n1;
int sum;
printf("please input the a1 and n1:\n");
scanf("%d%d",&a1,&n1);
sum=fn(a1,n1);
printf("sum=%d\n",sum);
}
第三十三题:输出指定范围内的Fibonacci数:输入两个正整数m和n(1<=m,n<=10000),输出m~n之间所有的Fibonacci数。
#include"stdio.h"
int fib(int n);
void printFN(int m,int n);
int main()
{
int m,n,t;
scanf("%d%d", &m,&n);
printFN(m,n);
return 0;
}
int fib(int n)
{
if(n==1||n==2)
return 1;
if(n>2)
return fib(n-1)+fib(n-2);
}
void printFN(int m,int n)
{
int i=0,j,k=1,count=0;
for(j=0;j<=21;j++)
{
i++;
if(fib(i)>=m && fib(i)<=n)
{
count++;
printf("%d",fib(i));
}
}
if(count==0)
{
printf("No Fibonacci number");
}
}
第三十四题:验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。例如:6=3+3,8=3+5,…,18=5+13。将6~100之间的偶数都表示成两个奇素数之和,打印时一行打印3组。
#include"stdio.h"
#include"math.h"
int fun(int n)
{
int i;
if(n==2)
return 1;
if(n%2==0)
return 0;
for(i=3;i<=sqrt(n);i+=2)
if(n%i==0)
return 0;
return 1;
}
main()
{
int n,i,j,flag,counter=0;
for(n=6;n<=100;n++)
{
flag=0;
for(i=2;i<=n/2;i++)
{
if(fun(i))
if(fun(n-i))
{
printf("%d=%d+%d\t\t",n,i,n-i);
counter++;
ok=1;
if(counter%3==0)
printf("\n");
}
if(i!=2)
i++;
if(flag)
break;
}
}
}
第三十五题:求100~200间的全部素数。
#include"stdio.h"
#include"math.h"
int fun(int n)
{
int i;
if(n==2)
return 1;
if(n%2==0)
return 0;
for(i=3;i<=sqrt(n);i+=2)
if(n%i==0)
return 0;
return 1;
}
main()
{
int num,counter=0;
for(num=100;num<=200;num++)
if(fun(num))
{
counter++;
printf("%d\t",num);
if(counter%5==0)
printf("\n");
}
}
第三十六题:按一定规律将电文变成密码: 将字母A变为E、将字母a变为e,即变成其后的第四个字母,W将变成A。字母按上述规律转换,非字母字符不变。输入一行字符,输出相应密码。
#include "stdio.h"
void main()
{
char c;
while((c=getchar())!='\n')
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
{
c=c+4;
if(c>'Z'&&c<='Z'+4||c>'z')
c=c-26;
}
printf("%c",c);
}
printf("\n");
}
第三十七题:输入三个字符串,按由小到大的顺序输出。
(用指针处理,效率会更高一些。但此处不用指针。)
#include"stdio.h"
#include"string.h"
void main()
{
char st[20],string[3][20];
int i,j,p;
printf("input three string:\n");
for(i=0;i<3;i++)
gets(string[i]);
printf("\n");
for(i=0;i<3;i++)
{
p=i;
strcpy(st,string[i]);
for(j=i+1;j<3;j++)
if(strcmp(string[j],st)<0)
{
p=j;
strcpy(st,string[j]);
}
if(p!=i)
{
strcpy(st,string[i]);
strcpy(string[i],string[p]);
strcpy(string[p],st);
}
puts(string[i]);
}
}
第三十八题:读入4*3的二维数组,分别求各行、各列及表中所有数之和。
#include "stdio.h"
void main()
{
int arr[5][4];
int i,j;
printf("please input the arr:\n");
for(i=0;i<4;i++)
for(j=0;j<3;j++)
scanf("%d",&arr[i][j]);
for(i=0;i<4;i++)
arr[i][3]=0;
for(j=0;j<3;j++)
arr[4][j]=0;
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
printf("%5d",arr[i][j]);
printf("\n");
}
for(i=0;i<4;i++)
for(j=0;j<3;j++)
{
arr[4][3]+=arr[i][j];
arr[i][3]+=arr[i][j];
arr[4][j]+=arr[i][j];
}
printf("the result is :\n");
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
printf("%5d",arr[i][j]);
printf("\n");
}
}
第三十九题:将二维数组行列元素互换,存到另一个数组中。
#include "stdio.h"
void main()
{
int arr[3][4];
int arr_result[4][3];
int i,j;
printf("please input the arr:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&arr[i][j]);
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%5d",arr[i][j]);
printf("\n");
}
for(i=0;i<4;i++)
for(j=0;j<3;j++)
arr_result[i][j]=arr[j][i];
printf("the result is :\n");
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
printf("%5d",arr_result[i][j]);
printf("\n");
}
}
第四十题:4*4的二维数组,分别求出主对角线、次对角线上元素之和。
#include "stdio.h"
void main()
{
int arr[4][4];
int i,j;
int sum_1=0,sum_2=0;
printf("please input the arr:\n");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&arr[i][j]);
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%5d",arr[i][j]);
printf("\n");
}
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(i==j)
sum_1+=arr[i][j];
if(i+j==3)
sum_2+=arr[i][j];
}
printf("\n the sum_1 is %d, the sum_2 is %d :\n",sum_1,sum_2);
}