C語(yǔ)言練習(xí)


[例6.11] 選擇法排序:將鍵盤輸入的10個(gè)數(shù)據(jù)從大到小排序。
#define? N? 10
main()
{ int a[N],p,i,j,t;
printf("請(qǐng)輸入%d個(gè)整數(shù):\n",N);
for(i=0;i<N;i++)scanf("%d",&a[i]); /* 讀入數(shù)據(jù) */
for(i=0;i<N-1;i++)
{? ? p=i; /* 假定第i個(gè)數(shù)據(jù)最大,讓p記錄最大元素所在的位置 */
for(j=i+1;j<N;j++) /* 與剩余的數(shù)據(jù)進(jìn)行比較 */
? ? if(a[p]<a[j]) /* 若發(fā)現(xiàn)它比數(shù)組中的某元素還小,即它不是最大的 */
p=j; /* 記錄最大元素的位置 */
if(p!=i) /* 剩余數(shù)據(jù)中有比i處的數(shù)據(jù)大,交換i、p兩處的數(shù)據(jù) */
{? t=a[i];? a[i]=a[p];? a[p]=t;? }
}
printf("排序之后:");
for(i=0;i<N;i++) /* 輸出排序之后的數(shù)據(jù) */
printf("%d? ",a[i]);
printf("\n");
}

[例6.12] 氣泡法排序:將給定的數(shù)據(jù)按從小到大排序。
氣泡法排序的基本思想是將兩個(gè)相鄰的數(shù)據(jù)進(jìn)行比較,把小的調(diào)放到前頭。
#define? N? 6
main()
{ int a[N],i,j,t;
printf("請(qǐng)輸入%d個(gè)整數(shù):\n",N);
for(i=0;i<N;i++) scanf("%d",&a[i]);
for(i=1;i<N;i++) /* 比較遍數(shù):1~N-1 */
? for(j=0;j<N-i;j++) /* 下標(biāo)變化:0~N-i-1 */
? ? if(a[j]>a[j+1])
{? ?t=a[j];? a[j]=a[j+1];? a[j+1]=t;? }
printf("排序后:");
for(i=0;i<N;i++)
printf("%d? ",a[i]);
printf("\n");
}

[例6.13] 順序查找:從鍵盤上輸入學(xué)生姓名,顯示他的分?jǐn)?shù)。
#include <string.h>
#define? COUNTS? 5 /* 學(xué)生總數(shù) */
main()
{ char student_name[COUNTS][20]={"zhanshan","lishi","wangwu","zhaoliu","tianqi"};
int student_score[COUNTS]={80,85,92,75,69};
int i,find;
char name[20];
printf("請(qǐng)輸入要查找的學(xué)生姓名:");
gets(name);
for(i=find=0;i<COUNTS; i++)
if(strcmp(name,student_name[i])==0)
{ find=1;
break;
}
if(find)
printf("%s 的成績(jī)?yōu)椋?d分。\n",student_name[i],student_score[i]);
else
printf("系統(tǒng)沒(méi)有 %s 同學(xué)的成績(jī)。\n",name);
}

[例6.14] 折半查找:從鍵盤上輸入一個(gè)數(shù)據(jù),在一有序數(shù)據(jù)(如從小到大排列)中進(jìn)行查找。
#defin N 8
main()
{ int a[N]={5,13,17,42,46,55,70,94};
int left,right,mid;
int x;
printf("請(qǐng)輸入要查找的數(shù)據(jù):");
scanf("%d",&x);
left=0;right=N-1;
while(left<=right)
{ mid=(left+right)/2;
if(a[mid]>x)right=mid-1;
else if(a[mid]<x)left=mid+1;
else break;
}
if(left<=right) printf("已找到,它的位置是%d。\n",mid);
else printf("未找到。\n");
}

[例8.1] 無(wú)參數(shù)宏的使用
#define? PI? 3.14
main()
{ float r,s;
scanf("%f",&r);
s=PI*r*r;
printf("PI=%f,r=%f,s=%f\n",PI,r,s);
}

[例8.2] 多層次的宏
#define R 2.0
#define PI 3.14
#define S PI*R*R
main()
{
printf("S=%f\n",S);
}

