电商专业学习嵌入式软件开发第三十一天

  • C第五天

老师早上先给我们讲了昨天留的两道题,然后就开始给我们讲数组和指针,最后还涉及一点二维数组。每次到了指针这里总感觉头脑绕不过来,但是确实又是讲来讲去就那么点内容,感觉内容很少,就是消化特别慢。

"最近总能听到在“终端”下面不能粘贴复制,在这里我推荐试试ctrl+shift+c复制,ctrl+shift+v粘贴,反正我在虚拟机中可以这么用,实体机应该也可以"。

作业1.有一个袋子,里面有三种颜色的球,白:3 红:3 黑:6. 从中间取8只球,共有多少种方案
#include 
void main()
{
    int i,j;
    for(i=0;i<=3;i++)
        for(j=0;j<=3;j++)
            if(8-i-j<=6)
                printf("红:%d 白:%d 黑:%d\n",i,j,8-i-j);
}
作业2.求输出和为一个给定整数的所有组合
如:4
  0+4
  1+3
  2+2;
  5
  0+5
  1+4
  2+3
#include 
void main()
{
    int data,i;
    printf("请输入一个数:");
    scanf("%d",&data);
    for(i=0;i<=data/2;i++)
    printf("%d+%d\n",i,data-i);
}

练习:有一个整型数组,含有10个元素,在整个数组中查找某一个值,找到了就给出这个值在数组中的位置,没有找到就输出"没有找到"

#include 
void main()
{
    printf("请输入10个数:");
    int i,a[10],search;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("请输入要找的值:");
    scanf("%d",&search);
    int flag=0;
    for(i=0;i<10;i++)
    {
        if(search==a[i])
        {
            printf("%d\n",i+1);
            flag++;
        }
    }
    if(flag==0)
    {
        printf("没有找到!\n");
    }
}

定义一个数组,里面升序排好了5个数,现在往其中插入某个数,使插入后的数组依然有序。

#include 
void main()
{
    int a[6]={1,3,5,7,9,11},in,i,j;
    printf("请输入要插入的数:");
    scanf("%d",&in);
    //1.找到要插入的位置
    for(i=0;i<=4;i++)
    {
        if(a[i]>in)
            break;//找到第一个比in大的元素结束循环,此时i即为in的下标号
    }
    //2.把原有数组中比插入的数大的元素往后挪一个位置
    for(j=5;j>i;j--)//把插入点i之后的元素都往后挪一个位置
    {
        a[j]=a[j-1];
    }
    //3.把数插进入
    a[i]=in;
    for(i=0;i<6;i++)
        printf("%d\n",a[i]);
}
#include 
void main()
{
    int a=5;
//  &a;  //表示a所代表的空间的地址
    printf("%d\n",*(&a));
    *(&a)=3;//*,表示一个地址里面的值
    printf("%d\n",a);
}

指针变量:用来接受内存中的地址。
指针:地址。
定义一个指针变量:
例:要定义一个指针变量,用来接受一个整型变量的地址

int a;//得到整型变量  &a 整型变量的地址
int *p=&a;  //定义一个接受整型变量的地址的变量。指针变量。取名指针变量因为它保存的是一个变量的地址,只要找到了该指针变量就能找到那个变量,像一个指针时刻指向那个变量.
char c;
char *p=&c;//定义一个指向字符变量c的指针变量
整型变量数据类型:int
定义一个整型变量: int p; 用来接受一个整数: p=10;
小数变量数据类型:float
定义一个小数变量:float p;用来接受一个小数: p=1.2
字符变量的数据类型:char
定义一个字符变量:char p;用来接受一个字符:p='a'
指针变量数据类型:datatype*
定义一个接受整型变量的地址的指针变量:int *p; int a; p=&a;
定义一个接受小数变量的地址的指针变量:float* p;float a; p=&a;
定义一个接受字符变量的地址的指针变量:char*  p;char a; p=&a;
int *p1,*p2;正确写法
int* p1,p2;错误写法
#include 
void main()
{
    int a=5;
    int *p=&a;
    *p;
    printf("*p=%d p=%p\n",*p,p);
}
#include 
void main()
{
    int a[5]={1,2,3,4,5};
    int *p;
/*
    printf("a:%p &a[0]:%p\n",a,&a[0]);
    printf("a+1:%p &a[0]+1:%p &a[1]:%p\n",a+1,&a[0]+1,&a[1]);
*/
    printf("&a=%p a=%p &a+1=%p a+1=%p\n",&a,a,&a+1,a+1);
}
/*
1.a:表示数组的首元素的首地址。
  a+1:表示数组第二个元素的地址,+1,跨过指针所指向对象的一个长度,此处a作为指针所指向的对象是数组中的元素。
  %p:输出一个地址的格式
3.指针的含义包含2方面:1.它的值(地址)2.它指向的对象
2.&a:它的值是数组a的第一个元素的地址,但是作为一个指针,所指向的对象是整个数组,
  &a+1:指针&a跨过一个&a所指向的对象,即从数组开头指向了数组最后,跨过整个数组
4.指向一个数组的指针p,加*,即为*p,变为指向该数组中的元素的指针,再加*,即为**p,变成了所指向的这个元素的值
*/
#include 
void main()
{
    int a[5]={1,2,3,4,5};
    int (*p)[5]=&a;
    printf("%p\n",p);
}
/*
    int a[5];//定义了一个int型的数组a,里面含有五个int型的元素
    int *a[5];//定义了一个int*型的数组a,里面含有5个int*型的元素,指针数组——指针的数组
    int (*a)[5];//定义了一个指向含有5个int型元素的数组的指针a.数组指针——数组的指针.
    int *(*a)[5];//定义了一个指向含有5个int*型元素的数组的指针a.
*/
int a[5]={1,2,3,4,5};
a:1的地址
a+1:2的地址
&a:整个数组的地址==1的地址
&a+1:跳过该数组长度的地址
*a:1
*(a+1)=2
*&a<=>a
**&a<=>*a
int (*p)[3]=a
#include 
void main()
{
    int a[5]={1,2,3,4,5};
        int (*p)[3]=(int (*)[3])&a; 
    //左边:指针p指向含有3个int型元素的数组的指针
    //右边:指针&a是一个指向含有5个int型元素的数组的指针,强制转换成指向一个含有3个int型元素的数组的指针。
    printf("**p=%d,*p=%p,*p+1=%p,*(*p+1)=%d\n",**p,*p,*p+1,*(*p+1));
    printf("**p=%d **(p+1)=%d\n",**p,**(p+1));  
}

二维数组
定义一个二维数组:
datatype name[行数r][列数c];

例:int a[2][3];定义了一个二维数组,数组的名字为0;是一个2行3列的数组,数组中的每个元素都是int型
a[0][0]:第一行第一列的元素
a[1][1]:第二行第二列的元素

二维数组的行下标号从0开始到r-1结束,列下标号从0开始到c-1结束
二维数组在存储的时候是按行存储的,
二维数组的赋值:
1.初始化赋值:
2.先定义数组再赋值:

//求一个4行5列的整型数组的最大值,并输出他的行号和列号
#include
int main()
{
    printf("请输入一个4行5列的整型数组:");
    int i,j,a[4][5],max = 0,c,d;
    for(i = 0;i < 4;i++)
    {
        for(j = 0;j < 5;j++)
        {
            scanf("%d",&a[i][j]);
            if(max < a[i][j])
            {
                max = a[i][j];
                c=i;
                d=j;
            }
        }
    }
    printf("max = %d %d %d\n",max,c,d);
}

你可能感兴趣的:(电商专业学习嵌入式软件开发第三十一天)