C语言语句解释,高手请进!
已知在文件IN。DAT中存有若干个(<200)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:(1...
已知在文件IN。DAT中存有若干个(<200)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:(1)求出文件中工有的正整数个数totNum;(2)求出这些数右移1位后,产生的新数是奇数的个数totCnt以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数writeDat()把所求的结果输出到文件OUT。DAT中。
注意:部分程序已经给出。
#include <stdio.h>
#include <conio.h>
#define MAXNUM 200
int xx[MAXNUM];
int totNum = 0; /* 文件IN.DAT中共有的正整数个数 */
int totCnt = 0; /* 符合条件的正整数的个数 */
double totPjz = 0.0; /* 平均值 */
int ReadDat(void);
void writeDat(void);
void CalValue(void)
{
int i, data;
for (i=0; i<MAXNUM; i++)
{
if (!xx[i])
break;
if (xx[i] > 0)
totNum++;
data = xx[i]>>1;
if (data%2)
{
totCnt++;
totPjz += xx[i];
}
}
totPjz /= totCnt;
}
void main()
{
int i;
for (i=0; i<MAXNUM; i++)
xx[i] = 0;
if (ReadDat())
{
printf("数据文件IN.DAT不能打开!\007\n");
return;
}
CalValue();
printf("文件IN.DAT中共有的正整数个数=%d个\n", totNum);
printf("符合条件的正整数的个数=%d个\n", totCnt);
printf("平均值=%.2f\n", totPjz);
writeDat();
}
int ReadDat(void)
{
FILE *fp;
int i = 0;
if ((fp = fopen("IN.DAT", "r")) == NULL)
return 1;
while (!feof(fp))
fscanf(fp, "%d,", &xx[i++]);
fclose(fp);
return 0;
}
void writeDat(void)
{
FILE *fp;
fp = fopen("OUT.DAT", "w");
fprintf(fp, "%d\n%d\n%6.2f\n", totNum, totCnt, totPjz);
fclose(fp);
}
请高手帮我解释下要求编写的部分中的:“if (!xx[i])”,“totPjz /= totCnt;”这两句是什么意思。“!xx[i]”前面的“!”是阶乘的意思还是其他表达?摆脱了,就解释这两个地方号码?
请高手帮我解释下要求编写的部分中的:“if (!xx[i])”,“totPjz /= totCnt;”这两句是什么意思。“!xx[i]”前面的“!”是阶乘的意思还是其他表达?摆脱了,就解释这两个地方号码? 展开
注意:部分程序已经给出。
#include <stdio.h>
#include <conio.h>
#define MAXNUM 200
int xx[MAXNUM];
int totNum = 0; /* 文件IN.DAT中共有的正整数个数 */
int totCnt = 0; /* 符合条件的正整数的个数 */
double totPjz = 0.0; /* 平均值 */
int ReadDat(void);
void writeDat(void);
void CalValue(void)
{
int i, data;
for (i=0; i<MAXNUM; i++)
{
if (!xx[i])
break;
if (xx[i] > 0)
totNum++;
data = xx[i]>>1;
if (data%2)
{
totCnt++;
totPjz += xx[i];
}
}
totPjz /= totCnt;
}
void main()
{
int i;
for (i=0; i<MAXNUM; i++)
xx[i] = 0;
if (ReadDat())
{
printf("数据文件IN.DAT不能打开!\007\n");
return;
}
CalValue();
printf("文件IN.DAT中共有的正整数个数=%d个\n", totNum);
printf("符合条件的正整数的个数=%d个\n", totCnt);
printf("平均值=%.2f\n", totPjz);
writeDat();
}
int ReadDat(void)
{
FILE *fp;
int i = 0;
if ((fp = fopen("IN.DAT", "r")) == NULL)
return 1;
while (!feof(fp))
fscanf(fp, "%d,", &xx[i++]);
fclose(fp);
return 0;
}
void writeDat(void)
{
FILE *fp;
fp = fopen("OUT.DAT", "w");
fprintf(fp, "%d\n%d\n%6.2f\n", totNum, totCnt, totPjz);
fclose(fp);
}
请高手帮我解释下要求编写的部分中的:“if (!xx[i])”,“totPjz /= totCnt;”这两句是什么意思。“!xx[i]”前面的“!”是阶乘的意思还是其他表达?摆脱了,就解释这两个地方号码?
请高手帮我解释下要求编写的部分中的:“if (!xx[i])”,“totPjz /= totCnt;”这两句是什么意思。“!xx[i]”前面的“!”是阶乘的意思还是其他表达?摆脱了,就解释这两个地方号码? 展开
4个回答
展开全部
"if(!xx[i])"这句的意思是:如果xx[i]的值是假,那么执行括号后面的语句(程序中为跳出循环)。它的作用是判断当前for循环是否已经处理完了最后一个数,因为预先不知道具体有多少个数,只给个最大限200.
!表示逻辑非,即将真假值颠倒一下,if语句后面的括号中的值为真时执行括号后的语句,否则执行else后的(假如有else的话)。而括号内有!,所以感叹号后的表达式xx[i]值为假(也就是空值,在readdat函数中未赋值给它)时整个括号内值则为真,会执行括号后跳出循环的break语句.
“totpjz/=totcnt;”这句的意思是:totpjz=totpjz/totcnt.作用是计算题中第二问要求的平均值。因为这句之前是一个for循环块(对应花括号"{"就能看出来),每次循环中均会判断当前的xx[i]经过题中要求的处理后是否为满足条件的数,是的话有这两句totCnt++;
totPjz += xx[i];意思是满足条件的数的数目增一,并将这个数加到totpjz中去,能看出在循环中totpjz不是作为存储平均值的,而是暂时作为一个累加器,存储所有满足条件数的和,最后循环结束后除以个数totcnt,也就是执行 totpjz/=totcnt后才表示平均值。
!表示逻辑非,即将真假值颠倒一下,if语句后面的括号中的值为真时执行括号后的语句,否则执行else后的(假如有else的话)。而括号内有!,所以感叹号后的表达式xx[i]值为假(也就是空值,在readdat函数中未赋值给它)时整个括号内值则为真,会执行括号后跳出循环的break语句.
“totpjz/=totcnt;”这句的意思是:totpjz=totpjz/totcnt.作用是计算题中第二问要求的平均值。因为这句之前是一个for循环块(对应花括号"{"就能看出来),每次循环中均会判断当前的xx[i]经过题中要求的处理后是否为满足条件的数,是的话有这两句totCnt++;
totPjz += xx[i];意思是满足条件的数的数目增一,并将这个数加到totpjz中去,能看出在循环中totpjz不是作为存储平均值的,而是暂时作为一个累加器,存储所有满足条件数的和,最后循环结束后除以个数totcnt,也就是执行 totpjz/=totcnt后才表示平均值。
展开全部
就回答你那两个问题
!是非的意思,一般用于布尔变量
这里用!后负数和零会返回假,正数返回真。
/=是缩写。和+=一样
a/=10等价于 a=a/10
!是非的意思,一般用于布尔变量
这里用!后负数和零会返回假,正数返回真。
/=是缩写。和+=一样
a/=10等价于 a=a/10
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
①教你一个方法
if(!XX)可以看成if(XX==0)
②A运算符=B
等价于
A=A运算符B
if(!XX)可以看成if(XX==0)
②A运算符=B
等价于
A=A运算符B
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if(xx[i]==0) totpjz=totpjz/totcnt;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询