第四十六题:定义一个3行3列的二维数组,从键盘输入9个数的值。输出其中最大值和最小值及其所在的行列坐标。
#include “stdio.h”
void main()
{
int arr[3][3];
int i,j,max,min;
int max_i,max_j;
int min_i,min_j;
//初始化
printf("please input the arr:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&arr[i][j]);
//输出初始化后的数组:
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%5d",arr[i][j]);
printf("\n");
}
//运算:
max=arr[0][0];
min=arr[0][0];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(arr[i][j]>max)
{
max=arr[i][j];
max_i=i;
max_j=j;
}
if(arr[i][j]<min)
{
min=arr[i][j];
min_i=i;
min_j=j;
}
}
//输出:
printf("the result is :\n");
printf("the max element is %d, index is [%d][%d]\n\n",max,max_i,max_j);
printf("the min element is %d, index is [%d][%d]\n\n",min,min_i,min_j);
}
第四十七题:输入某年某月某日,判断这一天是这一年的第几天?程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于时需考虑多加一天。
#include<stdio.h>
main()
{
int year,mouth,day,days=0;
int w,m,d,y;
printf(“请输入年,月,日\n”);
scanf("%d%d%d",&y,&m,&d);
mouth=m;
year=y;
day=d;
switch(mouth)
{
case 1:days=0;break;
case 2:days=31;break;
case 3:days=59;break;
case 4:days=90;break;
case 5:days=120;break;
case 6:days=151;break;
case 7:days=181;break;
case 8:days=212;break;
case 9:days=243;break;
case 10:days=273;break;
case 11:days=304;break;
case 12:days=334;break;
}
days+=day;
if(mouth>2&&year%40&&year%100!=0||year%4000)
days++;
printf("%d年%d月%d日第%d天",year,mouth,day,days);
}
第四十八题:有1、2、3、4、0 五个数字,能组成多少个互不相同且无重复数字的三位数?分别是多少?
#include<stdio.h>
main()
{
int i,j,k,count=0;
for(i=1;i<5;i++)
{
for(j=0;j<5;j++)
{
for(k=0;k<5;k++)
{
if(i!=j&&j!=k&&i!=k)
{
count++;
printf("%d%d%d “,i,j,k);
if(count%5==0)
printf(”\n");
}
}
}
}
printf("\n一共有%d种方法",count);
}
第四十九题:输入两个正整数m和n,求其最大公约数和最小公倍数。
#include"stdio.h"
void main()
{
int a,b,t,r,n;
printf(“please input the a and b:\n”);
scanf("%d%d",&a,&b);
if(a<b)
{
t=b;
b=a;
a=t;
}
r=a%b;
n=a*b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
printf(“这两个数的最大公约数为%d,最小公倍数为%d\n”,b,n/b);
}
第五十题:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include <stdio.h>
void main()
{
double i,s=0,x=100,y; //x用于表示落下的高度,第一次为100;s用于保存球一共走过的路径,y用来记录每次落下后弹起的高度
for(i=1;i<=10;i++) //题目要求求第10次,所以循环10次
{
y=x/2; // 第一次y弹起x的一半,即50
s=s+x+y; // s为第一次球走过的总路径,即落下高度x+弹起高度y+之前球走过的总路径s
x=y; // y是第一次的弹起高度,也即第二次的落下高度,所以赋值给x,便可以进行第二次的计算
}
s=s-y; //这里是因为循环体内无条件会加上一个弹起高度y,第十次的弹起高度y需要减去,因为题目要求是求第十次落地的总路程
printf(“共经过:%lf米\n”,s);
printf(“第十次反弹:%lf米\n”,y);
}
第五十一题:打印下面图形
#include"stdio.h"
void main()
{
int i,j;
for(i=1;i<=4;i++)
{
for(j=1;j<=2i-1;j++)
printf("");
printf("\n");
}
for(i=3;i>=1;i--)
{
for(j=1;j<=2*i-1;j++)
printf("*");
printf("\n");
}
}
第五十二题:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
#include"stdio.h"
void main()
{
double a=2; //分子
double b=1;//分母
double sum=0; //和值
double temp=0;//临时变量
int i;
for(i=1;i<=20;i++)
{
sum+=a/b;
temp=a;
a+=b;
b=temp;
}
printf(“the result is :%.2f\n”,sum);
}
第五十三题:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
#include"stdio.h"
void main( )
{
long a,b,c,d,e,x;
printf(“请输入不多于5位的正整数:”);
scanf("%ld",&x);
a=x/10000; /分解出万位/
b=x%10000/1000; /分解出千位/
c=x%1000/100; /分解出百位/
d=x%100/10; /分解出十位/
e=x%10; /分解出个位/
if (a!=0)
printf(“为5位数,逆序为: %ld %ld %ld %ld %ld\n”,e,d,c,b,a);
else if(b!=0)
printf(“为4位数,逆序为: %ld %ld %ld %ld\n”,e,d,c,b);
else if(c!=0)
printf(“为 3 位数,逆序为:%ld %ld %ld\n”,e,d,c);
else if(d!=0)
printf(“为 2 位数,逆序为: %ld %ld\n”,e,d);
else if(e!=0)
printf(“为 1 位数,逆序为:%ld\n”,e);
else
printf(“errer!\n”);
}
第五十四题:对10个数进行排序(起泡排序)
#include “stdio.h”
void main()
{
int arr[10];
int i,j,temp;
printf(“please input the arr:\n”);
for(i=0;i<10;i++)
scanf("%d",&arr[i]);
for(i=1;i<10;i++)
for(j=0;j<10-i;j++)
if(arr[j]>arr[j+1])
{
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
printf(“the result is :\n”);
for(i=0;i<10;i++)
printf("%d ",arr[i]);
}
第五十五题:将一个数组逆序输出。
#include “stdio.h”
void main()
{
int arr[10];
int i,j;
int temp;
//初始化
printf("please input the arr:\n");
for(i=0;i<10;i++)
scanf("%d",&arr[i]);
//运算
for(i=0,j=9;i<5;i++,j--)
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
//输出:
printf("the result is :\n");
for(i=0;i<10;i++)
printf("%5d",arr[i]);
}
第五十六题:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
#include “stdio.h”
void main()
{
int i,j,temp,temp1,temp2;
int number;
int end;
int a[9]={14,20,5,6,7,8,11,12};
//先排序(从大到小)
for(i=0;i<8;i++)
for(j=0;j<8-i;j++)
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<8;i++)
printf("%5d",a[i]);
printf("\n");
//输入那个要插入的数number
printf("Insert data:");
scanf("%d",&number);
//运算过程
end=a[7];
if(number<end) //如果新数比最后一下还小,那正好新数就放在最后。
a[8]=number;
else
{
for(i=0;i<8;i++)
{
if(a[i]<number)
{
temp1=a[i];
a[i]=number;
for(j=i+1;j<9;j++)
{
temp2=a[j];
a[j]=temp1;
temp1=temp2;
}
break;
}
}
}
//输出结果
printf("\nNow,the array is :\n");
for(i=0;i<9;i++)
printf("%5d",a[i]);}