C语言学习第五章
今天要进行一个重要元素数组的学习了。这一章要掌握什么是数组,数组怎么样命名,数组怎么样使用,以及一些常见的错误和需要注意的事项。
一、 数组的基本概念
- 数组是可以在内存中连续存储多个元素的结构//就像是多个int绑定在一起了,数据类型不一定非要是int也可以是其他的数据类型。
- 数组中的所有元素必须属于相同的数据类型//说是int就要大家都是int,不然不能在一起愉快玩耍。
二、 数组的特点
- 只能存放一种类型的数据,比如int类型的数组、float类型的数组,//就像上面说的,一个数组只能有一种类型的数据。
- 里面存放的数据称为“元素”
三、 声明和使用数组
- 声明数组的类型 // 就是基本数据类型选一个。
- 声明数组的元素个数(需要多少存储空间)//标明以后电脑才能知道你这个数组到底是几个基本数据类型绑在一起的,需要多大的地方。
- 书写格式:
元素类型 数组名[元素个数];
比如:int ages[3];
- 简单使用
简单初始化:int ages[5] = {19, 19, 20, 21, 25};
元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始
数组元素的访问:a[i]
- 要注意不管是往数组里面赋值还是提取出来使用都是从下标0开始的。下标的意思就像是书名或者房间号,是一个数组里面其中一个数的标识。
初始化方式
int a[3] = {10, 9, 6};//正常书写方式
int a[3] = {10,9};//少赋值一个也是可以的,没赋值的空位默认为0
int a[] = {11, 7, 6};//前面没有标明数量,但是后面给了几个数值,电脑就会默认这个数组有几个位置。
l 常见错误
int a[];//既没给数量,也没赋几个值给它。
int[4] a;//这种方式在java里面可以,但是在C语言中是错误的。
int a[b];//中括号里面的是数量,数量必须是数字,还得是整数。
a = {10, 11};//没给类型,而且不给数量也要加上中括号的。
a[4] = {10,9,8,5}; //没给数据类型。
- 示例:
//声明数组: 数据类型 数组名[数组长度] ;
int scores[5];
//为数组赋值: 数组名[下标]=值; --->下标从0开始
scores[0]=10;
scores[1]=20;
scores[2]=30;
scores[3]=40;
scores[4]=50;
//获取数组中的元素: 数组名[下标];
printf("%d,%d,%d,%d,%d\n",scores[0],scores[1],scores[2],scores[3],scores[4]);
//声明赋值一步完成: 数据类型 数组名[长度]={值1,值2....};注意:对应的值的个数应该与长度对应
int nums[5]={1,2,3,4,5};
printf("%d,%d,%d,%d,%d\n",nums[0],nums[1],nums[2],nums[3],nums[4]);
int arr[10] = {9,8,7,5};//正确,6个元素未赋值将使用默认值(0)
int arr[] = {9,8,7};//正确 ,未指定数组的长度(数组长度取决于元素的个数)
示例2:让用户输入5个成绩,根据用户输入的成绩计算最高分,最低分和平均分
int scores[5];//声明一个数组用于存储用户输入的成绩
int sum=0,avg;//总成绩和平均成绩
int max;//最高分
int min;//最低分
int i;
//循环获取用户输入的成绩,并将其输入成绩保持到数组中
for(i=0;i<5;i++){
printf("请输入第%d个人成绩:",i+1);
scanf("%d",&scores[i]);
sum+=scores[i]; //计算总成绩
}
avg=sum/5;//计算平均成绩
min=max=scores[0];//假设第一个人的成绩是最高分,最低分
for(i=1;i<5;i++){
if(scores[i]>max){//获取最高分
max=scores[i];
}
if(scores[i]<min){//获取最低分
min=scores[i];
}
}
printf("平均分为:%d,最高分是%d,最低分%d\n",avg,max,min);
冒泡排序:主要精髓在于,升序:n个数字来排队,两两比较小靠前。外层循环N-1(控制需要比较的轮数)内层循环N-1-i(控制每轮比较的次数,i是外层循环变量)
- 这个方法要记好,很多时候都能用到,下图是冒泡排序的一种示例和示例的图解。(没事要多看)

