目录
1. 整数排序
2. 二维数组按每行数据之和升序
3. 字符串排序
4. 二维数组各行元素之和
5. 二位整数数组交换两行
6. 插入排序
7. 10进制转2进制,8进制和16进制数(数组)
1. 整数排序
【问题描述】从键盘输入n(0<n<21)个整数,将这n个整数从大到小排序。
【输入形式】先输入n,接着输入n个整数,空格分开
【输出形式】n个排序后的整数,空格分开
【样例输入】
10
6 9 8 7 4 5 1 2 6 8
【样例输出】9 8 8 7 6 6 5 4 2 1
【样例说明】10个整数6 9 8 7 4 5 1 2 6 8 从大到排序后的结果是 9 8 8 7 6 6 5 4 2 1
#include<stdio.h>
int main(){
int n,i,j,t;
int a[22];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(a[i]<a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
return 0;
}
2. 二维数组按每行数据之和升序
【问题描述】将一个4*4二维整数数组按每行数据之和升序排列后输出。(注:计算机二级考试下午试题)
【输入形式】分行输入4个整数,空格分开
【输出形式】按每行数据之和升序排列后分行输出4个整数,空格分开
【样例输入】
2 2 3 4
9 10 11 12
1 3 5 7
5 10 1 20
【样例输出】
2 2 3 4
1 3 5 7
5 10 1 20
9 10 11 12
【样例说明】输入的二维数组各行的和为11,42,16,36,按升序得11,16,36,42,对应的数组输出就是:
2 2 3 4
1 3 5 7
5 10 1 20
9 10 11 12
提示:
定义数组时多定义一列int a[4][5] 放每行的数据之和。
将第5列排序,交换第5列二个数时同时交换二行。
#include<stdio.h>
int main(){
int a[4][5];
int i,j,k,t;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<4;i++){
a[i][4]=0;
for(j=0;j<4;j++){
a[i][4]+=a[i][j];
}
}
for(i=0;i<4;i++){
for(j=i;j<4;j++){
if(a[i][4]>a[j][4]){
for(k=0;k<5;k++){
t=a[i][k];
a[i][k]=a[j][k];
a[j][k]=t;
}
}
}
}
for(i=0;i<4;i++){
for(j=0;j<4;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
3. 字符串排序
【问题描述】从键盘输入5个字符串,按字典排序从小到大输出。
【输入形式】分5行输入5个字符串。
【输出形式】分5行输出从小到大排序后的5个字符串。
【样例输入】
dh
325fd
fdgh
lkutyt
pstr
【样例输出】
325fd
dh
fdgh
lkutyt
pstr
#include<stdio.h>
#include<string.h>
int main(){
char s[5][100],c[100];
int i,j;
for(i=0;i<5;i++){
scanf("%s",&s[i]);
}
for(i=0;i<5;i++){
for(j=i;j<5;j++){
if(strcmp(s[i],s[j])>0){
strcpy(c,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],c);
}
}
}
for(i=0;i<5;i++){
printf("%s\n",s[i]);
}
}
4. 二维数组各行元素之和
【问题描述】从键盘输入一个m行n列的二维整数数组(1<m<10,1<n<10),将该二维数组a[ ][ ]的各行元素之和放在第n列,各列元素之和放在第m行,全部元素之和放在a[m][n]。参考实验9.4
【输入形式】先输入二维数组的行数与列数,空格分开,接着输入m行n列个整数,空格分开。
【输出形式】输出各行元素之和放在第n列,各列元素之和放在第m行之后的矩阵,空格分开。
【样例1输入】
2 2
1 2
3 0
【样例1输出】
1 2 3
3 0 3
4 2 6
【样例1说明】原始数组是2行2列,第一行之和1+2=3,第2行之和3+0=3,第1列之和1+3=4,第2列之和2+0=2,全部元素之和为6.
【样例2输入】
4 3
1 2 3
4 5 6
7 8 9
6 7 8
【样例2输出】
1 2 3 6
4 5 6 15
7 8 9 24
6 7 8 21
18 22 26 66
【样例2说明】原始数组是4行3列,第一行之和1+2+3=6,第2行之和4+5+6=15,... ,第1列之和1+4+7+6=18,第2列之和2+5+8+7=22,……,全部元素之和为66.
#include<stdio.h>
int main(){
int a[10][10];
int i,j,m,n,s,sum=0;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
sum+=a[i][j];
}
}
a[m][n]=sum;
for(i=0;i<m;i++){
s=0;
for(j=0;j<n;j++){
s+=a[i][j];
}
a[i][n]=s;
}
for(i=0;i<n;i++){
s=0;
for(j=0;j<m;j++){
s+=a[j][i];
}
a[m][i]=s;
}
for(i=0;i<=m;i++){
for(j=0;j<=n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
5. 二位整数数组交换两行
【问题描述】定义一个2行5列的二维整数数组,从键盘上输入2行5列10个整数,将数组第1行与第2行交换后输出。
【输入形式】分二行输入10个整数,空格分开。
【输出形式】分二行输入10个整数,空格分开。
【样例输入】
1 2 3 4 5
6 7 8 9 10
【样例输出】
6 7 8 9 10
1 2 3 4 5
#include<stdio.h>
int main(){
int a[3][6];
int i,j;
for(i=0;i<2;i++){
for(j=0;j<5;j++){
scanf("%d",&a[i][j]);
}
}
for(i=1;i>=0;i--){
for(j=0;j<5;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
6. 插入排序
【问题描述】键盘输入10个整数,将这10个数按从小到大插入排序。
【输入形式】键盘输入10个整数,空格分开。
【输出形式】10个从小到大整数,空格分开。
【样例输入】3 6 9 8 7 4 5 6 1 0
【样例输出】0 1 3 4 5 6 6 7 8 9
#include<stdio.h>
int main(){
int a[11];
int i,j,t;
for(i=1;i<=10;i++){
scanf("%d",&a[i]);
}
for(i=2;i<=10;i++){
a[0]=a[i];
j=i-1;
while(j>0&&a[0]<a[j]){
a[j+1]=a[j];
--j;
}
a[j+1]=a[0];
}
for(i=1;i<=10;i++){
printf("%d ",a[i]);
}
return 0;
}
7. 10进制转2进制,8进制和16进制数(数组)
【问题描述】从键盘输入一个10进制正整数,将它转换成2进制数,8进制和16进制数。
【输入形式】一个不超过10位的10进制正整数
【输出形式】输出上面10进制数的2进制数,8进制数和16进制数,逗号“,”分开
【样例1输入】31
【样例1输出】11111,37,1F
【样例2输入】123456789
【样例2输出】111010110111100110100010101,726746425,75BCD15
2348的2进制为100100101100
2348的8进制为4454
2348的16进制为92C
10进制正整数n转换成m进制数方法:用m去除n,余数放数组a[]中,商放n,直到n=0为止。再逆序输出a[]。
如2348 除2分别得余数 001101001001001,逆序输出就得到二进制数。
2348转16进制,除以16,商146,余12(C),146除以16,商9余2,9除以16,商0余9,逆序后,2348的16进制为92C。
可以这样理解,要求2348的16进制,先求商146的16进制,得92,再加上余数C,得92C为2348的16进制。
#include<stdio.h>
int main()
{
int a[33],b[3]={2,8,16},i,j=0,x,y;
scanf("%d",&x);
y=x;
while(j<3)
{
x=y;
i=0;
while (x)
{
a[i]=x%b[j];
x/=b[j];
i++;
}
--i;
while (i>=0)
{
printf("%c",a[i]>9?a[i]-10+'A':a[i]+'0');
i--;
}
if(j<2)printf(",");
j++;
}
printf("\n");
return 1;
}