计算机三级网络技术上机试题100道Word下载.docx
《计算机三级网络技术上机试题100道Word下载.docx》由会员分享,可在线阅读,更多相关《计算机三级网络技术上机试题100道Word下载.docx(99页珍藏版)》请在冰豆网上搜索。
for(j=i+1;
j<
200;
j++)
{
if(aa[i]%1000<
aa[j]%1000)/*按照每个数的后3位大小进行降序排序*/
temp=aa[i];
aa[i]=aa[j];
aa[j]=temp;
}
elseif(aa[i]%1000==aa[j]%1000)/*如果后3位数相等*/
if(aa[i]>
aa[j])/*则要按原4位数的值进行升序排序*/
{
aa[i]=aa[j];
aa[j]=temp;
}
10;
i++)/*将排序后的前10个数存入数组b中*/
bb[i]=aa[i];
}
【易错提示】取4位数后三位的算法,if判断语句中逻辑表达式的比较运算符。
2【考点分析】本题主要考查的知识点包括:
C语言循环结构,if判断语句和逻辑表达式,以及分解多位整数的算术运算。
【解题思路】分析题干,本题除给出条件"
SIX+SIX+SIX=NINE+NINE"
之外,还可得出2个隐含的条件:
条件1:
SIX和NINE分别是3位和4位的正整数;
条件2:
SIX的十位数字等于NINE的百位数字,NINE的千位数字和十位数字相等。
本题解题思路:
通过嵌套的循环结构可以遍历到所有的3位和4位数,对于每一个3位数及4位数的组合进行题设条件(SIX+SIX+SIX=NINE+NINE)的判断,满足条件的对其分解得到各数位的数字,再进一步判断各位数字是否满足本题隐含的条件(条件1及条件2),如果满足则个数加1,并将该3位数及4位数添加到和值中。
voidcountValue()
{
ints2;
intn2,n3,n4;
for(i=100;
1000;
i++)
for(j=1000;
10000;
if(i*3==j*2)
s2=i%100/10;
n4=j/1000;
n3=j%1000/100;
n2=j%100/10;
if(s2==n3&
&
n2==n4)
cnt++;
sum+=i+j;
【易错提示】隐含条件未被分析出或分析错误,整数数位分解的算术方法使用错误。
3【考点分析】本题考查的知识点包括:
C语言中文件读函数,if条件判断结构,对多个整数求平均值和方差的算法等。
【解题思路】此题属于数学类问题。
分析题干要求,得出解本题主要需解决3个问题:
问题1如何实现从已打开的文件中依次读取数据到数组的操作,问题2如何分离并统计出奇数和偶数的个数及和值,并计算平均值;
问题3如何计算奇数的方差。
首先使用C语言的库函数fscanf()将文件中的数依次读入数组xx中,然后通过循环判断得出需要的数据(奇数个数、偶数个数、奇数及偶数的和);
最后根据题目中已给出的公式和之前保存的数据计算出奇数的方差。
intReadDat(void)
FILE*fp;
/*计数器变量*/
if((fp=fopen("
IN.DAT"
"
r"
))==NULL)return1;
100;
i++)/*依次读取整型数据放入数组xx中*/
for(j=0;
fscanf(fp,"
%d,"
&
xx[i*10+j]);
\n"
);
if(feof(fp))
break;
/*文件读取结束,则退出*/
fclose(fp);
return0;
voidCompute(void)
inti;
/*定义循环控制变量*/
inttt[MAX];
/*定义数组保存奇数*/
for(i=0;
1000;
i++)
if(xx[i]%2!
=0)
{
odd++;
/*计算出xx中奇数的个数odd*/
ave1+=xx[i];
/*求奇数的和*/
tt[odd-1]=xx[i];
/*将奇数存入数组tt中*/
}
else
even++;
/*计算出xx中偶数的个数even*/
ave2+=xx[i];
/*求偶数的和*/
ave1/=odd;
/*求奇数的平均值*/
ave2/=even;
/*求偶数的平均值*/
for(i=0;
odd;
totfc+=(tt[i]-ave1)*(tt[i]-ave1)/odd;
/*求所有奇数的方差*/
【易错提示】文件操作函数fscanf()和feof()的用法,if判断语句中逻辑表达式,对方差计算公式运用错误。
4【考点分析】本题考查对一定范围内整数的筛选。
多位整数的分解算法,完全平方数判断方法,if判断语句和逻辑表达式。
分析题干,本题需注意2个关键点:
关键点1判断该数是否是完全平方数;
关键点2判断该数是否有两位数数字相同。
通过循环控制,依次判断100至999数是否满足关键点1(是否为完全平方数)。
如果是,则将该数分解出各位数数字,并判断是否有两位数数字相同,如果存在,则个数加1,并将该数存入数组中。
intjsValue(intbb[])
intcnt=0;
/*定义计数器变量*/
inta3,a2,a1;
/*定义变量存储三位数每位的数字*/
=999;
i++)/*在该范围中找符合条件的数*/
for(j=10;
=sqrt(i);
if(i==j*j)/*如果该数是完全平方数*/
{
a3=i/100;
/*求该数的百位数字*/
a2=i%100/10;
/*求该数的十位数字*/
a1=i%10;
/*求该数的个位数字*/
if(a3==a2||a3==a1||a2==a1)/*有两位数字相同*/
bb[cnt]=i;
/*则把该数存入数组bb中*/
}/*统计满足条件的数的个数*/
}
returncnt;
/*返回满足该条件的整数的个数*/
【易错提示】完全平方数的判断方法错误,分解整数各个数位的方法错误,if判断语句中表达式。
5.【考点分析】本题考查对一定范围内整数的筛选。
多位整数的分解算法,素数的判断算法,if判断语句和逻辑表达式。
分析题干要求,归纳出本题的2个关键点:
关键点1判断该数是否为素数;
关键点2判断是否满足条件:
个位数字和十位数字之和被10除所得余数等于百位数字。
本题思路为:
通过循环语句,依次求出所有3位数的各位数数字,并判断是否满足关键点2(个位数字和十位数字之和被10除所得余数等于百位数字),如果满足则判断该数是否为素数,如果是则个数加1,并将该数加到和值中。
判断的方法为:
依次取从2到该数1/2的数去除这个数,如果有一个可被整除,则不是素数,如果循环后的数大于该数的一半就可以判定该数是一个素数。
inthalf;
/*定义变量存储3位数每位的数字*/
for(i=101;
i++)/*在该范围内寻找符合条件的数*/
/*求百位数字*/
/*求十位数字*/
/*求个位数字*/
if(a3==(a2+a1)%10)/*如果个位数字与十位数字之和被10除所得余数恰是百位数字*/
half=i/2;
for(j=2;
=half;
j++)/*进一步判断该数是否为素数*/
if(i%j==0)break;
/*如果不是素数,则跳出循环,接着判断下一个数*/
if(j>
half)/*如果是素数*/
/*计算这些素数的个数cnt*/
sum+=i;
/*计算这些素数值的和sum*/
【易错提示】素数的判断算法使用错误,分解整数各个数位的方法错误,if判断语句中逻辑表达式错误。
6.【考点分析】本题考查结构体数组的排序。
结构体成员运算,字符串比较符,数组排序。
【解题思路】此题属于销售记录排序类题型。
此类题型主要考查对结构体数组的排序。
解题时,应注意3个关键点:
关键点1如何按产品名称从小到大排序;
关键点2如果产品名称相同;
关键点3如何按金额从小到大排列。
数组排序可以用起泡法实现,起泡法的思路是:
将较小的值像空气泡一样逐渐"
上浮"
到数组的顶部,而较大的数值逐渐"
下沉"
到数组的底部。
具体为第1趟用第1个记录和第2个记录进行比较,如果不符合要求,就进行交换,第2个记录和第3个记录比较,直到倒数第2个记录和最后1个记录比较完成;
第2趟用第2个记录和第3个记录比较,然后第3个和第4个比较,依此类推。
本题在双循环中进行每次记录比较时,首先用字符串比较函数strcmp比较两个产品的名称,如果返回的值大于0,则这两个产品进行数据交换;
如果返回值等于0,再比较两个产品的金额,如果前一个产品的金额大于后一个产品的金额,则这两个产品进行数据交换。
voidSortDat()
{
PROtemp;
/*定义数据交换时的暂存变量(这里是PRO类型的结构体变量)*/
99;
i++)/*利用选择法进行排序*/
if(strcmp(sell[i].mc,sell[j].mc)>
0)/*按产品名称从小到大进行排列*/
temp=sell[i];
sell[i]=sell[j];
sell[j]=temp;
elseif(strcmp(sell[i].mc,sell[j].mc)==0)/*若产品名称相同*/
if(sell[i].je>
sell[j].je)/*则按金额从小到大进行排列*/
sell[i]=sell[j];
【易错提示