strsort函数c语言 c语言stoi函数用法( 四 )


printf("Sort array: ");
puts(s);
}
扩展资料:
printf函数使用注意事项
1、域宽
%d:按整型数据的实际长度输出 。
如果想输出指定宽度可以指定域宽,%md--gt;m域宽,打印出来以后,在控制台上,显示m位;
如果我们要打印的数的位数如果超过我们设定m则原样输出;
如果我们要打印的数的位数如果小于我们设定的位数 , 则补空白,具体如下:
如果m为正数,则左对齐(左侧补空白);
如果m为负数,则右对齐(右侧补空白) 。
2、转义字符
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示 。
如:printf("%f%%",1.0/3);输出结果:0.333333% 。
C语言的“冒泡排序”怎么做?sort(str)什么意思?对于冒泡:
可以这样考虑
外层循环式控制一共有多少个泡需要排序, 这个当然要用循环
内层循环控制把某一个泡放到正确的位置, 这个也要用循环, 因为这个泡要和所有未排序泡比较一遍, 然后才能知道自己应该处的位置
这里有两个点,明白了的话,这道题就明白了
1. 外层循环: 仅仅控制一共有多少个泡需要排序, 比如代码中a[10], 一共是10个元素
2. 内层循环: 仅仅控制把当前最大的泡放到最后, 也就是一次内层循环,仅仅把最大的那个泡放到最后了而已
把1和2综合起来看
当j=0时,把a数组10个元素中最大的泡放到最后
当j=1时,把a数组10个元素中第二大的元素放到倒数第二个位置
依次类推..直到第10大的元素,即最小的元素放到正数第一个位置
楼主可以这样测试一下,会更加清晰,把第一个循环去掉, 内层循环改为:
for(i=0; i 10; i++) 相当于仅执行上述j=0的一次内层循环, 这个循环的作用是把最大的元素放到最后
在解释下内层循环为什么是 i10-j 其实这个不难理解
当j=0时, 相当于 for(i=0;i10;i++) 也就是遍历所有元素,把最大的放到最后
当j=1时, 相当于 for(i=0;i9;i++) 这次仅仅遍历前9个元素,把前9个元素中最大的放到第九个位置, 因为第10个位置已经是最大的了,不用再次比较了.
如果实在是对嵌套循环理解不了,还有个简单的办法,把外层循环解开:
也就是可以这么写:
//----------------------------------------
for(i=0;i10;i++)//等价于j=0
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
for(i=0;i9;i++)//等价于j=1
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
...//同上,仅仅是把i后面的值递减,直到
for(i=0;i1;i++)//等价于j=9
if (a[i]a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
上面这一系列代码,等价于原来的双层嵌套循环
sort(str) 就是用户自定义的冒泡排序函数的函数名,str作为函数参数
C语言要求通过键盘输入5字符串 , 再调用函数sort给字符串从小到大排列,再调用print函数完成字符串输出 。看你代码原意,是想定义一个字符串数组strs 。
但是你写的char *strs[5];表示的是一个维度为5的指针数组 。
你可以把strs直接改成字符串数组,char strs[5][N],但你后面的函数参数类型也要跟着改 。
如果你不想改动其他函数,还继续使用指针数组 , 也是可以的 。
你可以用动态内存来写输入部分:(头文件添加malloc.h)
#include stdio.h
#include malloc.h
#define N 100//每个字符串最大长度
int main()
{
int i;
char *strs[5];
for(i=0;i5;i++)
{
strs[i]=(char *)malloc(sizeof(char)*(N+1));
if(strs[i])
scanf("%s",strs[i]);

推荐阅读