待我学有所成,结发与蕊可好。@夏瑾墨
内容一:顺序、分支、循环结构程序设计、数组的应用 (4学时)
方式:简单复习知识点,重点复习一维数组、二维数组。
题目:
基础:将10个元素存入一个一维数组中,按逆序输出,并找出最大数和最小数。
解:
#include<stdio.h>
int main()
{
int i, a[10];
for(i = 0; i < 10; i ++)//顺序循环,输入10个数值
scanf("%d",a+i);
for(i = 9; i >= 0; i --)// 逆序循环,输出10个数
printf("%d ",a[i]);
return 0;
}
中:已知二维数组形式如下:求主对角线上元素之和。
解:
#include<stdio.h>
int main()
{
int a[4][4]={5,9,10,12,4,6,7,8,11,23,20,1,3,2,40,14},//存进一个二维数组
sum=0,i;
for(i=0;i<4;i++)
sum+=a[i][i];//对角线元素以此相加
printf("sum=%d\n",sum);
}
难:矩阵的构造与打印
1) 矩阵为n阶方阵,n由键盘输入;
2) 可在螺旋方阵和蛇形方阵中选择(如下图所示)。
方案1(老李):
#include <stdio.h> //定义输入/输出函数
#include <stdlib.h>定义杂项函数及内存分配函数,system()
#include <string.h>//字符串处理
#define MAX 100
int a[MAX][MAX];
int main() {
int n,x,y,nowNum=0;
scanf("%d",&n);
memset(a,0,sizeof(a));//memset() 函数常用于内存空间初始化,用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘memset(a, '/0', sizeof(a));
x = 0,y = 0;
nowNum = a[x][y] = 1;
while(nowNum < n*n) {
while(y+1<n && !a[x][y+1]) a[x][++y] = ++nowNum;//
while(x+1<n && !a[x+1][y]) a[++x][y] = ++nowNum;
while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++nowNum;
while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++nowNum;
}
for(x=0; x<n; x++) {
for(y=0; y<n; y++)
printf("%4d",a[x][y]);
printf("\n");
}
printf("\n\n");
system("pause");
return 0;
}
在螺旋矩阵设计中通过记录(计数器)控制每行的数的数目和转向,实现行列互换,“层层推进”,从而实现数的螺旋循环。
方案2(成哥):
#include<stdio.h>
#define N 100
int lx[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int sx[2][2]={{-1,1},{1,-1}};
int main()
{
int n;
while(~scanf("%d",&n))
{
int a[N][N];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=0;
}
}
int x=0,y=0,z=0;
for(int h=1;h<n*n+1;h++)
{
a[x][y]=h;
if(x+lx[z][0]==n||y+lx[z][1]==-1||y+lx[z][1]==n||a[x+lx[z][0]][y+lx[z][1]])
{
if(z==3) z=0;
else z++;
}
x=x+lx[z][0];
y=y+lx[z][1];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
printf("\n");
x=0;
y=0;
z=0;
for(int h=1;h<n*n+1;h++)
{
a[x][y]=h;
if(x+sx[z][0]==-1||y+sx[z][1]==-1||x+sx[z][0]==n||y+sx[z][1]==n)
{
if(z==1)
{
z=0;
if(x+1==n) y++;
else x++;
}
else
{
z++;
if(y+1==n) x++;
else y++;
}
}
else
{
x=x+sx[z][0];
y=y+sx[z][1];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
}
return 0;
}
方案3(老于):
#include <iostream>
#include <stdlib.h>
#include <iomanip>
using namespace std;
int initializeMatrix(int n,int **matrix){
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++){
matrix[i][j]=0;
}
}
}
int setMatrix1(int n,int **matrix){
int i=0,j=0,di=0,dj=0,r=1,flag=0;
for(;;){
for(i=di,j=dj-flag;j<n-dj;j++,r++) matrix[i][j]=r; if(di++>=n/2) break;
for(i=di,j=n-1-dj;i<n-di;i++,r++) matrix[i][j]=r;
for(;j>0+dj;j--,r++) matrix[i][j]=r; if(dj++>=n/2) break;
for(;i>0+di;i--,r++) matrix[i][j]=r;
flag=1;
}
}
int setMatrix2(int n,int **matrix){
int i=0,j=0,r=1,v=0,d=1,m=1;
for(;;){
if(d%2==1){
for(i=(d<=n)?d-1:n-1,j=(d<=n)?0:d-n,v=0;v<m;v++,i--,j++) matrix[i][j]=r++;
}else{
for(i=(d<=n)?0:d-n,j=(d<=n)?d-1:n-1,v=0;v<m;v++,i++,j--) matrix[i][j]=r++;
}
d++;
m=(d<=n)?d:2*n-d;
if(r>n*n) break;
}
}
int setMatrix3(int n,int **matrix){
int i=0,j=0,r=1;
for(;;){
for(i=0;i<n;i++) matrix[i][j]=r++; j++; if(r>=n*n) break;
for(i=n-1;i>=0;i--) matrix[i][j]=r++; j++; if(r>=n*n) break;
}
}
int setMatrix(int n,int **matrix,int pattern){
switch(pattern){
case 1:setMatrix1(n,matrix);break;
case 2:setMatrix2(n,matrix);break;
case 3:setMatrix3(n,matrix);break;
default:break;
}
}
int showMatrix(int n,int **matrix){
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++){
cout<<setw(3)<<matrix[i][j];
cout<<" ";
}
cout<<endl;
}
}
int input(int *n,int *pattern){
bool flag=0;
cout<<"dimension:";
cin>>*n;
if(*n>0&&*n<16) flag=1;else{cout<<"dimension illegal"<<endl;return 0;}
cout<<"pattern:";
cin>>*pattern;
if(*pattern>0&&*pattern<=3) flag=1;else{cout<<"pattern illegal"<<endl;return 0;}
return flag;
}
int main(){
int i,j,n,r,**matrix,pattern;
char key='y';
for(;;){
if(key=='y'){
if(!input(&n,&pattern)) continue;
matrix=(int **)malloc(sizeof(int *)*n);
for(r=0;r<n;r++) matrix[r]=(int *)malloc(sizeof(int)*n);
initializeMatrix(n,matrix);
}
setMatrix(n,matrix,pattern);
showMatrix(n,matrix);
for(r=0;r<n;r++) free(matrix[r]);
free(matrix);
cout<<"create new matrix?";
cin>>key;
}
}
待我学有所成,结发与蕊可好。@夏瑾墨