p=l;
if(p!
=k)
{temp=xx[i][p];
xx[i][p]=xx[i][k];
xx[i][k]=temp;
}
}
i++;
}}
4、下列程序prog1.c的功能是:
在三位整数(100至999)中寻找符合条件的整数并依次从小到大存入数组中;它既是完全平方数,又是两位数字相同,例如144、676等。
请编制函数实现此功能,满足该条件的整数的个数通过所编制的函数返回。
最后调用函数writeDat()把结果输出到文件out.dat中。
请勿改动主函数main()和写函数writeDat()的内容。
本题采用for循环结合if语句来实现功能。
循环的起始点为10,终止点32。
因为此二者的平方恰好包括了100和1000。
在循环体内计算出变量a的值,这样可以保证每次检查的数都是平方数。
然后再得出此数的各位数值。
如果符合条件则将其传递给数组bb。
intjsValue(intbb[])
{inti,a,d,e,c,p;/*定义局部变量*/
p=0;
for(i=10;i<32;i++)/*设置循环起始值和终止值*/
{a=i*i;/*设定检查的数是平方数*/
if(a>=100&&a<1000)/*判断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++;}
}
}
returnp--;}
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()
{inti,a1,a2,a,Sn;/*定义局部变量*/
a1=1;a2=1;Sn=a1;i=1;/*给变量赋初值*/
while(Sn<100)/*判断如果Sn小于100则执行内嵌语句*/
{Sn=Sn+a2;a=a1;a1=a2;a2=a+2*a1;if(Sn<100)i++;}
b[0]=i;
a1=1;a2=1;Sn=a1;i=1;
while(Sn<1000)/*判断如果Sn小于1000则执行内嵌语句*/
{Sn=Sn+a2;a=a1;a1=a2;a2=a+2*a1;if(Sn<1000)i++;}
b[1]=i;
a1=1;a2=1;Sn=a1;i=1;
while(Sn<10000)/*判断如果Sn小于10000则执行内嵌语句*/
{Sn=Sn+a2;a=a1;a1=a2;a2=a+2*a1;if(Sn<10000)i++;}
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()和输出数据函数WriteDate()的内容。
本题主要是考察移位操作符>>的使用。
另外,第一个元素先用变量p保存,然后在程序结尾单独处理。
voidCharConvA()
{inti,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<100就包含了其他的条件。
voidcountValue()
{inti;/*定义局部变量*/
i=2;/*为变量赋初值*/
cnt=0;
sum=0;
while(i+10<100)/*设置循环结束条件为:
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()的内容。
本题考察的重点是是否知道使用移位操作符>>。
并使用二重循环来遍历输入数据。
voidStrCharJR()
{inti,j;/*定义局部变量*/
i=0;
while(i{for(j=0;j<(int)strlen(xx[i]);j++)/*strlen函数的功能是统计第i行字符串中字符的个数*/
xx[i][j]=xx[i][j]+(xx[i][j]>>4);/*利用移位操作符求出各个新字符*/
i++;
}}
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代替。
voidConvertCharD(void)
{inti,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]<=122)/*判断字符是否是除a以外的小写字母*/
{p=xx[i][j]-1;/*根据题面要求改写小写字母*/
xx[i][j]=p;
}
elseif(xx[i][j]==97)/*判断字符若是a,则改写为z*/
xx[i][j]=122;
}
i++;
}}
13、下列程序的功能是:
将大于整数m且紧靠m的k个素数存入数组xx。
请编写函数num(intm,intk,intxx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。
例如:
若输入175则应输出:
1923293137。
部分源程序存在文件prog1.c中。
请勿改动主函数main()和输出数据函数readwriteDat()的
内容。
本题在while循环中采用的条件变量是已找到的素数的个数变量k。
如果找到的数字是素数,则将其传递给数组xx,数组的下标使用的自增运算符。
voidnum(intm,intk,intxx[])
{inti,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循环则用来实现行间的遍历。
voidSortCharD(void)
{inti,j,p,k,temp;/*定义局部变量*/
i=0;
while(i{
for(j=0;j<(int)strlen(xx[i])-1;j++)/*strlen函数的功能是统计第i行字符串中字符的个数*/
{p=j;
for(k=j+1;k<(int)strlen(xx[i]);k++)/*此循环求出第i行中ASCII值最大的字符*/
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单独处理。
voidchg(char*s)
{inti,j;
charb[81];/*定义局部字符型数组b*/
strcpy(b,s);/*利用strcpy函数将s字符串拷贝到b中*/
i=strlen(b);/*利用strlen函数将b中字符的个数赋值给i*/
for(j=0;j
if((b[j]>=97&&b[j]<122)||(b[j]>=65&&b[j]<90))/*判断字符是否为除了z和Z之外的字母*/
b[j]=b[j]+1;/*将第j个字母改为该字母的下一个字符*/
elseif(b[j]==122)/*判断该字母是否为z*/
b[j]=97;/*将该字母改为a*/
elseif(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+9<>1+2,则该数不满足条件计算平均值pjz2。
部分源程序存在文件prog1.c中。
程序中已定义数组:
a[300],已定义变量:
cnt,pjz1,pjz2。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
本题使用一个for循环来遍历数组a中的元素。
在循环体内使用if语句来判断是否符合要求,然后将其直接累加进平均值中。
同时记录满足条件的元素数。
在循环结束后得出最后的平均值。
jsValue()
{inti,b,c,d,e;/*定义局部变量*/
pjz1=0;pjz2=0;
for(i=0;i<300;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循环的写法,其终止条件比较特殊。
voidCountRs(void)
{inti,j,cnt;
char*pch;/*定义指向字符型变量的指针变量*/
for(i=0;i<100;i++)/*设置循环的初始值和终止值*/
{cnt=0;
pch=xx[i];
while(*pch)/*统计这张选票所选的人数*/
{if(*(pch++)=='1')
cnt++;
}
if(cnt<=5)/*小于等于5人,无效*/
continue;
for(j=0;xx[i][j];j++)/*统计每个人的选票数*/
{if(xx[i][j]=='1')
yy[j]++;}/*将得票数依次存入yy数组中*/
}}
18、已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:
求出千位数上的数加百位数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,