| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4345 人关注过本帖
标题:从键盘上输入8个数字和9个字母,要求顺序混乱,然后将8个数字升序排列后以2 ...
只看楼主 加入收藏
liweishiwo
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-11-9
收藏
 问题点数:0 回复次数:9 
从键盘上输入8个数字和9个字母,要求顺序混乱,然后将8个数字升序排列后以2*4的矩阵形式输出,9个字母降序后以3*3的矩阵形式输出
从键盘上输入8个数字和9个字母,要求顺序混乱,然后将8个数字升序排列后以2*4的矩阵形式输出,9个字母降序后以3*3的矩阵形式输出
搜索更多相关主题的帖子: 矩阵 字母 数字 排列 顺序 
2008-11-09 15:22
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
/*******************************************************************************

        从键盘上输入8个数字和9个字母,要求顺序混乱,然后将8个数字升序排列后以2
    *4的矩阵形式输出,9个字母降序后以3*3的矩阵形式输出.

*******************************************************************************/
#include<stdio.h>
#include<string.h>
void sort(char a[])/*----排序 ---------*/
{
    int i,j;
    char t;
    for(i=0;i<strlen(a);++i)
        for(j=i+1;j<strlen(a);++j)
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
}
int main(void)
{
    char a[18],CHAR[10],num[9];
    int i,j,k;
    printf("input a[]:\n");
    gets(a);
    for(i=j=k=0;i<strlen(a);++i)
    {
        if(a[i]>='0'&&a[i]<='9')
            num[j++]=a[i];/*----当某个数据等于数字时,存入数字的字符串 */
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
            CHAR[k++]=a[i];/*---当某个数据等于字母时,存入字母的字符串 */
    }
    num[++j]='\0';
    CHAR[++k]='\0';/* 人工添加结束标记 */
    sort(CHAR);
    sort(num);/* 两个字符串排序*/
    printf("----------------------------------------\n\nnum :\n");
    for(i=0;i<9;++i)
    {
        printf("%c",num[i]);
        if(i!=0&&i%4==0)
            printf("\n");/*升序输出数字字符串,并输出正确格式*/
    }
    printf("-----------------------------------------\n\nchar :\n");
    for(i=9;i>0;--i)
    {
        if(i%3==0)
            printf("\n");
        printf("%c",CHAR[i]);/* 降序输出字母字符串,并输出正确格式*/
    }
    printf("\n");
    return 0;
}
2008-11-09 20:12
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
给广陵一个建议:多使用库函数,少自己实现,这个题目,你其实用qsort就好。
2008-11-09 20:22
nhuzwj
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-11-5
收藏
得分:0 
[bo][un]广陵绝唱[/un] 在 2008-11-9 20:12 的发言:[/bo]

/*******************************************************************************

        从键盘上输入8个数字和9个字母,要求顺序混乱,然后将8个数字升序排列后以2
    *4的矩阵形式输出,9个字母降序后以3*3的矩 ...


/*******************************************************************************

        从键盘上输入8个数字和9个字母,要求顺序混乱,然后将8个数字升序排列后以2
    *4的矩阵形式输出,9个字母降序后以3*3的矩阵形式输出.

*******************************************************************************/
#include<stdio.h>
#include<string.h>
void sort(char a[])/*----排序 ---------*/
{
    int i,j;
    char t;
    for(i=0;i<strlen(a);++i)
        for(j=i+1;j<strlen(a);++j)
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
}
int main(void)
{
    char a[18],CHAR[10],num[9];
    int i,j,k;
    printf("input a[]:\n");
    gets(a);
    for(i=j=k=0;i<strlen(a);++i)
    {
        if(a[i]>='0'&&a[i]<='9')
            num[j++]=a[i];/*----当某个数据等于数字时,存入数字的字符串 */
        if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
            CHAR[k++]=a[i];/*---当某个数据等于字母时,存入字母的字符串 */
    }
   /* num[++j]='\0';                              
    CHAR[++k]='\0';*//* 人工添加结束标记 */                                   /*取消人工结束标记*/
    sort(CHAR);
    sort(num);/* 两个字符串排序*/
    printf("----------------------------------------\n\nnum :\n");
    for(i=0;i<9;++i)
    {
        printf("%c",num[i]);
        if(i!=0&&(i+1)%4==0)                                                 /*此处改为i+1*/
            printf("\n");/*升序输出数字字符串,并输出正确格式*/
    }
    printf("-----------------------------------------\n\nchar :\n");
    for(i=9;i>0;--i)
    {
        if(i%3==0)
            printf("\n");
        printf("%c",CHAR[i-1]);/* 降序输出字母字符串,并输出正确格式*/          /*此处改为i-1*/
    }
    printf("\n");
    return 0;
}