int nums[]={10,3,8,1,6};
int i,j,temp;
//外层控制比较的轮数(5个数字比较4轮)
for(i=0;i<4;i++){
//内层循环控制每轮比较的次数
for(j=0;j<4-i;j++){
if(nums[j]>nums[j+1]){//交换顺序
temp = nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
printf("排序后的数字为:");
//利用循环遍历输出
for(i=0;i<5;i++){
printf("%d\t",nums[i]);
}
- 以上是一维数组,接下来是二维数组:
- 二维数组可以看作是由一维数组的嵌套而构成的,二维数组可以看成是一个表格,有长和宽的表格。
二维数组: 一维数组中的值为一个数组.
声明: 数据类型 数组名[rowsize][colsize];
int nums[4][2];
声明并赋值:
int nums[4][2]={{10,11},{20,21),{30,31},{40,41}}; 正确//常规写法
int nums[][2]={{10,11},{20,21),{30,31},{40,41}}; 正确//和一维数组一样行的数量可以由后面提供的数值数量进行默认处理
int nums[4][]={{10,11},{20,21),{30,31},{40,41}}; 错误//二维数组可以忽略行的数量但是列的数量必须有
示例:声明一个三行三列的二维数组用于保持用户输入的整型数据,打印用户输入的数据并计算对角线之和,下图是图解

int nums[3][3];
int i,j,sum=0;
//循环获取用户输入的数据,并将其数据保存到二维数组中
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("请输入第%d行第%d列数据\n",i+1,j+1);
scanf("%d",&nums[i][j]);
}
}
//循环遍历二维数组的数据,并打印成矩形
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d\t",nums[i][j]);
if(i==j){
sum+=nums[i][j];
}
}
printf("\n");
}
printf("二维数组对角线之和为%d",sum);
- 课后作业,由于格式原因下面的代码没有进行缩进,因为是课间抽时间写的博客,所以暂时没时间想办法调整,有时间了一定要调整一下。
作业1.根据用户输入的10人成绩并将其保存到数组中,求最高成绩,最低成绩和平均成绩
#include <stdio.h>
void main(){
//作业1.根据用户输入的10人成绩并将其保存到数组中,求最高成绩,最低成绩和平均成绩.
int sum[10];//数组名及长度
int i,max,min,args,he=0;//循环变量,最高,最低,平均值,十个人总分
for(i=0;i<10;i++){//获取及十个人总分
printf("输入第%d个人的成绩:\n",i+1);
scanf("%d",&sum[i]);
he+=sum[i];
}
args=he/10;
max=min=sum[0] ;
for(i=1;i<10;i++){
if(sum[i]>max){
max=sum[i];
}
if(sum[i]<min){
min=sum[i];
}
}
printf("平均分为:%d,最高分是%d,最低分%d\n",args,max,min);作业2.根据用户输入的5个数字并将其保存到数组中,对其进行从高到低排序
.根据用户输入的5个数字并将其保存到数组中,对其进行从高到低排序.
// 外层循环N-1(需要比较的轮数),
// 内层循环N-1-i(每轮需要比较的次数,其中i为外层循环变量)
int sum[5];//数组名及长度
int i,j,k;//两个循环变量及临时变量
for(i=0;i<5;i++){//获取输入的5个数值
printf("输入第%d个数\n",i+1);
scanf("%d",&sum[i]);
}
for(i=0;i<4;i++){//比较大小进行排序
for(j=0;j<4-i;j++){
if(sum[j]<sum[j+1]){
k=sum[j];
sum[j]=sum[j+1];
sum[j+1]=k;
}
}
}
printf("排序后的数字是:");//打印得出的结果
for(i=0;i<5;i++){
printf("%d\t",sum[i]);
}//作业3.根据用户输入的10个数字并将其保存到数组中,用户输入要查找的数字,
//如果查找到该数字打印其在数组中的位置,否则打印该数组中没有你要查找的元素。
int sum[10];//数组名及长度
int i,find,flag=0;//循环变量及用户查找的数值
for(i=0;i<10;i++){//根据用户输入的10个数字并将其保存到数组中
printf("输入第%d个数",i+1);
scanf("%d",&sum[i]);
}
printf("你想找哪个\n");//获取用户想要查找的数值
scanf("%d",&find);
for(i=0;i<10;i++){//对比数值如果查找到该数字打印其在数组中的位置
if(find==sum[i]){
printf("%d在数组中的第%d个位置",find,i+1);
flag=1;
}
}
if(flag==0){//否则打印该数组中没有你要查找的元素。
printf("对不起,该数字%d没有在数组中",find);
}作业4.打印杨辉三角(用二维数组)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
int sum[5][5];
int i,j;
for(i=0;i<5;i++){//第1列值为1,对角线的值为1
sum[i][0]=1;;//为第一列赋值为1
sum[i][i]=1;;//为对角线赋值为1
}
for(i=2;i<5;i++){//当前元素的值=头上的元素+头上左边的元素
for(j=1;j<i;j++){//j=1从第二列下标1开始
sum[i][j]=sum[i-1][j]+sum[i-1][j-1];
}
}
for(i=0;i<5;i++){//循环变例输出
for(j=0;j<=i;j++){
printf("%d\t",sum[i][j]);
}
printf("\n");
}
C语言学习第五章的更多相关文章
- Go语言学习笔记五: 条件语句
Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...
- Java基础知识二次学习--第五章 数组
第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节 视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 ...
- C#高级编程 (第六版) 学习 第五章:数组
第五章 数组 1,简单数组 声明:int[] myArray; 初始化:myArray = new int[4]; 为数组分配内存. 还可以用如下的方法: int[] myArray = new in ...
- C语言学习第六章
今天开始尝试改变! 今天要学习函数,一个C语言中的重要组成部分. 首先先聊聊为什么要使用函数?随着学习的深入很多人会发现某段的代码重复使用的几率很大,而如果用一次写一次的话很明显的效率就会比较低,如果 ...
- C语言学习第四章
今天学习C语言循环结构,为什么要用循环呢?因为有时候我们对一堆的数字进行重复的处理的时候要重复的编写一些相同或者差不多的代码,让程序显得很臃肿,而且写着也麻烦,如果用循环来写的话能简化很多,出错的话也 ...
- C语言学习笔记第一章——开篇
本文章B站有对应视频 (本文图片.部分文字引用c primer plus) 什么是C语言 顾名思义,c语言是一门语言,但是和我们所讲的话不同,它是一门编程语言,是为了让机器可以听懂人的意思所以编写的一 ...
- C 语言学习 第五次作业总结
第五次作业,主要学习和复习的是几种循环结构的使用. 在前一次的课堂上,同学们已经学习了分支语句的使用.分支语句和循环语句配合使用,就可以写出更多的,逻辑功能丰富的代码了. 逻辑功能的丰富,也意味着学习 ...
- C语言学习第七章
今天开始学习指针,指针在C语言中具有很重要的地位,按照老师所说,学C学不好指针跟没学一样,可见指针在C语言中的重要地位.废话不多说,首先我们先要知道什么是指针. 指针:指针是一个变量,它存储另一个对象 ...
- C语言学习的第一章
首先,学习编写程序要先知道什么是程序,我们为什么要写程序? 程序就是为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合.程序里有很多算法,算法是解决问题的具体方法和步骤,就像我们想要得 ...
随机推荐
- [读书系列] 深度探索C++对象模型 初读
2012年底-2014年初这段时间主要用C++做手游开发,时隔3年,重新拿起<深度探索C++对象模型>这本书,感觉生疏了很多,如果按前阵子的生疏度来说,现在不借助Visual Studio ...
- poolingHttpclientConnectionmanager 使用
在阅读 netflix zuul 的simpleHostRoutingFilter 中,发现了一些问题. 主要是关于poolingHttpclientConnectionmanager. 在寻找其中的 ...
- JavaScript当页面关闭时向后台发送请求
今天做项目时遇上一个需求,当浏览器或页面关闭时将数据存储到数据库内.实现思想是采用js监测onunload然后发送请求.结果失败,刷新可以发送但是关闭并不能,整了一整天并没有解决,最后找到了解决办法. ...
- Windows Phone 8.1开发:触控和指针事件2
原文出自:http://www.bcmeng.com/windows-phone-touch1/ 请在此输入内容(想死啊,写了一个小时,直接没保存不小心删掉了.那就简单说说吧)Pointer事件有以下 ...
- SQLServer 数据库不能重命名的解决方案
无法用排他锁锁定该数据库,以执行该操作 SQL Server2008 因为可能其他用户在占用着该数据库 解决办法为 把数据库先改为单用户的,再改数据库名,再改回多用户的 USE [master] GO ...
- spring-mvc-两个个小例子
1.用Eclipse创建一个工程,命名为spring2.0 并添加相应的jar包(我用的是4.0.5的版本)到 lib 包下: spring-webmvc-4.0.5.RELEASE.jar spri ...
- 【iOS】7.4 定位服务->2.1.4 定位 - 官方框架CoreLocation 案例:指南针效果
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...
- 部署在服务器中的WebService
1.继上篇之后,我把我的WebService部署在了比较小的Tomcat中,首先要把Jax-ws.jar架包放在lib里面 2.在我的WEB-INF里面增加了一个xml文件:sun-jaxws.xml ...
- Node.js开发工具、开发包、框架等总结
开发工具 1.WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢.2.做些小型项目用Sublime Text.3.Browserif ...
- ECMAScript版本号总结
最近想要研究下ES6,关于这个标准的发展历史.ES5. ES6.ES2015等等名称的定义都不怎么明确,查了很多资料,去除了程序员不关心的信息,下面是对ECMAScript规范发展历史及名词定义的 ...