1.数组元素逆置
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10],t,i,j;
//随机生成数组元素,并显示
printf("逆置前:");
for(i=0;i<10;i++)
{ a[i]= rand()%100;
printf("%4d",a[i]);
}
printf("\n");
//数组元素逆置,即对称位置交换for(i=0,j=9;i<j;i++,j--)
{t=a[i]; a[i]=a[j]; a[j]=t;}
printf("逆置后:");
for(i=0;i<10;i++)
{ printf("%4d",a[i]);
}
printf("\n");
}
2.静态查找
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10],t,i,j;
//随机生成数组元素,并显示
printf("数组元素:");
for(i=0;i<10;i++)
{ a[i]= rand()%100;
printf("%4d",a[i]);
}
printf("\n");
//输入查找的数
printf("请输入要查找的数:");
scanf("%d", &t);
//静态查找:从前往后依次遍历
for(i=0;i<10;i++)
if(a[i]==t) break;//找到并退出//输出查找结果
if(i<10)
printf("%d在数组a[%d]中。
\n",t,i);
else
printf("%d不在a数组中。
\n",t); }
3.二分查找:前提数组有序
#include <stdio.h>
#include <stdlib.h>
void sort(int a[], int n)
{
int i,j, t;
for(i=0;i<n-1;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1])
{t=a[j]; a[j]=a[j+1]; a[j+1]=t;}
}
int main()
{
int a[10],t,i,left,right,mid;
//随机生成数组元素
printf("数组元素:");
for(i=0;i<10;i++)
{ a[i]= rand()%100; }
//排序
sort(a,10);
//输出数组元素
for(i=0;i<10;i++)
{ printf("%4d",a[i]); }
printf("\n");
//输入查找的数
printf("请输入要查找的数:");
scanf("%d", &t);
//二分查找:每次与范围中间的数比较,根据结果缩小范围left=0; right=9; //起始范围
while(left<=right) //范围内有数据
{
mid=(left+right)/2; //计算中间数下标
if(t==a[mid])//找到退出
break;
else
if(t<a[mid])//范围缩小变为中间数的左侧
right=mid-1;
else
left=mid+1;//范围缩小变为中间数的右侧
}
//输出查找结果
if(left<=right)
printf("%d在数组a[%d]中。
\n",t,mid);
else
printf("%d不在a数组中。
\n",t);
}
4.删除指定位置(下标)数据
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10],t,i,j,n=10;
//随机生成数组元素并显示
printf("数组元素:\n");
for(i=0;i<n;i++)
{ a[i]= rand()%100;
printf("%4d",a[i]);
}
printf("\n");
//输入删除的下标
printf("请输入要删除数的下标:");
scanf("%d", &t);
//指定位置后一个开始,所有数据前移
for(j=t+1;j<n;j++)
a[j-1]=a[j];
n--; //数组元素有效个数减1 //输出删除后的数据
printf("删除后:\n");
for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\n");
}
//5.删除指定数据(值):找数据,删除(两步) #include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10],t,i,j,n=10;
//随机生成数组元素并显示
printf("数组元素:\n");
for(i=0;i<n;i++)
{ a[i]= rand()%100;
printf("%4d",a[i]);
}
printf("\n");
//输入删除的下标
printf("请输入要删除数的下标:"); scanf("%d", &t);
//找数据
//静态查找:从前往后依次遍历
for(i=0;i<n;i++)
if(a[i]==t) break; //找到并退出//根据查找结果
if(i<n)
{
//要删除的数的后一个数据前移
for(j=i+1;j<n;j++)
a[j-1]=a[j];
n--;
//输出删除后的数据
printf("删除后:\n");
for(i=0;i<n;i++)
printf("%4d",a[i]);
printf("\n");
}
else
printf("要删除的数%d不在a数组中。
\n",t); }
6.统计一行字母出现的次数
#include <stdio.h>
int main()
{
int n[26]={0},i;
char ch;
while((ch=getchar())!='\n')
{ if(ch>='A' && ch <='Z') ch+=32;
n[ch-'a']++;
}
for(i=0;i<26;i++)
if(n[i]>0) printf("%c字符出现次数为:%d\n",i+'a',n[i]); }
7.书后题9.31 插入一个数到有序数组中
#include <stdio.h>
int main()
{
int a[15],k,i,j,n;
//输入若干有序数
printf("请输入整数的个数(<=14):");
scanf("%d", &n);
for(i=0;i<n;i++)
scanf("%d", a+i);
printf("请输入需要插入的数:");
scanf("%d",&k);
//找位置:找第一个比k大的
for(i=0;i<n;i++) if(a[i]>k) break;
//空位置:对每个数后移,从后往前
for(j=n-1;j>=i;j--) a[j+1]=a[j];
//插入
a[i]=k;
n++;
for(i=0;i<n;i++)
printf("%d ", *(a+i)); }。