工欲善其事必先利其器
编写
C
语言程序用什么工具
?
记事本
(
开发效率低
)
Vim(
初学者入门门槛高
)
VSCode(
不喜欢
)
eclipse(
不喜欢
)
CLion(
深爱
,
但收费
)
Xcode(
逼格高
,
但得有苹果电脑
)
Qt Creator(
开源免费
,
跨平台安装和运行
)
什么是
Qt Creator ?
Qt Creator
是一款新的轻量级
集成开发环境
(
IDE
)。它能够跨平台运行,支持的系统包括
Windows
、
Linux
(
32
位及
64
位)以及
Mac OS X
Qt Creator
的设计目标是使开发人员能够利用
Qt
这个应用程序框架更加快速及轻易的完成开发任
务
开源免费
,
简单易用
,
能够满足学习需求
代码情缘
集成开发环境(
IDE
,
Integrated Development Environment
)是用于提供程序开发环境的应用
程序,一般包括代码
编辑器
、
编译器
、
调试
器和
图形用户界面
等工具。集成了代码编写功能、分析
功能、
编译
功能、调试功能等一体化的开发软件服务套。
Qt Creator
安装
切记囫囵吞枣
,
不要纠结里面的东西都是什么含义
,
初学者安装成功就是一种成功
下载
Qt Creator
离线安装包
:
版本和代码编辑器任意选择都可以
qt
软件下载链接
:
https://pan.baidu.com/s/1gx0hNDBJkA2gx5wF1Jx34w
提取码:
0fg9
http://download.qt.io/
以管理身份运行离线安装包
代码情缘
下一步
,
下一步
,
下一步
,
等待
ing...
代码情缘
代码情缘
代码情缘
注意安装路径中最好不要出现中文
代码情缘
对于初学者而言全选是最简单的方式
(
重点
!!!)
代码情缘
代码情缘
代码情缘
代码情缘
代码情缘
代码情缘
配置
Qt Creator
开发环境变量
代码情缘
代码情缘
代码情缘
你的安装路径
\5.11.0\mingw53_32\bin
你的安装路径
\Tools\mingw530_32\bin
启动安装好的
Qt Creator
非全选安装到此为止
,
全选安装继续往下看
出现这个错误
,
忽略这个错误即可
代码情缘
等待安装完毕之后解决刚才的错误
找到安装目录下的
strawberry.msi,
双击运行
代码情缘
代码情缘
什么是环境变量
?
打开我们添加环境变量的两个目录
,
不难发现里面大部分都是
.exe
的可执行程序
如果我们不配置环境变量
,
那么每次我们想要使用这些
"
可执行程序
"
都必须
"
先找到这些应用程序对
应的文件夹
"
才能使用
代码情缘
为了方便我们在电脑上
"
任何地方
"
都能够使用这些
"
可执行程序
",
那么我们就必须添加环境变量
,
因
为
Windows
执行某个程序的时候
,
会先到
"
环境变量中
Path
指定的路径中
"
去查找
为什么要配置系统变量
,
不配置用户变量
用户变量只针对使用这台计算机指定用户
一个计算机可以设置多个用户
,
不同的用户用不同的用户名和密码
当给计算机设置了多个用户的时候
,
启动计算机的时候就会让你选择哪个用户登录
系统变量针对使用这台计算机的所有用户
也就是说设置了系统变量
,
无论哪个用户登录这台计算机都可以使用你配置好的工具
Qt Creator
快捷键
Qt Creator Keyboard Shortcuts(Documentation)
Qt Creator Keyboard Shortcuts(Wiki)
如何创建
C
语言程序
这个世界上
,
几乎所有程序员入门的第一段代码都是
Hello World.
原因是当年
C
语言的作者
Dennis Ritchie(
丹尼斯 里奇
)
在他的名著中第一次引入
,
传为后世经典
,
其它
语言亦争相效仿
,
以示敬意
如何创建
C
语言文件
代码情缘
代码情缘
代码情缘
C
语言程序组成
手机有很多功能
, "
开机
","
关机
","
打电话
","
发短信
","
拍照
"
等等
手机中的每一个功能就相当于
C
语言程序中的一个程序段
(
函数
)
众多功能中总有一个会被先执行
,
不可能多个功能一起执行
想使用手机必须先执行手机的开机功能
所以
C
语言程序也一样
,
由众多功能、众多程序段组成
,
众多
C
语言程序段中总有一个会被先执行
,
这
个先执行的程序段我们称之为
"
主函数
"
代码情缘
一个
C
语言程序由多个
"
函数
"
构成
,
每个函数有自己的功能
一个程序
有且只有一个主函数
如果一个程序没有主函数
,
则这个程序不具备运行能力
程序运行时系统会
自动调用
主函数
,
而其它函数需要开发者
手动调用
主函数有固定书写的格式和范写
函数定义格式
主函数定义的格式
:
int
代表函数执行之后会返回一个整数类型的值
main
代表这个函数的名字叫做
main
()
代表这是一个函数
{}
代表这个程序段的范围
代码
函数定义格式
主函数定义的格式
:
int
代表函数执行之后会返回一个整数类型的值
main
代表这个函数的名字叫做
main
()
代表这是一个函数
{}
代表这个程序段的范围
代码情缘
return 0;
代表函数执行完之后返回整数
0
其它函数定义的格式
int
代表函数执行之后会返回一个整数类型的值
call
代表这个函数的名字叫做
call
()
代表这是一个函数
{}
代表这个程序段的范围
return 0;
代表函数执行完之后返回整数
0
如何执行定义好的函数
主函数
(main)
会由系统自动调用
,
但其它函数不会
,
所以想要执行其它函数就必须在
main
函数中手动
调用
call
代表找到名称叫做
call
的某个东西
()
代表要找到的名称叫
call
的某个东西是一个函数
;
代表调用函数的语句已经编写完成
所以
call();
代表找到
call
函数
,
并执行
call
函数
如何往屏幕上输出内容
输出内容是一个比较复杂的操作
,
所以系统提前定义好了一个专门用于输出内容的函数叫做
printf
函数
,
我们只需要执行系统定义好的
printf
函数就可以往屏幕上输出内容
但凡需要执行一个函数
,
都是通过函数名称
+
圆括号的形式来执行
如下代码的含义是
:
当程序运行时系统会自动执行
main
函数
,
在系统自动执行
main
函数时我们
手动执行了
call
函数和
printf
函数
经过对代码的观察
,
我们发现两个问题
并没有告诉
printf
函数
,
我们要往屏幕上输出什么内容
找不到
printf
函数的实现代码
int
main
() {
// insert code here...
return
0
;
}
int
call
() {
return
0
;
}
int
main
() {
call
();
return
0
;
}
#include <stdio.h>
int
call
(){
return
0
;
}
int
main
(){
call
();
printf
(
"hello world\n"
);
return
0
;
}
代码情缘
方式
2
直接点击
Qt
开发工具运行按钮
main
函数注意点及其它写法
C
语言中
,
每条完整的语句后面都必须以分号结尾
代码情缘
C
语言中除了注释和双引号引起来的地方以外都不能出现中文
一个
C
语言程序只能有一个
main
函数
一个
C
语言程序不能没有
main
函数
main
函数前面的
int
可以不写或者换成
void
main
函数中的
return 0
可以不写
int
main
(){
printf
(
"hello world\n"
)
//
如果没有分号编译时会报错
return
0
;
}
int
main
(){
//
如果没有分号
,
多条语句合并到一行时
,
系统不知道从什么地方到什么地方是一条完整语句
printf
(
"hello world\n"
)
return
0
;
}
int
main
(){
printf
(
"hello world\n"
);
//
这里的分号如果是中文的分号就会报错
return
0
;
}
int
main
(){
return
0
;
}
int
main
(){
//
编译时会报错
,
重复定义
return
0
;
}
int
call
(){
//
编译时报错
,
因为只有
call
函数
,
没有
main
函数
return
0
;
}
int
mian
(){
//
编译时报错
,
因为
main
函数的名称写错了
,
还是相当于没有
main
函数
return
0
;
}
#include <stdio.h>
main
(){
//
不会报错
printf
(
"hello world\n"
);
return
0
;
}
#include <stdio.h>
void
main
(){
//
不会报错
printf
(
"hello world\n"
);
return
0
;
}
代码情缘
多种写法不报错的原因
C
语言最早的时候只是一种规范和标准
(
例如
C89, C11
等
)
标准的推行需要各大厂商的支持和实施
而在支持的实施的时候由于各大厂商利益、理解等问题
,
导致了实施的标准不同
,
发生了变化
Turbo C
Visual C(VC)
GNU C(GCC)
所以大家才会看到不同的书上书写的格式有所不同
,
有的返回
int,
有的返回
void,
有的甚至没有
返回值
所以大家只需要记住最标准的写法即可
, no zuo no die
Tips:
语法错误:编译器会直接报错
逻辑错误:没有语法错误,只不过运行结果不正确
C
语言程序练习
编写一个
C
语言程序
,
用至少
2
种方式在屏幕上输出以下内容
普通青年实现
2B
青年实现
文艺青年实现
(
装逼的
,
先不用理解
)
int
main
(){
//
不会报错
printf
(
"hello world\n"
);
}
#include <stdio.h>
int
main
(){
printf
(
"hello world\n"
);
return
0
;
}
*** ***
*********
*******
****
**
printf
(
" *** *** \n"
);
printf
(
"*********\n"
);
printf
(
" *******\n"
);
printf
(
" ****\n"
);
printf
(
" **\n"
);
printf
(
" *** *** \n*********\n *******\n ****\n **\n"
);
代码情缘
初学者如何避免程序出现
BUG
int
i
=
0
;
while
(
1
) {
if
(
i
%
2
==
0
) {
printf
(
" *** *** \n"
);
printf
(
"*********\n"
);
printf
(
" *******\n"
);
printf
(
" ****\n"
);
printf
(
" **\n"
);
}
else
{
printf
(
"\n"
);
printf
(
" ** ** \n"
);
printf
(
" *******\n"
);
printf
(
" *****\n"
);
printf
(
" **\n"
);
}
sleep
(
1
);
i
++
;
system
(
"cls"
);
}
_ooOoo_
o8888888o
88
" . "
88
(
| -
_
- |
)
O\
= /
O
____
/
`
---
'\____
.
' \\| |// `.
/
\\
|||
:
|||
// \
/
_
||||| -
:
- |||||-
\
| |
\\\
-
/// | |
|
\_
|
''
\
---/
''
| |
\
.
-
\__ `
-
` ___
/-
.
/
___`
. .
' /--.--\ `. . __
.
"" '< `.___\_<|>_/___.'
>
'"".
| |
:
`
-
\`
.;
`\ _
/
`
;.
`
/ -
`
:
| |
\ \ `
-
.
\_ __\
/
__ _
/
.
-
`
/ /
======
`
-
.
____`
-
.
___\_____
/
___
.
-
`____
.
-
'======
`
=---=
'
.............................................
佛祖保佑 有无
BUG
━━━━━━
神兽出没
━━━━━━
┏┓ ┏┓
┏┛┻━━━━━━┛┻┓
┃ ┃
┃ ━ ┃
┃ ┳┛ ┗┳ ┃
┃ ┃
┃ ┻ ┃
┃ ┃
┗━┓ ┏━┛
Code is far away from bug with the animal protecting
代码情缘
多语言对比
C
语言
┃ ┃
神兽保佑
,
代码无
bug
┃ ┃
┃ ┗━━━┓
┃ ┣┓
┃ ┏━━┛┛
┗┓┓┏━┳┓┏┛
┃┫┫ ┃┫┫
┗┻┛ ┗┻┛
━━━━━━
感觉萌萌哒
━━━━━━
´´´´´´´´██´´´´´´´
´´´´´´´████´´´´´´
´´´´´████████´´´´
´´`´███▒▒▒▒███´´´´´
´´´███▒
●
▒▒
●
▒██´´´
´´´███▒▒▒▒▒▒██´´´´´
´´´███▒▒▒▒██´
项目:第一个
C
语言程序
´´██████▒▒███´´´´´
语言:
C
语言
´██████▒▒▒▒███´´
编辑器:
Qt Creator
██████▒▒▒▒▒▒███´´´´
版本控制:
git
-
github
´´▓▓▓▓▓▓▓▓▓▓▓▓▓▒´´
代码风格:江哥
style
´´▒▒▒▒▓▓▓▓▓▓▓▓▓▒´´´´´
´
.
▒▒▒´´▓▓▓▓▓▓▓▓▒´´´´´
´
.
▒▒´´´´▓▓▓▓▓▓▓▒
..
▒▒
.
´´´´▓▓▓▓▓▓▓▒
´▒▒▒▒▒▒▒▒▒▒▒▒
´´´´´´´´´███████´´´´´
´´´´´´´´████████´´´´´´´
´´´´´´´█████████´´´´´´
´´´´´´██████████´´´´
大部分人都在关注你飞的高不高,却没人在乎你飞的累
不累,这就是现实!
´´´´´´██████████´´´
我从不相信梦想,我,只,相,信,自,
己!
´´´´´´´█████████´´
´´´´´´´█████████´´´
´´´´´´´´████████´´´´´
________▒▒▒▒▒
_________▒▒▒▒
_________▒▒▒▒
________▒▒_▒▒
_______▒▒__▒▒
_____ ▒▒___▒▒
_____▒▒___▒▒
____▒▒____▒▒
___▒▒_____▒▒
███____ ▒▒
████____███
█ _███_ _█_███
——————————————————————————
女神保佑,代码无
bug——————————————————————
代码情缘
C++
语言
OC
语言
Java
语言
Go
语言
什么是注释
?
注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解、解释的意思
注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流沟通
注释可以是任何文字,也就是说可以写中文
被注释的内容在开发工具中会有特殊的颜色
为什么要使用注释
?
没有编写任何注释的程序
#include<stdio.h>
int
main
() {
printf
(
"
南哥带你装
B
带你飞
"
);
return
0
;
}
#include<iostream>
using namespace std
;
int
main
() {
cout
<<
"
南哥带你装
B
带你飞
"
<<
endl
;
return
0
;
}
#import <Foundation/Foundation.h>
int
main
() {
NSLog
(
@
"
南哥带你装
B
带你飞
"
);
return
0
;
}
class
Test
{
public static
viod main
()
{
system
.
out
.
println
(
"
南哥带你装
B
带你飞
"
);
}
}
package
main
import
"fmt"
//
引入
fmt
库
func
main
() {
fmt
.
Println
(
"
南哥带你装
B
带你飞
"
)
}
代码情缘
void
printMap
(
char
map
[
6
][
7
] ,
int
row
,
int
col
);
int
main
(
int
argc
,
const
char *
argv
[])
{
char
map
[
6
][
7
]
=
{
{
'#'
,
'#'
,
'#'
,
'#'
,
'#'
,
'#'
,
'#'
},
{
'#'
,
' '
,
' '
,
' '
,
'#'
,
' '
,
' '
},
{
'#'
,
'R'
,
' '
,
'#'
,
'#'
,
' '
,
'#'
},
{
'#'
,
' '
,
' '
,
' '
,
'#'
,
' '
,
'#'
},
{
'#'
,
'#'
,
' '
,
' '
,
' '
,
' '
,
'#'
},
{
'#'
,
'#'
,
'#'
,
'#'
,
'#'
,
'#'
,
'#'
}
};
int
row
=
sizeof
(
map
)
/
sizeof
(
map
[
0
]);
int
col
=
sizeof
(
map
[
0
])
/
sizeof
(
map
[
0
][
0
]);
printMap
(
map
,
row
,
col
);
int
pRow
=
2
;
int
pCol
=
1
;
int
endRow
=
1
;
int
endCol
=
6
;
while
(
'R'
!=
map
[
endRow
][
endCol
]) {
printf
(
"
亲
,
请输入相应的操作
\n"
);
printf
(
"w(
向上走
) s(
向下走
) a(
向左走
) d(
向右走
)\n"
);
char
run
;
run
=
getchar
();
switch
(
run
) {
case
's'
:
if
(
'#'
!=
map
[
pRow
+
1
][
pCol
]) {
map
[
pRow
][
pCol
]
=
' '
;
pRow
++
;
//3
map
[
pRow
][
pCol
]
=
'R'
;
}
break
;
case
'w'
:
if
(
'#'
!=
map
[
pRow
-
1
][
pCol
]) {
map
[
pRow
][
pCol
]
=
' '
;
pRow
--
;
map
[
pRow
][
pCol
]
=
'R'
;
}
break
;
case
'a'
:
if
(
'#'
!=
map
[
pRow
][
pCol
-
1
]) {
map
[
pRow
][
pCol
]
=
' '
;
pCol
--
;
map
[
pRow
][
pCol
]
=
'R'
;
}
break
;
case
'd'
:
if
(
'#'
!=
map
[
pRow
][
pCol
+
1
]) {
map
[
pRow
][
pCol
]
=
' '
;
pCol
++
;
map
[
pRow
][
pCol
]
=
'R'
;
}
break
;
}
printMap
(
map
,
row
,
col
);
}
printf
(
"
你太牛
X
了
\n"
);
printf
(
"
想挑战自己
,
请购买完整版本
\n"
);
return
0
;