printf("%d",a[i]);
printf("\n");
return0;
}
8.8二维数组
问题描述:
程序定义了 4× 4的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n。
例如:
数组中的值为
假设n为10,则输出结果如下:
(输出的数按照4位宽度来输出,即%4d)
#include
intmain()
{
inta[4][4],n,i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
scanf("%d",&n);
for(i=0;i<4;i++)
for(j=0;j<=i;j++)
a[i][j]=n*a[i][j];
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
printf("%4d",a[i][j]);
printf("\n");}
return0;
}
8.9在屏幕上显示杨辉三角形
杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。
其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。
中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。
杨辉三角有如下性质:
1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。
2、第n行的数字个数为n个。
3、每个数字等于上一行的左右两个数字之和。
编写程序,输入正数n,将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。
例如:
n=5 图形如下:
#include
#defineM100
intmain()
{
inta[M][M];
inti,j,n;
scanf("%d",&n);
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
{if(j==i||j==0)a[i][j]=1;}
for(i=2;i<=n;i++)
for(j=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<=n;i++)
{for(j=0;j<=i;j++)
printf("%3d",a[i][j]);
printf("\n");}
return0;
}
8.10求二维数组周边元素之和
编写一个程序,求出4×5的二维数组周边元素之和。
输入:
二维数组元素
输出:
周边元素之和
如:
输入:
输出:
61
#include
intmain()
{
inta[4][5],i,j,sum=0;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
for(j=0;j<5;j++)
if(i==0||i==3||j==0||j==4)
sum=sum+a[i][j];
printf("%d\n",sum);
return0;
}
8.11存储并输出一个矩阵
编程,输入n,存储并输出如下例(n=5)所示的图形。
#include
intmain()
{
inta[100][100],n,i,j;
scanf("%d",&n);
for(i=0;ifor(j=0;ja[i][j]=1;
for(i=0;ifor(j=i+1;ja[i][j]=j+(1-i);
for(i=0;i{for(j=0;jprintf("%d",a[i][j]);
printf("\n");}
return0;
}
8.12给数组中的元素按顺序编号
对数组a[10]中的十个整数从小到大进行连续编号,输出各个元素的编号。
要求不能改变数组a中元素的顺序,且相同的整数要具有相同的编号。
例如数组是:
A=(5,3,4,7,3,5,6,8,9,10)则输出为:
(4,1,3,7,1,4,6,8,9,10)
#include
intmain()
{
inta[10],b[10],i,j,n;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
n=1;
for(i=0;i<10;i++)
{for(j=0;j<10;j++)
if(a[i]>a[j])n++;
b[i]=n;
n=1;
}
for(i=0;i<10;i++)
printf("%3d",b[i]);
printf("\n");
return0;
}
8.13矩阵加法
方阵阶数为n(n<100),例如当n=3时,矩阵inta[3][3],矩阵intb[3][3]。
矩阵的数据由用户输入。
输出新的矩阵c=a+b。
输出格式:
c00c01c02c10c11c12c20c21c22每两个数字之间有1个空格
关于输入
方阵阶数n
矩阵a:
a00a01a02
a10a11a12
a20a21a22
矩阵b:
b00b01b02
b10b11b12
b20b21b22
关于输出
矩阵c:
c00c01c02
c10c11c12
c20c21c22
注意:
输出时每行最后不能有空格
#include
intmain()
{
inta[100][100],b[100][100],c[100][100],i,j,n;
scanf("%d",&n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;ifor(j=0;jscanf("%d",&b[i][j]);
for(i=0;ifor(j=0;jc[i][j]=a[i][j]+b[i][j];
for(i=0;i{for(j=0;jprintf("%d",c[i][j]);
printf("%d\n",c[i][n-1]);
}
return0;
}
8.14矩阵转置
在数学上,矩阵是指纵横排列的二维数据表格,最早来自于方程组的系数及常数所构成的方阵。
这一概念由19世纪英国数学家凯利首先提出。
矩阵概念在生产实践中也有许多应用,比如矩阵图法以及保护个人帐号的矩阵卡系统(由深圳网域提出)等等。
“矩阵”的本意也常被应用,比如监控系统中负责对前端视频源与控制线切换控制的模拟设备也叫矩阵。
设A为n×n阶矩阵(即n行n列),第i行j列的元素是a(i,j),即:
A=a(i,j)
定义A的转置为这样一个n×n阶矩阵B,满足B=a(j,i),即b(i,j)=a(j,i)(B的第i行第j列元素是A的第j行第i列元素),记A'=B。
(有些书记为AT=B,这里T为A的上标)
直观来看,将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到A的转置。
输入:
有n+1行(2≤n≤10),第一行是一个整数n,代表矩阵为n行n列。
后面n行表示矩阵的取值
输出:
转置后的矩阵
#include
intmain()
{
inta[11][11],b[11][11],i,j,n;
scanf("%d",&n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;ifor(j=0;jb[i][j]=a[j][i];
for(i=0;i{for(j=0;jprintf("%d",b[i][j]);
printf("%d\n",b[i][n-1]);
}
return0;
}
8.15求一系列整数中出现最多的数字
给定一系列整数,对每个整数的每一位数字统计0~9各个数字的出现次数,求出现次数最多的数字。
输入:
有两行,第一行是整数n(1<=n<=100),表示有n个整数;第二行是n个整数值
输出:
出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数
#include
intmain()
{
inta[100],b[1000]={0},c[10]={0},n,i,j,number=0,max;
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifor(j=number;a[i]!
=0;j++)
{b[j]=a[i]%10;a[i]=a[i]/10;number++;}
for(i=0;ic[b[i]]++;
max=c[0];
for(i=0;i<10;i++)
if(c[i]>max)max=c[i];
printf("出现次数最多%d次的数字是",max);
for(i=0;i<10;i++)
if(c[i]==max)printf("%d",i);
printf("\n");
return0;
}
8.16装箱问题
假设有n项物品,大小分别为s1,s2,...,sn,其中si是整数且满足:
1<=si<=100。
要把这些物品装入到容量为100的一批箱子(序号1~n)中。
装箱方法是:
对每项物品si,依次扫描所有这些箱子,把si放入足以能够容下它的第一个箱子中(first-fit策略)。
写一个程序来模拟这个装箱的过程。
输入:
有两行。
第一行是整数n(n<=1000),表示物品的个数;第二行是n个整数si(si<=100),分别表示n个物品的大小
输出:
每个物品所在的箱子序号,并输出所需的箱子数目
输入样例:
8
6070809030401020
输出样例:
601
702
803
904
301
405
101
202
所需的箱子数目为5
#include
intmain()
{
ints[1000],v[1000],n,i,j,max=0;
scanf("%d",&n);
for(i=0;iscanf("%d",&s[i]);
for(i=0;iv[i]=100;
for(i=0;ifor(j=0;jif(s[i]<=v[j])
{printf("%d%d\n",s[i],j+1);
v[j]=v[j]-s[i];
if(j>max)max=j;
break;
}
printf("所需的箱子数目为%d\n",max+1);
return0;
}
8.17求大于m且紧靠m的k个素数
请编写一个函数,其功能是:
将大于整数m且紧靠m的k个素数存入xx所指的数组中。
例如,若输入175,则应输出1923293137
提醒:
本题提交的时候,只需要提交fun函数就可以。
#include
intfun(intm,intn,intzz[1000])
{
inti,j,k=0;
for(i=m+1;k{for(j=2;j
if(i%j==0)break;
if(j==i){zz[k]=i;k++;}
}
return(zz[k]);
}
/*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/
intmain()
{
intm,n,zz[1000];
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=0;mprintf("%6d",zz[m]);
printf("\n");
return0;
}
/*PRESETCODEEND-NEVERTOUCHCODEABOVE*/
8.18找鞍点
编写fun函数,其功能是:
在3×4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。
例如,有下列矩阵:
1 2 13 4
7 8 10 6
3 5 9 7
程序执行结果为:
find:
x[2][2]=9
提醒:
本题提交的时候,只需要提交fun函数就可以。
/*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/
#include
#defineM3
#defineN4
/*PRESETCODEEND-NEVERTOUCHCODEABOVE*/
voidfun(intx[][4])
{
inti,j,k,max,flag;
for(i=0;i<3;i++)
{
max=x[i][0];k=0;
for(j=0;j<4;j++)
if(x[i][j]>max){max=x[i][j];k=j;}
flag=1;
for(j=0;j<3;j++)
if(x[j][k]if(flag){printf("find:
x[%d][%d]=%d\n",i,k,x[i][k]);break;}
}
if(flag==0)printf("notfind!
\n");
}
/*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/
intmain()
{
intx[M][N],i,j;
for(i=0;ifor(j=0;jscanf("%d",&x[i][j]);
fun(x);
return0;
}
/*PRESETCODEEND-NEVERTOUCHCODEABOVE*/