① 用c语言编写冒泡法比较10个数的大小的程序。
举几个例子:
1.输入10个整数存入数组中,然后把它们从小到大排列并放在同一数组中。(思路:先找出最小的,放在第一个位置,为了防止把原先的数覆盖掉,可以把原先的第一个数和最小数的位置互换)。
main()
{
int array[10];
int i,j,min,stmp;
for(i=0;i<10;i++) scanf("%d",&array[i]);
for(i=0;i<9;i++)
{
min=array[i];
for(j=i+1;j<10;j++)
if(min>array[j]) /*里面的4行语句很重要*/
{
min=array[j];
stmp=array[i];
array[i]=array[j];
array[j]=stmp;
}
}
for(i=0;i<10;i++) printf("%d ",array[i]);
printf("\n");
}
分析:先让第一个值作为基准,如果后面有比它小的,那么就把这两个数互换一下,同时把基准换成小的值。两个数互换应该这样(stmp=a;a=b;b=stmp;),而不是(a=b;b=a;),想想这是为什么?必须要用一个变量作为桥梁。这种一个一个的把最小的放在前面的排序方法,我们形象的叫做冒泡法。
2.输入一行字符存入数组,然后把他们反序存入到同一数组中。
#include "stdio.h"
main()
{
char c,stmp,array[80];
int i=0,j;
while((c=getchar())!='\n') /*注意这儿的用法*/
array[i++]=c;
array[i]='\0'; /*为什么要加'\0'?是否可以不加?*/
for(j=i-1;j>=i/2;j--)
{
stmp=array[j];
array[j]=array[i-1-j];
array[i-1-j]=stmp;
}
for(i=0;array[i]!='\0';i++) printf("%c",array[i]);
printf("\n");
}
3.一个已经排好序的数组,输入一个数,利用二分法把这个数从原数组中删除,数组顺序保持不变。如原数组为1,3,5,7,9,11,13,15,17,19,待删除的数为13,则输出为1,3,5,7,9,11,15,17,19。
二分法:每次都是判断中间的数是否满足要求,若满足则删除,若不满足,则把该数当作边界,然后再找中点。例如这一题,第一次的是10个数的中点,为11,发现11<13,则找11-19的中点15,发现15>13,再找11-15的中点13,正好,则删除。
main()
{
int array[10]={1,2,3,5,8,15,20,30,100,200};
int first=0,end=9,middle=(first+end)/2,num,i;
scanf("%d",&num);
while(array[middle]!=num) /*注意这里面的三行代码*/
{
if(array[middle]>num) end=middle;
else first=middle;
middle=(first+end)/2;
}
for(i=0;i<9;i++)
{
if(i>=middle) array[i]=array[i+1];
printf("%d ",array[i]);
}
printf("\n");
}
程序没有考虑当输入的数在原先数组中没有时怎么处理。如果要考虑这个问题,程序该怎么改动呢?
② C语言比较十位数的大小
for(i;i<10;i++)
{
for(j=i;j<10;j++)
{
b[i]=max(b[i],b[j]);
}
这里出了问题,你应该先保留b[i]的值,否则的话如果b[j]值较大,在进入循环后b[i]就会被替换为b[j],而b[j]并没有换为b[i]),也就是说此时b[i]和b[j]都是b[j]的值(尽管你的max函数进行了交换,但因为主函数中是for循环的缘故还是会全部替换为最大值所以干脆就不在max函数中进行交换,换到主函数中,而且你要注意,只有max返回值不是b[i]时才需要交换),所以当循环结束时,数组全部元素的值都变为最大元素的值,我修改了你的代码,你可以参考一下。
#include<stdio.h>
#include<stdlib.h>
int max(x,y)/* printf max is y */
{
int a;
(x>y)?(a=x,x=y,y=a):y;
return y;
}
main()
{
int a,b[10],i=0,j=0;
printf("\nEnter 10 numbers:\n");
for(i=0;i<10;i=i+1){(关于这里,我想说你打那么长的代码不累吗?万一数组长度是100你不得累死,用循环比较省事);
scanf("%d",&b[i]);
}
i=0;
for(i;i<10;i++){
for(j=i;j<10;j++) {
a=b[i];
b[i]=max(b[i],b[j]);
if(b[i]!=a)
b[j]=a;
}
printf("%d>",b[i]);
}
printf("\nPress any key to end!\n");
system("pause");
}
③ C语言:实现10个数之间大小的比较,输出最大值和最小值
int a[10],t;
for(int i=0;i<9;i++)
for(int j=1;j<10;j++)
{a[i]=a[i]>a[j] ? (t=a[i];a[i]=a[j];a[j]=t) }
printf("max: %d",a[9]);
printf("min: %d",a[0]);
④ C语言比较10个数的大小 里面有负数就不行
#include <stdio.h>
int main()
{
int a[10];
int min,max,i;
printf("请输入10个数字:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max=min=a[0];
printf("\n");
for(i=0;i<10;i++)
{ if(a[i]>max)max=a[i];
if(a[i]<min) min=a[i];
}
a[0]=max;
a[9]=min;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
//输入负数的时候,负号和数字之间不要有空格
⑤ 急求:C语言中如何比较几个数的大小
顺便复习了一下C的冒泡排序 谢谢1楼2楼!
⑥ C语言比较数的大小
如果是要找出最大值和最小值,可用下面的方法(比较简单可行而且可以适合比较多的数):
#include "stdio.h"
main()
{int i,a[5];//这个随你定义要比较的数的多少;存放在数组中;
int max,min;//存放最值;
printf("input numbers:\n");//输入数
for(i=0;i<5;i++)
scanf("%d",&a[i]);
max=min=a[0];//赋初值;
for(i=1;i<5;i++)
{if(a[i]>max) max=a[i];//大值给max;
if(a[i]<min) min=a[i];}//小值给min;
printf("max=%d\nmin=%d\n",max,min)://输出;
}
⑦ 十个数比较大小,用c语言怎么比 输出最大数和最小数。
#include<stdio.h>
voidmain(){
inti,max,min,n;
scanf("%d",&n);
max=n;min=n;
for(i=1;i<10;i++){
scanf("%d",&n);
if(max<n)max=n;
if(min>n)min=n;
}
printf("最大数:%d,最小数:%d",max,min);
}
运行示例:
⑧ c语言,比较一个数和十个数大小,给这十个数编号,依次比较这个数和十个数的大小,大于就就进行下一个
#include<stdio.h>
intmain(){
intnum=4,i;
intnums[]={4,3,0,1,5,8,9,0,5,0};
for(i=0;i<10;i++)
if(num<nums[i])printf("%d ",i);
return0;
}
⑨ C语言如何将10个数按数值大小 从大到小排列
常用的有冒泡法和选择法。
冒泡法:
int i=0,j=0,t=0,a[10]={0};
for(;i<9;i++)
for(;j<9-i;j++)
if(a[i]<a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
⑩ c语言,10个数比较大小
以第一次循环为例,i=0
第二个for循环时找到数组里面最大的数的位置 k=j
找到位置之后 通过 if(k!=i) 要把这个最大的, 和数 x[i] 换位置, 当i=k时 找到的数就是x[i], 不用换
最大数和x[0]换, 第二大数和x[1]换 通过i++实现,依次类推