救命:一个超菜的函数问题

sandberg0411 2004-12-25 11:30:45
题目是:写一函数,用起泡法对输入的10个字符按有小到大的顺序排列
程序如下:
#include <stdio.h>
void q(char t[],int j)
{
int k;
char u;
for (k=1;k<=9;k++)
{
for (j=1;j<=10-k;j++)
if (t[j]>t[j+1])
{
u=t[j];t[j]=t[j+1];t[j+1]=u;
}
}
printf("结果:\n");
for (j=1;j<11;j++)
printf("%c ",t[j]);
}

void main()
{
int i;
char s[11];
printf("输入10个字符:\n");
for (i=1;i<11;i++)
{
scanf("%c",&s[i]);
if ((s[i]<65&&s[i]>90)||(s[i]<97&&s[i]>122))
printf("请输入字符\n");
else
q(s,11);
}
}
请各位大虾帮忙啦
...全文
204 点赞 收藏 15
写回复
15 条回复
Ant_Caesar 2004年12月27日
late
回复 点赞
Ryandol 2004年12月27日
都解决了。
回复 点赞
goodluckyxl 2004年12月27日
冒泡
void q(char t[],int j)
{
assert( t != NULL );
assert( j > 0 );
for( int i = 0; i < j; ++i )
for( int k = i; k < j; ++k )
{
if( a[i] > a[k] )
{ int temp = a[i], a[i] = a[j], a[j] = temp; }
}
}
回复 点赞
lovefly_fanny 2004年12月27日
############核心是################
for ( int i=0; i<SIZE-1; i++ )
for ( int j=0; j<SIZE-1; j++ )
if ( n[j] > n[j+1] ) {
hold = n[j];
n[j] = n[j+1];
n[j+1] = hold;
}
###################################
这不是冒泡法的核心,复杂度O(N*N),
相比冒泡法效率自然低一点了

回复 点赞
beyondtkl 2004年12月27日
呵呵 還有什麼問題麼??

樓主 可以用畫圖得方法把前後得狀態畫出來。。。
回复 点赞
260005065 2004年12月26日
帮你改了一遍:
#include <stdio.h>
void q(char t[],int k){
int i, j;
char u;
for (i=0; i<k; i++){
for (j=k-1; j>i; j--){ //这
if (t[j] < t[j-1]){
u = t[j];
t[j] = t[j-1];
t[j-1] = u;
}
}
}
printf("结果:\n");
for (j=0; j<k; j++)
printf("%c ",t[j]);
}

void main(){
int i;
char s[10];
printf("输入10个字符:\n");
for(i=0;i<10;){
scanf("%c",&s[i]);
getchar();
if((s[i]>=65&&s[i]<=90)||(s[i]>=97&&s[i]<=122)){ //含=
i++;
}
else{
printf("请输入字符\n");
}
}
q(s,10);
}
回复 点赞
pingfanhuan 2004年12月26日
数组下标从零开始。
算法思想:n个元素,外循环作n-1次(因为每做一次有一个元素沉底)内循环每次做i=0到i<(n-1)-j次比较。
回复 点赞
liem 2004年12月26日
void q(char t[],int j)//以j作为参数,但在函数里用j作循环变量????通常这是的j用来指
//示数组大小,且在函数中不作改变。改用int size
{
int k;//增加j:int k,j;
char u;
for (k=1;k<=9;k++)//C与C++数组的下标从0开始:k=0;k<size-1;k++
{
for (j=1;j<=10-k;j++)//10-k?10是字符个数,改为size:j=0;j<size-k-1;j++
if (t[j]>t[j+1])
{
u=t[j];t[j]=t[j+1];t[j+1]=u;
}
}
//通常一个函数完成一个功能,下面的输出可以在主函数中执行
printf("结果:\n");
for (j=1;j<11;j++)//从0开始,j=0;j<size;j++
printf("%c ",t[j]);
}
回复 点赞
hy198508 2004年12月26日
楼主的程序也可以运行,无错误.
只是数组最好从0开始的
下面是我的程序:
#include <stdio.h>
#include <string.h>
void q(char t[],int i)
{
int k,j;
char u;
for (k=0;k<=i-2;k++)
{for (j=0;j<=i-2-k;j++)
if (t[j]>t[j+1])
{u=t[j];
t[j]=t[j+1];
t[j+1]=u;
}
}

printf("结果:\n");
for (j=0;j<10;j++)
printf("%c ",t[j]);
}

void main()
{
int i;
char s[10];
do

{ printf("输入10个字符:\n");
for (i=0;i<10;i++)
scanf("%c ",&s[i]);
}while((s[i]>=65&&s[i]<=90)||(s[i]>=97&&s[i]<=122));//用do-while要比楼主的if-
q(s,10); // else好一点哦!
}
回复 点赞
oniyaa 2004年12月26日
############################字符######################
#include<iostream.h>

const int SIZE=10;
void bubble ( char [] );

int main()
{
char array [ SIZE ] = { 0 };
cout<<"\nEnter Ten numbers , I will tell you order .\n\n";

for ( int i=0; i<SIZE; i++ ) {
cout<<"Enter number [" << i + 1 << "] : ";
cin>>array [ i ];
}

cout<<"\nThe order is \n\n";
bubble ( array );

}


void bubble ( char n[] )
{
int hold;
for ( int i=0; i<SIZE-1; i++ )
for ( int j=0; j<SIZE-1; j++ )
if ( n[j] > n[j+1] ) {
hold = n[j];
n[j] = n[j+1];
n[j+1] = hold;
}

for ( int k=0; k<SIZE; k++ )
cout<<n [ k ]<<'\t';

}
回复 点赞
xzhangyu 2004年12月26日
来晚了哦!楼上的说的差不多了哦!
回复 点赞
oniyaa 2004年12月26日
复用复用复用
############核心是################
for ( int i=0; i<SIZE-1; i++ )
for ( int j=0; j<SIZE-1; j++ )
if ( n[j] > n[j+1] ) {
hold = n[j];
n[j] = n[j+1];
n[j+1] = hold;
}
###################################
回复 点赞
oniyaa 2004年12月26日
#include<iostream.h>

const int SIZE=10;
void bubble ( int [] );

int main()
{
int array [ SIZE ] = { 0 };
cout<<"\nEnter Ten numbers , I will tell you order .\n\n";

for ( int i=0; i<SIZE; i++ ) {
cout<<"Enter number [" << i + 1 << "] : ";
cin>>array [ i ];
}

cout<<"\nThe order is \n\n";
bubble ( array );

}


void bubble ( int n[] )
{
int hold;
for ( int i=0; i<SIZE-1; i++ )
for ( int j=0; j<SIZE-1; j++ )
if ( n[j] > n[j+1] ) {
hold = n[j];
n[j] = n[j+1];
n[j+1] = hold;
}

for ( int k=0; k<SIZE; k++ )
cout<<n [ k ]<<'\t';

}
回复 点赞
260005065 2004年12月25日
void main()
{
int i;
char s[11];
printf("输入10个字符:\n");
for (i=1;i<11;)
{
scanf("%c",&s[i]);
getchar();
if ((s[i]>65&&s[i]<90)||(s[i]>97&&s[i]<122)){
i++;
}
else{
printf("请输入字符\n");
}
}
q(s,11);
}
还有,数组是从0开始的。
回复 点赞
Henry0 2004年12月25日
帮什么忙,楼主?
回复 点赞
发动态
发帖子
新手乐园
创建于2007-09-28

1.4w+

社区成员

4.1w+

社区内容

C/C++ 新手乐园
社区公告
暂无公告