题目1:对角线元素和

求一个3*3的整型矩阵对角线元素之和。

题解:

对于我们人而言,在我们不知道什么是对角线时,我们也无法求得对角线元素之和。因此要使得计算机进行计算,得告诉计算机那些元素是对角线元素。这里就需要给出一个特征来分辨对角线与非对角线元素:主对角线元素行与列相等。
#include<stdio.h> int main() { int i,j; int a[3][3]; int sum=0; printf("enter
data:\n"); for(i=0; i<3; i++) { for(j=0; j<3; j++) { scanf("%3d",&a[i][j]); } }
for(i=0; i<3; i++) { sum+=a[i][i];//对角线元素和 } printf("sum=%3d",sum); }

题目2:数组插入排序

有一个排序好的数组,要求输入一个数后,按原来排序的规律将这个数插入数组中。

题解:

假设数组a中有n个元素,并且已经按升序排列好,那么在插入一个数时可以按下面的方法处理:
(1)如果插入的数 num 比数组a的最后一个数大,则将插入的数放在数组a末尾。
(2)如果插入的数 num 不比最后一个数大,则将它依次与 a[0]~a[n-1] 比较,直到出现 a[i]>num
为止,这时a[0]~a[i-1]之间的数都比 num 小,a[i]~a[n-1]间的元素都比 num 大。
(3)那么num 就应该插到 a[i-1]之后、a[i]之前。怎么实现呢?
将 a[i]~a[n-1]的元素向后移一个位置(a[i]变a[i+1],a[n-1]变a[n]),然后将num 放在 a[i]中。
#include<stdio.h> int main() { int a[11]={1,4,6,7,9,13,16,19,28,40};
//预留一个位置给插入的元素 int i,j; int temp1,temp2,number,end; printf("array a:\n"); for(i=
0; i<10; i++) { printf("%5d",a[i]); } printf("\n"); printf("insert data:");
scanf("%d",&number); end=a[9]; if(number>end) { a[10]=number; } else { for(i=0;
i<10; i++) { if(a[i]>number) { temp1=a[i]; a[i]=number; for(j=i+1; j<11; j++) {
temp2=a[j]; a[j]=temp1;//将原本的a[i]放到a[i+1]的位置 temp1=temp2; } break; } } } printf
("Now array a:\n"); for(i=0; i<11; i++) { printf("%5d",a[i]); } }

题目3:逆序重排

将一个数组中的值按逆序重新存放。例如:原来顺序:8、6、5、4、1 排序后改为:1、4、5、6、8

题解:

以中间元素为中心,将其两侧对称元素值互换。例如:8和1、6和4互换。
#include<stdio.h> int main() { int a[5]; int i,temp; printf("enter array a:\n")
; for(i=0; i<5; i++) { scanf("%d",&a[i]); } printf("array a:\n"); for(i=0; i<5;
i++) { printf("%4d",a[i]); } for(i=0; i<5/2; i++) { temp=a[i]; a[i]=a[5-i-1]; a[
5-i-1]=temp; } printf("\n"); printf("Now array a:\n"); for(i=0; i<5; i++) {
printf("%4d",a[i]); } printf("\n"); }

题目4:10行杨辉三角

输出以下的杨辉三角形(要求输出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1




题解:

杨辉三角形是(a+b)的n次方展开后的各项系数。例如:

以上就是杨辉三角型形的前5行。杨辉三角形各行的系数满足以下规律:
(1)各行第一个数都是1。
(2)各行最后一个数也是1。
(3)从第3行开始,除了第一个和最后一个数,其余各数均是上一行同列和前一列两数之和。即:a[i][j]=a[i-1][j]+a[i-1]a[j-1]
#include<stdio.h> int main() { int i,j; int a[10][10]; for(i=0; i<10; i++) {
//第一个数和最后一个数 a[i][i]=1; a[i][0]=1; } for(i=2; i<10; i++) { for(j=1; j<=i-1; j++)
{ a[i][j]=a[i-1][j]+a[i-1][j-1]; } } for(i=0; i<10; i++) { for(j=0; j<=i; j++) {
printf("%6d",a[i][j]); } printf("\n"); } printf("\n"); }

题目5:魔方阵

输出“魔方阵”。所谓魔方阵指的是:它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵:
8 1 6
3 5 7
4 9 2
要求输出1~n*n的自然数构成的魔方阵。

题解:

魔方阵各数的排列规律:
(1)将1放在第一行中间一列。
(2)从2开始直到n*n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1。
(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行)。例如:1在第1行,则2应该在最下一行,列数同样加1。
(4)如果上一个数的列数为n,则下一个数的列数应为1,行数减1。例如:2在第三行最后一列,则3应该放在第2行第1列。

(5)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。例如:按上面的规定,4应该放在第1行第2列,但该位置已被1占据,所以4就放在3的下面。由于6是第1行第3列(即最后一列),故7放在6下面。
#include<stdio.h> int main() { int a[15][15]; int i,j,k; int p,n; p=1; while(p
==1) { printf("enter n(1~15):");//要求阶数为1~15之间的奇数 scanf("%d",&n); if((n!=0)&&(n<=
15)&&(n%2!=0)) { p=0; } for(i=1; i<=n; i++) {//初始化 for(j=1; j<=n; j++) { a[i][j]
=0; } } //建立魔方阵 j=n/2+1; a[1][j]=1; for(k=2; k<=n*n; k++) { i--; j+=1; if((i<1)
&&(j>n)) { i+=2; j-=1; } else { if(i<1) i=n; if(j>n) j=1; } if(a[i][j]==0) { a[i
][j]=k; } else { i+=2; j-=1; a[i][j]=k; } } //输出魔方阵 for(i=1; i<=n; i++) { for(j=
1; j<=n; j++) { printf("%5d",a[i][j]); } printf("\n"); } } }

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信