一维数组的常用算法源代码

合集下载

c语言一维数组自定义方式

c语言一维数组自定义方式

c语言一维数组自定义方式
C语言中,一维数组可以通过以下三种方式自定义:
1.直接指定数组长度
●int arr[5];//定义一个长度为5的整型数组
2.通过初始化列表指定数组元素
●int arr[]={1,2,3,4,5};//定义一个长度为5的整型数组,并初始化元素值为1、2、
3、4、5
3.通过指针方式指定数组长度
●int*arr=malloc(sizeof(int)*5);//分配一个长度为5的整型数组空间
直接指定数组长度
这种方式是最简单的,只需要在数组名称后面指定数组的长度即可。

需要注意的是,数组的长度必须是常量表达式,不能是变量或函数调用结果。

通过初始化列表指定数组元素
这种方式可以同时指定数组的长度和数组元素的值。

初始化列表中的元素必须与数组元素类型一致。

通过指针方式指定数组长度
这种方式需要使用malloc()函数来分配数组空间。

malloc()函数会返回一个指向数组首元素的指针。

需要注意的是,需要使用free()函数来释放数组空间。

C语言一维数组排序(函数)

C语言一维数组排序(函数)

0881-一维数组排序(函数)时间限制:1000 毫秒内存限制:32768 K字节判题规则:严格比较void inputdate(int a[],int n); void shortdate(int a[],int n); void printdate(int a[],int n); int main(){int n,a[100];scanf("%d",&n);inputdate(a,n);shortdate(a,n);printdate(a,n);printf("\n");return 0;}void inputdate(int a[],int n) {int i;for(i=0;i<n;i++){scanf("%d",&a[i]);}}void shortdate(int a[],int n) {int i,j,x;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(a[i]>a[j]){x=a[i];a[i]=a[j];a[j]=x;}}}}void printdate(int a[],int n) {int i;for(i=0;i<n;i++){printf("%d ",a[i]);}}PET/CT示踪剂18F-FDG(氟代脱氧葡萄糖)氟代脱氧葡萄糖氟代脱氧葡萄糖是2-脱氧葡萄糖的氟代衍生物。

其完整的化学名称为2-氟-2-脱氧-D-葡萄糖,通常简称为18F-FDG或FDG。

FDG最常用于正电子发射断层扫描(PET)类的医学成像设备:FDG分子之中的氟选用的是属于正电子发射型放射性同位素的氟-18(fluorine-18,F-18,18F,18氟),从而成为18F-FDG(氟-[18F]脱氧葡糖)。

在向病人(患者,病患)体内注射FDG之后,PET扫描仪可以构建出反映FDG体内分布情况的图像。

一维数组的加减乘除运算

一维数组的加减乘除运算

2、写一个函数,实现任意两个一维整型数组的加法,减法,乘法和除法运算。

#include"stdio.h"int a[10],b[10];void main(){int i;void jia(int a[],int b[]);void jian(int a[],int b[]);void cheng(int a[],int b[]);void chu(int a[],int b[]);printf("请输入6个数组a的元素:");for(i=0;i<6;i++)scanf("%d",&a[i]);printf("请输入6个数组b的元素:");for(i=0;i<6;i++)scanf("%d",&b[i]);jia(a,b);jian(a,b);cheng(a,b);chu(a,b);}void jia(int a[],int b[]){int c[10],i;for(i=0;i<6;i++){ c[i]=a[i]+b[i];}printf("加完后的数组为:");for(i=0;i<6;i++)printf(" %d,",c[i]);printf("\n");}void jian(int a[],int b[]){int c[10],i;for(i=0;i<6;i++){ c[i]=a[i]-b[i];}printf("减完后的数组为:");for(i=0;i<6;i++)printf(" %d,",c[i]);printf("\n");}void cheng(int a[],int b[]){int c[10],i;for(i=0;i<6;i++){ c[i]=a[i]*b[i];}printf("乘完后的数组为:");for(i=0;i<6;i++)printf(" %d,",c[i]);printf("\n");}void chu(int a[],int b[]){int i;float c[10];for(i=0;i<6;i++){c[i]=(float)a[i]/(float)b[i];} printf("除完后的数组为:");for(i=0;i<6;i++)printf(" %.2f,",c[i]);printf("\n");}。

C语言 第14节 一维数组程序举例

C语言 第14节 一维数组程序举例

形参用数组定义, int stu[ ]
例7、 求学生的平均成绩
#include <stdio.h> float average(int stu[10], int n); void main() { int score[10], i; float av; printf("Input 10 scores:\n"); for( i=0; i<10; i++ ) scanf("%d", &score[i]); av=average(score,10); printf("Average is:%.2f", av); }
例6、 两个数组大小比较
0 1 2 a 12 23 56 10 76 b 43 23
i
i i i i i n=0 m=1 k=1
0 1 2 3 4 5 n=1 m=1 k=2 n=2 m=1 k=2 n=3 m=1 k=2
3 4
5 n=0 m=0 k=0
21 98 66 54
n=1 m=1 k=1
#include <stdio.h> #define SIZE 10 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i<SIZE;i++) { printf("%d:",i+1); scanf("%d",&x[i]); } max=min=x[0]; for(i=1;i<SIZE;i++) { if(max<x[i]) max=x[i]; if(min>x[i]) min=x[i]; } printf("Maximum value is %d\n",max); printf("Minimum value is %d\n",min); }

一维数组经典例题

一维数组经典例题

