c语言

C语言编程优化运行速度

混江龙づ霸主 提交于 2020-04-06 04:02:18
1、选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。 在许多种情况下,可以用指针运算代替数组索引,这样做常常能产生又快又短的代码。与数组索引相比,指针一般能使代码速度更快,占用空间更少。使用多维数组时差异更明显。下面的代码作用是相同的,但是效率不一样。 数组索引 指针运算 For(;;){ p=array A=array[t++]; for(;;){ a=*(p++); 。。。。。。。。。 。。。。。。 } } 指针方法的优点是, array 的地址每次装入地址 p 后,在每次循环中只需对 p 增量操作。在数组索引方法中,每次循环中都必须根据 t 值求数组下标的复杂运算。 2、使用尽量小的数据类型 能够使用字符型 (char) 定义的变量,就不要使用整型 (int) 变量来定义;能够使用整型变量定义的变量就不要用长整型 (long int) ,能不使用浮点型 (float) 变量就不要使用浮点型变量。当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值, C 编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。 在

c语言中的代码优化《转》

痴心易碎 提交于 2020-04-06 03:03:44
在性能优化方面永远注意80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。不要优化程序中开销不大的那80%,这是劳而无功的。 第一招:以空间换时间   计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值: 方法A:通常的办法 #define LEN 32 char string1 [LEN]; memset (string1,0,LEN); strcpy (string1,"This is a example!!"); 方法B: const char string2[LEN] ="This is a example!"; char * cp; cp = string2 使用的时候可以直接用指针来操作。 从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活 性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执 行的高效率。 如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。 第二招: 使用宏而不是函数。   这也是第一招的变招

第1次作业

江枫思渺然 提交于 2020-04-05 23:41:11
一、学习内容总结 1.经过这几周的学习,总结一下学习的心得与体会。(不少于100字;10分) c语言是一种结构化语言,是大部分编程语言的基础,c语言学好了,以后的java,c#以及更多的编程语言才有可能学好。下面就跟南宁达内小编一起,要学好c语言必须了解的四点: 1、课前认真预习,把下一节要上的内容先自己看一遍,把不懂的地方打个标记,等上课的时候可以请教老师。理解书上的例子,搞懂每个语句的含义,用法。看完后尝试着不看例子自己编写程序,编完以后再跟书上进行比较,看自己的程序还有哪方面的不足,再进行改正。想要真正学好c语言光看书是不够的,一定要自己多动手。 2、上课认真听讲积极思考,提高上课效率。老师上课讲述的都是课程的重点和难点,听好课程可以达到"事半功倍"的目的。 3、课后复习。把每天的上课内容回家再温习一遍,独立完成课后的作业,如果有时间,最好能找点课外书籍、课外习题什么的来巩固所学的内容。 4、主动上机,多多实践,提高动手能力。通过上机实践来验证所学的理论,通过在机器上查找错误来巩固概念,通过提高上机能力来促进理论学习,开阔编程思路,提高反映速度,提高分析问题解决问题的能力,锻炼心理素质,提高心理承受能力 二、学习及作业中遇到的问题及解决过程(不少于3个问题,30分) 问题1 代码太长,导致一些常用的代码记不住; 答:多打代码,进行练习,熟能生巧。 问题2 对于初学者来说

Linux下的C语言基础-4

流过昼夜 提交于 2020-04-05 21:05:17
实现一个字符串拷贝 main.c文件 1 #include <stdio.h> 2 #include "str_cpy.h" 3 4 int main(int argc, const char *argv[]) 5 { 6 char c[128] = {0}; 7 char c1[128]; 8 char *s=c1; 9 scanf("%[^\n]",s); 10 char *p = str_cpy(c,s); 11 12 printf("c[128]从终端考贝的数据是:%s\n",c); 13 14 return 0; 15 } View Code str_cpy.c文件 1 #include "str_cpy.h" 2 3 char *str_cpy(char *s,char *c) 4 { 5 6 char *p = s; 7 char *q; 8 int i=0; 9 for(q=c;*q!='\0';q++) 10 { 11 *p=*q; 12 p++; 13 14 } 15 16 return s; 17 } View Code str_cpy.h 1 #ifndef __STR_CPY_H 2 #define __STR_CPY_H 3 4 #include <stdio.h> 5 6 char *str_cpy(char *s,char *c); 7 8

