- 主题:[求助]小学生C++编程问题
#include<iostream>
using namespace std;
const int MAX=5;
int count(int b[],int n)
{
int x;
for(int i=1;i<=n;i++)
{
do
{
cout<<i<<"=";
cin>>x;
}while(x<0||x>MAX);
b[x]++;
}
}
int main()
{
int a[MAX+1],i,n,*p;
cout<<"请输入实到人数:";
cin>>n;
for(p=a;p<=(a+MAX);p++)
*p=0; //这里是初始化所有a[]的值为0么?为什么要这么做?
p=a;
count(p,n); //这里p不是指针么?怎么能用前面定义的函数?
for(i=0;i<=MAX;i++)
{
switch(i)
{
case 0:cout<<"弃权:"<<a[i]<<endl;break;
default:cout<<i<<"号票数:"<<a[i]<<endl;break;
}
}
return 0;
}
--
FROM 124.205.77.*
哦哈哈,百度一下《小学生C++趣味编程》第81课,民主选举。谢谢指点。
【 在 cwall 的大作中提到: 】
: 没看到小学生。。。。。。
: 【 在 ancova (...) 的大作中提到: 】
: : #include<iostream>
: ....................
- 来自「最水木 for iPhone 7」
--
FROM 124.205.77.*
谢谢解答,第一个问题其实是初始化计数器。
关于第二个问题还有一点疑问:
我理解你的回答中,函数里的形式参数int b[]实际上&b[0]。
那么在后面通过count(p,n)调用这个函数时,虽然p=a=&a[0],这就意味着p和a[]就绑定了么?以致于在函数中的形式参数b[x]++也等价于实际参数a[x]++了?我原以为p=a只是把首元素的地址&a[0]存给p了。
【 在 hoodlum (hoodlum) 的大作中提到: 】
: 是。可以写成 int a[MAX+1] = { 0 };
: 或者 memset(a, 0, sizeof(a));
: 只有在被设置的元素的所有的字节都一样的时候可以用 memset。
: 例如如果想设置每个int元素是 100。那就只能用循环了。
: 函数里的参数,int x[] 实际上就是 int*;
: 数组 id 相当于指向 [0] 位置的指针。
--
FROM 124.205.77.*
指针 p 的 [i] 操作就是 *(p + i),这个太精髓了,书上没讲,看来还是要找书来系统
学习。
多谢详细指导!//hand
【 在 hoodlum (hoodlum) 的大作中提到: 】
: 这就意味着p和a[]就绑定了么?
: a 标识了这个数组的存储(或者说内存地址)。
: p = a 的时候,相当于 p 指针变量的值就是 a[0] 的地址,
: ...................
--
FROM 124.205.77.*
哈哈,是的
刚开始学的时候还挺有干劲了的,现在到指针和函数就有点吃力了……
【 在 looseleaf (衣香人影太匆匆) 的大作中提到: 】
: 这种题目是扼杀小学生学编程的兴趣吧
--
FROM 124.205.77.*