C语言 关于数组的问题

int main(){ int i,n,a,b,c,d,k,an[4];char bn[4]; for(i=32;i<100;i++) { n=i*i; a=n/1000;b=n/100-10*a;c=n/10-100*a-10*b;d=n-1000*a-100*b-10*c; while(a>b&&b>c) { while(c>d) break; } an[0]=a;bn[0]='a'; an[1]=b;bn[1]='b'; an[2]=c;bn[2]='c'; an[3]=d;bn[3]='d'; } printf("it is "); for(k=0;k<4;k++) { printf("%d\n%c",an[k],bn[k]); }}目的是找到一个四位数的平方数,且满足千位数字大于百位数字大于十位数字大于个位数字;我的问题是:1,为什么我的输出结果是9801啊。。。2,刚刚在debug上弄了下单步调试(可能哪摁错了),结果执行界面如下:没有显示了。。。能不能告诉我这是怎么回事,以及,怎么单步调试啊。。。3,能不能用字符数组的形式(我的代码中的b[n]这样的形式)输出赋值了的整形啊?

第1个回答  2017-06-12

这样吧,看符不符合你的要求。

再修改了一下。

#include <stdio.h>
int main()
{
    int i,n,a,b,c,d,k,an[4];
    char bn[4];
    for(i=32; i<100; i++)
    {
        n=i*i;
        a=n/1000;
        b=n/100-10*a;
        c=n/10-100*a-10*b;
        d=n-1000*a-100*b-10*c;
        if(a>b&&b>c&&c>d) {
            an[0]=a;
            bn[0]='a';
            an[1]=b;
            bn[1]='b';
            an[2]=c;
            bn[2]='c';
            an[3]=d;
            bn[3]='d';
            break;
        }
    }
    printf("it is ");
    for(k=0; k<4; k++)
    {
        printf("%c=%d,",bn[k],an[k]);
    }
}

本回答被网友采纳
第2个回答  2017-06-12
能比如,有数组a[3][2]则*a表示a[0][0]的值由于二维数组是按行存放(先放完第1行所有列再开始放第2行,依此类推)因此*(a[m])表示a[m][0]的值,相当于*(a+m*2)的值a[m][n]等同于*(a+m*2+n)的值本回答被提问者采纳

c语言关于定义二维数组的问题
在C语言中,二维数组可以视为一个表格或者矩阵。你可以通过指定数组的行数和列数来定义它。例如,定义一个有3行4列的二维数组可以写作:`int array[3][4];`。这表示数组名为`array`,包含3行和4列,总共可以存储12个整数。你也可以在定义时初始化数组的值,如:`int array[3][4] = {{1, ...

c语言关于定义二维数组的问题
理解二维数组的关键在于明确其结构:第一维代表数据的开始位置,第二维则指特定数据在组内的位置。例如,数组a[][4]意味着a是一个由4个元素构成的一维数组的集合,编译器会根据你给定的初始值数量自动计算第一维的长度,通常是元素总数除以4,若有余数,长度会加1,未赋值的部分会默认为0。然而,...

关于C语言中数组定义问题
(1)在堆栈段中分配内存,由于太大无法分配,所以错误。(2)在数据段中分配内存,数据段可以分配,无错误。(3)数组比(1)需要的内存少,在堆栈段大小范围内,可以分配,无错误 (4)同(3)

c语言数组问题
答案是:abcbcc 第一个for循环之后,x[3][4] = {"abc", "abc", "abc"} 第二个for循环的时候,&x[0][0]就是第一行第一个元素的地址所以输出abc &x[1][1]就是第二行第二个元素的地址所以输出bc &x[2][2]就是第三行第三个元素的地址所以输出c ...

c语言数组的大小
另外,方括号中的常量表达式可以是“数字常量表达式”,也可以是“符号常量表达式”。但不管是什么表达式,必须是常量,绝对不能是变量。C 语言不允许对数组的长度进行动态定义,换句话说,数组的大小不依赖程序运行过程中变量的值。非通常的情况为动态内存分配,此种情况下数组的长度就可以动态定义。

c语言数组问题
问一:c语言开辟数组,如果里面存的是整数,那么没有复制之前,数组中默认的值为零,还是乱码。答:C语言声明数组变量时,只分配相应的空间和地址,而不对里面存放的数据初始化。不管是int、float、还是char型等,即里面存的无论是整数、小数还是字符,再没有复赋值之前,数组中默认的值都是乱码,而不...

C语言数组基本问题
第一:为什么p=&s非法:因为C++数组中数组名字相当于是指向数组第一个元素的指针 所以 &s相当于取一个指针的地址,你必须用 指向指针的指针int **p = &s。这样才能保存。第二:而p=&s[i]合法 s[i]是数组中的第i个元素的值。所以你可以用&s[i]取到的是数组第i个元素的地址, int *p =...

C语言。数组的一点问题
答案是D a数组中存储的是'A','B','C','D','E','F','\\0'比b数组要多一个字符串结束符'\\0'所以A,B,C选项全错。

关于C语言二组字符数组问题?
您这谈不上什么机制,就是数组越界了。在C语言中定义数组char name[1][20],那么它的内存大小就指定了1行20个字符大小。不能越界赋值或访问!你对错误的代码看到的结果不能说明任何问题。你想要的是动态数组。应该用malloc和realloc函数来实现动态数组,这里有几个注意点:1、你输入的是字符串长度不...

c语言二维数组问题求解
c语言的数组在定义时的方括号里的数字就是数组的大小,比如 char ch[100],数组大小就是100,但是多数组进行操作时,是从0开始的,ch[0],就是第一个,ch[99]是第100个。这道题目 int x[2][3],表示一个2行3列的二维数组,所以c是正确的 ...

相似回答