
{
int i,j,t;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(a[j] > a[j+1]) //从小到大,升序
{
t = a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int main()
{
int a[6][4],i,j;
int h;
char stu[21][30]={0};
int nmb[26]; //记录每个姓名开头的人数
for(i=0;i<26;i++)
nmb[i]=0;
for (i=0;i<5;i++)
{ for (j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
//排序
bubble_sort(&a[0][0],20);
//输出
for (i=0;i<5;i++)
{
for (j=0;j<4;j++)
printf("%d ",a[i][j]);
printf("\n");
}
//插入
printf("请输入插入班级的小朋友身高:");
scanf("%d",&h);
for (i=0;i<5;i++)
{
for (j=0;j<4;j++)
{
if(a[i][j] >= h)
break;
}
}
if(i == 5)
printf("第6行第1列\n");
else
printf("第%d行第%d列\n",i+1,j+1);
//输入学生姓名20名
printf("请输入20名学生的姓名:\n");
for (i=0;i<5;i++)
{
for(j=0;j<4;j++)
{
gets(stu[i]);
if(stu[i][j] >='a' && stu[i][j]<='z')
nmb[stu[i][j]-'a']++;
else if(stu[i][j] >='A' && stu[i][j]<='Z')
nmb[stu[i][j]-'A']++;
}
}
//显示
for (i=0;i<26;i++)
{
if(nmb[i] > 0)
printf("%c开头的小朋友%d个\n",(char)('A'+i),nmb[i]);
}
return 0;
}
如有帮助,还请采纳!谢谢!
就是定义一个二维数组,比如s[5][4],表示5行4列,然后for循环输入每个学生身高。对身高进行从高到低排序。然后可以插入一个学生信息,插入后二维数组将变为s[6][4](可以一开始就定义成6行4列)。插入将按照身高顺序进行。记录新学生身高的排序就好了
#include <stdio.h>
int s[6][4] = {0};
char name[30][20] = {0};
int sn = 20;
int count[26] = {0};
void input()
{
printf("输入20个学生身高:");
for(int i=0;i<5;i++)
for(int j=0;j<4;j++)
scanf("%d",&s[i][j]);
}
void sorts()
{
int *p = (int*)s;
for(int i=0;i<19;i++)
for(int j=0;j<19-i;j++)
{
if(p[j] < p[j+1])
{
int h = p[j];
p[j] = p[j+1];
p[j+1] = h;
}
}
}
void insert(int h,int *i,int *j)
{
int *p = (int*)s;
for(int a=19;a>=0;a--)
{
if(h<p[a])
{
for(int b=19;b>=a;b--)
p[b+1] = p[b];
p[a] = h;
*i = a/4;
*j = a%4;
return;
}
}
p[20] = h;
*i = *j = 0;
}
void print()
{
for(int i=0;i<6;i++)
{
for(int j=0;j<4;j++)
if(s[i][j] != 0)
printf("%d ",s[i][j]);
printf("\n");
}
}
int main()
{
int h,i=0,j=0;
input();
sorts();
printf("输入新小朋友身高:");
scanf("%d",&h);
insert(h,&i,&j);
printf("新小朋友行号:%d,列号:%d\n",i+1,j+1);
print();
//输入学生姓名
printf("输入20个小朋友姓名:");
for(i=0;i<sn;i++)
{
gets(name[i]);
count[name[i][0]-'A']++;
}
//统计不同字母开头的学生数量
for(i=0;i<26;i++)
{
if(count[i] != 0)
printf("姓名以%c开头的小朋友有:%d个\n",i+'A');
}
return 0;
}
每个学生座位的行号和列号就是二维数组的两个下标,数组存放的内容就是学生身高,也就是需要程序运行后等待用户输入。
实验一中你已经获得一个有序二维数组了,实验二要插入的时候遍历数组,找到一个比插入值更大的元素,这个元素的位置就是实验要求输出的位置。如果你使用两层嵌套循环进行数组遍历,比如:
for(int i=0;i<5;++i){
for(int j=0;j<4;++j){
}
}
那循环的数字,即(i, j) 就是插入的位置