一维数组经典例题
一维数组经典例题:
一、题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

假设每种输入只会对应一个答案。

但是,你不能重复利用这个数组中同样的元素。

二、解题思路:
1. 首先遍历数组nums,确定当前遍历到的整数a;
2. 计算需要搜索的数字b=target-a;
3. 从数组元素的下一个位置开始,遍历剩余的数组元素,如果发现存在数字b,则返回a和b的下标。

三、Java代码实现:
public int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
int a = nums[i];
int b = target - a;
for (int j = i + 1; j < nums.length; j++) {
if (nums[j] == b) {
return new int[]{i, j};
}
}
}
return null;
}。

C语言一维数组排序

C语言一维数组排序

C语⾔⼀维数组排序交换排序 1.冒泡排序 算法思想 1.将所有元素放⼊数组中; 2.从第⼀个元素开始,依次将相邻的两个元素⽐较,若前者⼤于后者则交换; 3.重复第2步,直到没有交换为⽌。

程序实现void sort(int *a, int n){int i, j, t, ok;for(i=0; i<n-1; i++){ok=1;for(j=0; j<n-1-i; j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;ok=0;}if(ok)break;}}void sort(int a[], int n){int i, t, ok;if(n==1)reurn;else{for(i=0;i<n-1;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;ok=0;}if(ok)return;elsesort(a,n-1);}} 2.交换排序的另⼀种⽅法void sort(int temp_array[ ],int n){int i,j,t;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(temp_array[i]> temp_array[j]){t=temp_array[i];temp_array[i]=temp_array[j];temp_array[j]=t;}}选择排序 算法思想 记住每趟⽐较中最⼩的数据下标,最后将最⼩元素与起始元素交换,这样每趟只交换⼀次。

程序实现void sort(int temp_array[ ],int n){int i,j,point,t;for(i=0;i<n-1;i++){point=i;for(j=i+1;j<n;j++)if(temp_array[point]> temp_array[j]) point=j;if(point!=i){t=temp_array[point];temp_array[point]=temp_array[i];temp_array [i]=t;}}}插⼊排序 算法思想 1.新建⼀个空列表,⽤于保存有序数列; 2.从原数列取出⼀个数插⼊有序列表中,使其仍保持有序状态; 3.重复第2步,直⾄原数列为空。

一维数组(C语言)

一维数组(C语言)
符数组名,而不是数组元素名。 printf(“%s〞,c[1]); 错误
字符数组
C、如果数组长度大于字符串实际长度,也只输出到遇‘\0’结束。 D、如果一个字符数组中包含一个以上‘\0’,那么遇到和第一个‘\0’ 就结束。〔利用scanf输入字符串,空格可作为结束符。〕
例:char str[13]; scanf(“%s〞,str);
字符数组
〔3〕给字符数组元素逐个赋初值。 char str[9]; str[0]=‘H’;str[1]=‘e’;str[2]=‘\0’;
应注意:用字符数组来存放字符串时,假设是逐个字符 赋值给数组元素,要在最后一个字符之后加上字符串结 束标志‘\0’。 用逐个字符给字符数组赋初值,对字符串的存取不太方 便。
printf(“\n〞);
}
B、使用getchar putchar getch getche函数。
字符数组
〔2〕将整个字符串一次输入或输出。用%s格式符。 例:char c[ ]=“china〞; printf(“%s〞,c);
结果为:china
注意: A、输出字符不包括结束符‘\0’; B、用%s格式符输出字符串时,printf 函数中的输出项是字
int a[10], b[10], k; for (k=0;k<10;k++) scanf(“%d〞,&a[k]); b=a; /*error*/ for(k=0;k<10;k++) b[k]=a[k];
一维数组
(3) 在使用数组元素时,数组元素中的下标表 达式的值必须是整型。 下标表达式值的下限为0,值的上限为该数 组元素的个数减1。 使用数组时注意其下标不要越界。如果下 标越界,程序无法得到正确的结果。

C语言循环一维数组

C语言循环一维数组

输入: abc↙ 作用:1.跳出switch语句 2. 跳出当层循环 123↙ for(i=0;i<5;i++) { c=getchar(); 输出: if(c==’\n’) break; abc putchar(c); }
break语句
continue语句
输入: abc↙ 功能:跳过continue后面的语句,继续下一次循环 123↙ for(i=0;i<5;i++) { c=getchar(); if(c==’\n’) continue; 输出: putchar(c); abc1 }
exp1 exp2 非0 语句 exp3 0
while 和 for的关系
while(条件) 语句 sum=0; i=1; while(i<=10) { sum=sum+i; i++; } exp1; while(exp2) { 语句; exp3; } for(exp1;exp2;exp3) 语句 sum=0; for(i=1;i<=10;i++) sum=sum+i;
4
3 3
3
4 4
6
6 6
7
7 7
9
9 9
输入n个数,用“选择法”将它们按从小到大的次序排序并输出。
a[0] a[1] a[2] a[3] a[4]
7p 7 7 7 7
4 4p 4p 4 4
9 9 9 9 9
3 3 3 3p 3p
6 6 6 6 6
初始状态
第一趟第1次的结果
第一趟第2次的结果 第一趟第3次的结果
第一趟第4次的结果 初始状态 第二趟初始状态 第二趟第1次的结果 第二趟第2次的结果 第二趟第3次的结果 初始状态 第一趟的结果 第二趟的结果 第三趟的结果 第四趟的结果
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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)); }。

相关文档
最新文档