嵌入式培训笔记-day6(C语言基础)

复习:
类型转换:
    隐式转换
    显示转换
    =
    
字符串处理函数:
strlen  abc\0cd\0
strcpy(str1,str2) 
strcat(str1,str2)
strcmp(str1,str2) 

ch = getchar()
scanf("%c",&ch);

gets(str);
scanf("%s",str);

putchar()
puts()
printf()


随机函数:
srand(time(NULL));

rand()%10+1

新知识:
一、二维数组
数组:相同数据类型的集合
int a[3];

1.定义 
int a[2][3]  //a是数组名 int代表数组中元素的类型 2代表数组行数 3代表数组列数

2.赋值:
a[0][0]=100;
a[0][1]=67;
... 

3.循环赋值及输出
    #include<stdio.h>

    int main()
    {
        int a[2][3];

        int i,j;

        for(j=0;j<2;j++)//行
        {
            for(i=0;i<3;i++)//列
            {
                scanf("%d",&a[j][i]);
            }

        }
        for(j=0;j<2;j++)//行
        {
            for(i=0;i<3;i++)//列
            {
                printf("%d",a[j][i]);
            }

        }
        return 0;

    }

练习:定义一个二维数组 赋值并输出 要求:3*5矩阵
#include<stdio.h>
#define ROW 3
#define COL 5
int main()
{
    int a[ROW][COL];

    int i,j;

    for(j=0;j<ROW;j++)//行
    {
        for(i=0;i<COL;i++)//列
        {
            scanf("%d",&a[j][i]);
        }

    }
    for(j=0;j<ROW;j++)//行
    {
        for(i=0;i<COL;i++)//列
        {
            printf("%d ",a[j][i]);
        }
        putchar('\n');

    }
    return 0;

}

继续:将上题中二维数组的值求和
    #include<stdio.h>
    #define ROW 2
    #define COL 3
    int main()
    {
        int a[ROW][COL];
        int sum=0;

        int i,j;

        for(j=0;j<ROW;j++)//行
        {
            for(i=0;i<COL;i++)//列
            {
                scanf("%d",&a[j][i]);
                sum = sum+a[j][i];
            }

        }
        
        printf("%d\n",sum);
        return 0;

    }

练习:查询一个二维数组中 是否存在某个数 如果存在 计算有多少个这样的数
#include<stdio.h>
#define ROW 2
#define COL 3
int main()
{
    int a[ROW][COL];
    

    int i,j,n,count=0;

    for(j=0;j<ROW;j++)//行
    {
        for(i=0;i<COL;i++)//列
        {
            scanf("%d",&a[j][i]);
            
        }
    }
    
    puts("please input a integer:");
    scanf("%d",&n);
    for(j=0;j<ROW;j++)//行
    {
        for(i=0;i<COL;i++)//列
        {
            if(a[j][i]==n)
            {
                count++;
            }    
        }
    }
    
    if(count==0)
    {
        puts("not found!");
    }
    else 
    {
        printf("%d\n",count);
    }
    
    return 0;

}

练习:在二维数组中 找最小值及其位置
#include<stdio.h>
#define ROW 2
#define COL 3
int main()
{
    int a[ROW][COL];
    

    int i,j,n,min,c=0,r=0;

    for(j=0;j<ROW;j++)//行
    {
        for(i=0;i<COL;i++)//列
        {
            scanf("%d",&a[j][i]);
            if(i==0&&j==0)
            {
                min = a[j][i];
            }
            else 
            {
                if(min>a[j][i])
                {
                    min = a[j][i];
                    r = j;
                    c = i;
                }
            }
        }
    }
    
    printf("min:%d row:%d col:%d\n",min,r,c);
    return 0;

}


练习:打印20*20map 打印.  可以在map中赋任意字符

.....
.....
...x.
....a
.....

3,4  a  
2,3  x

#include<stdio.h>
#define ROW 20
#define COL 20
int main()
{
    char map[ROW][COL];
    

    int i,j;
    char input;//
    int x,y;

    for(j=0;j<ROW;j++)//行
    {
        for(i=0;i<COL;i++)//列
        {
            
            map[j][i]='.';
        }
    }
    
    do
    {
        do
        {
            system("clear");
            for(j=0;j<ROW;j++)//行a
            {
                for(i=0;i<COL;i++)//列
                {
            
                    printf("%c",map[j][i]);
                }
                putchar('\n');
            }
            puts("please input:char  row col ");
            
            scanf("%c%d%d",&input,&x,&y);
            getchar();
            map[x][y] = input;
        
        }while((x<0||x>=ROW)||(y<0||y>=COL));
    
    }while(map[x][y]!='.');
    return 0;

}

4.二维数组初始化
(1)完全初始化
int a[2][3]={1,2,3,4,5,6};
int a[2][3]={{1,2,3},{4,5,6}};

(2)部分初始化
int a[2][3]={{1,2},{4,6}};
a[0][0]=1
a[0][1]=2
a[0][2]=0

a[1][0]=4
a[1][1]=6
a[1][2]=0

(3)默认初始化
int a[2][3]={1,2,3,4,5};//行数可以省略 列数不可以省略
int a[][3];//错

练习:杨辉三角 输出10阶 
1 0 0 0 0 
1 1 0 0 0
1 2 1 0 0
1 3 3 1 0
1 4 6 4 1

a[i][j]=a[i-1][j-1]+a[i-1][j]

#include<stdio.h>

int main()
{
    int a[10][10]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}};
    int i,j;
    
    for(i=1;i<10;i++)
    {
        for(j=1;j<10;j++)
        {
            a[i][j] = a[i-1][j-1]+a[i-1][j];
        }
    }
    
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            if(i>=j)
            {
                printf("%3d ",a[i][j]);
            }
        }
        putchar('\n');
    }
    return 0;

}

二、进制
1.进制
十进制:逢十进一 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
二进制:逢二进一  0000  0001  0010  0011 0100 0101 0110 0111.。。
八进制:逢八进一 00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17 20 21..
十六进制:逢十六进一 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11....

2.进制前缀:区分不同进制
八进制前缀:0 034
十六进制前缀:0x  0x4


3.二进制转换成其他进制 
二转十:
1100101=
1*2^0+0*2^1+1*2^2+0*2^3+0*2^4+1*2^5+1*2^6=1+4+32+64=101

二转八:
001 100 101=0145
 1   4   5

二转十六:
0110  0101=0x65
6      5

练习: 将下列二进制转为其他进制
           01101100   00101110 10010011   11010111
十进制     108           46       147        215  
八进制     0154         056       0223      0327
十六进制   0x6c        0x2e       0x93       0xd7


作业:
1。求两个矩阵对应元素之和 并将其放到第三个矩阵中 
int a[3][4];
int b[3][4];
int c[4][4];

2.输出一个N阶矩阵  矩阵中每个元素的形成规律是:
右上三角(含对角线)元素值为1  其他元素值为:行下标-列下标+1
1 1 1 1 1
2 1 1 1 1  
3 2 1 1 1
4 3 2 1 1
5 4 3 2 1

3.在一个二维数组中 判断是否存在这样的数值(鞍点) 
该值 在行中最大 同时在列中最小 例如:
1  2  6  4
1  6  7  8
9 10 11 12

6就是这样的数

猜你喜欢

转载自blog.csdn.net/daojuedi1023/article/details/81173489