JZ新手学C语言之入门231.docx

上传人:b****5 文档编号:28061304 上传时间:2023-07-08 格式:DOCX 页数:30 大小:906.22KB
下载 相关 举报
JZ新手学C语言之入门231.docx_第1页
第1页 / 共30页
JZ新手学C语言之入门231.docx_第2页
第2页 / 共30页
JZ新手学C语言之入门231.docx_第3页
第3页 / 共30页
JZ新手学C语言之入门231.docx_第4页
第4页 / 共30页
JZ新手学C语言之入门231.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

JZ新手学C语言之入门231.docx

《JZ新手学C语言之入门231.docx》由会员分享,可在线阅读,更多相关《JZ新手学C语言之入门231.docx(30页珍藏版)》请在冰豆网上搜索。

JZ新手学C语言之入门231.docx

JZ新手学C语言之入门231

学习语言(新手入门)

年轻的小荣子

阿尔法和李世石的围棋对弈让我们感受到了计算机的强大,事实上计算不仅要靠硬件设备的支持,还需要在里面运行代码(很多种,包括),这些代码就是它的灵魂(譬如我们的思想)。

推荐几部通过在计算机里头运行代码从而创造无限可能的电影,我觉得不错的:

黑客帝国,超验骇客,创战纪,人工智能等。

正题,能编辑语言的软件非常多,比如,等。

理论总是离不开实践,在要学习语言理论之前先要找到属于自己的能实现代码结果的软件。

这样说,计算机语言和人的语言的区别在于,人通过各种发音实现交流,但是计算机主要是通过电流来传达信息,所以只能用来表示电流拥有的两种状态,这样最底层的计算运作就是通过一段长长的代码,通过和的不同组合来表示文字或者信息。

语言当然不是最底层的代码,他是一个沟通的中介,比如等于号在语言里就是两个等号“”,这样使得我们更容易和计算机交流了,只要学会了语言,它就能把我们的语言翻译成计算机的语言。

以下内容从简单到困难,先来学会如何运行语言代码(用中文版):

.按以下步骤打开桌面(以后都可以这样打开):

.一些常用的功能键:

(是编译的意思,就是把这些我们能看懂的符号转换成计算机代码,同时按这个键可以检查不对和验证是否能运行。

是,建立一个可以运行的类文件,就是把这些代码弄成一个能运行的东西。

就是运行,只有经过查错和建立才可以按运行。

是不是很简单,自己动手一遍就会)

