c语言数组问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言数组问题相关的知识,希望对你有一定的参考价值。

给定一系列整数,对每个整数的每一位数字统计0~9各个数字的出现次数,求出现次数最多的数字。
输入:
有两行,第一行是整数n(1<=n<=100),表示有n个整数;第二行是n个整数值
输出:
出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数
输入样例:
1
1233
输出样例:
出现次数最多的是3,出现了2次

我的程序:
#include<stdio.h>
int main()

int num[100],cmp[100][100]=0,number[9]=0;
int i,j,n,k,max,temp;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&num[i]);
for(i=0;i<n&&i<100;i++)

temp=num[i];
for(j=0;temp!=0;j++)

cmp[i][j]=(temp%10);
temp/=10;
n++;


for(k=0;k<9;k++)

for(i=0;i<n&&i<100;i++)
for(j=0;cmp[i][j]!=0&&j<100;j++)
if(cmp[i][j]==(k+1))
number[k]++;

max=number[0];
for(k=0;k<9;k++)
max=max>number[k]?max:number[k];
printf("出现次数最多%d次的数字是",max);
for(k=0;k<9;k++)
if(number[k]==max)
printf(" %d",k+1);
printf("\n");


测试中输入1 1233

结果出现的是“1出现的次数最多,出现了40次”

为什么会这样??
用的是g.c-3.3

#include<stdio.h>
int main()

int num[100],number[9]=0;
int i,max,temp,n;

printf("please enter n:");
scanf("%d",&n);

printf("please enter num:");
for(i=0;i<n;i++)
scanf("%d",&num[i]);

for(i=0;i<n&&i<100;i++)

temp=num[i];
while(temp)

number[temp%10] +=1; //number[i]表示数字i出现的次数
temp /=10;



max=number[0];
for(i=0;i<9;i++)
max=max>number[i]?max:number[i]; //找出最多出现了几次

for(i=0;i<9;i++)

if(number[i]==max)
printf("%d appear %d times\\n",i ,max);


参考技术A

我在DEV-C++的编译器中执行你的代码,测试中输入 1 1233,出现的结果是正确的,但是你的代码有其他的问题。我把我的代码贴出来:

#include<stdio.h>
 
int main()

    int num[100],cmp[100][100]=0,number[10]=0;
    int i,j,n,k,max,temp;
    scanf("%d",&n);
    
    for(i=0;i<n;i++)
        scanf("%d",&num[i]);
        
    for(i=0;i<n;i++)
    
     if (0 == num[i]) //整数为0的情况 

     cmp[i][0] = 0;
     cmp[i][1] = -1;//表示第i个整数的所有数字已经算完了,用-1代表结束,后面要用到 
     continue;


        temp=num[i];
        for(j=0;temp!=0;j++)
        
            cmp[i][j]=(temp%10);
            temp/=10;
        
        cmp[i][j] = -1; //表示第i个整数的所有数字已经算完了,用-1代表结束,后面要用到 
    
    
    for(i=0;i<n;i++)
        for(j=0;cmp[i][j]!=-1;j++)
         number[ cmp[i][j] ]++; //统计0,1,2,...,8,9各个数字出现的次数 
        
    max=number[0];
    for(k=0;k<9;k++)
        max=max>number[k]?max:number[k];
    printf("出现次数最多%d次的数字是",max);
    
    for(k=0;k<10;k++)
        if(number[k]==max)
        printf(" %d",k);
    printf("\\n");

C语言三维数组问题

int p[3][4][5];
  int *q=(int *)p;
  int(*s)[5]=&p[1][0];
  int i;
  for(i=0;i<60;i++)
  q[i]=i;
  //printf("%d\n",p[1][7][1]);
  //printf("%d\n",(*(s+1))[3]);
  printf("%d\n",p[1][7][1]*(*(s+1))[3]);
这个怎么理解定义int p[3][4][5];引用的时候p[1][7][1]没有超出范围吗?大神给个详细的指点

在c语言,数组存储空间是连续的,所以三维数组其实可以看成特殊的一维数组,p[3][4][5]可以看成p[3*4*5]的一维数组,因此p[1][7][1] = p[1*4×5+7*5+1] = p[56] 56<3*4*5=60 ,所以p[1][7][1]没有超出范围 参考技术A C对数组的溢出是不检查的,数组名只以首地址的形式记录数组所对应的储存位置,引用的时候,不管怎么写也只是按照长度指向一段储存单位而已。 参考技术B 上面两位网友说得都对,推荐你看一本书:C语言深度解剖
上面数组和指针一节关于这些讲得很清楚。

以上是关于c语言数组问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言数组问题

C语言数组初始化问题。

C语言三维数组问题

c语言数组排序好输出问题

C语言数组排序问题

c语言数组问题