程序设计第二版(c++语言程序设计教程第二版malloc函数在哪里)

:暂无数据 2025-08-23 22:40:02 0
大家好,如果您还对程序设计第二版不太了解,没有关系,今天就由本站为大家分享程序设计第二版的知识,包括c++语言程序设计教程第二版malloc函数在哪里的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

c++语言程序设计教程第二版malloc函数在哪里

到目前为止,掌握的内存开辟方式有:
int val = 10//在栈空间上开辟4个字节
int arr//在栈空间上开辟40个字节的连续空间
而这上述的方法都有两个特点:
开辟的空间大小是固定的
数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。
但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。
这时候就只能试试动态内存开辟了。
2. 动态内存函数的介绍
2.1 malloc和****
C语言提供了一个动态内存开辟的函数:
//返回类型:void*指针,参数要开辟空间的字节数
void* malloc(size_t size);
1
2
1
2
这个函数向内存申请一块连续可用的空间,并返回指向这块空间的起始字节的地址。
如果开辟成功,则返回一个指向开辟好空间的指针。
如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。
返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。
如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。
举个例子:
#include 《string.h》
#include 《errno.h》;
#include 《stdlib.h》
int main()
{
int arr = { 0 };
//开辟40个字节的空间
int* pa = (int*)malloc(40);
//如果为NULL表示开辟失败
//打印错误信息结束程序
if (pa == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
//正常使用
for(int i = 0; i 《 10 ++i)
{
*(pa + i) = i;
//等价于p
}
for(int i = 0; i 《 10 ++i)
{
printf("%d ", *(pa + i));
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
代码中数组的开辟形式与动态内存开辟的形式有什么不同呢?
首先它们的存储区域是不一样的,内存分为栈区、堆区和静态区。
栈区是用来存放局部变量、形式参数和临时性的变量等
堆区是用来存放malloc、calloc、realloc和****开辟和操作的空间。
而int arr = { 0 };这是在栈区上申请40个字节,通过int* pa = (int*)malloc(40);申请的空间则在堆区上,malloc申请的空间如果不够大,可以调整,而在栈区申请的空间大小不能随便乱动。
上面代码中虽然最后没有****(释放)掉申请的空间,但是并不意味着内存空间会泄露,当程序退出的时候,系统会自动回收内存空间的。
内存泄漏:这块空间分配给你,你用完之后不还回,这时这块空间你不用了你也不还,别人也不用不上了,如果永远不还,就意味着永远也拿不到该空间,这就意味着这块空间丢了,也就是内存泄漏
和malloc相关的函数是****,专门是用来做动态内存的释放和回收的,函数原型如下:
void **** (void* ptr);
1
1
****函数用来释放动态开辟的内存。
如果参数 ptr 指向的空间不是动态开辟的,那****函数的行为是未定义的(error)。
如果参数 ptr 是NULL指针,则函数什么事都不做。
int main()
{
int* pa = (int*)malloc(40);
if (pa == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
//正常使用完后释放,相当于把该内存空间
//还给操作系统了
****(pa);
//然后把pa赋值为空指针
//这是因为虽然释放了该内存块
//但是pa依然记得这块空间的起始地址
//所以要让pa彻底“失忆”
//不让它在指向这块空间
pa = NULL;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2.2 calloc
除了malloc,还提供了一个函数叫 calloc, calloc 函数也用来动态内存分配。原型如下:
//返回类型:void*指针,参数:要开辟数据的个数,数据大小所占的字节数
void* calloc (size_t num, size_t size);
1
2
1
2
函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0。
与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。
比如:
#include 《string.h》
#include 《errno.h》
#include 《stdlib.h》
int main()
{
//开辟40个字节的空间
int* pa = (int*)calloc(10, sizeof(int));
//如果为NULL表示开辟失败
//打印错误信息结束程序
if (pa == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
for (int i = 0; i 《 10; ++i)
{
printf("%d ", pa);
}
****(pa);
pa = NULL;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
在这里插入图片描述
calloc = malloc + memset.
2.3 realloc
realloc函数的出现让动态内存管理更加灵活。
有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的时候内存,我们一定会对内存的大小做灵活的调整。那 realloc 函数就可以做到对动态开辟内存大小的调整。
函数原型如下:
void* realloc (void* ptr, size_t size);
1
1
ptr 是要调整的内存地址
size 调整之后新大小
返回值为调整之后的内存起始位置。
这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到新的空间。
比如说:
int main()
{
int* pa = (int*)malloc(40);
if (pa == NULL)
{
printf("%s\n", strerror(errno));
return 1;
}
//赋值1~10
for (int i = 0; i 《 10; ++i)
{
*(pa + i) = i + 1;
}
//这时空间不够用了
//使用realloc来扩容
//把要调整空间的起始地址
//和增添后的空间总大小传参
//原来大小40,再增加40,所以是80
realloc(pa, 80);
//那么这个函数在内存中是怎么工作的?
//下面解释
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
realloc在调整内存空间的是存在两种情况:
情况1:原有空间之后有足够大的空间
情况2:原有空间之后没有足够大的空间
画图解释两种情况:
在这里插入图片描述
第二种情况,返回的新地址可以直接在赋值给pa吗?
其实是不可以的,如果realloc函数扩容失败了,返回了一个空指针赋值给了pa,pa本来还是指向原来的空间,结果为NULL之后连原来的空间都找不到了,因此正确的做法为:
int* ret = (int*)realloc(pa, 80);
if (ret != NULL)
{
pa = ret;
}
//使用..
****(pa);
pa = NULL;
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
做一个小转换就可以了,这样pa得到的才是有效的地址。
realloc(NULL, 40) == malloc(40)
1
1
如果频繁地开辟动态内存,会造成内存和内存之间存在空隙,也就是内存碎片化,如果这个碎片没有好好利用,就会导致内存的利用率和效率的下降。
效率下降是因为申请空间是在堆区上申请的,而堆区是操作系统管理的,所以使用malloc等函数申请空间是调用操作系统提供的接口,然后去堆区上申请空间,每次申请都要打断操作系统的执行,然后让操作系统帮我们去申请 ,而申请是需要浪费时间的,所以频繁的申请会导致效率的下降.
3. 常见的动态内存错误
对NULL指针的解引用操作
void test()
{
int *p = (int *)malloc(INT_MAX/4);
*p = 20;//如果p的值是NULL,就会有问题
****(p);
p = NULL;
}
1
2
3
4
5
6
7
1
2
3
4
5
6
7
合理的修改应该是对p进行判断:
#include 《stdio.h》
#include 《string.h》
#include 《errno.h》
void test()
{
int* p = (int*)malloc(INT_MAX / 4);
if (p == NULL)
{
printf("%s\n", strerror(errno));
//报错打印错误信息
return 1;
//然后结束程序
}
*p = 20;
****(p);
p = NULL;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
对动态开辟空间的越界访问
void test()
{
int i = 0;
int* p = (int*)malloc(10 * sizeof(int));
if (NULL == p)
{
exit(EXIT_FAILURE);
}
for (i = 0; i 《= 10; i++)
{
*(p + i) = i;
}
****(p);
p = NULL;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
一共就开辟了10个整形大小的空间,而循环访问到了第11个元素,即使是动态开辟的内存,也不能越界,因此循环条件该为 i《 10即可。
对非动态开辟使用****释放
void test()
{
int a = 10;
int* p = &a
****(p);//ok?
p = NULL;
}
1
2
3
4
5
6
7
1
2
3
4
5
6
7
此时运行程序会崩溃,因为p所指向的空间是栈区上的,并不是动态开辟的,****所释放的空间一定是malloc、calloc和realloc所开辟的。
使用****释放一块动态开辟内存的一部分
void test()
{
int* p = (int*)malloc(100);
p++;
****(p);//p不再指向动态内存的起始位置
p = NULL;
}
1
2
3
4
5
6
7
1
2
3
4
5
6
7
当对指针p进行++操作后,p就改变了,不再指针这块空间的起始地址,因此最后释放p会导致程序崩溃。
对同一块动态内存多次释放
void test()
{
int* p = (int*)malloc(100);
****(p);
****(p);//重复释放
p = NULL;
}
1
2
3
4
5
6
7
1
2
3
4
5
6
7
这也会导致程序崩溃,第一次释放已经把p所指向的空间还给操作系统了,但是p存放的还是刚才那块空间的起始地址,是个野指针,结果又释放一次,这下给编译器整不会了,我都帮你释放了呀,你咋还让我释放,那我就报错。所以要么释放一次p,要么释放一次把p置为空指针,然后再释放一次也不会有什么影响。
动态开辟内存忘记释放(内存泄漏)
void test()
{
int* p = (int*)malloc(100);

int flag = 0;
scanf("%d", &flag);
if (flag == 1)
{
return;
}
****(p);
p = NULL;
}
int main()
{
test();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
貌似逻辑没有什么问题,但是这段代码存在内存泄露的隐患,在test函数里,如果flag输入了一个1,那么函数调用直接结束,下面的释放和置空永远都没有机会执行,返回到主函数,test的栈空间销毁,那么p所指向的空间,程序就再也找不到了,那就意味着这块空间泄露了。
这里的泄露并不是说真实的物理内存不见了,而只是临时分配给程序的那部分空间不见了,程序关闭会自动回收。
忘记释放不再使用的动态开辟的空间会造成内存泄漏。
动态开辟的空间一定要释放,并且正确释放 。
4. 几个经典的笔试题
请问以下题目中运行Test 函数会有什么样的结果:
void GetMemory(char* p)
{
p = (char*)malloc(100);
}
void Test(void)
{
char* str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
int main()
{
Test();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
首先调用Test函数,创建一个指针变量str并赋值为NULL,然后调用函数GetMemory,参数为str,那么形参也要创建也一个指针变量p来接收,p也是一个空指针,然后用malloc函数来开辟一块100个字节的空间,并把这块空间的起始地址交给p来维护,因为形参只能在本函数内部使用,出了函数形参p销毁,但是malloc开辟的空间并不会销毁。
该函数调用完毕后回到Test,因为是传值调用,并没有传str的地址,所以操作形参并不会改变实参,此时的str还是一个空指针,下面紧接着对空指针str进行字符串拷贝程序会崩溃,因为空指针没办法解引用操作,所以最后printf会打印空,至此程序结束,而GetMemory函数内部用malloc开辟的空间也找不到了,所以也就永远没办法进行释放,这就导致了内存泄漏。
简单来说上述代码有两个问题:1. 解引用空指针崩溃,存在内存泄漏。
修改:GetMemory取出str的地址传参,形参用二级指针接收,然后解引用一次找到str,用str来维护malloc开辟的空间,最后使用完毕释放str,置空。
-----------------分割线------------------
char* GetMemory(void)
{
char p = "hello world";
return p;
}
void Test(void)
{
char* str = NULL;
str = GetMemory();
printf(str);
}
int main()
{
Test();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
首先调用Test函数,创建指针变量str并赋值为NULL,然后然后调用GetMemory函数,该函数内部创建数组p,然后返回p也就是数组首元素地址,出了函数数组p的空间就销毁了,此时把这块空间的地址赋值给str时,str的所指向的空间的内容是未知的,因为销毁后空间还给了操作系统,所以里面的内容如果被其它数据使用覆盖了,那么内容是未知的,也有可能没覆盖。所以如果没有被覆盖,可以打印出hello world,否者打印乱码。
因此该程序的问题是返回了局部变量的地址,出了作用域销毁后返回了一个野指针。
-----------------分割线------------------
void GetMemory(char** p, int num)
{
*p = (char*)malloc(num);
}
void Test(void)
{
char* str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
int main()
{
Test();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
这题和上面的第一题相似,只有一个问题就是使用完后没有****掉这块空间,这就导致函数调用完毕后再也无法找到str所指向的那块空间了,也就相当于内存泄漏。
修改:****(str); str = NULL;
-----------------分割线------------------
void Test(void)
{
char* str = (char*)malloc(100);
strcpy(str, "hello");
****(str);
if (str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
int main()
{
Test();
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
当****掉这块空间后,此时str依然指向那块内存空间的起始地址,但也是一个野指针,str != NULL为真进入if语句后,对野指针指向的地址进行字符串拷贝,因为那块空间已经不属于我们了,会造成非法访问,所以程序会崩溃。
也是一个野指针问题。
修改:在****后要及时把该指针置空即可。

c语言程序设计的图书目录

第1章 C语言基础知识
1.1 C语言概述
1.1.1 C程序的结构
1.1.2 C程序的上机步骤
1.2 C语言的基本数据类型
1.2.1 标识符
1.2.2 常量
1.2.3 变量
1.3 基本输入/输出函数
1.3.1 格式化输出函数
1.3.2 格式化输入函数
1.3.3 字符输入/输出函数
1.4 运算符和表达式
1.4.1 算术运算符与算术表达式
1.4.2 赋值运算符与赋值表达式
1.4.3 逗号运算符与逗号表达式
1.4.4 简单的位运算与位表达式
1.4.5 运算符的优先级
1.5 类型转换
1.5.1 隐式类型转换
1.5.2 显式类型转换
1.6 C程序展示
本章小结
习题
第2章 算法
2.1 算法的概念
2.2 利用计算机求解问题的一般过程
2.3 算法的描述
2.3.1 用自然语言描述算法
2.3.2 用流程图描述算法
2.3.3 用N-S流程图描述算法
2.3.4 用伪代码描述算法
2.3.5 用计算机语言描述算法
2.4 算法举例
本章小结
习题
第3章 C程序的控制结构
3.1 分支结构
3.1.1 关系表达式和逻辑表达式
3.1.2 if语句
3.1.3 条件表达式
3.1.4 switch语句
3.2 循环结构
3.2.1 while语句
3.2.2 do…while语句
3.2.3 for语句
3.2.4 break语句和continue语句
3.2.5 循环的嵌套
3.3 综合应用
本章小结
习题
第4章 数组与指针
4.1 数组
4.1.1 一维数组
4.1.2 二维数组
4.1.3 字符数组
4.2 指针
4.2.1 指针变量的定义与相关运算
4.2.2 指针与一维数组
4.2.3 指针与二维数组
4.2.4 指针数组
4.2.5 指针与字符串
4.3 动态内存分配
4.4 数组与指针综合应用
4.4.1 单词统计
4.4.2 排序
4.4.3 查找
4.4.4 进制转换
4.4.5 二维数组应用
本章小结
习题
第5章 函数
5.1 函数概述
5.1.1 函数的定义
5.1.2 函数的声明和调用
5.2 函数参数的传递方式
5.2.1 值传递方式
5.2.2 地址传递方式
5.3 函数的嵌套与递归
5.3.1 函数的嵌套调用
5.3.2 函数的递归调用
5.4 变量的作用域与存储类型
5.4.1 变量的作用域
5.4.2 变量的存储类型
5.5 内部函数和外部函数
5.5.1 内部函数
5.5.2 外部函数
5.6 编译预处理
5.6.1 宏定义
5.6.2 文件包含
5.6.3 条件编译
5.7 标准函数简介
5.7.1 字符串处理函数
5.7.2 字符处理函数
5.7.3 动态地址分配函数
5.7.4 数学函数
5.7.5 数据类型转换函数
5.7.6 其他函数
5.8 函数综合应用案例
5.8.1 字符串处理函数应用
5.8.2 函数指针应用
5.8.3 递归算法应用
本章小结
习题
第6章 结构体与共用体
6.1 结构体类型
6.1.1 结构体类型的定义和使用
6.1.2 指向结构体类型数据的指针
6.2 共用体与枚举类型
6.2.1 共用体
6.2.2 枚举类型
6.3 链表
6.4 结构体综合应用
6.4.1 学生成绩查询
6.4.2 个人通讯录
本章小结
习题
第7章 文件操作
7.1 文件概述
7.1.1 文件的概念
7.1.2 文件类型指针
7.1.3 文件的操作
7.2 文件的打开和关闭
7.2.1 文件打开函数
7.2.2 文件关闭函数
7.3 文件的顺序读/写
7.3.1 字符读/写函数
7.3.2 字符串读/写函数
7.3.3 格式化读/写函数
7.3.4 二进制文件读/写函数
7.4 文件的随机读/写
7.5 文件状态检查函数
7.5.1 文件读/写结束检查函数
7.5.2 文件出错检查函数
7.5.3 文件出错复位函数
本章小结
习题
第8章 C语言课程设计
8.1 C语言课程设计实施方案
8.2 C语言课程设计任务书1
8.3 C语言课程设计任务书2
8.4 C语言课程设计任务书3
8.5 C语言课程设计任务书4
8.6 C语言课程设计任务书5
附录A 常用字符与ASCII(十进制)对照表
附录B C语言课程设计模板
参考文献

c语言程序设计十进制数的分解与组合再组合成该整数的逆序数并输出

以下是一个C语言程序,可以将一个十进制整数分解成它的各个位数,并重新组合成其逆序数:
```c
#include《stdio.h》
int main()
{
int num, rev = 0;
printf("请输入一个正整数:");
scanf("%d", #);
while(num != 0)
{
int digit = num % 10; // 取得最低位数字
rev = rev * 10 + digit; // 将数字加到反向变量中
num /= 10; // 将数字除以10来删除已经处理过的位数
}
printf("该数字的反向数字为:%d\n", rev);
return 0;
}
```
例如,如果输入数字12345,则输出54321作为其反向数字。

跪求《C语言程序设计》课本习题答案!!!黄建灯主编

这个百度上面有现成的,直接搜索《C语言程序设计》课本习题答案黄建灯主编就有文档,下载下来就可以了

c语言程序设计教程课后答案 黄建灯

您好,这本书是由本校的老师进行编撰的教程,您可以向本校的学长学姐或者老师索要课后答案

C语言课程设计报告要求

  一 、 设计题目
  万年历的设计
  二 、设计要求
  1、能够显示星期;
  2、能够显示年月日;
  3、能够修改;
  4、当系统时间变动时,能自动跳到相应的时间。
  三 、 设计目的
  1. 通过本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!
  2. 通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。
  四 、设计思想及过程
  【一】由于万年历具有以下特点:
  1。平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。
  由于公元1月1日设为星期六,故3月1日为星期三。 ——注意这个“三”
  为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。
  2。每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。)
  所以百年%4=0闰或(年%4=0并且年《》0)闰。
  3。每 4年(3个平年+1个闰年)共208周+5天 ——注意这个“5天”
  每百年共100*(208周+5天)-1天=5217周+5天 ——注意这个“5天”(整百年暂设为平年)
  每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天——注意这个“0天”和
  “1天”(4个整百年只有一个闰年)
  即400年一轮回!(原来万年历400年前是一家)
  【二】根据万年历以上特点进行编写:
  首先对万年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为1、3、5、7、8、10、12就定义天数为31天反之如果月份为4、6、9、11就输出天数为30天,由上可见2月份为28天但是如果为闰年就有29天就要定义另一个函数#define Year(x) (x%4==0&&x%100!=0||x%400==0) ? 1:0当为闰年时可得1加上该程序便可得到每月的天数。 具体程序见(五、万年历程序)
  再对其中的星期进行编写:由于公元1月1日设为星期六,故3月1日为星期三,可以用万年3月1日星期算法(特别是那个三)
  由于其公式为:
  某年3月1日星期几=(3天+百年%4*5天+年/4*5天+年%4+月星期表+日-1天)%7
  某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7
  或 某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
  闰4百年3月1日星期算法(百年%4=0)
  其公式为:
  某年3月1日星期几=(年+年/4+月星期表+日+2天)%7
  例:0000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
  1600年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
  2000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三
  2001年3月1日星期几=(1+1/4+0+1+2)%7=4%7=星期四
  2004年3月1日星期几=(4+4/4+0+1+2)%7=8%7=星期一
  2008年3月1日星期几=(8+8/4+0+1+2)%7=13%7=星期六
  2042年3月1日星期几=(42+42/4+0+1+2)%7=55%7=星期六
  平4百年3月1日星期算法(百年%4《》0)
  其公式为:
  某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
  例:1700年3月1日星期几=(17%4*5+0+0/4+0+1+2)%7=8%7=星期一(注意:1700年是平年)
  1800年3月1日星期几=(18%4*5+0+0/4+0+1+2)%7=13%7=星期六(注意:1800年是平年)
  1900年3月1日星期几=(19%4*5+0+0/4+0+1+2)%7=18%7=星期四(注意:1900年是平年)
  1901年3月1日星期几=(19%4*5+1+1/3+0+1+2)%7=19%7=星期五
  1918年3月1日星期几=(19%4*5+18+18/4+0+1+2)%7=(15+22+3)%7=40%7=星期五
  1958年3月1日星期几=(19%4*5+58/4*5+58%4+3)%7=(15+70+2+3)%7=90%7=星期六
  1988年3月1日星期几=(19%4*5+88/4*5+88%4+3)%7=(15+110+0+3)%7=128%7=星期二
  1999年3月1日星期几=(19%4*5+99/4*5+99%4+3)%7=(15+120+3+3)%7=141%7=星期一
  2100年3月1日星期几=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7=8%7=星期一(注意:2100年是平年)
  2101年3月1日星期几=(21%4*5+1/4*5+1%4+3)%7=(5+0+1+3)%7=9%7=星期二
  2102年3月1日星期几=(21%4*5+2/4*5+2%4+3)%7=(5+0+2+3)%7=10%7=星期三
  2103年3月1日星期几=(21%4*5+3/4*5+3%4+3)%7=(5+0+3+3)%7=11%7=星期四
  2104年3月1日星期几=(21%4*5+4/4*5+4%4+3)%7=(5+1+0+3)%7=9%7=星期二(注意:2104年是闰年)
  9999年3月1日星期几=(99%4*5+99/4*5+99%4+3)%7=(120+15+3+3)%7=141%7=星期一
  注:按400年一轮回!(400年前是一家)的说法
  1600年,2000年是一样的;
  1700年,2100年是一样的;
  1800年,2200年是一样的;
  1900年,2300年是一样的。
  其中万年某日星期算法
  其公式为:
  某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7
  通同星期偏差表
  闰年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
  天数 31 29 31 30 31 30 31 31 30 31 30 31
  星期 3 6 0 3 5 1 3 6 2 4 0 2
  平年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
  天数 31 28 31 30 31 30 31 31 30 31 30 31
  星期 4 0 0 3 5 1 3 6 2 4 0 2
  为对以上的万年历星期的算法是正确的对其进行了以下的计算:
  ⒈对于二十世纪任意日期可以用公式某日星期几=(百年%4*5天+年+年/4+平年月星期表+日+2天)%7=(19%4*5天+年+年/4+平年月星期表+日+2天)%7=(15天+年+年/4+平年月星期表+日+2天)%7以下就是根据上面对其进行的计算:
  1900年元旦 1日=(0/4*5+0%4+1+3)%7=(0+0+4)%7=4
  1月表=4(平年) 故 4+4=1 即1900年元旦是星期一
  1949年国庆 1日=(49/4*5+49%4+1+3)%7=(60+1+4)%7=2
  10月表=4(平年) 故 4+2=6 即1949年国庆是星期六
  1999年12月31日 31日=(99/4*5+99%4+31+3)%7=(120+3+34)%7=3
  12月表=2(平年) 故 2+3=5 即1999年12月31日是星期五
  ⒉对于二十一世纪新前年虫算法(20%4*5=0)可以用公式:某日星期几=(百年%4*5天+年+年/4+闰年月星期表+日+2天)%7 =(20%4*5天+年+年/4+闰年月星期表+日+2天)%7以下就是根据上面对其进行的计算:
  2000年元旦 1日=(0+0/4+1+2)%7=(0+0+1+2)%7=3
  1月表=3(闰年) 故 3+3-》6 即2027年元旦是星期六
  2018年春节 16日=(18+18/4+16+2)%7=(18+4+16+2)%7=5
  2月表=0(平年) 故 0+5=5 即2018年春节是星期五
  2099年12月31日 31日=(99/4*5+99%4+31+2)%7=(120+3+33)%7=2
  12月表=2(平年) 故 2+2=4 即2099年12月31日是星期四
  对于上面的分析以及公式的推论和计算证明可以对万年历中的星期进行了编写具体编写程序见(五 、万年历程序)中。
  五 、万年历源程序
  #include"stdio.h"
  #include"dos.h"
  #include"conio.h"
  #include"stdlib.h"
  #define Year(x) (x%4==0&&x%100!=0||x%400==0) ? 1:0 /*判断闰年*/
  int numofMonth(int y,int m){
  int day,t=28;
  if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
  day=31; /*定义以上月份为31天*/
  else if(m==4||m==6||m==9||m==11)
  day=30; /*定义以上月份为30天*/
  else{t+=Year(y);
  day=t;} /*闰年二月29天,平年28天*/
  return day;}
  int numofYear(int y){
  int t=365; /*平年365天*/
  t+=Year(y);/*闰年366天*/
  return t;}
  int numofbeforeDays(int y,int m,int d){
  int sum=d,i;
  for(i=1;i《m;i++)
  sum+=numofMonth(y,i);
  return sum;}
  int numofafterDays(int y,int m,int d){
  int sum=0,i;
  for(i=m;i《=12;i++)
  sum+=numofMonth(y,i);
  sum-=d;
  return sum;}
  int isDay(int y,int m,int d){
  int year=1900,month=1,week=1,i; /*定义万年历是从1900年开始*/
  long sum=0;
  for(i=year;i《y;i++)
  sum+=numofYear(i);
  for(i=1;i《m;i++)
  sum+=numofMonth(y,i);
  /* ++sum;*/
  i=sum%7;
  week=(week+i)%7;
  return week;}
  void empty(int n){
  int i;
  for(i=0;i《n;i++)
  printf("%*c",6,’ ’);}
  void OutPutCalender(int y,int m,int d)/*计算x年x月x是星期几*/{
  int week,i,num,t;
  week=isDay(y,m,1);
  printf("%6d/%02d/%02d\n",y,m,d);
  printf("%6s%6s%6s%6s%6s%6s%6s\n","Sun","Mon","Tue","Wed","Thu","Fri","Sat");
  empty(week);
  num=numofMonth(y,m);
  for(i=1;i《=num;i++){
  printf("%6d",i);
  t=(week+i)%7;
  if(t==0)
  printf("\n");} /*光标移到下一行*/
  printf("\n");}
  long numBTDays(int y1,int m1,int d1,int y2,int m2,int d2)/*定义两个不同日期*/{
  int i;
  long sum=0;
  for(i=y1+1;i《y2;i++)
  sum+=numofYear(i);
  if(y1==y2){ sum-=d1;
  for(i=m1;i《m2;i++)
  sum+=numofMonth(y1,i);
  sum+=d2;}
  else{sum+=numofafterDays(y1,m1,d1);
  sum+=numofbeforeDays(y2,m2,d2);}
  return sum;}
  int Select_mean(){
  int **;
  printf("1. OutPut Calender\n"); /*输出当前月份的日历*/
  printf("2. Help\n"); /*帮助*/
  printf("0. Quit\n"); /*退出*/
  printf("Please enter choose(0--2):"); /*从0-2中选择*/
  do
  scanf("%d",&**); /*输入***/
  while(**《0||**》3);
  return **;}
  void Help()/*输出帮助栏的内容*/{
  printf(" 1. OutPut Calender\n");
  printf(" 2. System Help\n");
  printf(" 0. Quit\n");
  printf("Page Up: Up year\n"); /*上一年*/
  printf("Page Down: next year\n"); /*下一年*/
  printf(" --》 : next month\n"); /*上一月*/
  printf(" 《-- : Up month\n");/*下一月*/}
  main(){
  int year=2006,year1=2006,month,day,y1,m1,d1,y2,m2,d2,c,t; /*定义运行后的日期是2006年*/
  int inkeySCAN,inkey; /*输入键盘操作信息*/
  union REGS inregs,outregs;
  inregs.h.ah=0x2a;
  intdos(&inregs,&outregs);
  /* year=outregs.xcx; */
  month=outregs.h.dh;
  day=outregs.h.dl;
  year1=year;
  printf("%d/%02d/%02d\n",year,month,day);
  while(1)/*当选择为1时,执行以下语句*/{
  switch(Select_mean()){
  case 1:
  OutPutCalender(year,month,day);
  while(1){
  inkey=bioskey(0);
  inkeySCAN=(inkey&0xFF00)》》8;
  if(inkeySCAN==77){
  if(month==12){month=1;year1++;
  OutPutCalender(year1,month,day);/*输出日历*/}
  else{month++;
  OutPutCalender(year1,month,day);
  }}
  if(inkeySCAN==75){
  if(month==1){month=12;year1--;
  OutPutCalender(year1,month,day);}
  else{month--;OutPutCalender(year1,month,day);}}
  if(inkeySCAN==73){
  if(year1==1900) year1=year;
  else{year1--;OutPutCalender(year1,month,day);}}
  if(inkeySCAN==81){
  year1++;OutPutCalender(year1,month,day);}
  if(inkeySCAN==28)break;}
  break; /*终止循环*/
  case 2:
  Help();
  break;
  case 0:
  exit(0);
  default:
  printf("Enter ERROR!\n");
  break;} }
  }
  六 运行过程
  1.双击TC
  1. 当对上面的程序进行了调试后运行会出现下面所示:
  第一行所显示的就是系统时间!满足了第一条要求“显示年、月、日”。
  而当改变系统时间后!再运行该程序上面的日期也随系统时间改变,所以满足第四条“当系统时间变动时,能自动跳到相应的时间。”
  2. 在光标处按下“1”后回车,将会显示:
  以上的显示也证明了条件的第2条可以“显示星期!”
  3. 在光标处按下“2”后回车,将会显示:
  按着帮助所讲进行了运行可知:按“ Page Up ”键其下面接着会显示上一年该月的万年历,按“ Page Down ”键其下面会接着显示下一年该月的万年历;按“ ← ”键下面将会接着显示当年上一个月的万年历,按“ → ”键将会接着在下面显示去下一个月的万年历。
  4.
  由上所显示键入“0”后将会退去该程序。
  由以上运行的结果可知该c语言所设计的万年历满足设计要求!
  七、在C语言编程中常见错误
  C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给我们留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对我们这些初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,我通过这次编程,也积累了一些C编程时常犯的错误:
  1. 书写标识符时,忽略了大小写字母的区别。
  编译程序把a和A认为是两个不同的变量名,而显示出错信息。C语言认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
  2.忽略了变量的类型,进行了不合法的运算。
  %是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
  3.将字符常量与字符串常量混淆。
  混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a’和‘\’,而把它赋给一个字符变量是不行的。
  4.忽略了“=”与“==”的区别。
  在C语言中,“=”是赋值运算符,“==”是关系运算符。如:
  if (a==3) a=b;
  前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
  5.忘记加分号。
  分号是C语句中不可缺少的一部分,语句末尾必须有分号。
  a=1 b=2
  编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
  { z=x+y;
  t=z/100;
  printf("%f",t);
  }
  对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
  6.多加分号。
  对于一个复合语句,如:
  { z=x+y;
  t=z/100;
  printf("%f",t);
  };
  复合语句的花括号后不应再加分号,否则将会画蛇添足。
  又如:
  if (a%3==0);
  I++;
  本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
  再如:
  for (I=0;I《5;I++);
  {scanf("%d",&x);
  printf("%d",x);}
  本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
  7.输入变量时忘记加地址运算符“&”。
  int a,b;
  scanf("%d%d",a,b);
  这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。
  8.输入数据的方式与要求不符。scanf("%d%d",&a,&b);输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
  3,4
  输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
  scanf("%d,%d",&a,&b);C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
  3,4
  此时不用逗号而用空格或其它字符是不对的。
  3 4 3:4
  又如:
  scanf("a=%d,b=%d",&a,&b);
  输入应如以下形式:
  a=3,b=4
  9.输入字符的格式与要求不一致。
  在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
  scanf("%c%c%c",&c1,&c2,&c3);
  如输入a b c
  字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
  10.输入输出的数据类型与所用格式说明符不一致。
  例如,a已定义为整型,b定义为实型
  a=3;b=4.5;
  printf("%f%d\n",a,b);
  语法错
  逻辑错 运行错
  0.忘记定义变量:
  main()
  {x=3;y=6;
  printf(“%d\n”,x+y);
  11.C语言的变量一定要先定义才能使用;
  12.输入输出的数据的类型与所用格式说明符不一致
  int a=3;float b=4.5;printf(“%f%d\n”,a,b);
  它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出)
  13.未注意int型数据的数值范围
  int型数据的数值范围(-32768~32768)
  int num=89101;
  printf(“%d”,num);
  会将超过低16位的数截去从而得到23563
  注意:定义了long型,而在输出时仍用”%d”说明符,仍会出现以上错误
  14.输入变量时忘记使用地址符
  scanf(“%d%d”,a,b);
  15.输入时数据的组织与要求不符
  对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入
  16.误把”=“作为”等于”比较符
  “=“为附值运算符
  “==“为比较运算符
  17.语句后面漏分号
  {
  t=a;
  a=b;
  b=t
  }
  它是pascal的语法
  18.不该加分号的地方加了分号
  if(a》b);
  printf(“a is larger than b\n”);
  for(i=0;i《10;i++);
  {
  scanf(“%d”,&x);
  printf(“%d\n”,x*x);
  }
  19.对应该有花括弧的复合语句,忘记加花括弧
  sum=0;
  i=1;
  while(i《=100)
  sum=sum+1;
  i++;
  20.括弧不配对
  while((c=getchar()!=‘#’)
  putchar(c);
  11.在用标识时,忘记了大写字母和小写字母的区别
  {
  int a,b,c;
  a=2;
  b=3;
  C=A+B;
  printf(“%d+%d=%D”,A,B,C);
  }
  12.引用数组元素时误用发圆括弧
  {
  int i,a(10);
  for(i=0;i《10;i++)
  scanf(“%d”,&a(i));
  }
  13.在定义数组时,将定义的”元素个数”误认为是”可使用的最大下标值
  {
  int a={1,2,3,4,5,6,7,8,9,10};
  int i;
  for(i=1;i《=10;i++)
  printf(“%d”,a);
  }
  14.对二维或**数组的定义和引用的方法不对
  {
  int a;
  …
  printf(“%d”,a);
  …
  }
  15.误以为数组名代表数组中全部元素
  {int a={1,2,3,4};
  printf(“%d%d%d%d”,a);
  }
  16.混淆字符数组与字符指针的区别
  main()
  {
  char str;
  str=“Computer and c”;
  printf(“%s\n”,str);
  }
  17.在引用指针变量之前没有对它赋予确定的值
  {
  char *p;
  scanf(“%s”,p);
  }
  {
  char *p,c;
  p=c;
  scanf(“%s”,p);
  }
  18.switch语句的各分支中漏写 break语句
  混淆字符和字符串的表示形式
  …
  char ***;
  ***=“M”;
  …
  19.使用自加(++)和自减(--)运算符时出的错误
  {
  int *p,a={1,3,5,7,9};
  p=a;
  printf(“%d”,*p++);
  }
  注意于*(++p)的区别;
  20.所调用的函数在调用语句之后才定义,而又在调用前未加说明
  main()
  {float x,y,z;
  x=3.5;y=-7.6;
  z=max(x,y);
  printf(“%f”,z);
  }
  编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。
  八、心得体会
  1. 目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。然而,这些程序都千篇一律的局限在一个很短的时间范围内。(Windows各个版本一般都局限在1980年至2099年这一范围内),但是,在很多情况下,特别是在众多的科学研究领域中,一个时间跨度较大的日历程序是很有参考价值的。C程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:C程序设计语言作为计算机语言家族的新生事物,其发展前景是极为广阔的。
  2. 经过上一个学期对《C程序设计》的学习,我们学习了理论知识,了解了C语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。通过课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
  3. 通过对c语言万年历的设计进一步的巩固了用c语言编写程序,并且有利于更好的掌握c语言!
  4. 在万年历的编写过程中也体会到了做事情一顶要细心、认真。更加知道了要掌握好基础知识。还有体会到了成功的感觉!在万年历的设计过程中更加体会到了团队合作的重要性,“一个诸葛亮比不上三个臭皮匠。”知道了只有团队合作才会更好的完成设计!也体会到以后在工作中团队合作的必要性和重要性!
  5. 通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!
  6. 由于C语言是近年在国内外得到迅速推广应用的一种语言。C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。通过这次的c语言程序设计更加了解了c语言的好处和其可用性!
  7. 在这次课程设计中也知道了自己的动手能力不强有待进一部的提高!在设计过程中不能够把书本上的知识与实践相结合,这也就增加了设计不好该程序的想法!在设计过程中的一次次设计错误增加了我放弃的想法!不过经过大家的努力终于完成了课程设计!完成该程序后想起自己以前的每一次对自己失去信心,就觉得并不是在知识掌握上打败了,而是自己对自己缺乏信心!只要自己对自己不失去信心相信就可以完成那些以前认为完成不了的事情!也让我懂得了要想成功首先就必须有很强的自信心!懂得了自己以后要在做任何事情时都要自信!当自己都不相信自己能够成功时还可能会获得成功吗?
  8. 在C语言程序设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础!
  九、参考文献
  ⒈谭浩强编著.C程序设计第二版〔M〕.北京:清华大学出版社,1999
  ⒉陈朔鹰,陈英编著.C语言趣味程序百例精解〔M〕.北京:北京理工大学出版社,1994
  ⒊电脑知识与技术学术交流版〔J〕2005.2 (备注:来自网络资源)
  ⒋Herbert Schildit著. 戴健鹏译. C语言大全 (第二版)〔M〕.北京:电子工业出版社,1994
  ⒌谭浩强,张基温,唐永炎编著. C语言程序设计教程.〔M〕北京: 高等教育出版社,1992
  ⒍秦友淑,曹化工编著. C语言程序设计教程. 〔M〕武汉:华中理工大学出版社,1996
  ⒎曹衍龙,林瑞仲,徐慧 编著.C语言实例解析精粹 〔M〕北京:人民邮电出版社,2005.3
  ⒏黄明等编著.21世纪进阶辅导C语言程序设计. 〔M〕大连理工大学出版

c++语言程序设计教程第二版malloc函数在哪里的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c++语言程序设计教程第二版malloc函数在哪里、c++语言程序设计教程第二版malloc函数在哪里的信息别忘了在本站进行查找哦。
本文编辑:admin

本文相关文章:


exception e(C# try catch finally 里面写Exception e是为什么这个e有什么用Exception e能改成别的吗)

exception e(C# try catch finally 里面写Exception e是为什么这个e有什么用Exception e能改成别的吗)

大家好,如果您还对exception e不太了解,没有关系,今天就由本站为大家分享exception e的知识,包括C# try catch finally 里面写Exception e是为什么这个e有什么用Exception e能改成别的

2025年8月21日 13:00

c语言函数参数是什么意思(c语言函数参数)

c语言函数参数是什么意思(c语言函数参数)

大家好,如果您还对c语言函数参数是什么意思不太了解,没有关系,今天就由本站为大家分享c语言函数参数是什么意思的知识,包括c语言函数参数的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2025年8月20日 21:20

sleep延时函数(python 精确到毫秒延时函数,一般的time.sleep延时不精确,希望提供一个非常精确的解决办法 谢谢)

sleep延时函数(python 精确到毫秒延时函数,一般的time.sleep延时不精确,希望提供一个非常精确的解决办法 谢谢)

“sleep延时函数”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看sleep延时函数(python 精确到毫秒延时函数,一般的time.sleep延时不精确,希望提供一个非常精确的解决办法 谢谢)!

2025年8月19日 19:40

更多文章:


古代颜色诗意的叫法(古代对颜色的雅称)

古代颜色诗意的叫法(古代对颜色的雅称)

大家好,关于古代颜色诗意的叫法很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于古代对颜色的雅称的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

delay组合(快男delay组合资料)

delay组合(快男delay组合资料)

大家好,关于delay组合很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于快男delay组合资料的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

极客解码base64网页版(burpsuite 怎么解码base64)

极客解码base64网页版(burpsuite 怎么解码base64)

其实极客解码base64网页版的问题并不复杂,但是又很多的朋友都不太了解burpsuite 怎么解码base64,因此呢,今天小编就来为大家分享极客解码base64网页版的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

美国队足球实力怎么样美国世界杯阵容2022?美锦赛:美国男篮小组赛不敌墨西哥,如何评价这起赛事

美国队足球实力怎么样美国世界杯阵容2022?美锦赛:美国男篮小组赛不敌墨西哥,如何评价这起赛事

大家好,关于美国队小组很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于美国队足球实力怎么样美国世界杯阵容2022的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

matlab的基本指令(MATLAB里面关于.*是怎么用的)

matlab的基本指令(MATLAB里面关于.*是怎么用的)

大家好,今天小编来为大家解答以下的问题,关于matlab的基本指令,MATLAB里面关于.*是怎么用的这个很多人还不知道,现在让我们一起来看看吧!

table表格的样式(如何使用CSS样式表统一定义table和td标记样式能举个实例吗)

table表格的样式(如何使用CSS样式表统一定义table和td标记样式能举个实例吗)

各位老铁们,大家好,今天由我来为大家分享table表格的样式,以及如何使用CSS样式表统一定义table和td标记样式能举个实例吗的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家

idea配置java环境变量(idea未设置环境变量名称)

idea配置java环境变量(idea未设置环境变量名称)

其实idea配置java环境变量的问题并不复杂,但是又很多的朋友都不太了解idea未设置环境变量名称,因此呢,今天小编就来为大家分享idea配置java环境变量的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

nullpointerexception: null(点开网页java.lang.nullpointerexception怎么解决)

nullpointerexception: null(点开网页java.lang.nullpointerexception怎么解决)

本篇文章给大家谈谈nullpointerexception: null,以及点开网页java.lang.nullpointerexception怎么解决对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各

php购物车修改商品数量怎么做(ecshop 修改购物车中的购物数量,代码如下,为什么点击加减图片没有得到相应的效果呢急)

php购物车修改商品数量怎么做(ecshop 修改购物车中的购物数量,代码如下,为什么点击加减图片没有得到相应的效果呢急)

本篇文章给大家谈谈php购物车修改商品数量怎么做,以及ecshop 修改购物车中的购物数量,代码如下,为什么点击加减图片没有得到相应的效果呢急对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助

anaconda pycharm使用教程(anaconda python 怎么使用)

anaconda pycharm使用教程(anaconda python 怎么使用)

这篇文章给大家聊聊关于anaconda pycharm使用教程,以及anaconda python 怎么使用对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

最近更新

delay组合(快男delay组合资料)
2025-08-24 04:00:01 浏览:0
热门文章

口语100下载(口语100电脑版怎样下载)
2025-06-27 09:00:02 浏览:10
premiere pro怎么读(premiere怎么读)
2025-06-27 05:00:01 浏览:9
标签列表