❶ 用c语言怎样输出一个N阶蛇形矩阵
先说思想:N=4时候和N=5的时候前面4条斜线上三角是相同的!所以这个可以用递归做。还有个规律很重要就是当2个数的横纵坐标和都是N+1的时候这2个值的和都是N*N+1!问题就很容易解决了!
写个大概:
int **array=NULL;
void main()
{
int n;
scanf("%d",&n);
array=(int**)malloc(n*sizeof(int*));
for(int i=0;i<n;i++)
{
array[i]=(int *)malloc(n*sizeof(int));
}
Testingval(n,n);
for(int i=0;i<n;i++)
{for(int j=0;j<n;j++)
printf("%d ",array[i][j]);
printf("\n");
}
free(array);
}
int Testingval(int a,int n)//a 表示n行中的第几个。。n表示是N界矩阵!
{ if(n==1)
{ array[0][0]==1;
array[n][n]=n*n;
}
else
Testingval(a-1,n);
if(a%2)
{ int i=1;
array[0][a-1]=array[0][a-2]+1;
array[n-1][n-a]=n*n+1-array[0][a];
while(i<a)
{
array[i][a-1-i]=array[i-1][a-i+1]+1;
array[n-1-i][n-a+i]=n*n+1-array[i][a-i];
i++;
}
}
else
{int i=1;
array[a-1][0]=array[a-2][0]+1;
array[n-a][n-1]=n*n+1-array[a-1][0];
while(i<a)
{
array[a-1-i][i]=array[a-i+1][i-1]+1;
array[n-a+i][n-1-i]=n*n+1-array[a-1-i][i];
i++;
}
}
}
}
❷ 用C语言输出一个N阶蛇形矩阵,看看这个程序哪里错了
又仔细看了一遍你的代码DEBUG了一下发现你是先输出左上半的元素然后计算右半部的直接顺序输出数组乍一看是没问题的但是你忽略的是输出的前提是必须先计算好值你遍历输出到第2行第一个右半部分的元素的时候这个元素还没有开始计算呢而在你的程序里并没有察觉到这点而是直接输出了所以那里就是0了其他0元素也是这样在被计算之前就输出了
避免你说的问题你可以把输出挪出刚开始用来赋值的两个FOR循环即可
直接修改你的代码
#include<stdio.h>
#defineSIZE80
inta[SIZE][SIZE];
voidmain()
{intp,q;intn;
printf("输入蛇形数组的维数:");
scanf("%d",&n);
for(p=0;p<n;p++)
{
for(q=0;q<n;q++)
{
if((p+q)<n)
{
a[p][q]=(p+q)*(p+q+1)/2+1;
if((p+q)%2)
a[p][q]+=q;
else
a[p][q]+=p;
a[n-1-p][n-1-q]=n*n+1-a[p][q];
}
}
}
for(p=0;p<n;p++)
{
for(q=0;q<n;q++)printf("%4d",a[p][q]);
printf(" ");
}
getchar();getchar();
}
经过编译完全OK
❸ c语言给出一个N阶数字矩阵,求其边上数字的和。
这个样子你试一下:
#include "stdio.h"
int number[1000][1000];
int main()
{ int n;
scanf("%d",&n);
for(int i=0; i<n; ++i)
{ for(int j=0; j<n; ++j)
{ scanf("%d",&number[i][j]);
}
}
int sum=0;
for(int k=0; k<n; ++k)
{ if(n==1)
{ sum=sum+number[0][0];
}
else
{ sum=sum+number[0][k]+number[n-1][k];
}
}
for(int f=1; f<n-1; ++f)
{ sum=sum+number[f][0]+number[f][n-1];
}
printf("%d ",sum);
return 0;
}
❹ 用c语言设计一n阶方阵!急!!
#include <stdio.h>
#include<malloc.h>
void matrix(int x,int y) //这里都是向一个方向发展的。
{
int **a;
a = (int **)malloc(x*sizeof(int)); //分配空间。
int num = x+y-1;
int k;
for(k=0;k<x;k++)
{
a[k] = (int *)malloc(y*sizeof(int));
}
int i;
int j;
int start=1; //从1开始的。元素的起始值。
for(k=0;k<num;k++)
{
for(i=0;i<y;i++) //这是列坐标,因为列是在行变后才变的。
{
for(j=0;j<x;j++) //这是行坐标。
{
if(i+j == k)
{
a[j][i] = start;
//printf("%d\n",a[j][i]);
start++;
}
}
}
//printf("k=%d\n",k);
}
for(i=0;i<x;i++) //输出矩阵。
{
for(j=0;j<y;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
for(k=0;k<x;k++) //释放空间。
{
free(a[k]);
}
free(a);
}
int main()
{
int n;
printf("please input (1-9):\n");
scanf("%d",&n);
matrix(n,n);
printf("\n");
matrix(3,5);
getchar();
getchar();
return 0;
}
❺ 用c语言编写一个n阶矩阵
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,**p,i,j;
scanf("%d",&n);
p=new int*[n];
for(i=0;i<n;i++)
{
p[i]=new int[n];
for(j=0;j<n;j++) scanf("%d",&p[i][j]);
}
for(i=0;i<n;i++)
{
printf("%d",p[i][0]);
j=1;
while(j<n)
{
printf(" %d",p[i][j]);
j++;
}
printf("\n");
}
return 0;
}
❻ c语言中的n阶方阵怎嘛做
C语言中int型的数值非常的小,最大的范围也只在[-2^31 , 2^31 -1],所以使用int类型最大只能表示13的阶乘而已,使用范围更大的double才是王道。
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
int i,n,flg;
double num=1;
printf("please enter the times:");
//循环次数
scanf("%d",&flg);
printf("\n\n");
while(flg){
num=1;
printf("please enter the num:");
scanf("%d",&n);
for(i=1;i<=n;i++){
num *= i;
}
printf("factorial = %f\n\n",num);
flg--;
}
}
❼ C语言.键盘输入n阶的方阵,请输出该矩阵各列元素的和,以及两条对角线上各个元素之和。
#include <stdio.h>
int main()//矩阵对角线
{
int a[3][3]={1,2,55,4,5,6,20,8,17},i,j,tp=0;// 1 2 55
for(i=0;i<=2;i++) // 4 5 6
{ // 20 8 17 23 80
j=i;
tp+=a[i][j];
}
printf("%d\n",tp);
tp=0;
for(i=0;i<=2;i++)
{
j=2-i;
tp+=a[i][j];
}
printf("%d",tp);
/*再加个sum[i]的循环计算各列的和,应该简单的,自己思考一下。
那个N阶呢,只要那33改一个,下面的循环里的条件改一下就可以了*/
return 0;
}
❽ 急求!如何用C语言输出如下矩阵(N*N)
题目要求有一个问题,它要求N最小为2,却要求N为奇数,N为奇数应该最小为3或1才对.
按照题目要求编写的C语言矩阵程序如下
#include<stdio.h>
int main(){
int i,j,k,N,count=1;
scanf("%d",&N);
if(N<=2 || 15<N || N%2==0){
printf("请输入小于等于15且大于2的奇数");
}else{
int a[N][N];
for(i=N/2;i>=0;i--){
k=N-i-1;
for(j=N-i-2;j>=i;j--){
a[j][k]=count++;
}
for(j=N-i-2;j>=i+1;j--){
a[i][j]=count++;
}
for(j=i;j<N-i;j++){
a[j][i]=count++;
}
for(j=i+1;j<N-i;j++){
a[k][j]=count++;
}
}
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%-5d",a[i][j]);
}
printf(" ");
}
}
return 0;
}