2022/10/20总结

 

先说一下打算吧,打算每天抽出一点时间学习JAVA。比特的课目前阶段对我来说比较轻松,后面几节准备看录播1.5倍速,可以随时记笔记,感觉效率更高。


今天也是刷了不少题

先总结一下上课内容吧,课上大部分知识都会没有学太多,感觉有点浪费时间了哈哈。

电脑中存放数据用内存存储。

其中内存分为好多块:速度从1-n依次递减 ,价格递增

1.寄存器(register):速度最快(也是最贵),但空间最小,一般以字节计

2.高速内存               一般多少MB 

3.内存  8G/4G

4.硬盘 500G 1T

5.网盘

内存分为:栈区         存放一些临时变量(函数的形参,局部变量)

                  堆区        malloc realloc  calloc free 动态内存分配

                  静态区:存放全局变量等 (程序开始时候创建 程序结束销毁)

                  数据区:存放01

2022/10/20总结_第1张图片


extern (A文件引用B文件的局部变量的时候用extern声明,就像你用别人东西要和别人说一声一样)

eg:extern int a;

static 可以修饰三种{局部变量,全局变量,和函数}

1.修饰局部变量的时候会延长生命周期,但是作用域还是不变的,还有只被初始化一次,

static int a=0;循环的话这句只执行一次。

2.修饰全局变量的时候,另一个文件即使extern也不能用这个全局变量了。

3.修饰函数也是另一个.c文件不能用 被限制了,只能该.c使用。

函数本身具有外部链接属性的,被static修饰后外部链接属性就变成内部链接属性,使得这个函数只能在自己所在的源文件内部使用,外部就算用extern也不能使用


#define  宏定义+宏替换

宏替换

#define MAX 100

就是 把MAX替换为100 是常量

宏定义(类似于一种简便并且处理简单问题的函数)

#define max(a,b)(a>b?a:b)


一个16进制占4个Bit位

因为最大数15--的二进制是1111 4个比特位

所以两个16进制就占用了一个字节

scanf返回值是输入的数据个数  如

scanf("%d %d",&a,&b) 返回值是2

输入几个数 返回值就是几


思考一下为什么指针在32位和64位的内存不同?

因为32位 :是一个内存32占个bit位

所以指针所占字节是32/8=4

同理64位  指针所占8个字节


刷的经典例题

有序序列判断_牛客题霸_牛客网 (nowcoder.com)

 

#include 
 #define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{	//有序序列的判断
	int arr[50];
	int flag1 = 0;
	int flag2 = 0;
	int n;
	scanf("%d", &n);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < n-1; i++)
	{
		if (arr[i] > arr[i+1])
			flag1 = 1;
		else
			flag2 = 1;

	}
	if (flag1 + flag2 == 1)
		printf("sorted");
	else
		printf("unsorted");

}
        

这道题两种解法

另一种是自己的方法 感觉还可以

2022/10/20总结_第2张图片

 思路是有序一次计数一次 若计满则为有序

#include 
 #define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{	//有序序列的判断
	int arr[50];
	int flag1 = 0;
	int flag2 = 0;
	int n;
	scanf("%d", &n);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < n-1; i++)
	{
		if (arr[i] > arr[i+1])
			flag1++;
		else
			flag2++;

	}
	if (flag1==n-1||flag2==n-1)
		printf("sorted");
	else
		printf("unsorted");

}
        

序列中删除指定数字_牛客题霸_牛客网 (nowcoder.com)

//删除指定数字
	int n;
	scanf("%d", &n);
	int i;
	int arr[50];
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	int delete;
	scanf("%d", &delete);
	int j = 0;
	for (i = 0; i < n; i++)
	{	//换个思路 如果思路是要把删除的元素从后向前覆盖掉,那么要移动大量的元素,
		//并且下标很绕,不如把不相等的再赋给它 ,然后输出这些新赋值的数组即可
		if (arr[i] != delete)
		{
			arr[j++] = arr[i];
			//注意最后一次j的数组赋完值以后,j又加了1所以arr[j-1]是最后一个数组元素,那么数组长度就为(j-1)+1
		}
	}
	for (i = 0; i < j; i++)//数组长度为j
	{
		printf("%d ", arr[i]);
	}


杨辉三角

杨辉三角_牛客题霸_牛客网 (nowcoder.com)

要打印这个杨辉三角

首先你要会打印这个三角形形状 这个用循环控制

#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
    int n;
    scanf("%d", &n);
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j <= i; j++)
        {
            printf("* ");
        }
        printf("\n");
    }
}

然后第二部杨辉三角的边界都为0

然后再按规律 内部的每个数都是上面的和左上方的和

输入然后输出即可

    #define _CRT_SECURE_NO_WARNINGS 1
    #include
    int main()
    {
        int n;
        int arr[30][30];
        scanf("%d", &n);
        int i, j;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j <= i; j++)
            {
                if (j == 0 || i == j)
                    arr[i][j] = 1;
                else
                    arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            }
            printf("\n");
        }
        for (i = 0; i < n; i++)
        {
            for (j = 0; j <= i; j++)
            {
                printf("%5d", arr[i][j]);
            }
            printf("\n");
        }
    }


序列中整数去重_牛客题霸_牛客网 (nowcoder.com)

    #define _CRT_SECURE_NO_WARNINGS 1
    #include
    int main()
    {
        int n,i,j,k;
        int arr[100];
        scanf("%d", &n);
        for (i = 0; i < n; i++)
        {
            scanf("%d",&arr[i]);
        }
        for (i = 0; i < n; i++)//遍历这些数
        {
            for (j = i + 1; j < n; j++)//遍历的其中一个数和它后面的数进行比较
            {
                if (arr[i] == arr[j])
                {//如果相等把后面的相等的那个覆盖(依次向前还要循环)
                    for (k = j; k < n-1; k++)
                    {
                        arr[k] = arr[k + 1];//覆盖完之后还要判断 1 2 3 3 3 4 5 6这种情况
                                            //
                    }
                    n--;//覆盖完少一个
                    j--;//还要判断相同元素的下一个 如果不j--就会跳过一个元素
                }
            }
            
        }
        for (i = 0; i < n; i++)
                printf("%d ", arr[i]);
    }

有序序列合并_牛客题霸_牛客网 (nowcoder.com)

#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
        int m, n;
        int i, j;
        scanf("%d %d", &n, &m);
        int arr[1000];
        int ARR[1000];
        int result[2000];
        for(i=0;i

还有几道题明天写。。。。。。。。太晚了今天

你可能感兴趣的:(总结,博客,java,jvm,开发语言,c++,c语言)