.输入代码并运行(里面的代码如下:

——————————————

<>

()

{

;

;

;

("");

}

———————————————

的英文意思是包含、包括,顾名思义,<>就是把这个东西包含进去,其实<>是语言里的一种格式,就是把什么包含进来的意思(这里是口语表达)。

叫做头文件,什么是头文件呢?

打个比方,在语言里我们要用到很多的比如开根号、乘方、阶乘!

等等数学公式函数,那么就可以把这些常用的同类型的函数放到一起形成一个函数库,然后给它取个名字比如叫,这样当要用到这些函数的时候就不用自己的写了,直接用<>把整个库包含进来,里面的函数就可以直接调用。

同样的,也是这样一个库,里面有输入输出函数(就是支持键盘输入和屏幕输出)可以调用。

类似的还有图形函数库,字符串函数库等等,调用格式一样的。

(){代码。

}是语言里必须有的一个格式,翻译是”主要“,函数就是主函数,相当于程序从这里入口并开始运行。

运行的内容就是花括号{}里头的代码。

了解<>(){}的功能之后,就真正的开始代码实现的部分了。

上面有一条简单的代码:

——————————

;

;

;

("");

我们每句话结束用句号“。

”来结束,语言里用的是分号“。

”来结束一个语句,上面每个语句后面都有一个分号。

表示赋值,把等号右边的数值赋予给左边,赋值之后等于,等于。

同理可知就是把的结果数值赋予给,这样的值就是.

的翻译是打印,()函数实现的功能是输出(打印在屏幕上)。

而()函数是属于的,这就是为什么上面要写<>原因。

;定义三个变量,是数据类型里的一种,是整型,就是说都是整数而不能是其他类型。

另外浮点型,如果用,那么就能赋予小数值。

还有字符型,比如,,那么只能赋予字符的值。

这是因为在定义变量的同时,要在计算机内存中分配给它们空间,整数占用个字节而小数占个字节,所以后分配到的空间就是能装下个字节的东西,然后如果用,由于是小数占用个字节装不下,那么这个赋值就出错。

因此,,,等数据类型定义的意义就在于给变量分配一个多大的内存空间,存储对应类型大小的数据(任何没有定义数据类型的变量是不会分配内存空间所以是不能使用的!

)。

来看下运行结果(出结果的值):

所以这样就实现了计算赋值给并输出的值。

数据类型一览(当想要使用何种类型变量,直接用以下来定义即可):

语言和数学语言也还是有所区别的,比如数学里判断等于用“?

”,但是语言里“?

”就变成了赋值,它的等号是两个数学等号组成“”,所以里正确的表达是“?

”(不要纠结为什么要用两个等号,这是大神们设定的),为了能让计算机理解自己的代码,下面来认识语言有哪些运算符:

*

除。

不存在÷号,表达式里“”就是除号。

取余数。

等于,余数是。

>

大于

<

小于

>

大于等于

<

小于等于

不等于

等于

赋值,右边值赋予左边变量()。

与。

()(!

),判断两边都真结果为真。

或。

判断有一边为真结果为真。

!

非。

(),判断条件的相反。

?

:

条件运算。

(>),判断为真,结果取,否则取.

自增。

,相当于。

自减。

,相当于。

其他

经历一遍胜过深思千回,在软件上尝试几遍便能熟记于心。

<>

()

{;;;*;;;(“”);:

输出结果。

;}

写一个能计算圆的周长和面积的代码:

定义三个浮点型(含有小数)变量、、。

()是输入函数,是扫描的意思,从键盘扫描你的输入,这个函数也是头文件里的一个函数。

()括号里的是参数,跟()一样,格式有所不同。

(“”,)表示输出结果,的数据类型是整型(),用“”格式。

如果输出结果是浮点型()则用“”格式,比如(“”,)。

如果是字符型(),用(“”,’’)等。

“”

类型

(“”);对应数据类型格式

以十进制形式输出带符号整数(正数不输出符号)

以八进制形式输出无符号整数(不输出前缀)

以十六进制形式输出无符号整数(不输出前缀)

以十进制形式输出无符号整数

以小数形式输出单、双精度实数

以指数形式输出单、双精度实数

以或中较短的输出宽度输出单、双精度实数

输出单个字符

字符串

输出字符串

(““,)比(““,)多了个地址运算符,因为是输入,把数据存入到变量的地址空间,所以()函数统一要加个地址运算符。

(在代码中添加备注用备注,本行此符号之后的都为备注,也可以用*备注*,两个符号之内的是备注,可囊括多行。

上面代码中:

————————————

<>

()

{

;

}

————————————是标准主函数格式,()表示返回型,表示返回,返回值为。

不必深究。

————————————————————

;备注:

面积,周长,半径。

("");

**;

**;

("周长为:

,面积为:

\");

————————————————————

相当于一个能计算圆的周长和面积的计算器,只要()输入的值,就能()输出(周长)和(面积)的值,结果图示:

可以通过输入不同的半径来得到其周长和面积。

同理可以利用语言来求得其他数学公式的结果:

求^当取某个数时的值。

代码:

——————————————————

;

("")这里输入的值。

**;

("输出结果:

");

——————————————————

对于这样的函数式:

**(<<)

(>)

要用到条件语句。

()语句

(表达式)

语句。

语句。

()语句的嵌套

(表达式)

语句。

语句也可以嵌套语句。

(表达式)

语句。

语句。

这样的嵌套可以多重.

()里的表达式如果正确则为真,执行紧接着的语句,否则执行下面的语句。

因此上面数学函数式的代码:

————————————————————————————————————

<>

()

{

;

("")输入的值。

(><)>和<是与的关系,若同时为真则结果为真。

**;

(>)

;

("输出结果:

");双引号里的文字原样输出,输出为的值。

;

}

——————————————————————————————————

()里的表达式常用到逻辑表达式“与或非”。

()语句

(表达式)

{

常量:

语句

常量:

语句

常量:

语句

常量...:

语句...

常量:

语句

语句

}

是匹配的意思,就是用表达式的值从常量开始比较是否相等,如果相等,从相等的那条语句开始执行,到的语句结束。

如果想执行完这一句就结束,可以在其后加上。

语句来打断跳出。

下面是输入小明同学的分数判断他的成绩级别的代码:

假如小明的成绩是,那么十位数,利用函数匹配,符合,执行之后的(“\”)语句,又因为。

语句打断,所以不再执行之后的,直接跳出(){}。

如果是到,都只有一条语句可执行。

()循环语句

写一个代码,让你输入一个数字,如果你输入的数字不大于则重新输入,否则结束。

这里就用到了循环,循环必须要有判断条件语句,循环不能是没有结束条件的。

格式:

(表达式)

{

语句

}

如果表达式为真(判断正确),则执行语句,直到表达式为假。

代码:

<>

()

{

;

(“”)输入数字。

(<)判断是否小于等于,是则循环,否则结束。

{

(“”);重新输入

}

}

红色部分是循环体,花括号{}里可以写多条语句,作为一个整体一并运行。

执行的顺序是,判断(表达式)真假,为真则执行循环体,执行完毕跳回到(表达式)开始下一次的判断,直到判断为假结束循环。

所以上面会不断循环要输入,直到输入的值大于,表达式为假结束。

另一种是语句,区别只是先执行循环体,再判断,直到判断为假,(表达式)后跟着一个分号!

代码如下:

<>

()

{

;

{

(“”);输入

}(<)。

判断是否小于等于,是则循环,否则结束。

}

()循环语句

(表达式;表达式;表达式);

循环体语句

实例:

以上加入了一个循环(*多行备注*),

表达式“”是循环的入口,是进入循环第一个运行的语句,而且只运行一次。

表达式之后就到表达式,表达式“>”后面虽然没有问号,但是它是一个判断语句,就像语句或者语句的判断表达式一样,在这里如果>判断为真,则继续执行循环体语句,否则结束跳出循环。

如果表达式为真,接下来执行循环体语句,再接下来是表达式,然后开始下一次的循环:

表达式(先判断是否为真)—>循环体语句—>表达式,表达式会且只会运行一次,之后的循环都不再执行,而且以上的表达式和循环体都可以是多个语句的组合,比如表达式可以是“,……”。

(为一个循环)

——————————————————————

让我们来输出一个星号*构成的正方形:

表达赋值使得,判断<为真,执行循环体{}后输出五个星号和换行,然后(即变成了,不变),继续下一次的循环:

判断<为真,继续执行循环体语句,再输出一行星号并换行,如此重复到大于判断为假,结束循环,这时共执行了次循环体,打印出了行星号,如上图。

事实上循环里还可以套用循环,也可以套用循环,前者最为常见和好用。

假如要输出次上面的矩形星号,那么把上面的循环嵌入到另一个循环中即可:

这样就把里面的当成了外面循环的循环体语句,按步骤执行即可!

兴趣是最好的老师,实践是最好的证明,如果有哪些记不住的地方,上机写代码运行处结果,让事实来让自己信服,这样不单更容易记住,而且还能提高动手能力。

如果遇到有疑问的地方,上网寻找答案,或者上机调试(就是对代码的执行结果有疑问,认为可能出现多种结果),看结果是否如自己所想,也是验证和解疑的一种好办法。

问题:

输入两个正整数和,求其最大公约数

解题算法:

辗转相除法,又名欧几里德算法()乃求两个正整数之最大公约数的算法。

算法思路:

假如求和的最大公约数(>),设为÷的余数,继续用除数除以余数,直到余数为。

比如求和的最大公约数,有:

÷余

÷余(这里的被除数和除数分别是上面的除数和余数,相当于后移一位)

÷余

÷余(整除)

那么最后一个除数就是一开始两个数和的最大公约数,此算法可以应用到任何两个正整数上,这就是辗转相处求公约数的算法。

算法应用:

、直接用("",,)输入需要求公约数的两个正整数。

、的余数为

、把的值赋给,把余数的值赋给(除数变成被除数,余数变成除数)

、判断是否为,是则最后一个除数(已经赋值给)就是最大公约数,并输出最大公约数即可(("和的最大公约数是\");)。

、如果不为,继续执行步骤,直到符合步骤结束。

代码:

————————————————————

<>

()*辗转相除法求最大公约数*

{

,;

("输入两个正整数:

\");

("",,);

()*余数不为,继续相除,直到余数为*

{

;

;

;

}

("和的最大公约数是\");

;

}

——————————————————————

自定义函数

下面代码显示个不对,个警告,双击不对提示,会在不对的当行出现一个箭头标识:

原来是前把<写成(,在()后漏了分号。

在中有一个求平方根的函数()用于求实数的平方根,比如()的值等于。

(){。

}是代码中仅有的一个主函数,其实(),()都是函数,只是其他的非主函数一般都是在主函数中“调用”。

也就是说可以在主函数(){}的外面自己定义一个函数如(){},在花括号中写这个函数实现的功能,然后在()函数中调用自己定义的()函数,它就能实现其功能。

好比()就是定义在库中的一个函数,然后在主函数()中直接调用就可以求平方根,这里只需要调用名称,不用管怎么实现的,功能实现只写在定义函数的花括号{}内。

自定义函数主要有三个点,函数的入口,内部代码实现,出口(返回值的输出)。

—————————————

(,)

{

;

;

;

}

—————————————

上面是一个计算的自定义函数(),其中()里的,是入口,表示到时将会有两个型的数进来,然后里面的代码是实现,最后的用来返回这个函数的结果值,并且在前面的是要求这个返回值的数据类型的。

因此,在主函数()中可以这样用:

——————————————

()

{

()。

(“”,)。

(:

运行时不接受任何中文输入法符号)

}

——————————————

那么输出的的值是多少呢?

由于和都是型符合()函数的“入口”,事实上和叫做实参(实际的参数),和叫做形参(形式上的参数),在调用这个函数之后,会把实参的值传递给形参,所以。

计算之后得出的值为,这就是()内部代码的实现,然后通过提供型的返回值,所以最终整个()的值就是。

这样,就可以把实现某个功能的代码自定义为一个独立的函数,然后在主函数中调用,好处是可以多次调用,而且调用只需要写一次调用的函数名和写入实参,简便许多。

另外自定义函数的函数名可以自己随便起,但是不能使用中文等,只能是标识符,大小写有别,不能跟,这些关键字相同,标识符由字母,数字,下划线组合而成,不能以数字开头。

一般使用英语单词或简称比较好记。

下面用自定义函数实现:

截图

自定义函数一般写在函数后面或者放到其他地方,然后把定义函数的名称那一行照搬到()函数的前面加个分号进行“声明”,声明之后的自定义函数才能在()函数中合法被调用。

所以,自定义函数就这样,根据需要,自己设定返回值的类型,自己设定函数名,自己设定有多少个形参和各个形参的类型,函数里就像()里一样实现各种功能,然后后写上想返回的值,返回值可以是一个数字如,可以是一个存在的变量如,也可以是一个表达式如(*),以此返回值作为整个定义函数的结果。

把上一节求最大公约数的解法写成一个自定义函数,返回值类型是,取函数名为,入口有两个形参设为(,),所以

声明部分为:

()这里加分号

(定义过形参,后在函数内部就不用重复定义了,直接用,其他没有定义的如果需要必须定义。

定义函数为:

()这里不能加分号

{

;

("输入两个正整数:

\");

("",,);这一句去掉,通过入口传递进形参和的值

()*余数不为,继续相除,直到余数为*

{

;

;

;

}

;

}

主函数为:

()主函数

{

;

("",,);

();调用定义的函数()

("\");

;

}

有兴趣可以写几个自定义函数:

分别求最大公约数,,求……,然后在同一个主函数中调用它们。

自定义函数与递归:

递归,顾名思义就是传递过去,然后归来。

比如阶乘!

,传递过去成为

×!

,再传递过去成为××!

直到变成××××!

之后,再倒过来归回来,因为是直接已知的,然后归来乘以,再归来乘以……递归的前提条件是下一步的形式跟原来的是一致的,比如!

变成×()!

,()!

变成()×()!

另外递归必须有个出口,不能无限的递下去却没有归回来,要有个终止点(具体的),比如阶乘最后的×。

用知乎作者的话来说就是:

假设你在一个电影院,你想知道自己坐在哪一排,但是前面人很多,你懒得去数了,于是你问前一排的人「你坐在哪一排?

」,这样前面的人(代号)回答你以后,你就知道自己在哪一排了,因为只要把的答案加一,就是自己所在的排了。

不料比你还懒,他也不想数,于是他也问他前面的人「你坐在哪一排?

」,这样可以用和你一模一样的步骤知道自己所在的排。

然后也如法炮制。

直到他们这一串人问到了最前面的一排,第一排的人告诉问问题的人「我在第一排」。

最后大家就都知道自己在哪一排了。

就是这样,以同样的形式向前传递问题,到第一排有具体的答案后向后一层层返回答案。

这里的第一排就是递归的出口。

——————————————————

()求的阶乘,返回值为!

{

;

()

();

*();

;

}(:

也可以用单词来做变量,比如,。

——————————————————

假如输入实参的值为,不等于,执行之后语句*(),这样就变成了求*(),调用了自身(),然后()又变成了*(),直到参数等于,执行之后的,不再调用自身函数,最终计算出***。

递归的好处显而易见:

变化成一个跟自身形式相同但是更加简单的问题,从而可以再利用自身求解,直到这个问题最终变成一个具体的值,然后再逆推回来得到结果。

递归的基本思想无非就是把规模大的问题转化为规模小的相似的子问题来解决。

另外递归跟循环有些相似,计算的方向刚好相反。

有兴趣可以上各大高校、题库做题(网搜):

题库:

选题进去可以看到问题的描述:

按键提交自己的代码:

然后看到系统的判断(通过与否):

(分别给出所提交题的代码类型,运行进度,代码量和提交进度)

水题:

一、题目要求:

求具有()^性质的位数。

编写一个程序求出具有所有这样性质的位数。

示例:

这个数字是()的平方

输入要求:

无输入

输出要求:

输出所有的具有所有这样性质的位数。

提示:

设四个数,变成位数是***。

几层循环,从,、、从到。

二、题目要求:

阶梯式打印出九九乘法表:

提示:

用嵌套的循环,外层决定输出几个等式,内层的决定当行的具体内容。

三、题目要求:

输入任意一个正整数,将其各位数字反序输出(例如输入,输出)【循环】

、;

、输入正整数.

、输出(除以的余数,即的个位数)

、令.(除以去掉个位,使得十位变成个位)

、回到步骤循环

、直到最后为.

这样最终输出的就是的反向。

数组数组名[表达式]

习惯上用,,,……来表示变量,但是如果要表示个变量,就太过繁琐了,数组的使用大大方便了多个变量的定义,最重要的是数组定义的多个变量之间是有顺序关系的,非常的条理清晰整齐。

[];定义了个字符变量,但是只有一个数组名标识符,用[]来区分各个变量。

比如[]定义了个整型变量,分别是[][][],使用上跟是一样的。

[]里的数字是数组的下标,所有数组的第一个变量都是从下标开始,不是从开始。

——————————

[];

[][];

[][][];

(“”[]);

——————————

数组的数字标识使得同名数组的各个变量之间有了顺序关系,不再是一个个独立的变量,这样我可以用循环来有秩序的改变数组变量的值:

————————————————————

;

[];

(<)

{

[];

}

————————————————————

那么循环之后,[][][]……直接用下标数字来确认变量。

注意的是定义的时候数组的[]里面的必须是常量数字…,不能是变量。

如此,可以用啊[][][]来统一计算第三个变量等于前两个变量之和,只需要改变下的值即可。

是不是。

主要还是在于运用。

数组的一组变量在内存中的位置是有序的,上面的[][,然后[]的地址比[]加.

数组题:

按学号从到输入班同学的数学成绩,并计算其中及格人数。

第一步,[];(定义个变量,就可以不用[],直接[]对应号)

然后

(<)

{

(“”[]);把学号为的同学的成绩放到变量[]中。

}

再然后

(<)

{

([]>)

;[]及格则加。

}

这样经过循环就可以从号到号都比较是否及格。

有一个下标的是一维数组,像[][]这样的是二维数组的一个变量。

在一维数组中,就相当于只有一行或者一列。

但是在一个矩形表格中,行列对应的变量就难以表达,所以引用二维数组:

[][],有两个下标,表示行,表示列,在表格平面中行与列的交叉点表示一个变量。

跟一维数组类似,[][]表示第一行,第一列的那个变量。

这样,[][]可以通过的变化表示第一行的第个变量,也可以用[][]表示第一列的第个变量。

所以,

定义[][]就定义了一个×的变量表,行与列的下标共同来决定一个变量。

二维数组的优点再明显不过了,假如有个班级,每个班级有位同学,那么[][]就代表班的第个同学,如此类推。

无论是几维数组,在定义之后必须要初始化(就是定义之后要给这些变量们都装上点东西,无论什么都好,比如统一或者),防止出错。

二维数组因为有两个下标,所以只能用两个嵌套的,一个循环行,一个循环列。

分别设,;

[][];

(<)

{

(<)

{

[][]*;

}

}

这样,[][][][].

数组可以有维的,比如[][][][],自行脑补……….

指针:

用于指向内存地址。

常用表示。

自行XX了

比如啊[]的地址是,那么[]的地址是,

如果用表示[]的地址,那么[]的地址就是。

指针的好处就是能直接通过地址来计算,也可以通过地址来传递数据。

以上,只为的简单入门。

若饥渴请网购语言教程。

其实,语言的语法应用是很容易掌握的,多上机练习,有任何想法通过上机来实践下,每当你看到自己的代码能运行出结果时肯定是非常开心的。

语言的魅力所在主要是算法吧,学习完语法之后,能够解决问题就在于算法的精妙,在于思想的逻辑上的深度,任何的解题,都第一步离不开自己的解题思路,然后上机实现只是把这个思路具体写成代码而已。

铭记初衷,方得始终。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1