网站地图

我是研究僧i 提交于 2020-04-05 20:40:06
ASP.NET 提供了网站地图提供器XMLSiteMapProvider,使用XMLSiteMapProvider可以从XML文件中获取网站地图信息 XmlSiteMapProvider会从根目录中寻找名为Web.sitemap的文件来读取信息,在解析Web.sitemap文件中的网站地图数据后创建一个网站地图对象,此网站地图对象能够被SiteMapDataSource使用,SiteMapDataSource可以被放置在页面上的导航控件使用,最终由导航控件把网站的导航信息显示在页面上 创建网站地图 使用VS创建的站点地图文件会自动生成组成网站地图的基本结构 创建站点地图要遵循的原则 1、网站地图以<siteMap>元素开始以</siteMap>元素结束,其他信息放在<siteMap>元素和</siteMap>元素之间 2、每一页由<siteMapNode>元素来描述。每一个站点地图文件定义了一个网站的页面组织结构,可以使用<siteMapNode>元素向这个组织结构插入一个页面,页面包含页面的名称、 页面的描述以及URL 3、<siteMapNode>元素可以嵌套。一个<siteMapNode>元素表示一个页面,通过嵌套<siteMapNode>元素可以形成树形结构的页面组织结构 4、每一个站点地图都是以单一的<siteMapNode>元素开始的。每一个站点地图都要包含一个根节点

java学习的第一阶段总结

爷,独闯天下 提交于 2020-04-05 19:37:17
前言:在大一学习了C语言之后,基本掌握了一门面向过程的程序设计语言,本学期所学习的java是一门面向对象的语言,在问题的解决方面不像C一样是以过程来思考问题,而是要以面向对象的思维来解决问题。此篇文章是对于本学期前三次Java作业的一个阶段性总结,第一次作业花费了最多的时间,有一个测试点没有过,第二次花费了大概3.5小时,第三次大概花费了8小时,作业难度不大,只是需要自主学习的知识还有很多。 1.作业过程总结:   三次作业逐步将面向对象思维体现: 第一次的作业没看出老师所讲的啥叫面向对象思维,也不知道这种思维写作业和C语言有什么不一样。于是乎,第一次的作业我是在思考面向对象的基础上写出来的代码,但是写完之后总看不出啥为面向对象,啥为面向过程。脑海里只浮现老师所讲的:创建个对象、使用该对象的某个方法......稀里糊涂的,过程和对象好像没啥区别,也就那样用,随后就写完代码提交得了。 第二次作业来了,提出了更多要求,不再像第一次那样没有限制地写代码,而是点名要创建固定地方法名称。在第一次作业思索了这么久地面向对象地基础上,再加上老师已经给了提示(要求写出对应地方法),写起第二次作业来还算是比较上手,分分钟我就写好了一个题(代码写的比较慢,但思路还算是清晰),开始有点理解了啥是面向对象。 在第三次作业来之前,老师给教过了UML类图,因此第三次作业果不其然地出现了

第一阶段作业总结

