[toc]
第一个程序:
选择 控制台应用程序
创建完工程之后,我们可以编写如下代码:
#include "pch.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world");
system("pause");
return 0;
}
程序并不能直接运行,因为我们需要将其编译为可执行的文件。
生成成功之后,exe文件是可以运行的程序。
vs的工程管理方式:
解决方案:
工程1
文件1.cpp
文件2.cpp
…..
工程2
…..
工程3
…..
……
再在解决方案之下,新建一个工程:
如果说代码编写完毕了,通过vs启动程序,有几个方式:
方式1:快捷键是 F5 调试运行程序
方式2:ctrl+F5 直接运行程序
当一个解决方案下,有多个工程的时候,可以使用如下方式,设置默认运行工程
vs解决方案目录的结构如下:
第一个C语言程序:
/*
工程名: Test
用途:教学
编写者:高老师
时间:2019-8-20
*/
#include <stdio.h>
#include <stdlib.h> //预处理
int main(void) //主函数
{
printf("hello 15PB"); //调用库函数,printf是输出
system("title 十五派");
//system("cls");
system("pause"); //调用库函数,system是执行cmd命令
return 0; //返回。
}
其中包含的知识点:
预处理:
inlude 的作用:就是将包含的文件,复制粘贴到命令处。
库函数:
printf system
总结:我们使用库函数去完成一些功能,库函数是编译器提供给我们使用的。但是我们如果要使用某一个库函数,就需要包含相应的头文件。
比如 printf 属于
关键字:
是C语言已经使用了的一些单词。
注释:
分为单行注释和多行注释
作用:
1 便于自己复习
2 便于工作交接
3 还可以找错误
我们可以逐步的缩小错误所在的范围:
#include <stdio.h>
#include <stdlib.h> //预处理
int main(void) //主函数
{
printf("hello 15PB"); //调用库函数,printf是输出
system("title 十五派");
system("cls");
/* system("pause") 将这里注释之后,错误没有了,说明错误在这个范围内
return 0; //返回。
*/
}
课堂练习:
设置控制台的标题为“ Hello 15PB ” ,并输出白底黑字的内容“ Hello 信息安全 ”;
/*
工程名: Test
用途:教学
编写者:高老师
时间:2019-8-20
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("hello 信息安全");
system("title hello 15PB");
system("color 70");
system("pause");
return 0;
}
需要注意:
1 语句以分号为结尾
2 System s需要小写
3 双引号,需要是英文的
C语言中使用的所有符号,都是英文符号。
关于main函数的问题:
C语言第一行被执行的代码,就是main函数的复合语句。
同一个工程中,只能有一个main函数。
关于常量 变量 赋值的问题
常量就是不可以改变的量
变量是背后有一块内存,变量名代表那一块空间。
&符号能够得到变量的地址。
int nNum = 0; 就是定义了一个变量 类型是 int 。
关于赋值符号的左值和右值。
对于一个变量来说,放在赋值左边的时候,使用的是背后内存
放在右边的时候,使用的是内存中的数值。
int main()
{
int a = 0;
int b = 0;
a = 100;//复制符号左边的量,需要有内存
//左边使用的也是内存
b = a; //右边,只要有数值就可以了。
//100 = a;//错误 左边如果是一个常量是不行的,
//因为常量背后没有内存
return 0;
}
关于赋值时的类型转换:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 10;
short b = 0;
a = b;
int c = 100;
short d = 20;
d = c;
int e = 65538;
short f = 0;
f = e; //这里丢失数据了
return 0;
}
我们在赋值的时候,如果赋值符号左右两边的类型不一致。
会自动的将右边的类型,给转换为左边的类型,然后再赋值。这个叫做隐式转换。
缺点就是,当右边的类型范围大,左边的类型范围小的时候,有可能会丢失数据。
我们还学习了一个调试技巧。
设置断点——-》F5 程序运行起来,就会停在断点的位置———》F10 单步步过 一步一步的运行我们的程序,观察结果
F11 单步步入
调试时的监视功能:
如果找不到这个窗口的话:
关于显式类型转换:
#include <stdlib.h>
int main()
{
double a = 3.14;
int b = 0;
b = (int)a;//当我明确知道他俩类型不一样的时候,应该写显示转换,表示我是故意这么做的。
return 0;
}
课堂练习:交换两个数的值
交换两个变量a和b的值
int a = 5;
int b = 6;
交换后,a等于6,b等于5
int main()
{
int a = 5;
int b = 6;
int c = 0;
c = a;
a = b;
b = c;
return 0;
}
如果不想使用中间变量
int main()
{
int a = 5;
int b = 6;
a = a + b;
b = a - b;
a = a - b;
return 0;
}
程序的输入与输出:
需要注意:printf函数的格式控制符的数量和类型一定要和后面的参数匹配上。
关于整数的其他进制输出:
关于字符和整数:
字符和整数 没有本质区别,都是数字。 字符也是其阿斯克码。
课堂练习:
从键盘获取两个数,输出和
int main()
{
//scanf();
int a = 0;
int b = 0;
printf("请输入两个数");
scanf_s("%d %d",&a,&b);
printf("%d", a + b);
return 0;
}
从控制台中接收一个字符。
int main()
{
int a = 0;
int b = 0;
char m = 0;
printf("请输入两个数");
scanf_s("%d %d",&a,&b);
printf("%d", a + b);
printf("请输入一个字符");
scanf_s("%c", &m);//去掉缓冲区中的回车
scanf_s("%c", &m);
printf("获取到的字符为%c",m);
return 0;
}
关于字符的两个函数:
getchar 获取一个字符
putchar 输出一个字符
_getch() 存在于
功能是无回显的获取一个字符
关于运算符:
算数运算符:
- / % ++ —
需要注意的:
1 / 在C语言中,两个整数相除,得到的只能是整数
如果要得到小数部分,应该有浮点数参与运算
2 % 是取模, 进行运算的数,只能是整数
3 ++ 自增 自己增加1
— 自减 自己减小1
int main()
{
int a = 10;
a++;
printf("%d", a);
return 0;
}
自增或者自减 可以前置也可以后置
对于前置的自增/自减,在自增自减的同时还参与了其他的运算,那么就先自增/自减,再进行其他运算
对于后的自增/自减,在自增自减的同时还参与了其他的运算,先进行其他运算,再进行自增/自减
int main()
{
int c = 0;
int a = 10;
c = a++;
printf("%d %d\n", a,c);
int b = 10;
c = ++b;
printf("%d %d", b,c);
return 0;
}