二维数组
#include <stdio.h>#define NUM 5
int main()
{
char slogans = {
"I love FishC.com!",
"Keep moving!",
"Impossible is nothing!",
"Just do it!",
"I am what I am!"};
int i;
for (i = 0; i < NUM; i++)
{
printf("%s\n", slogans);
}
return 0;
}
请教大佬上面代码打印的时候只写了 slogans ,程序能够正常输出,是不是只有一个下标就代表了slogans
比如说slogans可以用slogans来代替?就像一维数组a={1,2}在输出的时候只用写个a就行了?
二维数组slogans可以想象成五个一维数组(slogans)~(slogans)放在相邻的位置,第一个下标相比较于第二个下标有着数组名的作用
我将二维数组类型改为整形,代码如下:
#include <stdio.h>
#define NUM 5
int main()
{
int slogans = {
{1,2},
{3,4},
{5,6},
{7,8},
{9,10}};
int i;
for (i = 0; i < NUM; i++)
{
printf("%d\n", slogans);
printf("%p\n", slogans);
}
return 0;
}
输出的是地址
那么我上面想的对不对呢? 本帖最后由 jhq999 于 2021-9-19 10:25 编辑
“是不是只有一个下标就代表了slogans”slogans代表了的slogans的指针,slogans的值和&slogans值一样,slogans的值和&slogans值一样
"比如说slogans可以用slogans来代替?就像一维数组a={1,2}在输出的时候只用写个a就行了?"不可以,但slogans可以用*(slogans+100*1+88)求出,a是数组指针,*a=a,*(a+1)=a。
“二维数组slogans可以想象成五个一维数组(slogans)~(slogans)放在相邻的位置,第一个下标相比较于第二个下标有着数组名的作用”不管多少维数组实际上在物理层面内存存储就是一维数组
,可以把一维转化成多维数组,例如:int a={1,2,3,4},(*p);p=(int(*))a;当然不嫌麻烦你也可以这么写((int(*))a),((int(*))a),……;
,反过来也可以
我感觉到课后作业的答案越来越难了,有些问题我用自己的方法能够写出来,但要费不少功夫,但是我看到答案的时候有时候看不懂,像下面这个
#include <stdio.h>
#define M 2
#define N 2
#define P 3
int main()
{
int a = {
{1, 2, 3},
{4, 5, 6}};
int b = {
{1, 4},
{2, 5},
{3, 6}};
int c = {0};
int i, j, k, row;
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
for (k = 0; k < P; k++)
{
c += a * b;
}
}
}
// row 取行数最大值
row = M > P ? M : P;
for (i = 0; i < row; i++)
{
// 打印A
printf("|");
for (j = 0; j < P; j++)
{
if (i < M)
{
printf("\b%d ", a);
printf("|");
}
else
{
printf("\b\b\b ");
}
}
// 打印 * 号
if (i == row / 2)
{
printf(" * ");
}
else
{
printf(" ");
}
printf("|");
// 打印B
for (j = 0; j < N; j++)
{
if (i < P)
{
printf("\b%d ", b);
printf("|");
}
else
{
printf("\b\b\b ");
}
}
// 打印 = 号
if (i == row / 2)
{
printf(" = ");
}
else
{
printf(" ");
}
// 打印C
printf("|");
for (j = 0; j < N; j++)
{
if (i < M)
{
printf("\b%d ", c);
printf("|");
}
else
{
printf("\b\b\b ");
}
}
printf("\n");
}
return 0;
}
我的天哪一百多行就为个打印,让我自己想破脑袋都想不出来,大家都是那么厉害的吗?
下面这个是我自己写的
#include<stdio.h>
int main()
{
int i,j,k,sum=0;
int a={1,2,3,4,5,6};
int b={1,4,2,5,3,6};
int c={0};
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<3;k++)
{
sum=sum+a*b;
}
c=sum;
sum=0;
}
}
printf("| 1 2 3 | | 1 4 | | %d %d |\n",c,c);
printf("| 4 5 6 | * | 2 5 | = | %d %d |\n",c,c);
printf(" | 3 6 |");
} bszs 发表于 2021-9-18 23:58
我感觉到课后作业的答案越来越难了,有些问题我用自己的方法能够写出来,但要费不少功夫,但是我看到答案的 ...
上面可以把M N P 以及a b c数组改变后一样可以得出结果相当于公式,下面只不过是其中一个特例 jhq999 发表于 2021-9-19 10:33
上面可以把M N P 以及a b c数组改变后一样可以得出结果相当于公式,下面只不过是其中一个特例
得出结果不难打印结果难啊
本帖最后由 jhq999 于 2021-9-19 11:03 编辑
bszs 发表于 2021-9-19 10:53
得出结果不难打印结果难啊
因为为了适应普遍性肯定麻烦,其实就是按部就班“搬砖头“,当你把语言学的差不多了,你发现按部就班挺简单挺好。 jhq999 发表于 2021-9-19 11:00
因为为了适应普遍性肯定麻烦,其实就是按部就班“搬砖头“,当你把语言学的差不多了,你发现按部就班挺 ...
我看着都费劲,算了,先把基础的搞好吧,课后作业只能量力而为了 jhq999 发表于 2021-9-19 11:00
因为为了适应普遍性肯定麻烦,其实就是按部就班“搬砖头“,当你把语言学的差不多了,你发现按部就班挺 ...
还有一个问题
#include<stdio.h>
int main()
{
int n=5;
int a;
a={1,2,3,4,5};
printf("%d",a);
}
这段代码会报错,a={1,2,3,4,5};当[]里面的为变量不能这样初始化吗? 本帖最后由 jhq999 于 2021-9-19 15:57 编辑
bszs 发表于 2021-9-19 12:35
还有一个问题
这段代码会报错,a={1,2,3,4,5};当[]里面的为变量不能这样初始化吗?
动态数组不能这样声明。
#include<stdio.h>
int main()
{
int n=5;
/*int a;
a={1,2,3,4,5};*/
int *a=new int;
for(int i=1;i<=5;i++)
a=i;
printf("%d",a);
delete[] a;
}
页:
[1]