时光总嘲笑我的痴心妄想 提交于 2020-04-05 16:36:37
------------恢复内容开始------------ 前言 第一阶段的作业总共有三次PTA上的作业,第一次作业有5题,第二次以及第三次作业都为4题并且题目基本是相同的,但是要求确实不同的编程思维,所以我个人感觉第一阶段的作业重点在让我们由原本的面向过程的编程方式慢慢过渡到目前我们所重点学习的面向对象编程方式。经过本次作业可以让我们从了解面向对象思维到运用面向对象思维方式到我们的编程过程之中。我个人感觉Java毕竟是C语言基础上发展的语言,所以可以说比C语言更有优势,C语言中需要对函数和变量进行定义和声明,而JAVA只用定义,不用声明; Java语言有new关键字,用于创建引用对象,C语言没有此类关键字; C语言不是面向对象的,而是面向过程,而JAVA是面向对象的语言;C语言可以直接操作内存,而JAVA不能;C语言有指针,而JAVA没有等等。 1.作业过程总结 ①总结三次作业之间的知识迭代关系; 第一次作业算是简单的循环运用,第二、三次则较复杂同时第三次要求运用面向对象的思维来编写。 ②如何通过作业逐步从面向过程过渡到面向对象; 在第一次作业以及第二次作业我编程时感觉回到了大一学习C语言时的前几次作业,题目类型差不多此外就是编程时的思维方式改变还不太大,但第三次作业编写时明显感觉与前两次不同,并且由于第二次作业与第三次作业的题目相同

OS实现流程草稿

放肆的年华 提交于 2020-04-05 15:50:43
实现一个OS需要现在网上搜索 不要在Windows环境下写 nasm等汇编编译器的语法 bois中断函数使用 内存分布 描述符 实模式与保护模式 从实模式到保护模式比较难,可以从网上找一些代码能运行自己理解就行了 页表 硬盘与软盘的结构 制作软盘:高级语言编写工具或者直接只用Linux下的命令行工具 系统算法 与硬件有关的操作(端口,相应中断等)都用汇编写了,逻辑在C中写,必要时调用汇编中的函数,接着再调用C语言封装好的函数 汇编应该实现的操作(被C语言调用) 端口的读入读出 流程 先写一个Hello world=》测试 将Hello world改写为bootloader和kernel=》测试 在kernel中实现实模式到保护模式-》测试 可以用C语言了(因为C语言需要堆栈,所以需要在kernel中配置堆栈的描述符和内存空间(定义512或者其他),关于GDT的修改都是在进入保护模式之前) 将显卡从字符模式切换到图形模式(调用BIOS函数)=》测试 界面 将显卡的图形模式再转为调色板模式=》测试绘制背景图形 绘制字体和字符串(Windows NT的内核就是通过将调试信息绘制在屏幕上实现Windows NT内核的调试的,又因为画字体不方便,于是写了GDI相关的API,Windows NT的GUI就是在内核态的,Linux没有这样子使用,它使用的还是文本模式) 绘制鼠标 图像分层

c语言-指针

孤街醉人 提交于 2020-04-05 15:34:03
指针 一、指针的地址 1、变量的地址 计算机中,数据存储在内存中,内存可划分为若干存储单元,每个单元可以存放8位二进制数,即1个字节。内存单元采用线性地址编码,每个单元具有唯一一个地址编码。 【1】变量的地址: 系统 为变量分配的内存单元的地址(内存中每一个字节都有一个编号, 就是“地址”,是一个 无符号整型数 ) 【2】变量的有关概念 存储内容:数据值 空间大小:数据类型 空间位置:地址 生存周期:存储类别 2、变量的访问方式 【1】直接访问 int a; float b; a = 3; //直接将3放入a的地址 b = 4; 【2】间接访问:定义一个变量p,存放a的地址,通过p来访问a 3、指针变量: 存放地址的变量 例:p为指针变量,它存放整型变量a的首地址,就称指针变量p 指向 整型变量a 二、指针变量的定义与引用 指针变量在使用前必须定义,使其指向特定类型的变量,指针变量存放地址,必须定义为“指针类型”。 1、定义方法   类型符 *指针变量名 指针变量的类型 所指向的内存中存放的数据的类型 int *p1,*p2; char *ps; float *pf1,*pf2; 2、指针变量的赋值 【1】指针变量的值为地址,是一个无符号整数, 但不能直接将整型常量赋给指针变量 。 注:变量的类型必须与指针变量的类型相同,若不赋值,则指针变量的值是随机的( 会很危险