C语言工作原理

作者&投稿:仲怡 (若有异议请与网页底部的电邮联系)
c语言,这是怎么运行的,它的原理是什么?~

看C语言代码,需要先观察语句的有效范围,比如while {******} ,分清调理,有条件的话,将代码粘到编辑器(visual studio, sourcee Insight等代码编辑工具,这样格式清楚)里面。(前话)

以下开始分析:

while(1)
{ scanf("%d",&n);
if(n>=1&&n<=20)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:"); } else printf("输入数据有误,请重新输入:");
}

while循环语句, 1表示为真,一直循环直到break跳出。
输入数字,赋值给n,
判断n的大小,如果在1~20之间,y = 1,如果y =1 跳出该while循环。
如果n不在1~20之间,即数据有误需要重新输出。

for(i=1;i<=n;i++)
{ printf("输入第%d个学校的名称:
",i);
cin>>sch[i].name;
sch[i].score=0;
sch[i].female=0;
sch[i].male=0;
sch[i].num=i;
} printf("输入男子项目数和女子项目数:");

for循环语句,从1~n依次输入学校名字赋值给sch[i].name,把学校序号赋值sch[i].num, 其他数据均为初始化操作赋值0。

while(1)
{ scanf("%d%d",&m,&w);
if(m=1&&w=1)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:");
}
输入两个数字到m(取值范围1~20)与w(1~20),如果超出范围,需要重新输入。
理解上下文,这里的m代表的是man就是男子项目有m个,女子项目有w个。


for(i=1;i<=m+w;i++)
{ printf("输入第%d个项目的名称:
",i);
cin>>p[i].name;
if(i%2!=0)
{
printf("输入第%d个项目的前5名的学校编号:
",i);
for(j=1;j<=5;j++)
{
y=0;
while(1)
{
scanf("%d",&x);
if(x>=1&&x<=20)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:");
}
p[i].snum[j]=x;
sch[x].score+=integral[j-1];
if(i<=m)sch[x].male+=integral[j-1];
else sch[x].female+=integral[j-1];
}
printf("输入第%d个项目的前5名的运动员编号和姓名:
",i);
for(j=1;j<=5;j++)
{
y=0;
while(1)
{
scanf("%d",&sportman);
scanf("%c",&yun[j].yunname);
if(sportman>=1&&sportman<=20)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:"); } }
}else

由于比较长,我就不一句一句分析了,
分别对于m+w个项目,也就是总项目,一个一个的进行计算学校成绩。
if (i%2 != 0) 也就是说如果项目编号为基数,则取该项目的前5名, p[i].snum[j]=x; 将学校编号输入到项目i的名次j里面。
sch[x].score+=integral[j-1];
if(i<=m)sch[x].male+=integral[j-1];
else sch[x].female+=integral[j-1];
学校总分加上 integral[j-1], 如果i<m,给男生项目总分加上integral[j-1],否则该项目为女生项目,给该学校女生项目加上integral[j-1]分数。


{
printf("输入第%d个项目的前3名的学校编号:
",i);
for(j=1;j<=3;j++)
{
y=0;
while(1)
{
scanf("%d",&x);
if(x>=1&&x<=20)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:");
}
p[i].snum[j]=x;
sch[x].score+=Integral[j-1];
if(i<=m)sch[x].male+=Integral[j-1];
else sch[x].female+=Integral[j-1];
}

同理,如果项目编号为偶数,只去项目的前三名学校,给该校的成绩加上Integral[j-1]。

printf("输入第%d个项目的前3名的运动员编号和姓名:
",i);
for(j=1;j<=3;j++)
{y=0;
while(1)
{ scanf("%d",&sportman);
scanf("%c",&yun[j].yunname);
if(sportman>=1&&sportman<=20)y=1;
if(y)break;
else printf("输入数据有误,请重新输入:");}}}}}
输入第%d个项目的前3名的运动员编号和姓名,编号范围(1~20)


void print(int i)
{cout<<sch[i].num<<setw(10)<<sch[i].name<<setw(8)<<sch[i].score<<setw(9)
<<sch[i].male<<setw(10)<<sch[i].female<<endl;

格式化输出 学校编号, 学校名字,学校总分,学校男子项目总分,学校女子项目总分。

由于该代码相关数据结构没有给出,具体值不做分析。
另外,该代码写的真TM烂。

好累,求给分。。。55555555

编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。
1、预处理阶段:
主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)
2、汇编阶段:
插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。
3、编译阶段:
将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。
4、链接阶段:
在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。

  作为一种编程语言,本身是谈不上工作原理的,实际上C语言所有的语法,正是C语言编译器的工作原理或者工作机制的具体实现。要细致的讨论起来是不可能,但是作为C语言程序员,必须了解这个大致的流程。一个程序,从C语言源码,到系统可执行的文件,一般经历四个过程。
  1、预处理阶断,这个阶断是文本处理阶断,有预处理器来完成,会将源码中的带"#"开头的预处理命令进行相应的处理,在Linux上C语言的预处理器程序是cp命令。
  2、编译阶断,这个阶断是有C语言编译阶断,在Linux上C语言的编译器是cc命令,它将C语言源码转换成汇编指令。
  3、汇编阶断,这个阶断是汇编编译阶断,在Linux上C语言的汇编器是as命令,这个阶断会将汇编指令编译成二进制机器码。
  4、链接阶断,这个阶断是会将汇编阶断生成的机器码目标文件,装载成一个系统可执行的文件,在Linux平台以ELF格式进行组装,在Windows平台上以PE格式进行组装。在Linux平台上的链接器命令为ld,在windows平台上的链接器命令为linker。

在计算机底层硬件中,所有的数据都是以1和0两个高低电平来表示,计算机只能识别这两个电平。

编程语言类似于人类语言,我们很容易就能理解它的意思,编写代码的效率非常高。

但是,计算机只认识0和1,如何才能将“人类语言”转换成“0&1语言”呢?这就是编译器的工作了。

编译器能够将源代码(人类语言)翻译成目标代码(0&1语言),便于人类和计算机的沟通。

可以将目前流行的编程语言(如C语言、Java、PHP等)比喻成各国语言(如英语、汉语和法语等),为了表达同一个意思,可能使用不同的语言和语句。例如,表达“世界你好”的意思:
汉语:世界你好;
英语:Hello World
法语:Bonjour tout le monde

在编程语言中,输出“Hello World”:
C语言:printf("Hello World");
PHP:echo "Hello World";
Java:System.out.println("HelloWorld!");

使用C语言开发软件的一般步骤为:
使用编辑器编写源代码(source code);
使用编译器将源代码(source code)编译成目标代码(object language);
运行目标代码(object language),即编写好的程序。

可以看到,编译器是编程语言的关键,一种编程语言,本质上就是一种编译器,编程语言的效率高低,取决于编译器转换成的目标代码的效率高低。

可以这样来理解一门编程语言:
首先定义好该语言的语法和规范,例如,如何输入输出数据,如何操作文件等;
按照语法和规范开发编译器,这是关键步骤;
开发辅助功能,例如,调试器,编辑器等;
向世界公开该语言。

C语言是一种语法规范,本身是需要语法编译器(比如gcc)提供支持。所以请参考编译原理相关理论。
编译流程大概是:源代码(.h/.c文件)、中间表示层、机器码(.exe/.dll/.lib/.so等文件)。

C语言:通用程序设计语言




词向量工作原理是什么?
要将自然语言交给机器学习算法来处理,通常需要首先将语言数学化,词向量就是用来将语言中的词进行数学化的一种方式,一种最简单的词向量方式是one-hotrepresentation,就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个1,其他全为0,1的位置对应该词在词典中的位置。但...

...是把计算机的物理工作原理搞清楚,以及计算机语言的编写你说是吗...
搞清物理、以及工作原理,就太深奥了。这已经不是“计算机专业”了。学习计算机专业,一般来说,是熟练掌握一种编程语言。再有些“应用方面”的知识,如:财务管理、人力资源管理、物流...。达到这境界,就够高了。虽然这些,都不能算是“计算机专业”的知识。“计算机专业”的基本知识,是在“电子专业...

计算机的工作原理?(详细过程)
计算机的工作原理 1、冯诺依曼原理 “存储程序控制”原理是1946年由美籍匈牙利数学家冯诺依曼提出的,所以又称为“冯诺依曼原理”。该原理确立了现代计算机的基本组成的工作方式,直到现在,计算机的设计与制造依然沿着“冯诺依曼”体系结构。2、“存储程序控制”原理的基本内容 ①采用二进制形式表示数据和指令...

计算机是如何工作的?
计算机工作原理计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。程序与数据一样存取,按程序编排的顺序,一步一...

简述计算机系统的组成及工作原理
计算机系统包括硬件和软件。硬件:硬件(Hardware)是指计算机的各种看得见,摸得着的实实在在的物理设备。如:鼠标、键盘,显示器、打印机、主机等。软件:软件(Software)是指在硬件系统上运行的各类程序、数据以及相关资料。如:win7、word、Excel、PPT、QQ和微信等等。计算机的硬件系统由运算器、控制器、...

计算机的工作原理是什么
o 程式与资料一样存贮,按程式编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作原理。这一原理最初是由美籍匈牙利数学家冯.诺依曼于1945年提出来的,故称为冯.诺依曼原理。什么是计算机的工作原理 1、计算机系统的组成 微型计算机由硬体系统和软体系统组成。硬体系统:指构成...

怎样学习汇编语言能够达到‘理解计算机工作原理’的效果
这样学习汇编语言才能够达到‘理解计算机工作原理’的效果:一,要有一定的微机硬件基础知识,因为汇编很底层,更加接近机器语言,往往很多的东西要从机器层面来支持理解。二,最好先学习一门高级语言,因为高级语言更接近人的语言,相对比较容易理解。掌握了一门高级语言后再学汇编,一来不易产生畏惧感,二...

C\/S的工作原理_cs的工作原理
数据层就是DBMS,负责管理对数据库数据的读写。DBMS必须能迅速执行大量数据的更新和检索。现在的主流是关系数据库管理系统(RDBMS)。因此一般从功能层传送到数据层的要求大都使用SQL语言。在三层或N层C\/S结构中,中间件(Middleware)是最重要的部件。所谓中间件是一个用API定义的软件层,是具有强大通信能力...

人工智能的原理是什么?
以得出新的结论和发现。智能控制:智能控制是指利用人工智能技术实现对智能系统的控制和优化,例如智能家居、智能交通等。总之,人工智能技术的原理主要包括机器学习、深度学习、自然语言处理、计算机视觉、知识表示与推理、智能控制等方面。这些原理和技术相互关联、相互作用,共同构成了人工智能技术的核心。

计算机的工作原理是什么?
计算机的工作原理:计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。程序与数据一样存贮,按...

郯城县13292766742: C语言程序设计的原理是什么? -
禄穆健儿: 谭浩强系列的c语言教程,都是教c语言的入门知识和编一些小程序(是程序而不是软件).要想设计软件,可不是那么简单的,一个软件的设计,语言只是其中的一个组成部分,还需要有好的思路和精密的设计方法等等. 如果想用c语言设计软件,首先一定要把基础学精.然后才可以试着设计软件. 另外,c语言设计程序,主要原理是先构思一个算法,然后将算法转化为计算机语言(个人观点,仅供参考).

郯城县13292766742: C语言工作原理 -
禄穆健儿: 作为一种编程语言,本身是谈不上工作原理的,实际上C语言所有的语法,正是C语言编译器的工作原理或者工作机制的具体实现.要细致的讨论起来是不可能,但是作为C语言程序员,必须了解这个大致的流程.一个程序,从C语言源码,到系...

郯城县13292766742: C语言是什么,原理是什么. -
禄穆健儿: C语言就是一种计算机语言,说白了就是一些指示计算机干事的指令. 原理:每一种语言都有自己的标准、格式,C的原理就是C语言的标准; 这些东西说是说不清楚的,要自己去学啊.

郯城县13292766742: 谁能用最通俗的语言解释一下C语言的工作原理?
禄穆健儿: C语言的工作原理? 好像没有这种说法的吧? 我给你举一个例子. 说一下C语言是怎么执行的. #include ——这是头文件. void main() ——主程序 {int a,b; ——定义两个整数. scanf("%d%d",&a,&b); ——输入两个整数. printf("%d\n",a+b); ——输入两个整数之和. } 意思是:输入两个整数,输出它们的和. 输出结果的前后都不允许有空格.

郯城县13292766742: C语言编软件原理 -
禄穆健儿: C语言通过编写语句通过编译生成可执行程序,不是C语言的语句具有执行能力,而是C语言语句是汇编语言的常用操作组合的另一种形式,这种语句更加方便,具有较高的可读性,当积累到一定程度时就产生了C语言.而汇编语言...

郯城县13292766742: C语言原理是什么? -
禄穆健儿: 和汇编语言相比,C语言属于高级语言,现在嵌入式中常用到C语言编程,因为它可以直接对硬件编程.用最抽象,最易懂的语言形容C语言不是很贴切,因为C语言比逻辑上比汇编语言简单,但是它涉及到的知识点比较多,总的来说:有变量,常量,条件语句,循环语句,位操作,文件操作.

郯城县13292766742: C语言原理 -
禄穆健儿: 你好:和汇编语言相比,C语言属于高级语言,现在嵌入式中常用到C语言编程,因为它可以直接对硬件编程.像你说的,用最抽象,最易懂的语言形容C语言,我做不到,因为C语言比逻辑上比汇编语言简单,但是它涉及到的知识点比较多,总的来说:有变量,常量,条件语句,循环语句,位操作,文件操作...我推荐你一本书吧:《C语言入门经典》lvor Horton编写的,知识点介绍得很全,而且每个例子后面的说明也全面,我开始学习C语言的时候就是看的这本书,还有,记住:C语言不必死记硬背,也不像你说的,它和英语没什么关系,你学习过就会明白了,C语言就那么几种语句,多练习,自然而然就记住了.最后祝你成功.

郯城县13292766742: C语言编译原理 -
禄穆健儿: C语言编译过程详解 C语言的编译链接过程是要把我们编写的一个C程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接.编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程.链接是把目标文件...

郯城县13292766742: C语言编写的程序 C语言是怎样工作的 原理是什么 -
禄穆健儿: 用C语言现写出来的程序都是文本格式的,你用记事本就能写,它们必须经过编译-链接-装入才能运行 编译阶段编译器先对程序代码进行预编译,生成更优化的代码,然后进行汇编,把源程序变成汇编程序.然后在进行编译生成目标代码,一般是“.o”文件,都是二进制文件你如果使用GCC进行编译可以用相应命令进行控制 链接阶段主要就是针对你在编译后生成“.o”文件进行链接,以生成可执行文件,你要是学习了操作系统,会发现有好几种链接方式装入阶段就是把你生成的可执行文件装入内存,然后在cpu中执行,在工作的时候又有很复杂的过程,推荐你学习一下操作系统

郯城县13292766742: C语言编程的原理?
禄穆健儿: 其实用所有的工具都一样 编程就是 语法 + 算法 也就是 编程工具 + 编程思想 所以需要我们掌握一门语言(如 C 是面向过程的)再根据这门语言的特点用算法去实现我们的思想

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网