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

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);
}
}
请各位大虾帮忙啦
...全文
232 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
帮什么忙,楼主?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