c 语言编程学习 编程环境_更少学习:可编程样式表语言

c 语言编程学习 编程环境

我不喜欢CSS。 干净利落。 它使World在Web上运转,但语言具有限制性且难以管理。 现在是时候精通该语言,并在LESS的帮助下使用动态CSS来使其更加有用。

让我马上用一个例子来说明我的观点。 与其使用#FF9F94获得深桃红色,不如将颜色值存储在变量中并仅使用该变量会更容易吗? 如果要重新着色网页,只需在一个位置更改变量的值即可。

换句话说:如果我们可以在CSS中使用一些编程和逻辑使其成为更强大的工具,那将是非常好的。 好消息是,借助LESS我们可以做到!

什么是更少 ?

LESS是CSS的超集。 这意味着所有CSS代码都是有效的LESS代码,但是LESS中还有一些其他元素在CSS中无效。 这非常好,因为您现有CSS已经是有效的LESS代码,从而最大程度地减少了使用LESS的学习难度。

LESS为CSS添加了许多急需的动态属性。 它将变量,操作,类似函数的元素甚至Javascript引入了组合。 通过使您能够以模块化的思维方式编写样式表,这将使您的生活无忧。

如何使用LESS

有两种使用LESS的方法。 您可以创建一个LESS文件并使用Javascript文件按需转换它,也可以对其进行预编译并使用生成CSS文件。 如果因为看到“编译”一词而感到害怕(我一直都这样),请不要去任何地方,这非常容易。

使用LESS Javascript文件

首先前往LESS网站并获取Javascript文件。 拥有它之后,您需要做的就是将其链接到您的页面,就像其他任何Javascript文件一样。

<script src="less.js" type="text/javascript"></script>

接下来,创建一个扩展名为.less的文件,并使用以下代码将其链接到您的页面:

<link rel="stylesheet/less" type="text/css" href="style.less">

确保在Javascript文件之前链接LESS文件。

设置完成后,您可以将现有CSS代码粘贴到LESS文件中,或者只编写一些新规则-它应该像普通CSS一样工作。

编译LESS文件

尽管这比较繁琐,但在某些情况下是首选。 LESS通过获取您编写的所有LESS代码并将其即时转换为CSS来工作。 无需按需执行此操作,我们可以转换LESS文件,保存CSS输出并使用它,而不是在每次加载页面时按需进行转换。

如果您是Mac用户,则可以使用LESS.app ,这是一个小型应用程序,可以自动检测您的所有LESS文件,每当您保存它们时,都会将它们转换为具有相同名称CSS文件。 这使您可以继续链接到页面上CSS文件,同时仍然利用LESS的潜力。

如果您使用的是Windows,则可以使用Winless ,其工作方式几乎相同。

如果您更喜欢命令行工具,则可以使用节点软件包管理器(NPM)安装LESS。 LESS网站上提供了一些文档。 您也可以直接从Github存储库中获取代码。

利用LESS的力量

最后,让我们从有趣的地方开始-编写LESS代码。 如您所见,它很容易阅读和理解。 它使用与CSS相同的语法样式,因此您应该都熟悉。

变数

LESS中的变量的工作方式与PHP或大多数其他编程语言中的工作方式完全相同。 您可以使用它们来存储值,然后在需要时使用变量而不是值本身。

@header-font: Georgia;
h1, h2, h3, h4 {
	font-family: @header-font; 
}
.large {
	font-family:@header-font;
}

在上面的示例中,我们定义了@header-font变量,并为其分配了值“ Georgia”。 现在,只要想使用Georgia字体,就可以使用此变量。 如果我们决定使用Trebuchet MS作为标题字体,则无需遍历整个文件,只需更改变量的值即可。

在为网站定义颜色时,我发现变量很有用。 在过去的美好时光(不久之前),我曾经做过这样的事情:

/* 
 Colors for my Website 
 	#ff9900 - Orange - used for links and highlighted items
    #cccccc - Light Gray - used for borders     
    #333333 - Dark Black - Used for dark backgrounds and heading text color
    #454545 - Mid Black - Used for general text color
*/
body {
	background: #333333;        
	color: #454545;
}
a { 
	color:#ff9900;
}
h1, h2, h3, h4, h5, h6 { 
	color: #333333;
}

像这样记录您的颜色没有错,这是一个好习惯,问题在于,由于它与样式表的功能无关,因此除了记录本身之外没有其他用途。 如果您在2,000行之后决定使用其他颜色,然后在3,567行改变主意,则很难确保使用正确的颜色并且文档也正确无误。

使用LESS,我们可以修改工作流程并实际使用 “文档”,而不是在过程中保持被动状态。

