登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[学习笔记] 数组的使用,还有开始征服单片机

[复制链接]
发表于 2018-1-28 02:48:05 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C语言数组的使用,和单片机的一些基础知识
学习安排: 数组预备知识,明天发一些数组的练习
开始时间: 2018-01-28
结束时间:
数组定义
<类型> 变量名称[元素数量]
int grades[100];
double weight[20];
元素数量必须是整数
c99之前元素的数量必须是和编译时刻确定的字面量

数组是一个容器
其中所有的元素都是相同的数据类型
一旦确立,数组的大小就不能改变
数组在内存中内存是连续依次排列的
从0开始计数
不可以越过 [下标-1]
及a[13]中可以表示的数是a[0]到 a[12]

数组还可以表示为
int a[]={1,45,48,54,13,19,4}
及对数组的每一个单元直接初始化,且编译器默认这个数组有7个单元
如果
int a[7]={5}
则数组除第一个数是5以外,所有的数都是0
如果需要全部初始化为0
可以这样写
int a[13];
int i;
for(i=0;i<13;i++){
    a[i]=0;
}
也可以这样写
int a[13]={0};

另外,c99中数组还可以这样表示
int a[10]={
    [0]=2,[2]=2,3,
};
这样初始化的结果就会是
a[0]=2,a[2]=0,a[3]=3剩下的数都是0

数组的大小
可以用 sizeof(a)表示数组a所占的大小
sizeof(a[0])表示a[0]也就是数组的一位所占大小
用 sizeof(a)/sizeof(a[0]);表示这个数组一共有几个单元,
也就是一共能存几个数

数组的赋值
我们不能直接拿一个数组将它的值赋给另外一个数组
必须一个一个的赋值,当然也可以写一个循环来进行赋值

先来个简单点的例子
比如超市计算消费金额的时候,输入相应的数字就可以累加相应的价格,然后输入0作为结束条件
#include<stdio.h>

int main()
{
    int number;
    int total=0;
    int a[]={0,60,75,83,89,71,43,};/*数组的编号是从0开始的,我们在a[0]这个位置赋值为0就能使数组的数字与switch的数字对齐,还比较美观*/
    do{
        scanf("%d",&number);
        /*switch(number){
            case 1:total+=60;break;
            case 2:total+=75;break;
            case 3:total+=83;break;
            case 4:total+=89;break;
            case 5:total+=71;break;
            case 6:total+=43;break;
        }*/
        total+=a[number];//数组最大的好处就是可以将多个变量写成一个集合,使得程式变得简单,虽然可读性没有switch或者if的好
    }while(number!=0);
    printf("消费总金额为%d",total);

    return 0;
}

在上一遍笔记中有提到一个叫丢骰子的练习,这次是统计投6000次骰子每个数字出现的次数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
    srand(time(0));
    int count[6]={0};
    int i;
    for(i=0;i<6000;i++){
        int dice;
        int j;
        dice=rand()%6+1;
        /*switch(dice){
        case 1:count[0]++;break;
        case 2:count[1]++;break;
        case 3:count[2]++;break;
        case 4:count[3]++;break;
        case 5:count[4]++;break;
        case 6:count[5]++;break;
        }*/
        /*for(j=1;j<=6;j++){
            if(dice==j){
                count[j-1]++;
            }
        }*/
        count[dice-1]++;//可以吧for省略的原因是只有当dice=j的时候才会运行下面的程序,刚好每一个for也只有一个j会等于dice
    }
    for(i=0;i<6;i++){
        printf("%d,%d\n",i+1,count[i]);//数组输入输出都得一个一个的输出
    }
    return 0;
}


明天多学一些数组的例子

下面是单片机的一些基础知识
单片机的内部资源
1.flash 程序存储空间(以前是ROM)
2.RAM(数据存储空间,内存),断电后数据丢失,运行速度快,能无限次读取
3.SFR 特殊功能计算器

单片机最小系统
用最少的元器件搭建的单片机可以工作的系统
三要素
电源电路 晶振电路 复位电路

单片机C语言sfr声明
sfr P0  =0x80;
sfr TCON=0x88;

sbit IT0=TCON^0;
sbit LED=P0^0;
在使用单片机的特殊功能计算器时,需要对特殊功能计算器进行声明
这个和C语言的函数是一样的
和函数一样这些特殊功能计算器也有它自身的头文件
如stc80c82单片机就可以用
#include<reg52.h>
将它的特殊功能计算器包含在内
如果这个头文件内不包含我们所需的特殊功能计算器就可以通过sfr声明来使用

sbit声明就相当于给特殊功能计算器进行命名


今天就这样,睡觉去

好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表