C语言入门-数组
今天十月一日,上午看阅兵激情澎湃,但是下午还是要继续写C语言,前面的这块很简单
int number[100];
scanf("%d" , &number[i]);
一、定义数组
- <类型> 变量名称[元素数量]
- 元素数量必须是整数
数组特点
- 所有的元素具有相同的数据类型
- 一旦创建,就不能改变大小
- (数组中的元素在内存中是连续以此排序的)
二、数组例子
写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束
通常用到数组都是下面的步骤:
#include <stdio.h>
int main(void)
{
// 数组的大小
const int number = 10;
int x;
// 定义数组
int count[number];
int i;
// 初始化数组
for (i = 0; i < number; i++)
{
count[i] = 0;
}
scanf("%d" , &x);
while( x != -1){
if(x >= 0 && x <= 9){
// 数组参与运算
count[x] ++;
}
scanf("%d" , &x);
}
// 遍历数组输出
for (i = 0; i < number; i++)
{
printf("%d:%d\n", i , count[i]);
}
return 0;
}
三、数组运算
数组的集成初始化
int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32};
集成初始化时定位
int a[10] = {[0] = 2 , [2] = 3,6};
int i;
for (i = 0; i < 10; ++i)
{
printf("%d\t", a[i]);
}
// 2 0 3 6 0 0 0 0 0 0
- 用[n]在初始化数据中给出定位
- 没有定位的数据接在前面的位置后面
- 其他位置的值补零
- 也可以不给出数组大小,让编译器算
- 特别适合初始数据稀疏的数组
数组大小
- sizeof给出整个数组所占据的内容的大小,单位是字节
sizeof(a)/sizeof(a[0]);
- sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数
- 这样的代码,一旦修改数组中的初始的数据,不需要修改遍历的代码
数组的赋值
- 数组变量本身不能被赋值
- 要把一个数组的所有元素交给另一个数组,必须采用遍历
四、数组中查找元素
数组作为函数参数时,往往必须再用另一个参数来传入数组的大小
数组作为函数的参数时:
- 不能在[]中给出数组的大小
- 不能再利用sizeof来计算数组的元素个数
#include <stdio.h>
int main(void)
{
int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32,};
int x;
int loc;
printf("请输入一个数字:\n");
scanf("%d" , &x);
loc = search(x, a, sizeof(a)/sizeof(a[0]));
if (loc != -1)
{
printf("%d在第%d个位置上\n", x , loc);
}else{
printf("%d不存在\n", x);
}
return 0;
}
int search(int key , int a[] , int length)
{
int ret = -1;
int i;
for (i = 0; i < length; i++)
{
if (a[i] == key)
{
ret = i;
break;
}
}
return ret;
}
五、素数
判断是否能被已知的且<x的素数整除
#include <stdio.h>
int main(void)
{
const int number = 10;
int prime[10] = {2};
int count = 1;
int i = 3;
while(count < number){
if (isPrime(i,prime,count))
{
prime[count++] = i;
}
// 进行调试
{
printf("i=%d \tcnt=%d\t", i , count );
int i;
for (i = 0; i < number; i++)
{
printf("%d\t", prime[i]);
}
printf("\n");
}
i++;
}
for ( i = 0; i < number; i++)
{
printf("%d", prime[i]);
if ( (i+1)%5)
{
printf("\t");
}else{
printf("\n");
}
}
return 0;
}
int isPrime(int x, int knownPrimes[], int numberofKnowPrimes)
{
int ret = 1;
int i;
for (i = 0; i <numberofKnowPrimes ; i++)
{
if ( x % knownPrimes[i] == 0)
{
ret = 0;
break;
}
}
return ret;
}
六、二维数组
int a[3][5]
// 通常可以理解为a是一个3行5列的矩阵
二维数组的遍历
for(i = 0; i<3; i++){
for(j = 0; j<5; j++){
a[i][j] = i * j;
}
}
// a[i][j]是一个int,表示第i行第j列上的单元
二维数组的初始化
int a[][5] = {
{0,1,2,3,4,},
{2,3,4,5,6,},
};
- 列数是必须给出的,行数可以有编译器来定
- 每行一个{},逗号分隔
- 最后的逗号可以存在
- 如果省略,表示补零
C语言入门-数组的更多相关文章
- (三)Lua脚本语言入门(数组)
又要找工作了,变的忧虑了,唯有学习才让内心变得踏实,今天玩了一下午的王者荣耀,正事都忘了...... 如果认为所谓的毅力是每分每秒的“艰苦忍耐”式的奋斗,那这是一种很不足的心理状态.毅力是一种习惯,毅 ...
- Go语言入门——数组、切片和映射
按照以往开一些专题的风格,第一篇一般都是“从HelloWorld开始” 但是对于Go,思来想去,感觉真的从“HelloWorld”说起,压根撑不住一篇的篇幅,因为Go的HelloWorld太简单了. ...
- Go语言入门——数组、切片和映射(下)
上篇主要介绍了Go语言里面常见的复合数据类型的声明和初始化. 这篇主要针对数组.切片和映射这些复合数据类型从其他几个方面介绍比较下. 1.遍历 不管是数组.切片还是映射结构,都是一种集合类型,要从这些 ...
- (四)Lua脚本语言入门(数组遍历)
这篇文章就当成铺垫型的文章,写着写着发现有好多想写的,,关于C#与Java,当然作为铺垫肯定与Lua的下部分介绍有关..... 对于"泛型",先看C#中"泛型" ...
- C语言入门(16)——C语言的数组
和结构体类似,数组也是一种复合数据类型,它由一系列相同类型的元素组成.C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必 ...
- C 语言入门---第六章 C语言数组
数组就是一些列具有相同类型的数据的集合,这些数据在内存中一次挨着存放,彼此之间没有缝隙. 我们可以将二维数组看作一个Excel表格,有行有列,length1 表示行数,length2 表示列数,要在二 ...
- 我为什么反对推荐新人编程C/C++语言入门?
虽然我接触编程以及计算机时间比较早,但是正式打算转入程序员这个行当差不多是大学第四年的事情 从03年接触计算机,07年开始接触计算机编程, 期间接触过的技术包括 缓冲区溢出(看高手写的shellcod ...
- c语言入门教程 / c语言入门经典书籍
用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...
- 【转】c语言入门教程 / c语言入门经典书籍
用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...
随机推荐
- 《高效休息法》IT从业者如何高效休息
这本书主要讲什么? 大脑疲劳和身体疲劳不同,身体再怎么休息,大脑疲劳还是会在不知不觉中积累 大脑是一个重量仅仅占体重2%,却消耗着20%能量的大胃王,这些能量大部分都用在了预设模式网络(Default ...
- Nginx入门(二):镜像和容器
0.docker常用命令 #镜像名 版本标签 镜像id 创建时间 镜像大小 REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289 ...
- javaScript 基础知识汇总(二)
1.运算符 术语或者叫法:一元运算符.二元运算符.运算元(参数) let x=0; x=5+2; //5和2为运算元,“+” 为二元运算符: x=-x; //"-" 为一元运算符 ...
- 消息中间件——RabbitMQ(九)RabbitMQ整合Spring AMQP实战!(全)
前言 1. AMQP 核心组件 RabbitAdmin SpringAMQP声明 RabbitTemplate SimpleMessageListenerContainer MessageListen ...
- 理解Js的parseInt(转)
parseInt() 方法首先查看位置 0 处的字符,判断它是否是个有效数字:如果不是,该方法将返回 NaN,不再继续执行其他操作.但如果该字符是有效数字,该方法将查看位置 1 处的字符,进行同样的测 ...
- 分布式唯一ID生成算法-雪花算法
在我们的工作中,数据库某些表的字段会用到唯一的,趋势递增的订单编号,我们将介绍两种方法,一种是传统的采用随机数生成的方式,另外一种是采用当前比较流行的“分布式唯一ID生成算法-雪花算法”来实现. 一. ...
- ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
报错 Traceback (most recent call last): File "D:/PyCharm 5.0.3/WorkSpace/2.NLP/2.获取数据源和规范化/4.word ...
- P1415 拆分数列 DP
传送门: 题意: 将一个数字串分成许多不同的小串,使得这些小串代表的数字严格递增,要求最后一个数字尽可能地小. 然后满足字典序尽可能大. 思路: 由于最后一个数字要尽可能地小,所以先处理出每个数的L[ ...
- CodeForces 402 E Strictly Positive Matrix
Strictly Positive Matrix 题解: 如果原来的 a[i][j] = 0, 现要 a[i][j] = 1, 那么等于 sum{a[i][k] + a[k][j]} > 1. ...
- codeforces 869 E. The Untended Antiquity(树状数组)
题目链接:http://codeforces.com/contest/869/problem/E 题解:这题是挺好想到solution的但是不太好写,由于题目的特殊要求每个矩形不会重贴所以只要这两个点 ...