/* Colors for my Website */
@color-orange: #ff9900;
@color-gray_light: #cccccc; 
@color-black_dark: #333333;  
@color-black_medium: #454545;  

body { 
	background: @color-black_dark;
	color: @color-black_medium;
}
a {
	color:@color-orange;
}
h1, h2, h3, h4, h5, h6 {
	color: @color-black_dark;
}
可变范围

变量的范围是指变量可用的位置。 如果您在LESS文件的开头定义了一个变量,该变量将对您在其后编写的任何代码可用。

您还可以在CSS规则内定义变量。 在这种情况下,该变量在此规则集之外不可用; 它只能在本地使用。

a {
	@color: #ff9900;
	color:@color;
}
button { 
	background: @color;
}

在上面的示例中,由于存在错误,LESS文件将不会转换, @color未定义为在按钮元素内使用。 如果变量定义的元素的和内部的元件的外部的本地定义遵。

@color: #222222;
a {
	@color: #ffffff;
	color:@color;
} 
button {
	background: @color; 
}

在上面的示例中,链接将颜色为白色,按钮将具有黑色背景。

可变变量

如果您习惯使用PHP进行编码,那么您会知道可以使用另一个变量来定义变量名。

@color-chirstmas_red: #941f1f;
@name-of-color: "color-chirstmas_red";
color: @@name-of-color;
对我个人而言,这没什么用处(没有双关语),因为不使用循环就减少了变量的功能,但是我敢肯定有一些聪明的例子在使用循环。

变量VS​​变量

需要注意的重要一点是,与您刚刚阅读的内容相反,LESS中的变量更像是常量。 这意味着它们只能定义一次-与可以定义多次的变量相反。

运作方式

借助LESS中的操作,您可以实现极其精细和精确的控制。 这背后的想法很简单:

.button{
	@unit: 3px;
	border:@unit solid #ddd;
	padding: @unit * 3;
	margin: @unit * 2;
}

上面的代码将变量@unit定义为3px。 然后,它继续将边界定义为具有恰好该宽度的边框,将填充定义为具有该宽度的三倍,将边距定义为具有该宽度的两倍。

运算可以是乘法,除法,加法和减法。 要创建一个边框,边框随着您沿其周长顺时针移动而越来越宽,可以使用以下代码。

.box{
	@base_unit: 1px;
	border: @base_unit @base_unit + 1 @base_unit + 2 @base_unit + 3
}

色彩管理

我最喜欢的LESS功能与颜色管理有关。 您可以使用操作来混合颜色,并且有一些特定的颜色功能。

色彩操作

如果要更改颜色的值,可以通过减去或添加其他颜色来进行更改。

@color: #941f1f;    
button {
	background: #941f1f + #222222;              
	border: #941f1f - #111111;
}

在后台进行的上述操作会将每个HEX值增加2。这将导致“ B64141”,它是原始颜色的较浅变化。 边框中的操作会将每个HEX值减小1,导致颜色变深:“ 830E0E”。

实际上,在很多情况下,我们从基色开始,并且需要稍微变暗或变亮的版本。

@color-button: #d24444;
input.submit {  
	color:#fff;
	background:@color-button;   
	border:1px solid @color-button - #222;
	padding:5px 12px;
}

这将创建一个红色按钮,其边框略深。 这是您可能经常需要的事情,不必单独定义边框颜色会很有帮助。

变量的作用在这里更加明显。 如果要重新着色网站并将@color-button值更改为绿色,不仅按钮的背景会更改,而且边框也会更改,并变为绿色的更深版本。

另一个很好的用途是创建渐变。 我通常选择一个中点颜色并从中定义渐变。 我将开始点稍微变浅,将结束点稍微变暗。 这将导致一个很好的过渡,如下所示:

