if(i!
=k)
{temp=a[i];a[i]=a[k];a[k]=temp;}
}
printf("Thesortednumbers:
\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
return0;
}
方法二:
#include
#defineNUM10/*参与排序的数据个数*/
intmain()
{
intdata[NUM];/*存放参与排序的所有整数*/
inti,j,minValue,temp;
/*通过键盘输入待排序的整型数列*/
printf("\nEnter%dintegers.",NUM);
for(i=0;iscanf("%d",&data[i]);
}
/*选择排序*/
for(i=0;iminValue=i;
for(j=i+1;jif(data[j]minValue=j;
}
if(minValue!
=i){/*交换*/
temp=data[i];
data[i]=data[minValue];
data[minValue]=temp;
}
}
/*输出排序后的结果*/
printf("\nOrderinglistis:
\n");
for(i=0;iprintf("%5d",data[i]);
}
return0;
}
6.编写程序验证二分查找
#include
#defineNUM10
intmain()
{
intvalue[NUM]={12,23,30,45,48,50,67,82,91,103};/*非递减整型数列*/
intlow,high,mid,key;
printf("\nEnterakey:
");/*输入查找的数值*/
scanf("%d",&key);
/*利用二分查找在有序数列中查找key*/
low=0;high=NUM-1;
while(low<=high){
mid=(low+high)/2;
if(value[mid]==key)break;
if(value[mid]low=mid+1;
else
high=mid-1;
}
/*输出查找结果*/
if(low<=high)
printf("\n%disfoundat%d.",key,mid);/*确认break出口*/
else
printf("\n%disnotfound.",key);/*确认循环正常出口*/
return0;
}
7.将一个数组的值按逆序重新存放,例如,原来顺序为:
8,10,4,23,1。
要求改为:
1,23,4,10,8。
方法一
#include
#defineN10
intmain()
{
inta[N],i,j,temp;
for(i=0;iscanf("%d",&a[i]);
for(i=0,j=N-1;i{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(i=0;iprintf("%d",a[i]);
printf("\n");
return0;
}
方法二:
#include
#defineN10
intmain()
{
inta[N],i,temp;
for(i=0;iscanf("%d",&a[i]);
for(i=0;i{temp=a[i];
a[i]=a[N-i-1];/*第一个和最后一个交换,第二个和倒数第二个交换,......一直到N/2的时候,也就是数组的一半的时候*/
a[N-i-1]=temp;
}
for(i=0;iprintf("%d",a[i]);
printf("\n");
return0;
}
8.输入n×n阶,编程计算其两条对角线上各元素之和。
方法一:
#include
#defineN3
intmain()
{
inta[N][N],i,j,sum1=0,sum2=0,sum=0;
printf("请输入%d行%d列的矩阵:
\n",N,N);
for(i=0;i{
for(j=0;j{
scanf("%d",&a[i][j]);
}
}
for(i=0;i{
sum1=sum1+a[i][i];
sum2=sum2+a[i][N-1-i];
sum=sum1+sum2;
}
if(N%2==1)
sum=sum-a[N/2][N/2];
printf("主对角线元素之和为%d;\n副对角线元素之和为%d;\n主副对角线元素之和为%d\n",sum1,sum2,sum);
}
方法二:
#include
#defineN10
intmain()
{
inta[N][N],i,j,n,sum=0;
printf("请输入阶乘:
");
scanf("%d",&n);
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
{scanf("%d",&a[i][j]);
if(i==j||i+j==n-1)
sum+=a[i][j];
}
printf("对角线的和为%d\n",sum);
}
选做题
P85页-例4-1:
10名候选人参与竞选,编写程序,输入一组选举人的投票信息,统计每个候选人的得票数目及选举结果。
P87页例4-2:
编写程序统计从键盘输入一行文本中每个英文字母出现的频率。
3.模拟掷骰子游戏100次,编程统计并输出骰子的6个面各自出现的次数。
方法一:
#include
#include
#include
#defineN100
intmain()
{
ints[N];
inta,b,c,d,e,f,i;
srand(time(NULL));
for(i=0;is[i]=rand()%6+1;
a=b=c=d=e=f=0;
for(i=0;i{
if(s[i]==1)
a++;
elseif(s[i]==2)
b++;
elseif(s[i]==3)
c++;
elseif(s[i]==4)
d++;
elseif(s[i]==5)
e++;
elseif(s[i]==6)
f++;
}
printf("1点出现的次数为:
%d\n",a);
printf("2点出现的次数为:
%d\n",b);
printf("3点出现的次数为:
%d\n",c);
printf("4点出现的次数为:
%d\n",d);
printf("5点出现的次数为:
%d\n",e);
printf("6点出现的次数为:
%d\n",f);
}
方法二:
#include
#include
#include
#defineN100
intmain()
{
intr[6]={0};
inti;
srand(time(NULL));
for(i=0;ir[rand()%6]++;
for(i=0;i<6;i++)
printf("%d点:
%5d次\n",i+1,r[i]);
return0;
}
4.打印出以下杨辉三角形(要求打印出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
∶
//杨辉三角
#include
#defineN100
intmain()
{
inta[N][N]={0},i,j,n;
while(n<=0)
{printf("请输入打印的杨辉三角行数");
scanf("%d",&n);}
for(i=0;i{a[i][0]=1;a[i][i]=1;}
for(i=2;ifor(j=1;j<=i;j++)
{a[i][j]=a[i-1][j-1]+a[i-1][j];}
for(i=0;i{for(j=0;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");}
}