有3处小问题:其中人工结束标记不知道问题出在哪儿,但如果加上你的人工结束标记就有问题,不加的话没问题

[[it] 本帖最后由 nhuzwj 于 2008-11-9 21:14 编辑 [/it]]
2008-11-09 21:07
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 4# 的帖子
------

    晕死~~~我运行原来的程序输入:1a2b3c4d5e6f7g8hk.

    输出:num:
          1234
          5678
   
          char :
          khg
          fed
          cba


    您更改后:

       输出:num:
             bcde
             fghk
         
             char:
             876
             543
             21


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    不知道怎么回事?我再仔细研究一下你所更改的地方……
2008-11-09 21:23
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
有意思
------

    同一个程序,一字不差。放到EditPlus里编译运行——因为新下载的,所以今天用这个写的,就正常。可是放到WIN-TC中运行,输出时数字就少了个1,而且格式也变了。真奇怪。

    风居住的街道,呵,你推荐我用这个编译的,你能解释一下为什么吗?如有高手,也希望试验一下,有意思。最好能告诉我为什么,怎么解决,为什么代码却不通用?也没用太特殊的代码呀?
2008-11-09 21:32
nhuzwj
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-11-5
收藏
得分:0 
我更改后用win-TC运行正常的,不更改的话也是少一个1
2008-11-09 21:47
goodplayboy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-11-9
收藏
得分:0 
/*******************************************************************************

        从键盘上输入8个数字和9个字母,要求顺序混乱,然后将8个数字升序排列后以2
    *4的矩阵形式输出,9个字母降序后以3*3的矩阵形式输出.

*******************************************************************************/
#include "string.h"
void main()
{
    char ch, num[17], character[17];
    unsigned char i = 0, j = 0, k = 0;

    memset(num, 0, sizeof(num));
    memset(character, 0, sizeof(character));
    
    for(i=0; i<17; i++)
    {
        printf("please input:\n");
        ch = getchar();
        getchar();
        if((ch>=0x30) && (ch<=0x39))
        {
            num[j++] = ch;
        }
        else
        {
            character[k++] = ch;
        }
    }

    printf("input complete!\n");

    for(i=0; i<8; i++)
    {
        for(j=i+1; j<8; j++)
        {
            if(num[i] > num[j])
            {
                ch = num[j];
                num[j] = num[i];
                num[i] = ch;
            }
        }
        if((i+1)%2 == 0)
        {
            printf("%c  %c\n", num[i-1], num[i]);
        }
    }

    for(i=0; i<9; i++)
    {
        for(j=i+1; j<9; j++)
        {
            if(character[i] > character[j])
            {
                ch = character[j];
                character[j] = character[i];
                character[i] = ch;
            }

        }
        if((i+1)%3 == 0)
        {
            printf("%c  %c  %c\n", character[i-2], character[i-1], character[i]);
        }

    }

}
2008-11-09 22:02
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 风居住的街道 的帖子
呵,谢谢,糖炒粟子,现炒现卖——看了几篇文章,写了一个升序排序的小程序,就当练练手:
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int cmp(const void *a,const void *b)
{
    return(*(int *)a-*(int *)b);
}
int main(void)
{
    int a[10];
    int i;
    printf("input a[]:\n");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    qsort(a,10,sizeof(a[0]),cmp);
    for(i=0;i<10;i++)
        printf("%5d",a[i]);
    printf("\n");
    return 0;
}
2008-11-09 22:35
hokers
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2008-11-9
收藏
得分:0 
在网上找拉一段还不错  结合看更清楚

#include <stdio.h>
#include <stdlib.h>

int comp(const void *, const void *);

int main(int argc, char *argv[])
{
    int i;
    int array[] = {6, 8, 2, 9, 1, 0};

    qsort(array, 6, sizeof(int), comp);

    for (i = 0; i < 6; i ++) {
        printf("%d\t", array[i]);
    }
    printf("\n");

    return 0;
}

int comp(const void *p, const void *q)
{
    return (*(int *)p - *(int *)q);   
}
2008-11-09 23:51
快速回复:从键盘上输入8个数字和9个字母,要求顺序混乱,然后将8个数字升序排列 ...
数据加载中...
 
   



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

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