① 用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++實現,依次類推