1【程序题】
整数升序。编程要求:①在提示符number:后面输入整数n;②程序以n integers:(n以输入的实际整数替代)的形式提示用户随机输入n个整数,整数之间用空格分隔,用Enter表示输入结束;③程序对输入的n个整数以升序排列之,最后用sorted=A,B,C,……的形式按升序输出;④输出结果后,程序继续显示提示符number:等待下一个输入;⑤当用户在number:后输入的数小于等于0时,程序输出Bye!结束。
下面是程序运行效果:
我的答案:
#include<stdio.h>
int main()
{
int n,a[100],i,j,t;
do
{
printf("number:");
scanf("%d",&n);
if(n<=0)
printf("Bye!\n");
else
{
printf("%d integers:",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf("sorted=");
for(i=0;i<n;i++)
{
printf("%d",a[i]);
if(i!=n-1)
printf(",");
}
printf("\n");
}
}while(n>0);
return 0;
}
2【程序题】
成绩降序。编程要求:①程序以names & scores:的形式提示用户自下行起输入学生姓名与成绩;②程序在每行起始处以Nok:的形式提示输入第k个学生姓名及成绩,k自1始依次递增;③每行输入一位学生的姓名及成绩,姓名由英文字母组成,长度小于10,成绩为int型。姓名与成绩之间用空格分隔;④当用户输入的学生成绩小于0时,表示结束输入,对应小于0成绩的学生姓名不予处理;⑤程序对输入的信息按成绩以降序排列,用sorted=A(S1),B(S2),C(S3),…的形式降序输出。其中S1、S2、S3…分别是第1成绩、第2成绩、第3成绩…,A、B、C…则是取得对应成绩的学生姓名;输出后程序结束;⑥当用户在No1:后输入的学生成绩小于0时,程序直接输出no scores,然后结束。程序运行效果:
我的答案:
#include<stdio.h>
#include<string.h>
int main()
{
char a[100][10],str1[10];
int c[100],i,j,t,k;
printf("names & scores:\n");
for(i=1;;i++)
{
printf("No%d:",i);
scanf("%s%d",&a[i],&c[i]);
if(c[i]<0)
break;
}
if(i==1&&c[1]<0)
{
printf("no scores\n");
return 0;
}
printf("sorted=");
for(k=1;k<i-1;k++)
{
for(j=k+1;j<i;j++)
{
if(c[k]<c[j])
{
t=c[k];
c[k]=c[j];
c[j]=t;
strcpy(str1,a[k]);
strcpy(a[k],a[j]);
strcpy(a[j],str1);
}
}
}
for(k=1;k<i;k++)
{
printf("%s(%d)",a[k],c[k]);
if(k!=i-1)
printf(",");
}
printf("\n");
return 0;
}
3【程序题】
围圈报数 。编程要求:①在提示符number & count:后面输入两个整数n和c,分别代表人数和“报到数”;②n个人围成一圈,首尾衔接。并以1、2、3、…、n按“顺时针”顺序逐人依次用“标号”注定;③从标定为1的人开始顺时针按1、2、3…依次报数,凡报到c者被淘汰“出圈”,然后再从后续者自1起报数,按相同规则将人淘汰“出圈”,直到所有人被淘汰为止;④当n个人都被淘汰后,程序以eliminate order=A,B, C, …的形式按“淘汰顺序”依次输出被淘汰人的标号,结束程序;⑤当用户在number & count:后输入的两个数n和c中至少一个小于等于0时,程序直接输出no people结束。
程序的运行效果:
我的答案:
#include<stdio.h>
int main()
{
int n,c,i,j=0,t=0,a[100],f[100],b;
printf("number & count:");
scanf("%d%d",&n,&c);
if(n<=0||c<=0)
printf("no people\n");
else
{
for(i=0;i<n;i++)
a[i]=i+1;
i=0;
b=n;
while(n>1)
{
if(a[i]!=0)
t++;
if(t==c)
{
f[j]=a[i];
a[i]=0;
t=0;
n--;
j++;
}
i++;
if(i==b)
i=0;
}
for(i=0;i<b;i++)
{
if(a[i]!=0)
f[j]=a[i];
}
printf("eliminate order=");
for(j=0;j<b;j++)
{
printf("%d",f[j]);
if(j!=b-1)
printf(",");
}
printf("\n");
}
return 0;
}
4【程序题】
多次围圈报数 。编程要求:①在提示符number & count:后面输入两个整数n和c,分别代表人数和“报到数”;②n个人围成一圈,首尾衔接。并以1、2、3、…、n按“逆时针”顺序逐人依次用“标号”注定;③从标定为1的人开始逆时针按1、2、3…依次报数,凡报到c者被淘汰“出圈”,然后再从后续者自1起报数,按相同规则将人淘汰“出圈”,直到所有人被淘汰为止;④当n个人都被淘汰后,程序以eliminate order=A,B, C, …的形式按“淘汰顺序”依次输出被淘汰人的标号;⑤输出结果后,程序继续显示提示符number & count:,等待用户的下轮输入;⑥当用户在number & count:后输入的两个数n和c中至少一个小于等于0时,程序输出Bye!结束。
程序的运行效果:
我的答案:
#include<stdio.h>
int main()
{
int n,c,i,j,t,a[100],f[100],b;
do
{
j=t=0;
printf("number & count:");
scanf("%d%d",&n,&c);
if(n<=0||c<=0)
printf("Bye!\n");
else
{
for(i=0;i<n;i++)
a[i]=i+1;
i=0;
b=n;
while(n>1)
{
if(a[i]!=0)
t++;
if(t==c)
{
f[j]=a[i];
a[i]=0;
t=0;
n--;
j++;
}
i++;
if(i==b)
i=0;
}
for(i=0;i<b;i++)
{
if(a[i]!=0)
f[j]=a[i];
}
printf("eliminate order=");
for(j=0;j<b;j++)
{
printf("%d",f[j]);
if(j!=b-1)
printf(",");
}
printf("\n");
}
}while(b>0&&c>0);
return 0;
}