赞
踩
参考书:谭浩强,C程序设计(第4版),清华大学出版社
范围:
顺序程序设计
选择结构程序设计
循环结构程序设计
利用数组处理批量数据
用函数实现模块化程序设计
善于利用指针
对文件的输入输出
写代码
写出主函数(main函数)
C语言是从主函数的第一行开始执行的
C语言中必须有主函数,相当于入口
一个工程中可以有多个.c文件,但是只能有一个main函数
printf 库函数 在屏幕上打印信息的
printf的使用,需要引用头文件(别人写的,使用时候需要打招呼)
代码如下(示例):
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
编译+链接+运行代码
快捷键fn+F11(DEV-C++)
\n代表换行
计算机语言->写程序->解决生活问题
必须有能力来描述生活中的问题
char | 字符数据类型 1字节 |
short | 短整型 2字节 |
int | 整型 4字节 |
long | 长整型 4字节 |
long long | 更长整型 8字节 |
float | 单精度浮点型 4字节 |
double | 双精度浮点型 8字节 |
计算机中的单位:
bit - 比特位 一个二进制位
byte - 字节 = 8 bit
kb - = 1024 byte
mb - = 1024 kb
gb - = 1024 mb
tb - = 1024 gb
pb - = 1024 tb
生活中有些数据是不能变的,有些值是一定可变的,年龄,体重
C语言怎么描述:
常量 - 不能改变的量
变量 - 能被改变的量
%d 整型
%c 字符
%s 字符串
%f float
%lf double
变量分类:局部变量 全局变量
{}外是全局变量 {}内是局部变量
当局部变量和全局变量冲突时,局部优先
不建议把全局和局部的名字写一样的
求两个数的和
#include <stdio.h>
int main(){
int a = 0;
int b = 0;
int sum = 0;
scanf("%d %d",&a,&b);
sum = a+b;
printf("sum = %d\n",sum);
return 0;
}
局部变量作用域:变量在哪里可以使用,说明他的作用域就在哪
全局变量作用域:整个工程
执行性的代码必须在大括号里面
如果在一个工程,不同文件里面
需要声明一下 extern 。。。
变量的生命周期:变量的创建和销毁之间的时间段
局部变量的生命周期:进入局部范围生命开始,出去 生命结束
全局变量的生命周期:程序的生命周期
字面常量
“3.14” “abcd”
const 修饰常变量
//num是常变量 具有常属性(不能被改变)
const int num = 10;
int arr[10]={0};//对
const int n = 10;
int arr2[n]={0};//n是变量 这里不对!!!
#define MAX 100
可以一一列举的常量
#include <stdio.h> enum Sex{ //枚举类型的变量未来的可能取值 Male=3,//附初值 Female, Secret }; int main(){ enum Sex s = Male; printf("%d\n",s);//3 printf("%d\n",Male); //3 printf("%d\n",Female); //4 printf("%d\n",Secret); //5 return 0; }
字符串就是一串字符 用双引号括起来的一串字符
注:字符串的结束标志是一个\0的转义字符。在计算字符长度的时候\0是结束标志,不算作字符串内容。
字符串在结尾的位置隐藏个\0的字符
//里面其实有4个元素 a b c \0
char arr1[]="abc";
//里面3个元素 打印可能会出现乱码
//可以在后面加‘\0’
char arr2[]={'a','b','c'};
printf("%s\n",arr1);
printf("%s\n",arr2);
//求一下字符串的长度 string length
printf("%d\n",strlen(arr1));//3 求长度不算\0
printf("%d\n",strlen(arr2));//随机值 c向后一直找\0
转变了它原来的意思
printf("C:\test\test.c") ;
//输出:C: est est.c
printf("C:\\test\\test.c") ;
//输出:C:\test\test.c
printf("ab\ncd");
//\n 转变为换行
printf("%c\n",'\130');
//八进制的130是十进制的X
//X ---ASCII码值是88
printf("%c\n",'\x30');
//0 ---ASCII码值是48
转义字符 | 释义 |
---|---|
? | 在书写连续多个问号时使用,防止他们被解析成三字母词 例:??)解析为 ] |
\‘ | 用于表示字符常量’ |
\ " | 用于表示一个字符串内部的双引号 |
\ \ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,峰鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 tab键 |
\v | 垂直制表符 |
\ddd | ddd表示1-3个八进制数字 |
\xdd | dd表示2个十六进制数字 |
例题:
printf("%d",strlen("c:\test\328\test.c"));
//答案:14
\t算一个 \328不能算一个,因为八进制数中不能出现8.所以算\32和8
int main(){
int input=0;
printf("好好学习(1/0)?");
scanf("%d",&input);
if(input ==1)
printf("上岸\n");
else
printf("失败\n");
return 0;
}
int main(){
int line = 0;
while(line<100){
printf("写代码:%d\n",line);
line++;
}
if(line = 100){
printf("上岸");
}
return 0;
}
正常写法
int main(){
int num1 = 0;
int num2 = 0;
int sum = 0;
scanf("%d%d",&num1,&num2);
//scanf里面不能加\n
sum = num1 + num2;
printf("%d\n",sum);
return 0;
}
函数写法
int Add(int x, int y){
int z = 0;
z = x + y;
return z;
}
int main(){
int num1 = 0;
int num2 = 0;
scanf("%d%d",&num1,&num2);
//scanf里面不能加\n
int sum = Add(num1,num2);
printf("%d\n",sum);
return 0;
}
数组 --一组相同类型的元素的集合
//10个整形 1-10 存起来
//数组是用下标来访问的
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
char ch[5] = {'a','b','c'};//不完全初始化,剩余的默认为0
int i = 0;
while(i<10){
printf("%d\n",arr[i]);
i++;
}
return 0;
算数操作符 | + - * / % |
移位操作符 | >> << |
位操作符 | &(按位与) |
赋值操作符 | = += -= *= /= ^= |
单目操作符 | ! - + & sizeof ~ – ++ (类型)强制类型转换 |
逻辑操作符 | && 逻辑与 II逻辑或 |
条件操作符 | exp1 ? exp2 :exp3 |
//算数操作符 int a = 9/2; float b = 9/2; float c = 9/2.0; int d = 9%2;//取余数 printf("%d",a);//4 printf("%f",b);//4.000000 printf("%f",c);//4.500000 printf("%d",d);//1 //移位操作符 int e = 2; int f = e<<1;//左移操作符,移动的是二进制位 printf("%d",f);//4 //0表示假,非0就是真 int arr [10]={0}; printf("%d\n",sizeof(arr));//40 //计算的是数组的总大小,单位是字节; printf("%d\n",sizeof(arr[0])) ;//4 int sz = sizeof(arr)/sizeof(arr[0]); printf("%d\n",sz);//10 int a = 0; printf("%d\n",~a);// -1 //~是按位取反 //把所有二进制位中的数字,1变成0,0变成1 // 0的二进制是32个0 // 整数在内存中存储的是补码 //一个整数的二进制表示有三种:原码,反码,补码 // 正整数:原码、反码、补码相同 //符号位不变,其他位按位取反叫反码 // 反码加一是补码 int a = 10; int b = ++a;//前置++ 先++ 后使用 int c = a++;//后置++ 先使用 后++ printf("%d\n",b);//11 printf("%d\n",a); //12 printf("%d\n",c); //11 return 0; int a = 0; int b = 3; int c = 5; int d = (a=b+2,c=a-4,b=c+2); // a=5 c=1 b=3 //逗号表达式,从左到右依次计算 //整个表达式的结果是最后一个表达式的结果 printf("%d",d);//结果为3
关键字不能做变量名
break case const continue default do
extern float goto if register(寄存器关键字)
1.内存是怎么编号的?
32位 — 32根地址线 — 物理线 — 通电 —1/0
电信号转换成数字信号:1和0组成的二进制序列 例如:32个0 32个1 作为内存编号
共有2的32次方个序列作为内存编号,并将编号称为内存单元的地址。
2.一个这样的内存单元是多大空间?
2的32次方个内存单位
一个内存单位占1byte(字节)
指针就是地址
指针大小是相同的,指针是用来存放地址的,指针需要多大空间取决于地址的存储有多大
32位 32bit 4byte
64位 64bit 8byte
int main ()
{
int a = 10;
printf("%P\n",&a);//%p专门用来打印地址
int * pa = &a;//pa用来存放地址的,在c语言中pa叫指针变量
//* 说明pa是指针变量
// int 说明这个pa执行的对象是int类型的
*pa = 20//* 解引用操作 *pa就是通过pa里面的地址找到a 将a改成20
char ch = "w";
char * pc = &ch;
return 0;
}
结构体使得C语言有能力描述复杂类型
比如描述学生,学生包括 :姓名+年龄+性别+学号 这几项信息
//学生 struct Stu { char name[20];//成员变量 int age; double score; } //书 struct Book { char name[20]; float price; char id[20]; } int main() { struct Stu s = {"zhangsan",20,90};//结构体的创建和初始化 printf("1:%s %d %lf\n",s.name,s.age,s.score); //结构体变量.成员变量名 struct Stu * ps = &s; printf("2:%s %d %lf\n",(*ps).name,(*ps).age,(*ps).score); printf("3:%s %d %lf\n",ps->name,ps->age,ps->score); //结构体指针->成员变量名 return 0 ; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。