@color: #faa51a;
.button { 
	background: -webkit-gradient(linear, left top, left bottom, from(@color + #151515), to(@color - #151515));
	background: -moz-linear-gradient(top,  @color + #151515,  @color - #151515);
}
颜色功能

您可以使用颜色做更多的事情。 LESS允许您在通道级别上进行操作。 您可以变亮,变暗,饱和,去饱和,淡入,淡出和旋转颜色。 请看以下示例和图像,以查看它们各自的功能。

@color: #3d82d1;
.left_box {  
	background:lighten(@color, 20%);
}
.right_box {
	background:darken(@color, 20%);
}
@color: #3d82d1;.left_box {
	background: desaturate(@color, 18%);
}
.middle_box {   
	background: @color;
}
.right_box {
	background: saturate(@color, 18%);
}
@color: #3d82d1;.left_box {
	background: spin(@color, 25%);
}
.middle_box { 
	background: @color;
}
.right_box {
	background: spin(@color, -25%);
}
提取颜色信息

LESS中的每种颜色都将转换为HSL(色相,饱和度,亮度),以使您能够在通道级别上对其进行管理。 因此,您可以以更明智的方式操作颜色,还可以直接访问颜色的通道信息:

@color = #167e8a;
hue(@color);
saturation(@color);
lightness(@color);

这看起来像是微观管理-为什么只要输入十六进制值就为什么需要此信息? 如果您像大多数人一样,十六进制值并不是您自然而然的。 十六进制值映射RGB光谱。 前两个字符控制红色的数量,后两个字符控制绿色的数量,后两个字符控制蓝色的数量。

显然#ff0000是红色的,因为这将是RGB(255,0,0)。 吨的红色,没有绿色,没有蓝色。 但是,如果仅看到#1f6b2d,则很难理解这是深绿色。 使用HSL刻度,色调可以控制您所要称呼的颜色,其余的仅用于设置色调(这并不完全正确,但从所有意图和目的来看都是如此)。

考虑到这一点,如果您发现像#e147d4这样的洋红色-紫色很好的颜色,则可以很容易地找到具有相同色相的其他颜色。 假设您要创建#e147d4的更柔和,更柔和的版本,可以执行以下操作:

@color: #e147d4;
@new_color: hsl(hue(@color), 35%, 77%);

这种新颜色将具有相同的色相,但具有不同的饱和度和亮度。 结果将是#c480bf,如果您只是想在十六进制中,则很难从#e147d4到达。

组合功能

LESS允许您使用函数内部的函数,因此,如果要降低饱和度并旋转颜色,可以像这样:

@color: #c480bd;
.class {
	background-color: desaturate(spin(@color, 18), 12%);}

套料

编写CSS时,您使用级联样式。 要更改博客文章中段落的边距,您只能使用以下代码。

article.post p{
	margin: 0 0 12px 0;
}

这种方法没有错,但是当您还想在同一元素内更改链接,块引用,标题,预格式化的文本等时,则需要在每个元素前加上“ article.post”前缀。 这使我们的代码编写起来更加繁琐且难以阅读。

在LESS中,我们可以嵌套这些规则,从而使样式表更简短,更符合逻辑。 观察一下。

article.post {
	p{
		margin: 0 0 12px 0;
	}   
	a {
		color: red; 
	}
	a:hover {
		color: blue;
	}   
	img {
		float:left; 
	}
}

看看我在那里做什么? 顺便说一下,制表符不是必需的,但是它使它更加清晰易读。 您可以根据自己的喜好嵌套规则,这省去了以后的麻烦。 您是否曾经想过更改某物的填充,但却因为不知道它可能会影响哪些元素而感到伤痕累累? 通过使用嵌套,您可以从CSS中消除很多猜测。

a {  
	color:red;
}
p {
	margin:0px;
}
article {
	a {
		color: green;       
	}    
	p { 
		color: #555;
		a { 
			color:blue; 
		}   
	}
}

混合蛋白

在更短的混入是功能,将节省您最打字。 您是否曾经创建过仅将左上角和右上角进行圆角化的圆形边界?

.tab { 
	-webkit-border-top-left-radius: 6px;
	-webkit-border-top-right-radius: 6px;       
	-moz-border-radius-topleft: 6px;
	-moz-border-radius-topright: 6px; 
	border-top-left-radius: 6px;
	border-top-right-radius: 6px;
}

糟糕...每次...借助LESS,您可以通过创建mixin来更改所有功能。 Mixins是可重用的元素,您可以将其作为规则添加到任何其他元素中。 它们的优点是无需学习其他语法。

.rounded_top {
	-webkit-border-top-left-radius: 6px;
	-webkit-border-top-right-radius: 6px;
	-moz-border-radius-topleft: 6px; 
	-moz-border-radius-topright: 6px;
	border-top-left-radius: 6px; 
	border-top-right-radius: 6px;
}
.tab {  
	background: #333;
	color:#fff; 
	.rounded_top;
}
.submit { 
	.rounded_top;
}

在上面的代码中,我们将.rounded_top元素定义为在顶部具有圆角。 当我们将其作为mixin添加到任何其他元素中时(请参见.tab ),我们基本上是在导入为此创建的规则。 由于mixin的语法,您可以将任何旧元素用作mixin。

.rounded_top {   
	-webkit-border-top-left-radius: 6px;
	-webkit-border-top-right-radius: 6px;       
	-moz-border-radius-topleft: 6px;
	-moz-border-radius-topright: 6px;   
	border-top-left-radius: 6px;
	border-top-right-radius: 6px;
}
.tab {
	background: #333;   
	color:#fff;
	.rounded_top;
}
.submit {
	.tab;       
	background: red;
}

现在, .submit元素CSS规则将要求顶部带有圆角,白色和红色背景(原始的#333被覆盖)。

参数混合

参数混入听起来非常复杂,但是它们以非常简单的方式解决了问题。 在上面的示例中,您看到了如何定义元素的上角半径为6px的元素。 如果我们希望元素的半径为3px怎么办? 我们应该为所有像素值声明单独的mixin吗? 答案当然不是,我们应该使用参数混合!

这些功能类似于函数,因为您不仅可以创建一个混合,而且可以在调用它时将值传递给它。 让我们重写边界半径示例,看看它是如何完成的。

.rounded_top(@radius) {   
	-webkit-border-top-left-radius: @radius;
	-webkit-border-top-right-radius: @radius;   
	-moz-border-radius-topleft: @radius;
	-moz-border-radius-topright: @radius;
	border-top-left-radius: @radius;
	border-top-right-radius: @radius;
}
.tab {
	background: #333;   
	color:#fff;
	.rounded_top(6px);
}
.submit {
	.rounded_top(3px);
}

上面的代码将使tab元素的半径为6px,而Submit元素的半径为3px。

默认值

如果通常使用相同的边界半径,但在某些情况下需要使用不同的边界半径,则可以为mixin提供默认值。

.rounded_top(@radius:6px) {      
	-webkit-border-top-left-radius: @radius;
	-webkit-border-top-right-radius: @radius;   
	-moz-border-radius-topleft: @radius;
	-moz-border-radius-topright: @radius;
	border-top-left-radius: @radius;
	border-top-right-radius: @radius;
}
.tab { 
	background: #333;   
	color:#fff;
	.rounded_top;
}

.submit {
	.rounded_top(3px);
}

在此示例中,tab元素将接收默认的6px边框半径,但是Submit元素将根据需要接收3px的边框半径。

多个参数

您还可以使用多个参数来定义更复杂的混合。

.radius(@radius:6px) {
	-webkit-border-radius: @radius;     
	-moz-border-radius: @radius; 
	border-radius: @radius;
}
.button(@radius:3px, @background: #e7ba64, @padding: 4px) {
	.radius(@radius);   
	background:@background;
	border: 1px solid @background - #222;       
	padding: @padding;
}
.read_more {   
	.button(0px);
}

每当使用上述示例使用.read_more类创建元素时, .read_more使用4px填充,#e7ba64的背景颜色和0px的边框半径格式化该元素。

一次使用所有参数

使用参数时,您还有一个选择是一次全部使用全部。 CSS中的速记属性具有多个值,一个接一个地写。

div {
	border:1px solid #bbb;
}

您可以使用函数为所有必需的元素赋予灰色边框,如下所示:

.gray_border(@width: 1px, @type: solid, @color: #bbb){
	border:@arguments;
}
div {
	.gray_border(2px, dashed);
}

@arguments是一个特殊的关键字,它将按给定的顺序一个接一个地输出所有参数。 在上述情况下,您的LESS文件生成CSS代码为:

div {
	border:2px dashed #bbb;     
}
没有参数的参数混合

也可以在不实际使用任何参数的情况下使用参数混合。 当您不希望mixin显示在您CSS代码中,但您确实希望将其规则应用于所使用的元素时,将使用此方法。

.alert {
	background: red;    
	color: white;
	padding:5px 12px;
}
.error_message {
	.alert;     
	margin: 0 0 12px 0;
}

上面CSS输出如下:

.alert { 
	background: red;
	color: white;       
	padding:5px 12px;
}
.error_message {
	background: red;
	color: white;
	padding:5px 12px;
	margin: 0 0 12px 0;
}

如果使用空参数集,则可以隐藏.alert类。

.alert() {
	background: red;    
	color: white;
	padding:5px 12px;
}
.error_message {
	.alert;     
	margin: 0 0 12px 0;
}

从上面的LESS代码生成CSS将是:

.error_message {       
	background: red;
	color: white; 
	padding:5px 12px;
	margin: 0 0 12px 0;
}

这对于减少CSS文件的大小非常有用。 如果.alert类从不直接在任何元素上使用,则只要将其属性作为混合传递给所需的元素,就没有理由将其包含在结果样式表中。

命名空间

编程语言中的命名空间通常用于将功能包组合在一起。 通过使用mixins捆绑代码,我们可以在LESS中实现相同的目的。

#my_framework {
	p {
		margin: 12px 0;
	}
	a {
		color:blue;
		text-decoration: none;
	}           
	.submit {
		background: red;
		color: white;
		padding:5px 12px; 
	}    
}

在基于您的框架的新网站上开始工作时,可以添加此#my_framework捆绑包并使用它,而不会弄乱您可能已经拥有或将来要添加的任何其他样式。

.submit_button { 
	#my_framework > .submit;
}

这也是启用快速主题更改和修改的好方法。 如果您为公司开发了多个主题以按需用作模板,则可以将所有主题作为捆绑包包含在同一LESS文件中,并使用所需的主题。

#fw_1 {        
	p {
		margin: 12px 0;     
	}  
	a { 
		color:blue;
		text-decoration: none;
	} 
	.submit { 
		background: red;
		color: white;
		padding:5px 12px;
	}
}

