一维数组的表现形式
行如:数组名+[常量表达式]
代码展示:
//表现形式1
array[12]//表示共有12个数
//数组下标范围为[0,11]
//表现形式二
#define N 12
array[N]//与array[12]表示的含义相同
静态存储的key word——static
表示的方法:static int a;默认初始化为0,在a被赋值的情况下又不一样
具体可看这个链接,比较详细!http://t.csdn.cn/ozjvG
http://t.csdn.cn/ozjvG
int f(int n)
{
static int a=1;//表示a不会被初始化,会被留下来
n=+a++;
return n;
}
int main()
{
int a=3,s;
s=f(a);//s=3+1=4
s=s+f(a);//s=4+3+2=9
printf("%d",s)
}
随机数种子
随机输入一些数值,在C语言中要用到随机函数rand()和srand()必须使用#include<stdlib.h>和#include<time.h>的头文件 。
如果要生成一个区间内的随机数的写法为:int x=1+rand()%n表示:[1,n-1]
代码展示:
int a[12];
for(int i=0;i<12;i++)
{
a[i]={60+rand()%146}//表示生成的数组范围在[60,205]
}
一维数组的排序
- 冒泡排序法
- 折半排序法
以下的代码将前面两种方法都用到了,而且可以实现多次查询!
代码展示:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 100
int main()
{
srand(time(NULL));
int array[N];
printf("排序前:");
for (int i = 0; i < N; i++)
{
array[i] = { 66 + rand() % 600 };
printf("%5d", array[i]);
}
printf("\n");
int t;
printf("由大到小排序:");
for (int i = 0; i < N; i++)
for (int j = 0; j < N - 1 - i; j++)
{
if (array[j] < array[j + 1])
{
t = array[j];
array[j] = array[j + 1];
array[j + 1] = t;
}
}
for (int i = 0; i < N; i++)
printf("%5d", array[i]);
printf("\n数据查询\n");
int X;
int top, mid, bottom, flag = 0, location = 0;
printf("请输入你要查的数据:");
while (flag == 0)
{
scanf_s("%d", &X);
top = N - 1;
bottom = 0;
while (bottom <= top)
{
mid = (bottom + top) / 2;
if (X == array[mid])
{
location = mid;
printf("%d in array[%d].\n", X, location);
printf("----查找完成----\n", X, location);
flag = 1;
break;
}
else if (X < array[mid])
bottom = mid + 1;
else
top = mid - 1;
}
if (bottom > top)
printf(" %d 不存在!\n请重新输入你要查的数据:", X);
}
system("pause");
return 0;
}
小牛试刀🔪
例1:
8个学生的大学计算机成绩分别为:78,58,69,87,96,74,81,60。求这八个学生的平均成绩以及大于平均成绩的人数。
#include<stdio.h>
#include<stdlib.h>
#define N 8
int main()
{
int t,grades[N] = { 78,58,69,87,96,74,81,60 };
float sum = 0;
printf("8位大学生的成绩为:");
for (int i = 0; i < N; i++)
{
printf("%5d", grades[i]);
}
printf("\n");
for (int i = 0; i < N; i++)
{
sum = sum+grades[i];
}
float avergrade = sum / 8.0;
printf("8位大学生的平均成绩位:%.2f", avergrade);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N - 1 - i; j++)
{
if (grades[j] < grades[j + 1])
{
t = grades[j];
grades[j]= grades[j + 1];
grades[j + 1] = t;
}
}
}
printf("\n分数由高到低:");
for (int i = 0; i < N; i++)
printf("%5d", grades[i]);
printf("\n");
int num = 0;
for (int i = 0; i < N; i++)
{
if (grades[i] > avergrade)
{
num = num + 1;
}
}
printf("大于平均成绩的有%d人\n",num);
system("pause");
return 0;
}
例2: 使用随机函数初始化一个具有20个元素的一维数组,使其值在60到205之间,输出这20个数组元素,每行输出5个。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 20
int main()
{
srand(time(NULL));
int array[N];
int num = 0;
for (int i = 0; i < N; i++)
{
array[i] = { 60 + rand() % 146 };
printf("%5d", array[i]);
num++;
if(num % 5 == 0)
printf("\n");
}
system("pause");
return 0;
}
例3:
有一维整型数组array:{96,35,12,58,78,90,587,21,0,-65,106,52},编程实现用冒泡排序法对array按照由大到小的顺序进行排序,输出排序前后的数组。
#include<stdio.h>
#include<stdlib.h>
#define N 12
int main()
{
int t,array[12] = { 96,35,12,58,78,90,587,21,0,-65,106,52 };
printf("排序前:");
for (int i = 0; i < N; i++)
printf("%5d",array[i]);
printf("\n");
printf("从大到小排序:");
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N - 1 - i; j++)
{
if (array[j] < array[j + 1])
{
t = array[j];
array[j] = array[j + 1];
array[j + 1] = t;
}
}
}
for (int i = 0; i < N; i++)
printf("%5d",array[i]);
printf("\n");
system("pause");
return 0;
}
例4:
某数组已按照从大到小的顺序排列,其数组元素为:{98,87,81,79,52,49,33,21,18,6},编程使用二分查找法查找81是否在该数组中,若在该数组中,输出“81在该数组中的第X位”(X为数组中的第几个数),否则输出“81不在数组中”。
#include<stdio.h>
#include<stdlib.h>
#define N 10
int main()
{
int top = N - 1;//
int bottom = 0;//
int array[N] = { 98,87,81,79,52,49,33,21,18,6 };
printf("排序前:");
for (int i = 0; i < N; i++)
printf("%5d", array[i]);
int X, location,flag=0;
printf("\n请输入要查找的值:");
scanf_s("%d", &X);
while (bottom <= top)
{
int mid = (top + bottom) / 2;
if (X == array[mid])
{
flag = 1;
location = mid;
printf("%d为数组中的第%d个数\n", X, location + 1);
break;
}
else if (X > array[mid])
top = mid - 1;
else
bottom = mid + 1;
}
if (flag == 0)
printf("%d不存在!\n", X);
else
printf("%d在数组array[%d]中\n", X, location );
system("pause");
return 0;
}
文章介绍了C语言中一维数组的不同表示形式,包括静态存储的`static`关键字的使用。通过示例展示了如何初始化和操作数组,以及如何生成随机数。此外,还详细讲解了冒泡排序和二分查找算法,并提供了具体的代码实现,包括数组的升序和降序排序,以及在已排序数组中使用二分查找法查找特定元素。
http://t.csdn.cn/ozjvG

603

被折叠的 条评论
为什么被折叠?



