第4题【《信息管理技术》机试题-出圈问题】:设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序每10人一组,给出这n个人的顺序表。请考生编制函数Josegh()实现此功能,并调用函数writeDat()把结果p输出到文件JOSE.DAT中。 设n=100,s=1,m=10。 (1)将1到n个人的序号存入一维数组p中; (2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置; (3)重复第(2)步直至圈中只剩下p[1]为止。 注意:部分源程序已经给出。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include <stdio.h> #define N 100 #define S 1 #define M 10 int p[100],n,s,m; void writeDat(void); void Josegh(void) { } void main() { m=M; n=N; s=S; Josegh(); writeDat(); } void writeDat(void) { int i; FILE *fp; fp=fopen("JOSE.DAT","w"); for(i=N-1;i>=0;i--) { printf("%4d",p[i]); fprintf(fp,"%4d",p[i]); if(i%10==0) { printf("\n"); fprintf(fp,"\n"); } } fclose(fp); } ////参考答案///////// void Josegh(void) { int i,j,k,s1,w; s1=s; for(i=1;i<=n;i++) p[i-1]=i; for(i=n;i>=2;i--) { s1=(s1+m-1)%i; if(s1==0) s1=i; w=p[s1-1]; for(j=s1;j<=i-1;j++) p[j-1]=p[j]; p[i-1]=w; } } 要求: (1)调试该程序。 (2)用文字说明Josegh()“算法”的控制流程。 1、“成绩表”——计算“总评成绩”与“名次”关键代码: F7=D7*0.3+E7*0.7 G7=RANK(F7,$F$7:$F$27) 2、“销售管理”——计算水果的“单价” 关键代码 F4==INDEX(单价!$B$3:$F$10,MATCH(D4,单价!$B$3:$B$10,0),MATCH(C4,单价!$B$3:$F$3,0)) 按照“产地”对数据进行排序,分类汇总,用图表——饼图描述 3、运费计算 计算“运费”的关键代码:数学界的分段函数 Function d(s) If s >= 1000 Then d = 0.1 ElseIf s >= 750 Then d = 0.07 ElseIf s >= 500 Then d = 0.05 ElseIf s >= 250 Then d = 0.02 Else d = 0 End If End Function 用图表——饼图描述 4、商场销售数据处理 Sub huizong()模糊分类汇总 s1 = 0: s2 = 0: s3 = 0: s4 = 0: s5 = 0 For i = 3 To 13 If Left(Cells(i, 3), 2) = "彩电" Then s1 = s1 + Cells(i, 6) If Left(Cells(i, 3), 2) = "空调" Then s2 = s2 + Cells(i, 6) If Left(Cells(i, 3), 3) = "微波炉" Then s3 = s3 + Cells(i, 6) If Left(Cells(i, 3), 3) = "热水器" Then s4 = s4 + Cells(i, 6) If Left(Cells(i, 3), 3) = "洗衣机" Then s5 = s5 + Cells(i, 6) Next i Range("f15") = s1 Range("f16") = s2 Range("f17") = s3 Range("f18") = s4 Range("f19") = s5 End Sub Function danjia(x) 用VBA计算单价 If x = "彩电V1" Then danjia = 3200 If x = "彩电V2" Then danjia = 4500 If x = "彩电V3" Then danjia = 5800 If x = "空调V1" Then danjia = 1200 If x = "空调V2" Then danjia = 880 If x = "空调V3" Then danjia = 780 If x = "微波炉V1" Then danjia = 120 If x = "微波炉V2" Then danjia = 160 If x = "热水器V1" Then danjia = 860 If x = "热水器V2" Then danjia = 780 If x = "洗衣机V1" Then danjia = 1200 If x = "洗衣机V2" Then danjia = 1800 If x = "洗衣机V3" Then danjia = 2500 End Function /////////// 计算机病毒——主要观点写在答题纸上,主要观点的展开与举例提交电子版到“考试服务器”。