#fw_2 { 
	p {
		margin: 8px 0;      
	}    
	a { 
		color:red;
		text-decoration: underline; 
	}
	.submit {
		background: blue;
		color: white;
		padding:8px 20px;
	}
}
.submit_button {
	#fw_2 > .submit;
}

字符串插值

字符串插值只是一个花哨的词,这意味着可以将任意字符串存储在变量中,然后在属性值中使用。

@url: "http://mycompany.com/assets/";background-image: url("@{url}/sprite.png");

当创建集中式框架并确保从正确的位置提取资源时,以上内容可能会非常有用。

转义

在某些情况下,您将需要使用无效CSS的属性或值(IE规则有人吗?)。 您可能已经在我们的渐变示例中注意到,我不适合Internet Explorer用户。

如果要在IE中创建渐变,则需要执行以下操作:

filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#444444');

以上是无效CSS,因此LESS处理将无法完成。 在这种情况下,您可以转义该值,这将使LESS跳过它并继续前进。 这样做的结果是,无需任何处理即可将其输出到CSS。

.button {
	background: -webkit-gradient(linear, left top, left bottom, from(#666666), to(#444444));   
	background: -moz-linear-gradient(top,  #666666,  @color - #444444);
	filter:  ~"progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#444444')";}

您需要做的就是将该部分用引号引起来,并在其前面加上波浪号字符。 本部分不会通过LESS处理器,因此不会抛弃它。

输入

就像使用普通CSS一样,您可以导入文件。 LESS使您可以使用以下语法导入CSS和LESS文件:

@import "reset.min.css";
@import "framework.less";
@import "widgets";

第一次导入非常明显。 这将导入reset.min.css中定义CSS规则,而无需通过LESS解析器运行它们。

第二次导入将提取framework.less的内容,并像处理其他LESS规则一样对其进行处理。

第三次导入与第二次导入基本相同。 如果未提供扩展名,LESS会将其假定为LESS文件。

注释

不出所料,LESS中提供的多行注释的方式与CSS中使用的方式相同。 另外,LESS允许单行注释像在PHP中一样使用; 通过使用双正斜杠。

/*
	This is my main LESS file.          
	It governs how most of the site looks.
*/      
body {              
	padding:0px; // This resets the body padding 
}

少了什么东西?

尽管LESS很棒,但是当您开始使用它时,您会发现一些缺点,尽管这些缺点并不十分麻烦。 我希望看到的一个功能是预处理(我同意,这没有任何意义)。

还记得如何可以对行进行转义以免它们穿过解析器吗? 由于LESS当前的处理方式,我们不能真正使用具有可变颜色名称的渐变。

filter:  ~"progid:DXImageTransform.Microsoft.gradient(startColorstr='#faa51a', endColorstr='#f47a20')";

上面的方法工作得很好,但是必须对颜色进行硬编码。由于转义了该行,因此不处理变量。 这将是不错的,其中指定的字符串逃过但变量处理前的输出发送到CSS文件的选项。

我希望看到的另一个功能是选择器和其他元素的变量命名,而不仅仅是值。 当我们查看名称空间时,我们使用了类似于以下内容的规则来添加规则。

a {
	#my_framework > .link       
}

如果我们可以这样做,那就太好了:

@framework: "#my_framework";        
a {
	@{framework} > .link        
}

这将使我能够将所有框架添加到单个LESS文件中,然后通过简单地更改变量的值来选择一个。

很少有错误,还有其他一些缺点,但是总体而言,LESS非常有用且非常稳定。

结论

与所有新技术和方法一样,有过度使用的冲动。 还记得Web 2.0时代初期的反光徽标吗?

您不必嵌套所有规则,不必为所有内容创建变量,也不必为简单边界宽度的混合创建变量。

如果您不知道何时不使用LESS的强大功能,您的LESS代码将像普通CSS一样难以读取,并且难以维护。 诀窍是要知道何时使用给定的函数和方法,以及何时最好使用常规的旧CSS。

另外,我建议不要在生产中使用LESS。 它没有任何问题,但是根本没有理由加载LESS文件和脚本来处理它。 显然,该脚本非常快,但是我敢肯定它不会比没有它更快。 我通常使用LESS开发我的所有网站,当我感到高兴时,我只是获取输出,将其缩小并在常规CSS文件中使用。

翻译自: https://webdesign.tutsplus.com/articles/get-into-less-the-programmable-stylesheet-language--webdesign-5216

c 语言编程学习 编程环境

VScode配置C/C++编程总结(GCC+Clang+CMake) VScode进行C/C++编程总结(GCC+Clang+CMake) 自己使用VScode配置C/C++环境的过程,真实有效。 官网:https://blog.youkuaiyun.com/weixin_44049923/article/details/103619882 阅读详情

相关推荐

仓颉编程语言技术深度解析-入门到高手【好书推荐】

在面向对象编程的内容中,介绍了类的定义和创建对象的方法,详细讲解了面向对象编程的三大特征:封装、继承和多态。同时,仓颉社区也为开发者提供了丰富的资源和良好的社区环境,进一步推动了仓颉语言的发展和应用。例如,北京理工大学以“30+30”两个特班为基础,深度协同校企资源,将仓颉语言融入专业课堂和教材,构建课题方向、课程教学、实践实训合一的教学实践体系。仓颉语言可以很好地应对目前的变化,在《图解仓颉编程:高级篇》这本书中,就以全彩风格、丰富的图表展示仓颉的高级特性。在他们的倾力分享下,小白也能轻松学会仓颉编程。

一键难忘的博客 5310

C语言 基本输入输出函数

1 几组常见的输入输出函数在stdio.h头文件中内置了几种输入输出函数,如下列出: printf 与 scanf getchar 与 putchar gets 与 puts 相比之下 printf 与 scanf的功能最为强大,但操作稍显复杂,后两种则功能简单,但针对性较强。2 printf函数功能:按照规定格式输出指定数据2.1.一般形式:如图 格式控制:由“%”后跟格式字符组成。将输出数据转

pecuyu 9万+

51系列单片机C语言与汇编编程实践教程

51单片机,又称8051微控制器,是1980年代由Intel公司推出的经典8位微控制器系列。因其结构简单、指令功能丰富以及性价比高而广泛应用于教学、工业控制、嵌入式系统等领域。它通常具备一个8位CPU、一定量的RAM和ROM,以及多种输入输出接口。在开始编程之前,选择合适的开发环境和调试工具是非常关键的。对于C语言开发,可以使用Keil uVision IDE,它专为8051单片机和其他微控制器设计。Keil提供了丰富的调试工具,如模拟器、逻辑分析仪和代码覆盖分析器。

weixin_36474001的博客 1324

如何学好c语言

目录 一.讲这个主题的原因 二.关于选择问题 三.具体学习方法 一.为什么要讲《如何学好c语言》这个主题? 1.很多人想学习c语言,却学不会 2.网上有很多方法资料,但大多纸上谈兵 3.相关知识点比较晦涩难懂,不容易自学 4.根据自身摸索出的学习经验,分享给你们 在这里,大家可以先看看我之前的文章 ......

weixin_60478154的博客 6202

扫地机器人全场景测试实战:从实验室到真实家庭的可靠性验证

本文深入探讨了扫地机器人从实验室到真实家庭的全场景测试方法,揭示了软硬件测试中的关键挑战。通过分析场景化测试的重要性,文章详细介绍了硬件耐久性、软件稳定性和环境适应性三大测试维度,并提供了真实家庭测试的实用方法论。消费者可重点关注清洁率、覆盖率等核心指标,同时了解测试工程师的私房建议,帮助选择更可靠的扫地机器人产品。

hhh00的博客 1077

在Ubuntu 18下安装SIMULIA Abaqus 2020

参考资料: https://github.com/imirzov/Install-Abaqus-2019-on-Ubuntu-18.04-LTS 安装环境: Ubuntu 18.4 LTS 软件版本: SIMULIA for Linux 2020 1 准备 安装光盘及破解文件 解压光盘至一目录,不能挂载,因为要修改文件内容 /home/sunwk/Downloads/abaqus2020 更改文件权限为最大 sudo chmod -R 777 abaqus2020/ * 复制libpng12

oak619的博客 1万+

10讲学会C语言之第一讲:编程前的准备

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

技术卷的博客 746

如何通过CAD图中的坐标来确定是哪个坐标系

地理坐标系:为球面坐标。参考平面地是椭球面,坐标单位:经纬度。以地球参考为例,坐标系就相当于整个地球,而地理坐标系就是椭球状的完整的立体地球。所以我们可以看到生活中的数据与地图是一定含有地理坐标系的,因为他是客观上来说确确实实存在的。投影坐标系:为平面坐标。参考平面地是水平面,坐标单位:米、千米等。这就相当于把地球当成一个橘子,然后一刀切开,把橘子皮平面铺开,这个过程就是地理投影的过程。严谨一点来说就是建立一个参考系统,按照对应位置把椭球体投射到平面。那坐标系统主要有那些呢?北京54。

vjmap的博客 2万+

C语言程序设计学习笔记

C语言程序设计学习笔记

少侠PSY的博客 4337

告别眼疲劳!保姆级教程:给你的SecureCRT v8.7.2换上护眼高亮配色(附透明背景设置)

本文提供了一份详细的SecureCRT v8.7.2护眼高亮配色方案教程,帮助程序员缓解眼疲劳问题。通过科学调整配色方案、动态环境自适应设置以及字体渲染优化,显著提升终端使用的舒适度和工作效率。特别推荐Solarized Dark和One Dark Pro医学适配版配色方案,适合长时间编码工作。

weixin_42549496的博客 354

用Python实现一个简单的远程桌面服务端和客户端

本文介绍了一个基于Python的轻量级远程桌面解决方案,针对商业软件在嵌入式系统上的兼容性问题、性能问题和成本问题。系统采用客户端-服务端架构,包含两个通信通道:5000端口传输压缩视频流,5001端口传输控制事件。通过多线程设计、图像压缩(JPEG+zlib)和网络优化(禁用Nagle算法)等技术手段提高性能。服务端实现了高效的屏幕捕获(使用mss库)、图像处理流水线和事件处理逻辑。客户端采用PyQt5构建UI界面,包含视频接收线程以减少主线程负担。该方案具有跨平台、开源免费、轻量级(核心代码不到500行

Hi20240217的博客 1661

c语言入门自学宝典,c语言学习编程宝典下载-c语言学习编程宝典appv1.2 - 起点软件园...

c语言学习编程宝典是主打学习编程的软件,里面有海量的编程学习资源让你选择,帮助你更好的学习C语言,非常的高效,还有名师为你指导,很适合需要的小伙伴们进行学习体验。c语言学习编程宝典说明1.将C语言编译器搬到手机当中,完全脱离电脑也能编程。2.章节层次鲜明,重点突出,强调基础知识,C语言二级考试轻松过。3.章节知识与习题配套,每一题都有名师详细讲解,你还用担心有什么不懂的吗?c语言学习编程宝典优势1...

weixin_39621178的博客 516

机器学习ROC曲线中的阈值thresholds

在ROC曲线上的不同点对应于不同的阈值。根据任务的具体要求,可以选择合适的阈值,以达到平衡召回率和误报率,或者根据具体应用场景调整模型的工作点。,表示样本属于正例的概率。这个概率值可以被截断为二元分类的决策,通过选择一个阈值来决定样本是被分类为正例还是负例。通过改变阈值,可以得到不同的真正例率(TPR)和假正例率(FPR),从而绘制出ROC曲线。总体来说,ROC曲线提供了模型在不同阈值下的性能综合情况,帮助分析模型的分类能力。通常来说,随着阈值的增加,TPR会减小,而FPR会增加。ROC曲线的绘制涉及。

行子的博客 3654

c语言-初识c语言

认识c语言的发展历程,优缺点,内容 区分编辑,编译,汇编

m0_73885339的博客 1007

CANoe制作网关实现CAN(FD)报文故障注入(报文长度/timeout/信号错误/E2E)2

CANoe制作网关实现CAN报文故障注入(报文长度/timeout/信号错误/E2E) 2.新建CANoe工程 3.透传功能 4.故障注入panel面板 5.CAPL代码 5.1故障注入开始、停止、定时 5.2DLC故障注入 5.3 Timeout故障注入 5.4 信号故障注入

天赐好车的博客 3676

Python之abbrobotegm包语法、参数和实际应用案例

`abbrobotegm` 是用于控制 ABB 机器人的 Python 接口包,主要通过 EGM(Externally Guided Motion,外部引导运动)协议与 ABB 机器人控制器进行通信,实现对机器人的实时位置控制、状态监控和运动引导等功能。该包适用于需要将 ABB 机器人与外部系统(如视觉系统、传感器等)集成的场景。

王国平的博客 1254

建立Debian下的编程环境之Scheme语言

建立Debian下的编程环境之Scheme语言一 简述使用哪种计算机变成语言来进行中小学的电脑编程教育是一个太容易引起太多争论的话题,过去大家争论的焦点主要集中在是Basic?是Pascal?是C?还是Java,现在我说要使用Scheme语言在中小学进行计算机编程教学那就马上会使原来争论的各方立马抛弃陈见,同仇敌忾地质问:Scheme语言是什么东西,他算老几?我们中国谁知道Scheme语言?我们中

bueryiru的专栏 1279

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C语言开发的利器:高效编程从这里开始

最新接入DeepSeek-V3模型,点击下载最新版本InsCode AI IDE C语言开发的利器:高效编程从这里开始 在当今快速发展的科技时代,C语言作为一门经典的编程语言,依然在嵌入式系统、操作系统、游戏开发等领域占据着重要地位。然而,对于许多初学者和专业开发者来说,C语言的学习曲线陡峭,调试复杂,编写高效的代码并非易事。幸运的是,随着人工智能技术的发展,智能化的开发工具正在改变这一现状。今天...

CrystalwaveTiger37的博客 911

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

什么是C语言

一文,让你明白,什么是C语言!让你明白,C语言和Python的区别!让你明白,面向对象编程和面向过程编程的概念和区别!

m0_74195174的博客 1237

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

c语言为什么有这么多的编程环境?_为什么98%的程序员学编程都会从C语言开始?...

在互联网蓬勃发展的时代,有一类人做出了巨大的贡献,这一群人被大家称之为程序员,怎样才能成为一名优秀的程序员呢,为什么每一个程序员都需要学习C语言呢?就让我来跟大家分享分享:壹第一:相比较其他的编程语言(像C++,JAVA),C语言是个低级语言。从总体上来说,低级的编程语言可以让你更好的了解计算机.贰第二:设备驱动程序和操作系统只能用C语言来编写。现在,你可能还从来没有编写过一个设备驱动程序或者一个...

weixin_30424461的博客 135

在Turbo C与386电脑上考古式学习C语言:回归编程本质的深度体验

C语言作为一门贴近硬件、注重内存管理的系统级编程语言,其核心价值在于对计算机底层原理的深刻理解。从编译链接的基本过程,到指针操作与内存布局的机制,再到标准库函数的契约与局限,这些基础概念构成了掌握C语言的基石。理解这些原理不仅能帮助开发者编写出更高效、更健壮的程序,更是进行嵌入式开发、操作系统、编译器等领域技术实践的必备基础。通过模拟早期开发环境(如MS-DOS下的Turbo C)的约束,可以迫使学习者聚焦于C语言的核心机制,例如手动管理内存、深入理解指针和结构体,从而摆脱对现代IDE自动补全和智能提示的过

weixin_34345753的博客 472

嵌入式开发学习———Linux环境下C语言学习(五)

本文介绍了C语言中一维整型数组的定义和使用方法,以及两种经典排序算法:冒泡排序和选择排序的实现原理和代码示例。冒泡排序通过相邻元素比较交换实现排序,时间复杂度为O(n²);选择排序通过寻找最小值进行交换,时间复杂度相同但交换次数更少。文章还提供了两个实践案例:1)输入10个学生成绩并进行排序输出的完整代码;2)统计输入字符中大写字母、小写字母、数字和其他字符数量的程序示例。这些内容涵盖了数组的基本操作和常见应用场景。

2201_76094672的博客 1034

从零开始C语言丨初识编程

在学习、练习的过程中,多问自己几个为什么,怎么样才能做得更好,想得透彻了,那么成长就只是时间的问题了。如果是俄罗斯人,那他用的是俄语。而不会做菜的人就是计算机,他们收到了大厨写的菜谱,按照上面条令执行,至少能做出像模像样的菜。顾名思义,编程就是编写程序,也就是程序员将解决问题的步骤用编程语言编写成代码程序,然后交给计算机去执行运算,从而达到计算机可以重复解决问题的目的。缺点在于编译器远比解释器要难得多,而且在调试过程中,编译器往往提供不了太多的帮助,同时编译型程序是面向特定平台,对平台有一定的依赖性。

jhdddd的博客 396

作为程序员,你需要掌握这三种编程语言!

现在轮到Python上场。Python在各个领域大显身手,增长速度之快,几近几何级。它最早以爬虫而闻名,但现在却开始在人工智能和大数据领域掀起波澜。而Python是这三门语言中最好上手的,高中生都能学会。现在许多高中已经开始开设Python课程,这可见证了Python的通用性和渗透力。

h1453586413的博客 1135

C语言嵌入式系统编程修炼

同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发的一般选择。而与之相比,C语言--一种"高级的低级"语言,则成为嵌入式系统开发的最佳选择。笔者在嵌入式系统项目的开发过程中,一次又一次感受到C语言的精妙,沉醉于C语言给嵌入式开发带来的便利。  图1给出

Minus8cool(失翼之人) 2776
上一篇: html5动画模板_使基本HTML模板更上一层楼的动画
下一篇: animate.css_快速提示:通过Animate.css使您的网站栩栩如生
daique1908
博客等级 码龄10年 29粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值