C的优点和缺点
优点: 代码量小、速度快、功能强大
缺点:危险性高、开发周期长、可移植性不强
龌龊的程序
malloc() 内存泄漏
# include <stdio.h>
# include <malloc.h>
int mian(void)
{
while(1)
{
int *p = (int *)malloc(1000);
}
return 0;
配套书籍
谭浩强《c语言程序设计》
王爽 汇编语言
学C的好处
C是面向过程语言的代表,学好C有助于学习java中面向对象的思想
举例(一元二次方程)
# include <stdio.h>
# include <math.h>
int main(void)
{
//把三个系数保存到计算机中
int a = 1; // =表示的是赋值
int b = 5;
int c = 5;
double delta; // delta存放的是 b*b - 4*a*c
double x1; // 存放一元二次方程的一个解
double x2; // 存放一元二次方程的另一个解
delta = b*b - 4*a*c;
if (delta > 0)
{
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
printf("该一元二次方程有两个解,x1 = %f, x2 = %f\n" , x1, x2);
}
else if (delta == 0)
{
x1 = (-b ) / (2*a);
x2 = x1;
printf("该一元二次方程有一个唯一解,x1 = x2 = %f\n" , x1);
}
else
{
printf("该方程无解\n");
}
}
C语言编程预备知识:
1. cpu、内存条、硬盘、显卡、主板、显示器 之间的关系
如何看电影:双击,将硬盘上的数据调用到内存条当中(因为cpu不能直接处理硬盘上的数据),cpu处理内存条中的数据,图像通过显示器显示出来,声音发给声卡,将声音播放出来。
2.HelloWorld程序如何运行起来的
# include<stdio.h>
int main(void)
{
printf("欢迎来到C的世界!\n");
return 0;
}
3.什么是数据类型
基本类型数据:
整数(整型—int—4个字节,短整型—short int—2个字节,长整型—long int—8个字节)
浮点数(单精度浮点数—float—4个字节,双精度浮点数—double—8个字节)
字符—char—1个字节
复合类型数据:
结构体
枚举
共用体
4.什么是变量
i=3 ,3最终是存放在内存中,程序终止之后 3所占用的空间被释放
变量的本质就是内存中的一段存储空间
5. cpu、内存条、操作系统 之间的关系
硬盘好比仓库,内存条是商店,cpu是商店管理员,处理好这样的关系为顾客提供便利
6.变量为什么必须要初始化
所谓初始化就是赋值的意思
7.如何定义变量
把内存比作一排房子,变量i就相当于给其中一套房子起名字并且能被i所使用,给i赋值就相当于在房子里放了一个人,人是由细胞组成的,而这个房子里存放的数据是以0和1进行记录的
8.什么是进制
9.常量在C语言中是如何表示的
整数:
十进制 传统的写法
十六进制 前面加0x或0X
八进制 前面0注意是数字零不是字母o
浮点数:
传统的写法
float r = 3.2 //传统写法
科学计数法
float x = 3.2e3 //x的值是 3200
float x = 123.45e-2 //x的值是1. 2345
字符:
单个字符用单引号括起来
' A'表示字符A
'AB’ 错误
"AB"正确
字符申用双引号括起来
"A"正确,因为"A"代表了'A' '\0’ 的组合
printf 的用法:
%d表示以十进制输出、%x或%X表示以十六进制输出、%o表示以八进制输出、%lf表示以double型格式输入或输出变量的值、%c代表字符型格式符、 %s代表字符串型格式符。
10.常量以什么样的二进制代码存储在计算机中
整数是以补码的形式转化为二进制代码存储在计算机中的
实数是以IEE754标准转化为二进制代码存储在计算机中的
字符的本质也是与整数的存储方式相同 ( 先用ASCⅡ规定字符用什么整数表示,再补码)
11.代码规范化
代码的可读性更强【容易让自己和别人更清楚的看懂程序】
使程序更不容易出错
12.什么是字节
字节就是存储数据的单位,并且是硬件所能访问的最小单位
1字节 = 8位
1K = 1024字节
1M = 1024k
1G = 1024M
13.不同类型数据之间相互赋值的问题
暂不考虑
int i = 45 ;
long j = 102345 ;
i = j ;
printf ( "%ld %d\n", 1, j ) ;
float x = 6.6 ;
double y = 8.8 ;
printf ( "%f %1f\n , x , y )
14.什么是ASCII
ASCII不是一个值,而是一种规定,ASCII规定了不同的字符是使用哪个整数值去表示
它规定了
'A'——65
'B'——66
'a'——97
'b'——98
'0'——48
# include <stdio.h>
int main(void)
{
char ch = 'A'; //OK 等价 char ch ; ch = 'A';
// char ch = "AB"; //error 因为"AB"是字符串, 我们不能把字符串赋给单个字符变量
// char ch = "A"; //error 因为"A" 等价 'A' '\0'
// char ch = 'AB'; //error 因为单引号只能括单个字符
// char ch = 'B'; //error 因为ch变量已经被定义了,这样会导致变量名被重复定义
ch = 'C';
ch = 'D';
printf("%c\n", ch);
return 0;
}
15.字待的存储【字符本质上与整数的存储方式相同】
基本的输入和输出函数的用法
基本的输入和输出函数的用法 :
Printf ( )—将变量的内容输出到显示器上
四种用法 1. printf ("字符串\n ”) ;
2. printf ("输出控制符",输出参数) ;
3.printf (“输出控制符1 输出控制符2。。。”)、输出参数1、输出参数2。。。); 输出控制符和输出参数的个数必须一一对应
4.printf (“输出控制符 非输出控制符”,输出参数“) ;
输出控制符包含如下:
%d ——————int
%ld——————long int
%c ——————char
%f——————float
%lf——————double
%x (或者%X后者%#X)
%o
%s——————字符串为什么需要输出控制符:
1.01组成的代码可以表示数据也可以表示指令
2.如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的 输出格式输出就有不同的输出结果
/*
2021年12月29日8:59
目的:
测试%x %X %#x %#X的用法
*/
# include <stdio.h>
int main(void)
{
int x = 47; //47是十进制
printf("%x\n", x); //输出结果是: 2f
printf("%X\n", x); //输出结果是: 2F
printf("%#X\n", x); //输出结果是: 0X2F %#X推荐使用
printf("%#x\n", x); //输出结果是: 0x2f
return 0;
}
/*
在Dev—c++中的输出结果是:
------------------------------
2f
2F
0X2F
0x2f
------------------------------
总结:
*/
scanf ( )—— 通过键盘将数据输入到变量中
用法一 : scanf("输入控制符", 输入参数) ;
功能 : 将从键盘输入的字符转化为输入控制符所规定格式的数据, 然后存入以输入参数的值为地址的变量中
用法二: scanf("非输入控制符输入控制符",输入参数);
功能:将从键盘输入的字符转化为输入控制符所规定格式的数据, 然后存入以输入参数的值为地址的变量中,
非输入控制符必须原样输入
/*
2021年12月29日9:41
目的:
scanf用法_不含非输入控制符
*/
# include <stdio.h>
int main(void)
{
int i;
scanf("%d", &i); //&i 表示i的地址 &是一个取地址符
printf("i = %d\n", i);
return 0;
}
/*
2021年12月29日9:41
目的:
scanf用法_含非输入控制符
*/
# include <stdio.h>
int main(void)
{
int i;
scanf("m%d", &i); //m123是正确的输入 123是非法的输入
printf("i = %d\n", i);
return 0;
}
/*
2021年12月29日9:41
目的:
一次给多个变量赋值
*/
# include <stdio.h>
int main(void)
{
int i, j, k;
printf("请输入三个值,中间以逗号分隔: " );
scanf("%d,%d,%d", &i, &j, &k);
printf("i = %d, j = %d, k = %d\n", i, j, k);
return 0;
}
如何使用scanf编写出高质量代码
1.使用scanf之前最好先使用printf提示用户以什么样的方式来输入
2. scanf中尽量不要使用非输入控制符,尤其是不要用\n
3.应该编写代码对用户的非法输入做适当的处理【非重点】
char ch;
while ( (ch=getchar() != '\n' )
continue;