| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1372 人关注过本帖
标题:小弟初来乍到,向各位大佬致敬!
只看楼主 加入收藏
zwq1
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2020-2-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
小弟初来乍到,向各位大佬致敬!
编程任务4. 有一个班级,目前只有3个人,以身高进行排序,如
序号 学号 身高
1 ,1 1.50
2 3 1.55
3 2 1.60
每次增加一个人,学号自动加1,身高由用户输入,请同学们每完成一次添加把整个人数按照身高重新进行排序并输出,如输入了1.53,排序为:
序号 学号 身高
1 ,1 1.50
1 4 1.53
2 3 1.55
3 2 1.60
用户可以一直输入,当输入为100时,结束输入,并在屏幕上输出一个九九乘法表。
搜索更多相关主题的帖子: 输出 用户 输入 学号 排序 
2020-02-21 21:43
zwq1
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2020-2-5
收藏
得分:0 
以下是引用zwq1在2020-2-21 21:43:01的发言:

编程任务4. 有一个班级,目前只有3个人,以身高进行排序,如
序号 学号 身高
1 ,1 1.50
2 3 1.55
3 2 1.60
每次增加一个人,学号自动加1,身高由用户输入,请同学们每完成一次添加把整个人数按照身高重新进行排序并输出,如输入了1.53,排序为:
序号 学号 身高
1 ,1 1.50
1 4 1.53
2 3 1.55
3 2 1.60
用户可以一直输入,当输入为100时,结束输入,并在屏幕上输出一个九九乘法表。

注:不能用结构体,并且要用插入排序。
2020-02-21 21:43
Samson幽客
Rank: 2
等 级:论坛游民
威 望:2
帖 子:21
专家分:98
注 册:2020-1-14
收藏
得分:5 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<curses.h>
#include<ctype.h>
int main()
{
    float **p;
    float a;
    int m,n;
    int i,j,x,y;
    int temp,k;
    m=100;//行数
    n=2;//列数
    p = (float **) malloc(sizeof(float *) *m);//申请一组一维指针空间。
    for(i=0; i<m; i++)
        p[i] = (float *) malloc(sizeof(float) *n);//对于每个一维指针,申请一行数据的空间。
    printf("依次输入学号和身高,输入任意字母并回车即可中断输入!\n");
    for(i=0;i<m;i++)//循环输入数据
    {
        printf("输入第%d行的数据:",i+1);
        for(j=0; j<n; j++)
        {
            scanf("%f",&p[i][j]);//输入第i行第j列的数据。
            a=p[i][j];
            if((int) a==0)//判断是否为数字,如果输入的不是数字a的值为0结束循环
            {
                p[i][j]=0;
                goto T;//用goto跳出双重循环,结束输入步骤
            }
        }
    }
T:
    for(int x=1; x<i; x++)//这个for循环就是插入排序
    { //通过上面输入循环的到的i,以i为结尾,找到p[x]的位置;
        int y=0;
        while( (p[y][1]<p[x][1]) && (y<x))//如果前一个值小于后一个值,那么将p[y]往前一行
        {
            y++;
        }//将元素插入到正确的位置
        if(x != y)  //如果x==y,说明p[x]刚好在正确的行
        {
            int temp = p[x][1]; //float
            for(int k = x; k > y; k--)
            {
                p[k][1] = p[k-1][1];
            }
            p[y][1] = temp;
        }
    }
    printf("\n输入的数组为%d行%d列:\n",i+1,n);
    for(x=0;x<=i;x++)//循环输出二维数组
    {
        printf("第%d行数据为:",x+1);
        for(y=0;y<n;y++)
        {
            if(y==0)//判断当前列是否为学号
                printf("%d\t",(int) p[x][y]);//将学号强制转换为整形
            else
                printf("%.2f",p[x][y]);//保留身高两位小数
        }
        printf("\n");
    }
    for(i=0;i<m;i++)//释放掉动态数组
        free(p[i]);
    free(p);
    return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册



[此贴子已经被作者于2020-2-23 19:59编辑过]

2020-02-23 19:52
Samson幽客
Rank: 2
等 级:论坛游民
威 望:2
帖 子:21
专家分:98
注 册:2020-1-14
收藏
得分:5 
可以参考上面的程序,学号自动加一的话直接做个判断然后修改即可,九九乘法表的代码挺多的,直接找个放上去
2020-02-23 19:56
Samson幽客
Rank: 2
等 级:论坛游民
威 望:2
帖 子:21
专家分:98
注 册:2020-1-14
收藏
得分:10 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<curses.h>
#include<ctype.h>
int main()
{
    float **p;
    float a;
    int m,n;
    int i,j,x,y,k;
    int temp;
    m=100;//行数
    n=2;//列数
    p = (float **) malloc(sizeof(float *) *m);//申请一组一维指针空间。
    for(i=0; i<m; i++)
        p[i] = (float *) malloc(sizeof(float) *n);//对于每个一维指针,申请一行数据的空间。
    printf("依次输入学号和身高,输入任意字母并回车即可中断输入!\n");
    for(i=0;i<m;i++)//循环输入数据
    {
        printf("输入学号%d的身高:",i+1);
        for(j=0; j<n; j++)
        {
            if(j==1)
            {
                scanf("%f",&p[i][j]);//输入第i行第j列的数据。
                a=p[i][j];
                if((int) a==0)//判断是否为数字,如果输入的不是数字a的值为0结束循环
                {
                    p[i][j]=0;
                    goto T;//用goto跳出双重循环,结束输入步骤
                }           

            }
            else
                p[i][j]=i+1;
        }
    }
T:
    for(int x=1; x<i; x++)//这个for循环就是插入排序
    { //通过上面输入循环的到的i,以i为结尾,找到p[x]的位置;
        int y=0;
        while( (p[y][1]<p[x][1]) && (y<x))//如果前一个值小于后一个值,那么将p[y]往前一行
        {
            y++;
        }//将元素插入到正确的位置
        if(x != y)  //如果x==y,说明p[x]刚好在正确的行
        {
            float temp = p[x][1];
            for(int k = x; k > y; k--)
            {
                p[k][1] = p[k-1][1];
            }
            p[y][1] = temp;
        }
    }
    printf("\n输入的数组为%d行%d列:\n",i+1,n);
    for(x=0;x<=i;x++)//循环输出二维数组
    {
        printf("第%d行数据为:",x+1);
        for(y=0;y<n;y++)
        {
            if(y==0)//判断当前列是否为学号
                printf("%d\t",(int) p[x][y]);//将学号强制转换为整形
            else
                printf("%.2f",p[x][y]);//保留身高两位小数
        }
        printf("\n");
    }
    for(i=0;i<m;i++)//释放掉动态数组
        free(p[i]);
    free(p);
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
这是修改后的
2020-02-23 20:09
快速回复:小弟初来乍到,向各位大佬致敬!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020003 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved