1.已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从小到大进行排列,若产品名称相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中。最后main()函数调用函数WriteDat()把结果输出到文件OUT10.DAT中。
提示:若中间变量为PRO temp,则可以直接使用结构赋值语句进行解题;产品名称比较请用函数strcmp进行解题。
例如:sell[i] = temp ;
注意:部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题为了实施两个数组元素的交换,另外定义了一个结构变量cell。同时要注意的是比较产品名称大小的时候用strcmp()函数实现。程序使用两次二重循环来实现要求的功能。
void SortDat()
{int i,j;
PRO cell; /*定义结构变量*/
for (i=0;i
for (j=i+1;j
if (strcmp(sell[i].mc,sell[j].mc) > 0) /*strcmp()函数功能是比较产品名称大小*/ {cell=sell[i]; /*按产品代码从小到大进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
for (i=0;i
for (j=i+1;j
if ((strcmp(sell[i].mc,sell[j].mc) == 0)&&(sell[i].je
{cell=sell[i];
sell[i]=sell[j];
sell[j]=cell;
}
2. 函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于
80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串变量的下标为奇数的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
例如:位置 0 1 2 3 4 5 6 7
源字符串 h g f e d c b a
则处理后字符串 h a f c d e b g
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题for循环条件里采用的步长为2,这是因为要求只对下边为奇数的元素进行判断。程序使用三重循环来实现要求的功能。外层的while循环用来实现行间遍历,内层的二重for循环用来遍历行内下标为奇数的元素。
void jsSort()
{int i,j,k,l,p,temp; /*定义局部变量*/
i=0;
while(i
{
j=strlen(xx[i]); /*strlen(xx[i])函数的功能是统计第i行字符串中字符的个数*/ for(k=1;k
{p=k;
for(l=k+2;l
if(xx[i][l]
if(p!=k)
{temp=xx[i][p];
xx[i][p]=xx[i][k];
xx[i][k]=temp;
}
}
i++;
}
}
3. 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT8.DAT中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题为了实施两个数组元素的交换,另外定义了一个结构变量cell。同时要注意的是比较代码大小的时候不能直接比较,因为它们都是字符串。正确的比较方法是用atoi对代码做变换。程序使用两次二重循环来实现要求的功能。
void SortDat()
{int i,j;
PRO cell; /*定义结构变量*/
for (i=0;i
for (j=i+1;j
if (atoi(sell[i].dm)
sell[i]=sell[j];
sell[j]=cell;
}
for (i=0;i
for (j=i+1;j
if (( atoi(sell[i].dm)==atoi(sell[j].dm))&&(sell[i].je
{cell=sell[i];
sell[i]=sell[j];
sell[j]=cell;
}
}
4. 下列程序prog1.c的功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。
请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。
最后调用函数writeDat()把结果输出到文件out.dat中。
请勿改动主函数main()和写函数writeDat()的内容。
本题采用for循环结合if语句来实现功能。循环的起始点为10,终止点32。因为此二者的平方恰好包括了100和1000。在循环体内计算出变量a的值,这样可以保证每次检查的数都是平方数。然后再得出此数的各位数值。如果符合条件则将其传递给数组bb。
int jsValue(int bb[])
{ int i,a,d,e,c,p; /*定义局部变量*/
p=0;
for(i=10;i
{ a=i*i; /*设定检查的数是平方数*/
if(a>=100&&a
{ c=a/100; /*求数值的百位数的数字*/
e=(a-c*100)/10; /*求数值的十位数的数字*/ d=a-c*100-e*10; /*求数值的个位数的数字*/ if((c==e)||(c==d)||(d==e)) /*判断数值是否有两位数字相同*/ {bb[p]=a; /*将符合条件的数值存入数组中*/ p++;}
}
}
return p--;
}
5. 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从大到小进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat() 把结果输出到文件OUT4.DAT中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题为了实施两个数组元素的交换,另外定义了一个结构变量cell。同时要注意的是比较代码大小的时候不能直接比较,因为它们都是字符串。正确的比较方法是用atoi对代码做变换。程序使用两次二重循环来实现要求的功能。
void SortDat()
{int i,j;
PRO cell; /*定义结构变量*/
for (i=0;i
for (j=i+1;j
if (sell[i].je
{cell=sell[i]; /*按金额从大到小进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
for (i=0;i
for (j=i+1;j
if (( atoi(sell[i].dm)
{cell=sell[i]; /*按产品代码从大到小进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
}
6. 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。
其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT2.DAT中。 部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题为了实施两个数组元素的交换,另外定义了一个结构变量cell。同时要注意的是比较代码大小的时候不能直接比较,因为它们都是字符串。正确的比较方法是用atoi对代码做变换。程序使用两次二重循环来实现要求的功能。
void SortDat()
{int i,j;
PRO cell; /*定义结构变量*/
for (i=0;i
for (j=i+1;j
if (sell[i].je > sell[j].je) /*判断金额的大小*/
{cell=sell[i]; /*按金额从小到大进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
for (i=0;i
for (j=i+1;j
if (( atoi(sell[i].dm)
{cell=sell[i]; /*按产品代码从大到小进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
}
7. 某级数的前两项A1=1,A2=1,以后各项具有如下关系:
An=An-2+2An-1
下列程序prog1.c的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:Sn=M,这里Sn=A1+A2+...+An,并依次把n值存入数组单元b[0],b[1]和b[2]中,请编制jsValue()函数来实现此功能, 最后调用函数writeDat()把数组b[]中的值输出到out.dat文件中。
请勿改动主函数main()和写函数writeDat()的内容。
本题针对三种不同的要求使用了三个while循环来实现要求的功能。最后一项的序号用变量i在每次循环体内记录,然后在循环结束后将其传递给数组b。
jsValue()
{
int i,a1,a2,a,Sn; /*定义局部变量*/
a1=1; a2=1; Sn=a1;i=1; /*给变量赋初值*/
while (Sn
{Sn=Sn+a2; a=a1; a1=a2; a2=a+2*a1; if (Sn
b[0]=i;
a1=1; a2=1; Sn=a1;i=1;
while (Sn
{Sn=Sn+a2;a=a1;a1=a2;a2=a+2*a1;if (Sn
b[1]=i;
a1=1; a2=1; Sn=a1;i=1;
while (Sn
{Sn=Sn+a2;a=a1;a1=a2;a2=a+2*a1;if (Sn
b[2]=i;
}
8. 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数CharConvA(),其函数的功能是:以该文章中的行为单位把字符串中的最后一个字符的ASCII值右移4位二进制位,高位补0后加最后第二个字符的ASCII值,得到最后一个新的值,最后第二个字符的ASCII值右移4位二进制位,高位补0后加最后第三个字符的ASCII值,得到最后第二个新的值,依此类推一直处理到第二个字符,注意:第一个字符的ASCII值加原最后一个字符的ASCII值,得到第一个新的值。得到的新值分别存放在原字符串对应的位置上。之后把已处理的结果仍按行重新存入数组xx中。最后main()函数调用函数writeDat()把结果xx输出到文件OUT10.DAT中。
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格,并也按字符处理。 注意:部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数writeDat()和输出数
本题主要是考察移位操作符>>的使用。另外,第一个元素先用变量p保存,然后在程序结尾单独处理。 void CharConvA()
{ int i,j,k,p; /*定义局部变量*/
i=0;
while(i
{ j=strlen(xx[i]); /*strlen(xx[i])函数的功能是统计第i行字符串中字符的个数*/
p=xx[i][0]; /*将第一个元素先保存在变量p中*/
xx[i][0]=xx[i][0]+xx[i][j-1]; /*得到第一个的新字符*/
for(k=j-1;k>=2;k--)
{ xx[i][k]=(xx[i][k] >> 4)+xx[i][k-1];} /*利用移位操作符求出各个新字符*/
xx[i][1]=(xx[i][1] >> 4)+p; /*得到第二个的新字符*/
i++;
}
}
9. 下列程序的功能是:找出所有100以内(含100)满足I,I+4,I+10都是素数的整数I(I+10也在100以内)的个数cnt以及这些I之和sum。请编写函数countValue()实现程序要求的功能,最后调用函数writeDat()把结果cnt和sum输出到文件out.dat中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数writeDat()的内容。
本题因为给出了判断素数的函数isPrime,所以仅使用一个if判断语句就解决了问题。另外在循环条件中只需使用i+10
void countValue()
{int i; /*定义局部变量*/
i=2; /*为变量赋初值*/
cnt=0;
sum=0;
while(i+10 100*/
{ if((isPrime(i)!=0)&&(isPrime(i+4)!=0)&&(isPrime(i+10)!=0)) /*调用isPrime函数判断i,i+4,i+10的值是否都是素数*/
{cnt=cnt+1; /*统计满足条件的数的个数*/
sum=sum+i; /*计算满足条件的数之和*/
}
i=i+1;
}
}
10. 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数
StrCharJR(),其函数的功能是:以该文章中的行为单位把字符串中的所有字符的二进制ASCII值右移4位,高位补0,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上。之后把已处理的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT8.DAT中。
例如:
"z"对应的ASCII值为7AH,二进制值为01111010,右移4位后为00000111,加上原来"z"的ASCII值01111010得到10000001结果。
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格,并也按字符处理。 部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本题考察的重点是是否知道使用移位操作符>>。并使用二重循环来遍历输入数据。
void StrCharJR()
{int i,j; /*定义局部变量*/
i=0;
while(i
{for(j=0;j
xx[i][j]=xx[i][j]+(xx[i][j]>>4); /*利用移位操作符求出各个新字符*/
i++;
}
}
11. 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrOL(),其函数的功能是:以读入文章的行为单位,以空格或标点符号(数据文件中仅含','或'.'作为标点符号)作为分隔符,对行中所有单词进行倒排,单词间仍以空格作为分隔符,之后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后main()函数调用函数writeDat()把结果xx输出到文件OUT6.DAT中。
例如:原文:You He Me
I am a student. I like study.
结果:Me He You
study like I student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本程序首先定义了一个字符串,即一个长度为80的数组line。然后在逐行的循环中将每一行从第一个单词装入line。这样就可以实现按单词倒序排列。然后在行内循环结束的时候将整个字符串复制给xx[i]。程序中达到判断单词是否结束功能的函数是isalpha。实现装入功能的函数是strcat,即连接字符串函数。 void StrOL(void)
{
*/
while(--n) { if(!isalpha(xx[i][n])) /*调用isalpha函数判断单词是否结束*/ { strcat(line,xx[i] + n + 1); /*strcat函数的功能是实现字符串的连接*/ strcat(line," "); xx[i][n] = 0; } int n; char line[80]; /*字义一个长度为80的字符型数组*/ for(i=0; i
} } strcat(line,xx[i]); strcpy(xx[i],line); /*strcpy函数的功能是将后一字符串拷贝到前一字} 符中*/
12. 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数
ConverCharD(),其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个小写字母,如果是字母a,则改写成字母z。大写字母仍为大写字母,其它字符不变。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT4.DAT中。
例:原文:Adb.Bcdza
abck.LLhj
结果:Aca.Bbcyz
zabj.LLgi
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本题只需要对小写字母进行处理,因此只需要在判断循环中区分是否为a,如果是则用z代替。
void ConvertCharD(void)
{int i,j,n,p;
i=0;
while(i
{ n=strlen(xx[i]); /*strlen函数的功能是统计第i行字符串中字符的个数*/ for(j=0;j
{
if(xx[i][j]>97&&xx[i][j]
}
i++;
}
} { p=xx[i][j]-1; /*根据题面要求改写小写字母*/ xx[i][j]=p; } xx[i][j]=122; else if(xx[i][j]==97) /*判断字符若是a,则改写为z*/
13. 下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
例如:若输入17 5则应输出:19 23 29 31 37。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数readwriteDat()的
内容。
本题在while循环中采用的条件变量是已找到的素数的个数变量k。如果找到的数字是素数,则将其传递给数组xx,数组的下标使用的自增运算符。
void num(int m,int k,int xx[])
{int i,p,r; /*定义局部变量*/
p=m;r=0;i=0;
while(i
{p=p+1;
if (isP(p) != 0) /*调用isP函数判断p是否是素数*/
{xx[r++]=p; /*将p的值传递给数组xx*/
i=i+1;
}
}
}
14, 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数
SortCharD(),其函数的功能是:以行为单位对字符按ASCII码从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后main()函数调用函数writeDat()把结果xx输出到文件OUT2.DAT中。 例:原文:dAe,BfC.
CCbbAA
结果:fedCBA.,
bbCCAA
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本题采用了二重循环的冒泡排序法来实现行内的排序。而while循环则用来实现行间的遍历。 void SortCharD(void)
{int i,j,p,k,temp; /*定义局部变量*/
i=0;
while(i
{
for(j=0;j
for(k=j+1;k
if(xx[i][k]>xx[i][p])
p=k;
if(p!=j) /*按从大到小的顺序进行排序*/
{temp=xx[i][p];
xx[i][p]=xx[i][j];
xx[i][j]=temp;
}
}
i++;
}
}
15. 下列程序的功能是:把s字符串中的所有字母改写成该字母的下一个字符,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数chg(char *s)实现程序的
要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
例如:s字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为No.123Ayz。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数writeDat()的内容。
本题使用一个for循环在行内遍历。在检查每个元素的值后按要求进行替换。并将字符z和Z单独处理。 void chg(char *s)
{int i,j;
char b[81]; /*定义局部字符型数组b*/
strcpy(b,s); /*利用strcpy函数将s字符串拷贝到b中*/
i=strlen(b); /*利用strlen函数将b中字符的个数赋值给i*/
for(j=0;j
if((b[j]>=97&&b[j]=65&&b[j]
else if(b[j]==122) /*判断该字母是否为z*/
b[j]=97; /*将该字母改为a*/
else if(b[j]==90) /*判断该字母是否为Z*/
b[j]=65; /*将该字母改为A*/
strcpy(s,b); /*利用strcpy函数将b字符串拷贝到s中*/
}
16. 已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加个位数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数把结果输出到out.dat文件。
例如:6712,6+2=7+1,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。8129,8+91+2,则该数不满足条件计算平均值pjz2。
部分源程序存在文件prog1.c中。
程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
本题使用一个for循环来遍历数组a中的元素。在循环体内使用if语句来判断是否符合要求,然后将其直接累加进平均值中。同时记录满足条件的元素数。在循环结束后得出最后的平均值。
jsValue()
{int i,b,c,d,e; /*定义局部变量*/
pjz1=0;pjz2=0;
for(i=0;i
{b=a[i]/1000; /*求出某四位数的千位数*/
c=(a[i]-b*1000)/100; /*求出某四位数的百位数*/
d=(a[i]-b*1000-c*100)/10; /*求出某四位数的十位数*/
e=a[i]-b*1000-c*100-d*10; /*求出某四位数的个位数*/
if((b+e)==(c+d)) /*判断千位数加个位数的值是否等于百位数加十位数的值*/ {cnt++; /*统计符合条件的数的个数*/
pjz1=pjz1+a[i];} /*计算符合条件的数的和*/
else
{pjz2=pjz2+a[i];} /*计算不符合条件的数的和*/
}
if(cnt==0) pjz1=0; /*计算符合条件的数的平均值*/
else
pjz1=pjz1/cnt;
if((300-cnt)==0) pjz2=0; /*计算不符合条件的数的平均值*/
else
pjz2=pjz2/(300-cnt);
}
17. 现有一个10个人100行的选票数据文件IN.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推:内容均为字符0和1,1表示此人被选中,0表示此人未被选中,若一张选票人数小于等于5个人时被认为无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中。把结果yy输出到文件OUT.DAT中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本程序首先在最外层使用一个for循环来遍历十张选票,然后在此循环体内使用一个while循环来统计当前选票的选中数,如果所选不高于5个人则作废此选票。还有就是要注意体内的for循环的写法,其终止条件比较特殊。
void CountRs(void)
{ int i,j,cnt;
}
18. 已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加百位数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到out.dat文件。
例如:7153,7+1=5+3,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
8129,8+1!=2+9,则该数不满足条件计算平均值pjz2。
部分源程序存在文件prog1.c中。
程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。 char* pch; /*定义指向字符型变量的指针变量*/ for(i = 0; i
生成的结果文件的内容有误
文件[out.dat]未创建
19. 已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数减百位数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到out.dat文件。
例如:9123,9-1-2-3>0,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。9812,9-8-1-2
部分源程序存在文件prog1.c中。
程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
本题使用一个for循环来遍历数组a中的元素。在循环体内使用if语句来判断是否符合要求,然后将其直接累加进平均值中。同时记录满足条件的元素数。在循环结束后得出最后的平均值。其中cnt如果为0则会出现除数为0的情况,所以要单独处理。
jsValue()
{ int i,b,c,d,e; /*定义局部变量*/
pjz1=0;pjz2=0;
for(i=0;i
{ b=a[i]/1000; /*计算出四位数的千位数*/
c=(a[i]-b*1000)/100; /*计算出四位数的百位数*/
d=(a[i]-b*1000-c*100)/10; /*计算出四位数的十位数*/
e=a[i]-b*1000-c*100-d*10; /*计算出四位数的个位数*/
if ((b-c-d-e)>0) /*判断千位数减百位数减十位数减个位数的值是否大于零*/ { cnt++; /*统计符合条件的数的个数*/
pjz1=pjz1+a[i]; /*计算符合条件的数的和*/
}
else
{
}
if(cnt==0) /*计算符合条件的数的平均值*/
pjz1=0;
else
pjz1=pjz1/cnt;
if((300-cnt)==0) /*计算不符合条件的数的平均值*/
pjz2=0;
else
pjz2=pjz2/(300-cnt);
} pjz2=pjz2+a[i]; /*计算不符合条件的数的和*/ }
20请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。
计算方差的公式如下:
设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。
原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000) 部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数writeDat()的内容
本题首先计算奇数和偶数各自的累加和,同时记录奇数的个数。然后在计算平均值的时候要注意odd为0的情况要单独处理。方差则用一个for循环来计算。
void Compute(void)
{ int i,yy[MAX]; /*定义局部变量和数组*/
ave1=0;ave2=0;
for(i=0;i
if(xx[i]%2!=0) /*判断此数是否为奇数*/
{yy[odd]=xx[i]; /*将奇数存入数组yy中*/
odd++; /*统计奇数个数*/
ave1=ave1+xx[i];} /*计算奇数之和*/
else
{even++; /*统计偶数个数*/
ave2=ave2+xx[i];} /*计算偶数之和*/
if(odd==0) /*计算奇数的平均值*/
ave1=0;
else
ave1=ave1/odd;
if(even==0) /*计算偶数的平均值*/
ave2=0;
else
ave2=ave2/even;
for(i=0;i
totfc=totfc+((yy[i]-ave1)*(yy[i]-ave1))/odd;
}
1.已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从小到大进行排列,若产品名称相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中。最后main()函数调用函数WriteDat()把结果输出到文件OUT10.DAT中。
提示:若中间变量为PRO temp,则可以直接使用结构赋值语句进行解题;产品名称比较请用函数strcmp进行解题。
例如:sell[i] = temp ;
注意:部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题为了实施两个数组元素的交换,另外定义了一个结构变量cell。同时要注意的是比较产品名称大小的时候用strcmp()函数实现。程序使用两次二重循环来实现要求的功能。
void SortDat()
{int i,j;
PRO cell; /*定义结构变量*/
for (i=0;i
for (j=i+1;j
if (strcmp(sell[i].mc,sell[j].mc) > 0) /*strcmp()函数功能是比较产品名称大小*/ {cell=sell[i]; /*按产品代码从小到大进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
for (i=0;i
for (j=i+1;j
if ((strcmp(sell[i].mc,sell[j].mc) == 0)&&(sell[i].je
{cell=sell[i];
sell[i]=sell[j];
sell[j]=cell;
}
2. 函数ReadDat()实现从文件in.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于
80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串变量的下标为奇数的字符按其ASCII值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件out.dat中。
例如:位置 0 1 2 3 4 5 6 7
源字符串 h g f e d c b a
则处理后字符串 h a f c d e b g
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题for循环条件里采用的步长为2,这是因为要求只对下边为奇数的元素进行判断。程序使用三重循环来实现要求的功能。外层的while循环用来实现行间遍历,内层的二重for循环用来遍历行内下标为奇数的元素。
void jsSort()
{int i,j,k,l,p,temp; /*定义局部变量*/
i=0;
while(i
{
j=strlen(xx[i]); /*strlen(xx[i])函数的功能是统计第i行字符串中字符的个数*/ for(k=1;k
{p=k;
for(l=k+2;l
if(xx[i][l]
if(p!=k)
{temp=xx[i][p];
xx[i][p]=xx[i][k];
xx[i][k]=temp;
}
}
i++;
}
}
3. 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品代码从大到小进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT8.DAT中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题为了实施两个数组元素的交换,另外定义了一个结构变量cell。同时要注意的是比较代码大小的时候不能直接比较,因为它们都是字符串。正确的比较方法是用atoi对代码做变换。程序使用两次二重循环来实现要求的功能。
void SortDat()
{int i,j;
PRO cell; /*定义结构变量*/
for (i=0;i
for (j=i+1;j
if (atoi(sell[i].dm)
sell[i]=sell[j];
sell[j]=cell;
}
for (i=0;i
for (j=i+1;j
if (( atoi(sell[i].dm)==atoi(sell[j].dm))&&(sell[i].je
{cell=sell[i];
sell[i]=sell[j];
sell[j]=cell;
}
}
4. 下列程序prog1.c的功能是:在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。
请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。
最后调用函数writeDat()把结果输出到文件out.dat中。
请勿改动主函数main()和写函数writeDat()的内容。
本题采用for循环结合if语句来实现功能。循环的起始点为10,终止点32。因为此二者的平方恰好包括了100和1000。在循环体内计算出变量a的值,这样可以保证每次检查的数都是平方数。然后再得出此数的各位数值。如果符合条件则将其传递给数组bb。
int jsValue(int bb[])
{ int i,a,d,e,c,p; /*定义局部变量*/
p=0;
for(i=10;i
{ a=i*i; /*设定检查的数是平方数*/
if(a>=100&&a
{ c=a/100; /*求数值的百位数的数字*/
e=(a-c*100)/10; /*求数值的十位数的数字*/ d=a-c*100-e*10; /*求数值的个位数的数字*/ if((c==e)||(c==d)||(d==e)) /*判断数值是否有两位数字相同*/ {bb[p]=a; /*将符合条件的数值存入数组中*/ p++;}
}
}
return p--;
}
5. 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从大到小进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat() 把结果输出到文件OUT4.DAT中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题为了实施两个数组元素的交换,另外定义了一个结构变量cell。同时要注意的是比较代码大小的时候不能直接比较,因为它们都是字符串。正确的比较方法是用atoi对代码做变换。程序使用两次二重循环来实现要求的功能。
void SortDat()
{int i,j;
PRO cell; /*定义结构变量*/
for (i=0;i
for (j=i+1;j
if (sell[i].je
{cell=sell[i]; /*按金额从大到小进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
for (i=0;i
for (j=i+1;j
if (( atoi(sell[i].dm)
{cell=sell[i]; /*按产品代码从大到小进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
}
6. 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。
其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从小到大进行排列,若金额相同,则按产品代码从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT2.DAT中。 部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
本题为了实施两个数组元素的交换,另外定义了一个结构变量cell。同时要注意的是比较代码大小的时候不能直接比较,因为它们都是字符串。正确的比较方法是用atoi对代码做变换。程序使用两次二重循环来实现要求的功能。
void SortDat()
{int i,j;
PRO cell; /*定义结构变量*/
for (i=0;i
for (j=i+1;j
if (sell[i].je > sell[j].je) /*判断金额的大小*/
{cell=sell[i]; /*按金额从小到大进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
for (i=0;i
for (j=i+1;j
if (( atoi(sell[i].dm)
{cell=sell[i]; /*按产品代码从大到小进行排序处理*/
sell[i]=sell[j];
sell[j]=cell;
}
}
7. 某级数的前两项A1=1,A2=1,以后各项具有如下关系:
An=An-2+2An-1
下列程序prog1.c的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:Sn=M,这里Sn=A1+A2+...+An,并依次把n值存入数组单元b[0],b[1]和b[2]中,请编制jsValue()函数来实现此功能, 最后调用函数writeDat()把数组b[]中的值输出到out.dat文件中。
请勿改动主函数main()和写函数writeDat()的内容。
本题针对三种不同的要求使用了三个while循环来实现要求的功能。最后一项的序号用变量i在每次循环体内记录,然后在循环结束后将其传递给数组b。
jsValue()
{
int i,a1,a2,a,Sn; /*定义局部变量*/
a1=1; a2=1; Sn=a1;i=1; /*给变量赋初值*/
while (Sn
{Sn=Sn+a2; a=a1; a1=a2; a2=a+2*a1; if (Sn
b[0]=i;
a1=1; a2=1; Sn=a1;i=1;
while (Sn
{Sn=Sn+a2;a=a1;a1=a2;a2=a+2*a1;if (Sn
b[1]=i;
a1=1; a2=1; Sn=a1;i=1;
while (Sn
{Sn=Sn+a2;a=a1;a1=a2;a2=a+2*a1;if (Sn
b[2]=i;
}
8. 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数CharConvA(),其函数的功能是:以该文章中的行为单位把字符串中的最后一个字符的ASCII值右移4位二进制位,高位补0后加最后第二个字符的ASCII值,得到最后一个新的值,最后第二个字符的ASCII值右移4位二进制位,高位补0后加最后第三个字符的ASCII值,得到最后第二个新的值,依此类推一直处理到第二个字符,注意:第一个字符的ASCII值加原最后一个字符的ASCII值,得到第一个新的值。得到的新值分别存放在原字符串对应的位置上。之后把已处理的结果仍按行重新存入数组xx中。最后main()函数调用函数writeDat()把结果xx输出到文件OUT10.DAT中。
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格,并也按字符处理。 注意:部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数writeDat()和输出数
本题主要是考察移位操作符>>的使用。另外,第一个元素先用变量p保存,然后在程序结尾单独处理。 void CharConvA()
{ int i,j,k,p; /*定义局部变量*/
i=0;
while(i
{ j=strlen(xx[i]); /*strlen(xx[i])函数的功能是统计第i行字符串中字符的个数*/
p=xx[i][0]; /*将第一个元素先保存在变量p中*/
xx[i][0]=xx[i][0]+xx[i][j-1]; /*得到第一个的新字符*/
for(k=j-1;k>=2;k--)
{ xx[i][k]=(xx[i][k] >> 4)+xx[i][k-1];} /*利用移位操作符求出各个新字符*/
xx[i][1]=(xx[i][1] >> 4)+p; /*得到第二个的新字符*/
i++;
}
}
9. 下列程序的功能是:找出所有100以内(含100)满足I,I+4,I+10都是素数的整数I(I+10也在100以内)的个数cnt以及这些I之和sum。请编写函数countValue()实现程序要求的功能,最后调用函数writeDat()把结果cnt和sum输出到文件out.dat中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数writeDat()的内容。
本题因为给出了判断素数的函数isPrime,所以仅使用一个if判断语句就解决了问题。另外在循环条件中只需使用i+10
void countValue()
{int i; /*定义局部变量*/
i=2; /*为变量赋初值*/
cnt=0;
sum=0;
while(i+10 100*/
{ if((isPrime(i)!=0)&&(isPrime(i+4)!=0)&&(isPrime(i+10)!=0)) /*调用isPrime函数判断i,i+4,i+10的值是否都是素数*/
{cnt=cnt+1; /*统计满足条件的数的个数*/
sum=sum+i; /*计算满足条件的数之和*/
}
i=i+1;
}
}
10. 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数
StrCharJR(),其函数的功能是:以该文章中的行为单位把字符串中的所有字符的二进制ASCII值右移4位,高位补0,然后把右移后的字符ASCII值再加上原字符的ASCII值,得到新的字符仍存入原字符串对应的位置上。之后把已处理的结果仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT8.DAT中。
例如:
"z"对应的ASCII值为7AH,二进制值为01111010,右移4位后为00000111,加上原来"z"的ASCII值01111010得到10000001结果。
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格,并也按字符处理。 部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本题考察的重点是是否知道使用移位操作符>>。并使用二重循环来遍历输入数据。
void StrCharJR()
{int i,j; /*定义局部变量*/
i=0;
while(i
{for(j=0;j
xx[i][j]=xx[i][j]+(xx[i][j]>>4); /*利用移位操作符求出各个新字符*/
i++;
}
}
11. 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrOL(),其函数的功能是:以读入文章的行为单位,以空格或标点符号(数据文件中仅含','或'.'作为标点符号)作为分隔符,对行中所有单词进行倒排,单词间仍以空格作为分隔符,之后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后main()函数调用函数writeDat()把结果xx输出到文件OUT6.DAT中。
例如:原文:You He Me
I am a student. I like study.
结果:Me He You
study like I student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本程序首先定义了一个字符串,即一个长度为80的数组line。然后在逐行的循环中将每一行从第一个单词装入line。这样就可以实现按单词倒序排列。然后在行内循环结束的时候将整个字符串复制给xx[i]。程序中达到判断单词是否结束功能的函数是isalpha。实现装入功能的函数是strcat,即连接字符串函数。 void StrOL(void)
{
*/
while(--n) { if(!isalpha(xx[i][n])) /*调用isalpha函数判断单词是否结束*/ { strcat(line,xx[i] + n + 1); /*strcat函数的功能是实现字符串的连接*/ strcat(line," "); xx[i][n] = 0; } int n; char line[80]; /*字义一个长度为80的字符型数组*/ for(i=0; i
} } strcat(line,xx[i]); strcpy(xx[i],line); /*strcpy函数的功能是将后一字符串拷贝到前一字} 符中*/
12. 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数
ConverCharD(),其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个小写字母,如果是字母a,则改写成字母z。大写字母仍为大写字母,其它字符不变。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数writeDat()把结果xx输出到文件OUT4.DAT中。
例:原文:Adb.Bcdza
abck.LLhj
结果:Aca.Bbcyz
zabj.LLgi
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本题只需要对小写字母进行处理,因此只需要在判断循环中区分是否为a,如果是则用z代替。
void ConvertCharD(void)
{int i,j,n,p;
i=0;
while(i
{ n=strlen(xx[i]); /*strlen函数的功能是统计第i行字符串中字符的个数*/ for(j=0;j
{
if(xx[i][j]>97&&xx[i][j]
}
i++;
}
} { p=xx[i][j]-1; /*根据题面要求改写小写字母*/ xx[i][j]=p; } xx[i][j]=122; else if(xx[i][j]==97) /*判断字符若是a,则改写为z*/
13. 下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
例如:若输入17 5则应输出:19 23 29 31 37。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数readwriteDat()的
内容。
本题在while循环中采用的条件变量是已找到的素数的个数变量k。如果找到的数字是素数,则将其传递给数组xx,数组的下标使用的自增运算符。
void num(int m,int k,int xx[])
{int i,p,r; /*定义局部变量*/
p=m;r=0;i=0;
while(i
{p=p+1;
if (isP(p) != 0) /*调用isP函数判断p是否是素数*/
{xx[r++]=p; /*将p的值传递给数组xx*/
i=i+1;
}
}
}
14, 函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数
SortCharD(),其函数的功能是:以行为单位对字符按ASCII码从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后main()函数调用函数writeDat()把结果xx输出到文件OUT2.DAT中。 例:原文:dAe,BfC.
CCbbAA
结果:fedCBA.,
bbCCAA
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本题采用了二重循环的冒泡排序法来实现行内的排序。而while循环则用来实现行间的遍历。 void SortCharD(void)
{int i,j,p,k,temp; /*定义局部变量*/
i=0;
while(i
{
for(j=0;j
for(k=j+1;k
if(xx[i][k]>xx[i][p])
p=k;
if(p!=j) /*按从大到小的顺序进行排序*/
{temp=xx[i][p];
xx[i][p]=xx[i][j];
xx[i][j]=temp;
}
}
i++;
}
}
15. 下列程序的功能是:把s字符串中的所有字母改写成该字母的下一个字符,字母z改写成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数chg(char *s)实现程序的
要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
例如:s字符串中原有的内容为:Mn.123Zxy,则调用该函数后,结果为No.123Ayz。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数writeDat()的内容。
本题使用一个for循环在行内遍历。在检查每个元素的值后按要求进行替换。并将字符z和Z单独处理。 void chg(char *s)
{int i,j;
char b[81]; /*定义局部字符型数组b*/
strcpy(b,s); /*利用strcpy函数将s字符串拷贝到b中*/
i=strlen(b); /*利用strlen函数将b中字符的个数赋值给i*/
for(j=0;j
if((b[j]>=97&&b[j]=65&&b[j]
else if(b[j]==122) /*判断该字母是否为z*/
b[j]=97; /*将该字母改为a*/
else if(b[j]==90) /*判断该字母是否为Z*/
b[j]=65; /*将该字母改为A*/
strcpy(s,b); /*利用strcpy函数将b字符串拷贝到s中*/
}
16. 已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加个位数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数把结果输出到out.dat文件。
例如:6712,6+2=7+1,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。8129,8+91+2,则该数不满足条件计算平均值pjz2。
部分源程序存在文件prog1.c中。
程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
本题使用一个for循环来遍历数组a中的元素。在循环体内使用if语句来判断是否符合要求,然后将其直接累加进平均值中。同时记录满足条件的元素数。在循环结束后得出最后的平均值。
jsValue()
{int i,b,c,d,e; /*定义局部变量*/
pjz1=0;pjz2=0;
for(i=0;i
{b=a[i]/1000; /*求出某四位数的千位数*/
c=(a[i]-b*1000)/100; /*求出某四位数的百位数*/
d=(a[i]-b*1000-c*100)/10; /*求出某四位数的十位数*/
e=a[i]-b*1000-c*100-d*10; /*求出某四位数的个位数*/
if((b+e)==(c+d)) /*判断千位数加个位数的值是否等于百位数加十位数的值*/ {cnt++; /*统计符合条件的数的个数*/
pjz1=pjz1+a[i];} /*计算符合条件的数的和*/
else
{pjz2=pjz2+a[i];} /*计算不符合条件的数的和*/
}
if(cnt==0) pjz1=0; /*计算符合条件的数的平均值*/
else
pjz1=pjz1/cnt;
if((300-cnt)==0) pjz2=0; /*计算不符合条件的数的平均值*/
else
pjz2=pjz2/(300-cnt);
}
17. 现有一个10个人100行的选票数据文件IN.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推:内容均为字符0和1,1表示此人被选中,0表示此人未被选中,若一张选票人数小于等于5个人时被认为无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中。把结果yy输出到文件OUT.DAT中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。
本程序首先在最外层使用一个for循环来遍历十张选票,然后在此循环体内使用一个while循环来统计当前选票的选中数,如果所选不高于5个人则作废此选票。还有就是要注意体内的for循环的写法,其终止条件比较特殊。
void CountRs(void)
{ int i,j,cnt;
}
18. 已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加百位数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到out.dat文件。
例如:7153,7+1=5+3,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
8129,8+1!=2+9,则该数不满足条件计算平均值pjz2。
部分源程序存在文件prog1.c中。
程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。 char* pch; /*定义指向字符型变量的指针变量*/ for(i = 0; i
生成的结果文件的内容有误
文件[out.dat]未创建
19. 已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数减百位数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及不满足此条件的四位数平均值pjz2,最后调用写函数writeDat()把结果输出到out.dat文件。
例如:9123,9-1-2-3>0,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。9812,9-8-1-2
部分源程序存在文件prog1.c中。
程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
本题使用一个for循环来遍历数组a中的元素。在循环体内使用if语句来判断是否符合要求,然后将其直接累加进平均值中。同时记录满足条件的元素数。在循环结束后得出最后的平均值。其中cnt如果为0则会出现除数为0的情况,所以要单独处理。
jsValue()
{ int i,b,c,d,e; /*定义局部变量*/
pjz1=0;pjz2=0;
for(i=0;i
{ b=a[i]/1000; /*计算出四位数的千位数*/
c=(a[i]-b*1000)/100; /*计算出四位数的百位数*/
d=(a[i]-b*1000-c*100)/10; /*计算出四位数的十位数*/
e=a[i]-b*1000-c*100-d*10; /*计算出四位数的个位数*/
if ((b-c-d-e)>0) /*判断千位数减百位数减十位数减个位数的值是否大于零*/ { cnt++; /*统计符合条件的数的个数*/
pjz1=pjz1+a[i]; /*计算符合条件的数的和*/
}
else
{
}
if(cnt==0) /*计算符合条件的数的平均值*/
pjz1=0;
else
pjz1=pjz1/cnt;
if((300-cnt)==0) /*计算不符合条件的数的平均值*/
pjz2=0;
else
pjz2=pjz2/(300-cnt);
} pjz2=pjz2+a[i]; /*计算不符合条件的数的和*/ }
20请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中奇数的个数odd,奇数的平均值ave1,偶数的平均值ave2以及所有奇数的方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。
计算方差的公式如下:
设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。
原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000) 部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数writeDat()的内容
本题首先计算奇数和偶数各自的累加和,同时记录奇数的个数。然后在计算平均值的时候要注意odd为0的情况要单独处理。方差则用一个for循环来计算。
void Compute(void)
{ int i,yy[MAX]; /*定义局部变量和数组*/
ave1=0;ave2=0;
for(i=0;i
if(xx[i]%2!=0) /*判断此数是否为奇数*/
{yy[odd]=xx[i]; /*将奇数存入数组yy中*/
odd++; /*统计奇数个数*/
ave1=ave1+xx[i];} /*计算奇数之和*/
else
{even++; /*统计偶数个数*/
ave2=ave2+xx[i];} /*计算偶数之和*/
if(odd==0) /*计算奇数的平均值*/
ave1=0;
else
ave1=ave1/odd;
if(even==0) /*计算偶数的平均值*/
ave2=0;
else
ave2=ave2/even;
for(i=0;i
totfc=totfc+((yy[i]-ave1)*(yy[i]-ave1))/odd;
}