C语言练习


[例6.11] 选择法排序:将键盘输入的10个数据从大到小排序。
#define N 10
main()
{ int a[N],p,i,j,t;
printf("请输入%d个整数:\n",N);
for(i=0;i<N;i++)scanf("%d",&a[i]); /* 读入数据 */
for(i=0;i<N-1;i++)
{ p=i; /* 假定第i个数据最大,让p记录最大元素所在的位置 */
for(j=i+1;j<N;j++) /* 与剩余的数据进行比较 */
if(a[p]<a[j]) /* 若发现它比数组中的某元素还小,即它不是最大的 */
p=j; /* 记录最大元素的位置 */
if(p!=i) /* 剩余数据中有比i处的数据大,交换i、p两处的数据 */
{ t=a[i]; a[i]=a[p]; a[p]=t; }
}
printf("排序之后:");
for(i=0;i<N;i++) /* 输出排序之后的数据 */
printf("%d ",a[i]);
printf("\n");
}

[例6.12] 气泡法排序:将给定的数据按从小到大排序。
气泡法排序的基本思想是将两个相邻的数据进行比较,把小的调放到前头。
#define N 6
main()
{ int a[N],i,j,t;
printf("请输入%d个整数:\n",N);
for(i=0;i<N;i++) scanf("%d",&a[i]);
for(i=1;i<N;i++) /* 比较遍数:1~N-1 */
for(j=0;j<N-i;j++) /* 下标变化: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] 顺序查找:从键盘上输入学生姓名,显示他的分数。
#include <string.h>
#define COUNTS 5 /* 学生总数 */
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("请输入要查找的学生姓名:");
gets(name);
for(i=find=0;i<COUNTS; i++)
if(strcmp(name,student_name[i])==0)
{ find=1;
break;
}
if(find)
printf("%s 的成绩为:%d分。\n",student_name[i],student_score[i]);
else
printf("系统没有 %s 同学的成绩。\n",name);
}

[例6.14] 折半查找:从键盘上输入一个数据,在一有序数据(如从小到大排列)中进行查找。
#defin N 8
main()
{ int a[N]={5,13,17,42,46,55,70,94};
int left,right,mid;
int x;
printf("请输入要查找的数据:");
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] 无参数宏的使用
#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);
}

