先说一下打算吧,打算每天抽出一点时间学习JAVA。比特的课目前阶段对我来说比较轻松,后面几节准备看录播1.5倍速,可以随时记笔记,感觉效率更高。
今天也是刷了不少题
先总结一下上课内容吧,课上大部分知识都会没有学太多,感觉有点浪费时间了哈哈。
电脑中存放数据用内存存储。
其中内存分为好多块:速度从1-n依次递减 ,价格递增
1.寄存器(register):速度最快(也是最贵),但空间最小,一般以字节计
2.高速内存 一般多少MB
3.内存 8G/4G
4.硬盘 500G 1T
5.网盘
内存分为:栈区 存放一些临时变量(函数的形参,局部变量)
堆区 malloc realloc calloc free 动态内存分配
静态区:存放全局变量等 (程序开始时候创建 程序结束销毁)
数据区:存放01
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");
}
这道题两种解法
另一种是自己的方法 感觉还可以
思路是有序一次计数一次 若计满则为有序
#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
还有几道题明天写。。。。。。。。太晚了今天