运行c语言环境codeblocks.
codeblocks的安装:
安装地址:http://www.codeblocks.org/downloads/26
codeblocks-16.01mingw-setup.exe
1.了解框架:#include<stdio.h>
int main(){
// 这里是要写的代码;
return 0;
}
这里main是主函数,有且只有一个。int是函数类型,也可以是void,char等等。
return是返回执行程序后的结果,可写可不写。
2.c语言做计算
实例:
#include<stdio.h>
int main(){
int a,b,c;
a = 10;
b = 20;
c = a + b;
printf("%d",c);
return 0;
}
3.存储变量的数据类型int,char,float,doubler
int:存数字的 %d表示数字类型
char:装字符的 %c表示字符
float:装小数的 %f表示小数
doubler:装更高精度的小数
4.c语言算法+ - * / % 加 减 乘 除 求余
11+4*5-9%3
#include<stdio.h>
int main(){
int a,b,c,d,e,f;
a = 11;
b = 4;
c =5;
d = 9;
e = 3;
f = a+b*c-d/e;
printf("%d",f);
return 0;
}
5.printf=输出函数格式
printf("只要不是变量的内容用引号括起来",a,b,c)。
6.c语言的注释和一些规则
/*......*/表示多行注释
// 表示单行注释
/n:表示换行,实例:printf("a小于b\n");
printf后必须加分号(;)。
7.c语言比较运算符>,<,==,>=,<=,!=
一个等号是赋值=,两个等号是相等==。
#include<stdio.h>
int main(){
int a=10,b=20;
if(a<b){
printf("a小于b");
}
}
8.逻辑运算符,判断真假&&,||,!
实例:#include<stdio.h>
int main(){
int a=10,b=20;
if(a<b){
printf("a小于b\n");
}
if(!(a>b)){
printf("a不比b大");
}
}
9.if语句
实例:#include<stdio.h>
int main(){
int score=67;
if(score<=100&&score>80){
printf("优秀");
}
else{
if(score<=80&&score>60){
printf("良好");
}
else{
printf("不及格");
}
}
}
10.星期查询,switch case语句,switch:开关,转换器。case:情况,实例。
#include<stdio.h>
int main(){
int weekday = 2;
switch(weekday){
case 1:
printf("today is monday\n");
break;
case 2:
printf("today is Tuesday\n");
break;
3,4,5,6,7;省略
default:
printf("number is wrong");
}
}
11.判断并赋值
y=(条件?‘A’:‘B’);条件满足结果为A,否则为B。
实例:
#include<stdio.h>
int main(){
int x = 20;
char y;
y = (x > 0 ?'A':'B');
printf("%C",y);
}
12.while循环语句
格式:while(条件表达式){循环体}
实例:#include<stdio.h>
int main(){
int i = 1;
int sum = 0;
while(i<=6){
sum=sum+3*i;
i++;
}
printf("%d",sum);
}
13.do.....while
格式:do{循环体}while(条件表达式)
实例:
#include<stdio.h>
int main(){
int i,sum;
i=1;
sum=0;
do{
sum=sum+3*i;
i++;
}
while(i<6);
printf("%d",sum);
}
14.for循环,可以取代while和do..while语句
格式:for(循环变量的赋值;循环条件;循环变量的自加){printf}
实例:
#include<stdio.h>
int main(){
int sum=0,i;
for(i=1;i<=100;i++){
sum=sum+i;
}
printf("%d",sum);
}
15.for,while,do...while与if搭配使用
实例:
#include<stdio.h>
int main(){
int i;
for(i=1;i<16;i++){
if((i%2)==1){
printf("%d\n",i);
}
}
}
16.九九乘法表
实例1:
#include<stdio.h>
int main(){
int a,b,c;
for(a=1;a<10;a++){
for(b=1;b<=a;b++){
c=a*b;
printf("%d*%d=%d\n",b,a,c);
}
}
}
实例2:
#include<stdio.h>
int main(){
int i,j;
for(i=1;i<8;i++){
for(j=1;j<=i;j++){
printf("*");
}
printf("*\n");
}
}
17.break,continue终止循环和跳过本次循环。
实例:
#include<stdio.h>
int main(){
int i;
for(i=1;i<10;i++){
if(i==3){
continue;
}
printf("%d循环次数",i);
}
}
18:数组类型:int,float,char
格式:int 数组名[5],其中5表示数组的个数。
引入变量1直接引入:比如int array[5] = {'t','o','m','c','a','t'},5可写可不写。
引入变量2先定义再引入.比如:int array[5],i;
for(i=0;i<5;i++){
array[i]=i;
}
float ,char同int格式一样。
实例:
#include<stdio.h>
int main(){
char array[] = {'t','o','m','c','a','t'};
int i = 0;
for(i=0;i<6;i++){
printf("%c",array[i]);
}
}
19.数组的使用规则:
1.往数组中存储时可以存一部分,后面的元素会自动赋值0.0表示结束。比如:int a[5] = {0,1}
2.数组名后中括号内的数字可加可不加,结果一样。比如:int a[5]和int a[];
3.字符数组赋值时中括号中可以不用写入数字。比如:char b[] = "lovec"和char b[5] = {'l','o','v','e','c'}效果差不多。
实例:
#include<stdio.h>
int main(){
int i,max,a[]={10,5,20,31,4};
max=a[0];
for(i=0;i<5;i++){
if(a[i]>max)
max=a[i];
}
printf("%d",max);
}
20.字符数组和字符串,sizeof是计算长度的语句sizeof(数组名)
字符串的长度比字符数组的长度多一个,比如char a[]=['l','o','v','e']
char b[]="love";a[]的长度是4,b[]的长度是5.
实例:
#include<stdio.h>
int main(){
char a[]={'l','o','v','e'};
char b[]="love";
int i,j;
i=sizeof(a);
j=sizeof(b);
printf("%d\n%d",i,j);
}
21.二维数组并赋值a[3][4]表示有三个数组,每个数组有四个值。
赋值方式:1.按行分段赋值:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2.按行连续赋值:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
实例:
#include<stdio.h>
int main(){
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int sum =0,v,i,j;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
sum=sum+a[i][j];
}
}
v=sum/12;
printf("%d\n %d",sum,v);
}
22.指针
格式:“*”+ 变量名=指针(声明一个指针变量)
类型:int*p1;指向整数变量的指针变量p1
float*p2;指向浮点型变量的指针变量p2
char*p3;指向字符型变量的指针变量p3
“&”: 叫取地址运算符。比如int a,&a就是取得变量a所存放的地址。
注意:p1=&a,声明指针变量后必须对其进行初始化,否则就是野指针危害很大。
int a=88,*p1=&a,指针初始化时只能指向地址,不能指向数据。
实例:声明三个变量并进行初始化。
#include<stdio.h>
int main(){
int a=0,*p1=&a;
float b=0.11,*p2=&b;
char c='a',*p3=&c;
printf("a=%d,b=%d,c=%d,",*p1,*p2,*p3);
}
23.使用指针
p代表的是地址,*p代表这个地址中存放的内容
用指针取变量的值 比如:int a=11,b,*p;
方法1:取值 p=&a; b=a;
方法2:取值 p=&a; b=*p;
b就成功取得a的值11。
实例:
#include<stdio.h>
int main(){
int x=100,y=200,*p1=&x,*p2=&y;
printf("%d",*p1+*p2);
}
24.指针的奇妙 数值的交换和指针的交换 指针的交换同数值的交换方式一样。
#include<stdio.h>
int main(){
int *p1,*p2,c,a=10,b=20;
p1=&a;
p2=&b;
if(a<b){
c=a;
a=b;
b=c;
printf("%d,%d\n",a,b);
printf("%d,%d",*p1,*p2);
}
}
25.野指针和null
分配类型的函数p=(char*)malloc(100);
释放内存:free(p) malloc和free成对出现。
char括号中的类型必须和p的类型一致,(100)分配类型的大小。
实例:
#include<stdio.h>
#include<stdlib.h>
int main(void){
int *p;
p = (int*)malloc(4);
if(p == NULL){
printf("内存分配失败。");
exit(-1);
}
*p=100;
printf("p的指针内容=%d",*p);
free(p);
}
?26.数组的指针
数组名是所占内存的首地址,比如:int a[],指针变量指向首地址,p=&a[0]或者p=a.
#include<stdio.h>
#include<stdlib.h>
int main(void){
int a[5],*p=a,i;
for(i=0;i<5;i++){
*p=i;
p++;
}
p=p-5;
for(i=0;i<5;i++,p++)
printf("%d\n",*p);
}
?27.使用数组的指针
实例:
#include<stdio.h>
int main(void){
int a[5],i;
for(i=0;i<5;i++)
*(a+i)=i;
printf("%d\n",*(a+i));
}
? 28.二维数组的指针
int a[2][3]分解成int a[0][3]和int a[1][3]
a指向a[0][0]即a的首地址,a+1指向a[1][0].
同样p=a,指向a[0][0],p+1指向a[1][0].
*(P+1)+1指向a[1][1].
实例:
?29:字符串的指针
实例:
?30:指针数组
实例:
?31.指向指针的指针
实例:
?32.指针的长度
实例:
33.函数
定义新的函数并调用。
实例:
#include<stdio.h>
void hello(){
printf("hello\n");
}
void myfun(){
printf("欢迎来到这里学习");
}
int main(){
hello(); //调用的函数
myfun(); //调用的函数
}
34.带参数的函数
多个参数之间用逗号分开,参数可以是多个类型的变量,参数必须有数据类型。
非void函数中一般会有return语句。return是结束此函数,所以用return不用printf.
而exit是结束整个程序详细见:25.野指针和null
实例:
#include<stdio.h>
int min(int a,int b){
if(a>b)
return b;
else
return a;
}
int main(){
int a=4,b=6,c;
c=min(a,b);
printf("%d",c);
}
35.函数的结束
#include<stdio.h>
int a(){
printf("我们在测试return的语句.\n");
return 0;
}
int b(){
printf("我们在测试exit的语句");
exit(0);
}
int main(){
a();
printf("return之后程序还能执行到这儿\n");
b();
printf("exit之后,程序不能执行到这里");
}
36.函数的声明和调用
函数的声明在main函数的前面,具体定义的函数要写在main函数的后面,遵循main函数在最前面的规则。
实例:
#include<stdio.h>
int a(void);int b(void);
int main(){
a();
printf("return之后程序还能执行到这儿\n");
b();
printf("exit之后,程序不能执行到这里");
}
int a(){
printf("我们在测试return的语句.\n");
return 0;
}
int b(){
printf("我们在测试exit的语句");
exit(0);
}
37.函数的递归调用
调用自身的函数叫递归函数
实例:
#include<stdio.h>
int sum(int);
int main(){
int n=100,s=0;
s=sum(n);
printf("%d",s);
}
int sum(int n){
if(n==1)
return 1;
else
return n+sum(n-1);
}
38.全局变量和局部变量
全局变量:在函数外定义的变量叫全局变量。
局部变量:在函数内定义的变量叫局部变量。
实例:
#include<stdio.h>
int max=100;
void pt();
int main(){
int min=10;
if (max>min)
pt();
}
void pt(){
printf("max值是:%d",max);max 是全局变量此处可用。
//printf("min值是:%d",min);min是局部变量此处不可用。
}
39.static变量 修饰局部变量
static+局部变量,变量的存在期间会延长,直到函数结束依然存在。
实例:
#include<stdio.h>
void fun();
int main(){
int i;
for(i=0;i<3;i++)
fun();
}
void fun(){
int b=1;
static int c=3;
b=b+1;
c=c+1;
printf("b=%d,c=%d",b,c);
}
40.extern变量 修饰全局变量
extern+全局变量=外部变量
#include<stdio.h>
int main(){
extern a,b; a和b在函数后面定义,若想调用加extern,从此处往后a和b就是全局变量。
int c;
if(a>b)
c=a;
else
c=b;
printf("%d",c);
}
int a=13,b=8;
41.普通变量做参数
实例:swap数值置换后并没有传到main函数中去,因为return才能把结果返回到函数中。
#include<stdio.h>
void swap(int a,int b);
int main(){
int a=10,b=20;
printf("置换前a=%d,b=%d\n",a,b);
swap(a,b);
printf("置换后a=%d,b=%d\n",a,b);
}
void swap(int a,int b){
int c;
c=a;
a=b;
b=c;
printf("swap函数置换后a=%d,b=%d\n",a,b);
}
42.指针做参数
用指针做参数和调用参数
43.数组名做参数
c语言学习目标
(1)数据结构、算法的概念和作用
结构化程序设计的方法、三种基本结构
程序流程图和 N-S流程图
(2)C程序的一些特点、标识符和关键字的概念.
编译、 链接和运行的概念及应用
C程序开发流程、 学会至少一种环境下的 C程序开发
(3)常量、变量的概念和使用
如何声明和定义变量
printf函数和scanf函数的使用
(4)整型、字符型、浮点型数据类型的使用
使用printf函数和scanf函数处理各种类型致据
使用typedef自定义数据类型
限定词const 和 volatile的使用
(5)表达式和语句的概念及其关系
各种操作符语句的使用、操作符之间的优先级和结合性
了解语法分析中的分析法
(6)if语句三种形式的使用、使用 switch语句实现多路选择结构 else
if结构和 switch语句的使用范围
条件表达式的使用,以及与if语句的比较
逻辑表达式的隐式选择
(7)for语旬、 where语句的结构和使用,两者的比较
do-while语句的使用, 以及与 while语句的比较
continue 语旬和break语句在循环结构中的作用
goto语句的局限性和功能、两种基本结构的嵌套使用
(8)一维数组的使用、具名变量的使用和数组越界的风险
二维数组、多维数组的使用
(9)字符数组的使用、字符串和字符数组的关系
字符串常量和字符串变量的使用
字符串终止符r\0'的作用
使用prinlf函数和 scanf函数处理字符串
(10)模块化编程思想
函数的作用、函数的声明、函数的形参列表
使用const形参
main函数的标准形式、如何向main函数传值及取得main函数值
(11)理解文件和函数的关系、头文件和源文件的关系
学会组织多文件工程,在至少一种环境下开发多文件工程
递归函数的使用、内部函数和外部函数的使用
(12)生存期和作用域的概念
全局变量和局部变量的概念和区别
变量屏蔽的方式
存储变量的各个存储区的作用和区别
auto、 static、 register和extern变量的使用与区别
(13)putchar 函数和 getchar 函数的正确使用
puts 函数和 gets 函数的正确使用
strcpy函数和 strncpy函数的正确使用
strcat函数和strncat函数的正确使用
strncmp函数和 strcmp題数的正确使用
strupr函数和strlwr函数的正确使用
(14)指针的概念及指针变量的内存访问方式
指针变量的定义、赋值和初始化
使用指针作为函数形参和函数值
函数型指针的使用、 void型指针的使用
(15)指针和数组的区别
使用指针访问数组,使用指针作为形参在函数中传递数组
指针型数组和数组指针
使用指针访问二维数组,指针作为形参在函数中传递二维数组
使用字符指针来.处理字符
字符串数组和字符指针数组使用上的区别
(16)理解堆的概念
malloc函数和free函数的正确使用
memset函数的正确使用、 calloc 函数和realloc 函数的正确使用
动态数组的管理和使用
(17)字节和位的概念、原码与补码的转换
6种位操作特及其组成的位运算赋值操作符的使用
各个位操作特的特殊用途、位域的概念和位域的使用
(18)结构体的概念及用途、结构体类型的声明及其字长
结构体变量的定义、访问和赋值
结构体数组和结构指针的使用
(19)共用体变量、枚举变量、位域变量的定义和使用
(20)宏定义的分类
宏对象、宏函数的执行机制和适用场景
宏函数和函数的区别
条件编译的三种形式
文件包含的使用