C语言请解释此程序关键语句!常规的就不用了!谢谢!

来源:百度知道 编辑:UC知道 时间:2024/06/14 00:49:42
#include <stdio.h>
int main(void)
{
static int a[10]={0},n[10],*p,*q;
for (p=a;p<a+10;p++)
scanf ("%d",p);
for (p=a;p<a+10;p++)
n[*p]++;
q=p=n;
p++;
while (p<n+10)
{
if (*p>*q)
q=p;
p++;
}

printf ("%d %d\n",q-n,*q);

}
希望各位高手用点大白话呵呵!我好理解!麻烦了!

#include <stdio.h>
int main(void)
{
static int a[10]={0},n[10],*p,*q;
for (p=a;p<a+10;p++) 循环
scanf ("%d",p); 给a赋值
for (p=a;p<a+10;p++) 循环
n[*p]++; 与a中对应位置数值加一,也就是计算数值出现次数(此处有问题,当a值大于9时,程序溢出)
q=p=n;
p++;
while (p<n+10)以上是查找a中出现最多的数
{
if (*p>*q)
q=p;
p++;
}

printf ("%d %d\n",q-n,*q); 输出a中最多数的偏移量,如果是位置因该是q-n+1。和出现的次数

}
整个程序的漏洞就是第一次a输入数值时必须是小于10的数,否则程序溢出

#include <stdio.h>
int main(void)
{
static int a[10]={0},n[10],*p,*q;
for (p=a;p<a+10;p++)//循环,不说。。。
scanf ("%d",p);//输入,不说。。。
for (p=a;p<a+10;p++)//循环,不说。。。
n[*p]++;//数组n的第*p位置的值加1
q=p=n;//指针q指向p,p又指向n
p++;//指针后移
while (p<n+10)//循环,,,
{
if (*p>*q)//值比较。。。
q=p;//同前面
p++;//同前面
}

printf ("%d %d\n",q-n,*q);//输出

}

#include