
C语言高手进来!!!高分悬赏!!!
计算机三级网络的13和20题为什么13题里面必须有if(!xx[i])continue;这一句,两个同样都是统计正整数的,只是13题里面有一个向右移一位的问题难道0向右移...
计算机三级网络的13和20题
为什么13题里面必须有if(!xx[i]) continue;
这一句,两个同样都是统计正整数的,只是13题里面有一个向右移一位的问题
难道0向右移一位就不是0了吗
高份悬赏!!!
高手回答
已知在文件IN20.DAT中存有若干个(个数<200)4位数字的正整数,函数ReadDat() 的功能是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:(1)求出这文件中共有多少个正整数totNum; (2)求出这些数中的各位数字之和是偶数的数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz,最后调用函数WriteDat()把所求的结果输出到文件OUT20.DAT中。
void CalValue()
{
int i,thou,hun,ten,data;
int ab;
long sum=0;
for (i=0;i<MAXNUM;i++)
{
if(xx[i]>0)
{
totNum++;
thou=xx[i]/1000;
hun=xx[i]%1000/100;
ten=xx[i]%100/10;
data=xx[i]%10;
ab=thou+hun+ten+data;
if (ab%2==0){totCnt++;sum=sum+xx[i];}
}
}
totPjz=sum/totCnt;
}
还有,把if(!xx[i]) continue; 换成了if(!xx[i]) break;居然也对,这两个有什么区别 展开
为什么13题里面必须有if(!xx[i]) continue;
这一句,两个同样都是统计正整数的,只是13题里面有一个向右移一位的问题
难道0向右移一位就不是0了吗
高份悬赏!!!
高手回答
已知在文件IN20.DAT中存有若干个(个数<200)4位数字的正整数,函数ReadDat() 的功能是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:(1)求出这文件中共有多少个正整数totNum; (2)求出这些数中的各位数字之和是偶数的数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz,最后调用函数WriteDat()把所求的结果输出到文件OUT20.DAT中。
void CalValue()
{
int i,thou,hun,ten,data;
int ab;
long sum=0;
for (i=0;i<MAXNUM;i++)
{
if(xx[i]>0)
{
totNum++;
thou=xx[i]/1000;
hun=xx[i]%1000/100;
ten=xx[i]%100/10;
data=xx[i]%10;
ab=thou+hun+ten+data;
if (ab%2==0){totCnt++;sum=sum+xx[i];}
}
}
totPjz=sum/totCnt;
}
还有,把if(!xx[i]) continue; 换成了if(!xx[i]) break;居然也对,这两个有什么区别 展开
2个回答
展开全部
最好把源代码贴出来
右移一位相当于除以2.
用移位的办法做整数的除法运算比用运算符"/"快
计算机网络三级上机题中一般不会出现位操作的.
本人已经过三级两年了,优秀.现在还在用C语言,用起来不错,好好掌握,在科研上很有用.
if(!xx[i])
continue;
的意思是,如果某一行的数据是0的话,忽略不管,进行下一个循环继续查找正整数,因为我们要统计的是正整数,空行(值为0)是没有意义的,这样把它排除,以便下面的语句(totNum++; )统计正整数有几个。
因为我们在输入数据的时候可能由于多输入了一个回车或TAB而导致某一行为空。以此句来检查一下,以跳过没有意义的行。当遇到空行时,即不执行下面的语句,而进行下一个循环,这样便节约了程序运行的时间。在编写大程序时,程序的有效运行时间是很重要的。
0向右移一位仍然是0。但是由于前面排除了数据为空(也就是为0)的行,所以,所操作的数据都是非零的正整数,经if(!xx[i])
continue;过滤后就不存在为零的数据了。因此,你“难道0向右移一位就不是0了吗 ”是多虑了.
if(xx[i]>0)已经过滤掉了为零的行
不可能的,
if(!xx[i]) continue;中continue的意思是指,如果条件满足将进行下一次循环,本次循环放弃,也就是说,如果现在xx[5]是零(也就是空行),下面的语句将不被执行,而是i自加,然后从xx[6]再开始判断是否满足条件.
if(!xx[i])break;的意思是,如果条件满足(即xx[i]是空行),直接从for循环跳出,不再判断以下数据是否满足;也就是说,如果当前xx[5]是空行,将不再判断xx[6],xx[7],xx[8]……是否满足。for语句将不再被执行。将执行的是for循环后面的代码。
唯一可能的原因就是,为零的行只在所有数据的后面,在最后一个数据之前没有为空的行,开头以及中间没有空行.你打开数据看一下就可以了,用记事本打开.
右移一位相当于除以2.
用移位的办法做整数的除法运算比用运算符"/"快
计算机网络三级上机题中一般不会出现位操作的.
本人已经过三级两年了,优秀.现在还在用C语言,用起来不错,好好掌握,在科研上很有用.
if(!xx[i])
continue;
的意思是,如果某一行的数据是0的话,忽略不管,进行下一个循环继续查找正整数,因为我们要统计的是正整数,空行(值为0)是没有意义的,这样把它排除,以便下面的语句(totNum++; )统计正整数有几个。
因为我们在输入数据的时候可能由于多输入了一个回车或TAB而导致某一行为空。以此句来检查一下,以跳过没有意义的行。当遇到空行时,即不执行下面的语句,而进行下一个循环,这样便节约了程序运行的时间。在编写大程序时,程序的有效运行时间是很重要的。
0向右移一位仍然是0。但是由于前面排除了数据为空(也就是为0)的行,所以,所操作的数据都是非零的正整数,经if(!xx[i])
continue;过滤后就不存在为零的数据了。因此,你“难道0向右移一位就不是0了吗 ”是多虑了.
if(xx[i]>0)已经过滤掉了为零的行
不可能的,
if(!xx[i]) continue;中continue的意思是指,如果条件满足将进行下一次循环,本次循环放弃,也就是说,如果现在xx[5]是零(也就是空行),下面的语句将不被执行,而是i自加,然后从xx[6]再开始判断是否满足条件.
if(!xx[i])break;的意思是,如果条件满足(即xx[i]是空行),直接从for循环跳出,不再判断以下数据是否满足;也就是说,如果当前xx[5]是空行,将不再判断xx[6],xx[7],xx[8]……是否满足。for语句将不再被执行。将执行的是for循环后面的代码。
唯一可能的原因就是,为零的行只在所有数据的后面,在最后一个数据之前没有为空的行,开头以及中间没有空行.你打开数据看一下就可以了,用记事本打开.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询