编写C程序:用指针数组操作,将输入的5个字符串按从小到大的顺序输出

如题所述

// chapter7.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string.h>
#include <ctype.h>

void order(int * string) //把数组按从小到大排列,返该数组首地址 输入0结束
{
int i,j,temp;
int n = 0; //计算输入数组的长度(包括结束数0)
int * p = string;
while(0 != *p++)
{
n++;
}

//起泡法排序
p = string;
for(i = 0;i < n; i++)
{
for(j = 0;j < n-i; j++)
{
if(*(p+j) > *(p+j+1))
{
temp = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = temp;
}
}
}
}

int main(int argc, char* argv[])
{
/*已有一个已排好序的数组,要求输入一个数后,
按原来排序的规律将它插入数组中。

特殊要求:任意输入一个数列,先排序由小到大
然后再随意插入一个数,按有小到大排列

思路1:输入数接着存入数组,从新排列。(简单)
思路2:排列完大小后插入(复杂)。

本程序采用思路1.
*/
int a[256];
int i = 0;
//p = a;
do
{
scanf("%d",&a[i]);
}
while(0 != a[i++]); //正确的输入方式

order(a);
i = 0;
do
{
printf("%d ",a[i]);
}
while(0 != a[i++]); //正确的输出方式
putchar('\n');

return 0;
}

/*
为什么while(0 != *p++) 把*p++拆开就不能输入了?
{
scanf("%d",p);
}

*/
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-06-02
//在主函数中输入10个的字符串,用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串
#include<stdio.h>
#define N 100
void sort(char *s[],int n);
#include<iostream>
#include<string>
using namespace std;
main()
{
char *s[10];
char a[10][N];
int i;
printf("请输入10个的字符串\n");
for(i=0;i<3;i++)
{
s[i]=a[i];
printf("输入第%d个字符串:",i+1);
scanf("%s",s[i]);
}
printf("排序之前的10个等长的字符串为:\n");
for(i=0;i<3;i++)
printf("%s\n",*(s+i));
sort(s,3);
printf("排序之后的输出如下:\n");
for(i=0;i<3;i++)
printf("%s\n",*(s+i));
system("pause");
}
void sort(char *s[],int n)//从小到大排列
{
char *t;
int i;
for(i=0;i<n-1;i++)
for(int j=0;j<n-1-i;j++)
if(strcmp(s[j],s[j+1])>0)
{
t=s[j];s[j]=s[j+1];s[j+1]=t;
}
}

编写C程序:用指针数组操作,将输入的5个字符串按从小到大的顺序输出
include <string.h> include <ctype.h> void order(int * string) \/\/把数组按从小到大排列,返该数组首地址 输入0结束 { int i,j,temp;int n = 0; \/\/计算输入数组的长度(包括结束数0)int * p = string;while(0 != *p++){ n++;} \/\/起泡法排序 p = string;for(i = 0;i <...

输入5个字符串,将它们储存在一个字符指针数组中,按从小到大得顺序排序...
void main(){ char a[5][20];char *p[5];int i,j;char *t;for(i=0;i<5;i++){ p[i]=a[i];gets(p[i]);} for(i=0;i<5;i++){ for(j=i+1;j<5;j++){ if(strcmp(p[i],p[j])>0){ t=p[i];p[i]=p[j];p[j]=t;} } } for(i=0;i<5;i++){ puts...

输入五个名字按照字母首位顺序输出C语言
思路,定义五个char*的变量,然后使用getchars()函数获取这五个名字,排序算法有冒泡排序、插入排序等多种方式,你如果不熟可以使用冒泡排序的算法,把这五个字符串排序,然后再输出。比较字符串时,需要先比较首字符,如果首字符一样,则通过指针后移比较。for(char* p=?,char* q=?;*p!=‘\\0...

将输入的5个数按大小顺序(小到大)排列
for(i=0;i<5;i++) \/*从小到大输出这5个数*\/ printf("%d ",a[i]);}

C语言程序题 从键盘接收5个字符串,然后按字典顺序排序后输出 程序如 ...
main(){ char * str[5], strl[5][80]; \/\/定义字符指针数组,用于指向多个字符串 char *temp;int i, j;for (i = 0; i < 5; i++){ gets(strl[i]); \/\/从键盘上接收多个字符串 str[i] = strl[i]; \/\/让指针数组中的字符串指针指向输入的串 } for (i = 0; i < 4; i+...

...键盘输入5字符串,再调用函数sort给字符串从小到大排列,再调用print函...
但是你写的char *strs[5];表示的是一个维度为5的指针数组。你可以把strs直接改成字符串数组,char strs[5][N],但你后面的函数参数类型也要跟着改。如果你不想改动其他函数,还继续使用指针数组,也是可以的。你可以用动态内存来写输入部分:(头文件添加malloc.h)include <stdio.h>#include <...

c语言利用数组指针方法 输入五个数字求出最小值 将最小值和数组第一个...
include <stdio.h>#define N 5int main(){int arr[N];int i,min,j,tmp;printf("输入5个数字: ");for(i=0;i<N;i++)scanf("%d",&arr[i]);for(i=0,min=arr[0];i<N;i++){if(min>arr[i]){min=arr[i];j=i;}}arr[j]=arr[0];arr[0]=min;printf("输出结果为: ")...

C语言:编写程序,把字符数组中的字母按由小到大 的顺序排列并输出
const void *b) { return *(char*)a - *(char*)b; \/\/ 这里记住一定要用排序的元素类型的指针做强制装换并且再取指针指向的值。}int main() { char s[] = "kjferu21398dyfkaqpoia"; qsort(s, strlen(s), 1, cmp); printf("%s", s); return 0;} ...

C语言:输入5个数,用调用函数的方法,从小到大排序 用简单点的
printf("请输入五个数(逗号隔开):");scanf("%f,%f,%f,%f,%f",&a[0],&a[1],&a[2],&a[3],&a[4]);sort(a,5);printf("排序后为:");for(i=0; i<5; i++)printf("%.2f ",a[i]);printf("\\n");} 或者三个数的。void sort(int *a, int *b, int *c){ int tmp...

...按字母顺序(即按ASCII码从小到大的顺序)排列输出
C* q; int i,j; printf("Input five countries name:\\n"); \/*循环输入国家名并存储在结构数组中*\/ for(i=0;i<5;i++) { scanf("%s",&raw[i].cou); p[i]=&raw[i]; \/* strupr(p[i].cou);*\/ } \/*冒泡排序将国家名称排序*\/ for(i=0;i<4;i++) for(j=0;j<4-i;j++) { \/...

相似回答