上机题解3.docx
- 文档编号:27203872
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:33
- 大小:25.52KB
上机题解3.docx
《上机题解3.docx》由会员分享,可在线阅读,更多相关《上机题解3.docx(33页珍藏版)》请在冰豆网上搜索。
上机题解3
3-1.编程,任意输入10个整数,按从小到大的顺序输出。
结果:
输入:
9、7、8、6、7、5,
输出:
5、6、7、7、8、9。
分析:
用选择法排序。
main()/*sj1-3-1*/
{intj,k,e,t,a[10];
for(j=0;j<10;j++)scanf("%d",&a[j]);
for(j=0;j<9;j++)
{t=j;
for(k=j+1;k<10;k++)if(a[t]>a[k])t=k;
e=a[t];a[t]=a[j];a[j]=e;}
for(k=0;k<10;k++)
printf("%5d",a[k]);
printf("\n");
}
3-2.编程,任意输入10个人的成绩,按从大到小的顺序排列。
运行程序时,只要输入名次,计算机就能输出该名次对应的成绩。
结果:
输入:
4、7、3、6、1、5,12,0,23,-1
输入:
4
输出:
The4this6
分析:
用选择法排序。
第n名是a[n-1]。
main()/*sj1-3-2*/
{intj,k,e,t,n,a[10];
for(j=0;j<10;j++)scanf("%d",&a[j]);
printf(“nputanumber:
\n”);
scanf(“%d”,&n);
for(j=0;j<9;j++)
{t=j;
for(k=j+1;k<10;k++)if(a[t]>a[k])t=k;
e=a[t];a[t]=a[j];a[j]=e;}
printf(“The%dthis%d\n”,n,a[n-1]);
for(k=0;k<10;k++)
printf("%5d",a[k]);
printf("\n");
}
3-3.编程,输入10个人的序号和成绩,对成绩从小到大排序,输出排序后的序号和成绩。
结果:
输入:
1,102,93,84,75,66,77,88,99,1210,0
输出:
10:
0
5:
6
4:
7
6:
7
3:
8
7:
8
2:
9
8:
9
1:
10
9:
12。
分析:
用选择法排序。
a[j][0]--序号,a[j][1]--成绩。
main()/*sj1-3-3*/
{intj,k,e,t,a[10][2];
for(j=0;j<10;j++)scanf("%d,%d",&a[j][0],&a[j][1]);
for(j=0;j<9;j++)
{t=j;
for(k=j+1;k<10;k++)if(a[t][1]>a[k][1])t=k;
e=a[t][0];a[t][0]=a[j][0];a[j][0]=e;
e=a[t][1];a[t][1]=a[j][1];a[j][1]=e;
}
for(k=0;k<10;k++)
printf("%5d:
%5d\n",a[k][0],a[k][1]);
printf("\n");
}
3-4.编程,输入10个人的序号和成绩,对成绩从从大到小进行排序,输出排序后的序号和成绩。
结果:
输入:
1,102,93,84,75,66,77,88,99,1210,0
输出:
9:
12。
1:
10
8:
9
2:
9
7:
8
3:
8
6:
7
4:
7
5:
6
10:
0
分析:
用选择法排序。
a[j][0]--序号,a[j][1]--成绩。
main()/*sj1-3-4*/
{intj,k,e,t,a[10][2];
for(j=0;j<10;j++)scanf("%d,%d",&a[j][0],&a[j][1]);
for(j=0;j<9;j++)
{t=j;
for(k=j+1;k<10;k++)if(a[t][1] e=a[t][0];a[t][0]=a[j][0];a[j][0]=e; e=a[t][1];a[t][1]=a[j][1];a[j][1]=e; } for(k=0;k<10;k++) printf("%5d: %5d\n",a[k][0],a[k][1]); printf("\n"); } 3-5.编程,输入10个整数及其序号,求出10个整数的最大值、次大值、最小值和次小值,并输出它们原来输入时的序号。 结果: 输入: 1,152.113,04,75,16,57,78,409,210,23 输出: 8: 4010: 23 3: 05: 1 分析: 用选择法排序。 a[j][0]--序号,a[j][1]--成绩。 交换时a[j][0]、a[j][1]一起交换。 main()/*sj1-3-5*/ {intj,k,e,t,a[10][2]; for(j=0;j<10;j++)scanf("%d,%d",&a[j][0],&a[j][1]); for(j=0;j<9;j++) {t=j; for(k=j+1;k<10;k++)if(a[t][1] e=a[t][0];a[t][0]=a[j][0];a[j][0]=e; e=a[t][1];a[t][1]=a[j][1];a[j][1]=e; } printf("%5d: %5d%5d: %5d\n",a[0][0],a[0][1],a[1][0],a[1][1]); printf("%5d: %5d%5d: %5d\n",a[9][0],a[9][1],a[8][0],a[8][1]); } 3-6.编程,输入10个整数,然后进行查找。 输入要查找的整数,若找到,则输出该数在数组中的下标位置,否则输出“cannotfound! ”。 结果: 输入: 12234321567943367(a数组的内容) 56(要找的数) 输出: 56=a[4] 65(要找的数) 输出: 65cannotfound! 分析: 用数组存放10个整数,对10个整数循环,输出找到的整数及其在数组中的下标。 main()/*sj1-3-6*/ {intj,n,a[10]; for(j=0;j<10;j++)scanf("%d",&a[j]); printf(“nputanumber: \n”); scanf(“%d”,&n); for(j=0;j<10;j++) if(n==a[j]){printf(“%d=a[%d]\n”,n,j);break;} if(j>=10)printf(“%dcannotfound! \n”,n); } 3-7.编程,输入一个字符串并删除其中的指定字符。 例如,对于字符串abcdcf,指定删除c,则结果为: abdf。 结果: 输入: abcdcf和c 输出: abdf 分析: 输入一个字符串s和要删除的字符ch,从字符串首开始逐个字符检查,每遇ch则将后面的字符向前移动一个位置覆盖要删字符ch. #include"string.h" #include"stdio.h" main()/*sj1-3-7*/ {intj,k; chara[80],ch; gets(a); printf("inputacharacter: \n"); scanf("%c",&ch); j=0; while(a[j]! ='\0') {if(ch==a[j]) for(k=j;a[k]! ='\0';k++) a[k]=a[k+1]; j++; } puts(a); } 3-8.编程,输入一行字符,将其反序后再输出。 结果: 输入abcdefg,输出: gfedcba 分析: 输入n个字符到a数组,a[j]与a[n-j-1]互换(j=0,1,2,…,n/2-1)。 #include"string.h" #include"stdio.h" main()/*sj1-3-8*/ {intj,k,n; chara[80],ch; gets(a); n=strlen(a); for(j=0;j {ch=a[j]; a[j]=a[n-1-j]; a[n-1-j]=ch; } puts(a); } 3-9.编程,输入一行字符,将其中的每个字符从小到大排列后输出。 结果: 输入: china输出: achin 分析: 用选择法对字符数组进行排序。 #include"stdio.h" #include"string.h" main()/*sj1-3-9*/ {intj,k,t,n;chara[80],e; printf("nputastring: \n");scanf("%s",a); n=strlen(a); for(j=0;j {t=j; for(k=j+1;k e=a[t];a[t]=a[j];a[j]=e;} printf("%s\n",a); } 3-10.编程,输入一行字符,将其中的每个字符从大到小排列后输出。 结果: 输入: china输出: nihca 分析: 用选择法对字符数组进行排序。 #include"stdio.h" #include"string.h" main()/*sj1-3-10*/ {intj,k,t,n;chara[80],e; printf("inputastring: \n");scanf("%s",a); n=strlen(a); for(j=0;j {t=j; for(k=j+1;k e=a[t];a[t]=a[j];a[j]=e;} printf("%s\n",a); } 3-11.编程,找出一个二维数组中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。 二维数组也可能没有鞍点。 结果: ⑴输入n=4,m=4 1234 5555 5555 5555 输出: 鞍点为a[0][3]=4。 (2)输入n=4,m=4 5555 5555 5555 0321 输出: 鞍点为a[3][1]=3。 分析: 找出i行最大值所在的列号k(i=0,1,…,n),若a[i][k]是k列最小,则a[i][k]是鞍点。 也可能没有鞍点。 main()/*sj1-3-11*/ {inti,j,l,n,m,k,a[20][20]; printf("Pleaseentern,m="); scanf("%d,%d",&n,&m);/*输入数组的行数n和列数m*/ for(i=0;i for(j=0;j {printf("a[%d][%d]=",i,j); scanf("%d",&a[i][j]);} for(i=0;i {for(j=0;j printf("%6d",a[i][j]); printf("\n");} for(i=0;i {for(j=0,k=0;j if(a[i][j]>a[i][k])k=j;*找出i行最大值所在的列号k*/ for(l=0;l if(a[l][k] if(l>=n)/*没有比a[i][k]小的数*/ printf("Point: a[%d][%d]==%d",i,k,a[i][k]); } }_ 3-12.编程,按学生的序号输入10名学生的成绩,按照分数由高到低的顺序输出学生的名次、序号和成绩,要求成绩相同的学生具有相同的名次。 结果: 输入: 2468923432194 输出: 1: 743 2: 623 3: 821 4: 59 4: 99 5: 48 6: 36 7: 24 7: 104 8: 12 分析: 用选择法排序。 a[j][0]--序号,a[j][1]—名次。 a[j][2]--成绩 main()/*sj1-3-12*/ {intj,k,e,t,a[10][3]; for(j=0;j<10;j++) {scanf("%d",&a[j][2]);a[j][0]=a[j][1]=j+1;} for(j=0;j<9;j++) {t=j;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 题解