1、为什么要学习编程?
编写程序的目的:通过编写的程序去解决现实生活中的问题。
2、c程序的组成
c程序 = 数据结构 + 算法
数据结构:数据的组织形式
1:数据之间没有直接的联系(变量int a,int b)
2:数据之间呈现一对一的联系(数组、链表、栈、队列)
3:数据之间呈现一对多的联系(树)
4:数据之间呈现多对多的联系(图)
算法:对数据的操作方法
3、hello c 程序
#include <stdio.h>
int main(int argc, const char * argv[])
{
printf("Hello, World!\n");
return 0;
}
#include <stdio.h>:预处理命令,不是c语句,末尾没有分号,它的作用是将stdio.h文件加载到当前hello.c文件中,因为stdio.h文件中有printf函数的声明。
int:main函数的类型,函数返回值类型,和return后面返回的数据的类型对象。
main:main是一个函数,每一个c程序有且只有一个main函数,main是整个c程序的入口,main函数由系统调用的。
int argc,char *argv[]:main函数的两个参数,argc是整型,argv是指针数组,argc命令行参数个数,argv保存每个命令行参数的字符串首地址,这两个参数由系统传递。
{}:{main函数的开始,}main函数的结束,{}中间main函数的实现。
printf:标准库提供的格式化输出函数,他的作用是将Hello,World!字符串输出到终端上, \n换行。
//:单行注释。
/**/:多行注释。
return 0:函数返回,他的作用是将0返回给系统,一般返回的是一个状态。
4、c程序的编译
思考:hello.c程序能否在终端下直接运行
中国人————>汉语
外国人————>英语
翻译:将汉语翻译成英语
程序————>c语言
计算机———>二进制语言
编译器(gcc):将c语言翻译成二进制语言
hello.c————>hello
编译的过程:
1:预处理:将预处理命令转换成纯粹的c语句
gcc -E hello.c -o hello.i
2:编译:将c语句转换成汇编语句
gcc -S hello.i -o hello.s
3:汇编:将汇编语句转换成二进制语句
gcc -c hello.s -o hello.o
4:链接:将程序中使用到的函数库加载进来
gcc hello.o -o hello
编译方式:
1:gcc 程序名————>a.out可执行程序————>./a.out
2:gcc 程序名 -o 可执行程序名————>可执行程序————>./可执行程序名
5、c程序中的数据
数据的分类:常量、变量
6、常量
特点:在整个程序运行过程中不能改变
c程序中常见的常量:
1:整型常量:1,5
2:浮点型常量:1.1
3:字符常量:'S','s'
4:字符串常量:“hello”,“ni hao”
5:地址常量:数组名(地址常量,等于数组首元素地址),函数名(地址常量,函数的入口地址)
6:标识符常量:#define MAX 100
7:const修饰的变量:const int a = 5;
常量的存储(内存):内存中的代码段,内存中数据段的只读存储区(字符串常量)
7、变量
特点:在整个程序运行规程中可以改变
变量的定义:
格式:数据类型 变量名
变量名:满足标识符命名规则
数据类型:
基本数据类型
整型
字符型(char)
短整型(short)
整型(int)
长整型(long)
浮点型
单精度(float)
双精度(double)
派生数据类型
数组([])
指针(*)
函数
结构体(struct)
公用体(union)
枚举(enum)
空类型(void)
例子:char a;
变量的大小:计算方法sizeof(变量),sizeof(数据类型)
#include <stdio.h>
int main(int argc, const char * argv[])
{
//整型
char a;
short b;
int c;
long d;
//浮点型
float e;
double f;
printf("a=%lu\n",sizeof(a));
printf("b=%lu\n",sizeof(b));
printf("c=%lu\n",sizeof(c));
printf("d=%lu\n",sizeof(d));
printf("e=%lu\n",sizeof(e));
printf("f=%lu\n",sizeof(f));
return 0;
}
#include <stdio.h>
int main(int argc, const char * argv[])
{
printf("char=%lu\n",sizeof(char));
printf("short=%lu\n",sizeof(short));
printf("int=%lu\n",sizeof(int));
printf("long=%lu\n",sizeof(long));
printf("float=%lu\n",sizeof(float));
printf("double=%lu\n",sizeof(double));
return 0;
}
变量的存储(内存):栈,堆,数据段中其他区域
变量的赋值:
1:初始化:定义变量的同时堆变量进行赋值
例子:int a = 3;
2:赋值语句:通过赋值运算符对变量进行赋值
例子:int a;a = 3;
赋值运算符:=
格式:变量 = 常量/变量/表达式
作用:将等号=右边的表达式进行计算,将计算的结果赋给等号左边的变量
赋值表达式:由赋值运算符构成的式子
赋值表达式的值:等于等号左边的值
int a= 0;
a=5;
注意:
1:等号右边可以是常量也可以是变量也可以是表达式
2:等号左边只能是变量,不能是常量
3:输入函数:scanf
例子:int a=0;scanf(“%d”,&a)
练习:定义三个变量,用三种方式赋值,用printf输出
#include <stdio.h>
int main(int argc, const char * argv[])
{
int a=3;
int b;
b=1;
int c=0;
printf("请输入c:\n");
scanf("%d",&c);
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
return 0;
}
变量名/变量/数据类型作用?
变量名:内存为变量开辟的存储空间的名字
变量:存储数据
数据类型:决定了变量的大小
#include <stdio.h>
int main(int argc, const char *argv[])
{
//整型
char a;
short b;
int c;
long d;
//浮点型
float e;
double f;
//计算变量的大小
printf("a = %lu\n", sizeof(a));
printf("char = %lu\n", sizeof(char));
printf("b = %lu\n", sizeof(b));
printf("short = %lu\n", sizeof(short));
printf("c = %lu\n", sizeof(c));
printf("int = %lu\n", sizeof(int));
printf("d = %lu\n", sizeof(d));
printf("long = %lu\n", sizeof(long));
printf("e = %lu\n", sizeof(e));
printf("float = %lu\n", sizeof(float));
printf("f = %lu\n", sizeof(f));
printf("double = %lu\n", sizeof(double));
return 0;
}
变量的完整定义:
修饰符 存储类型 符号类型 数据类型 变量名
变量:存储数据
数据类型:决定变量大小
符号类型:由signed(有符号),unsigned(无符号),决定了变量的最高位用来存储符号还是数据
存储类型:决定保存在哪里
1:自动存储:auto,存储在内存的栈中
2:静态存储:static,存储在内存的数据段中
3:寄存器:register,存储在寄存器中
4:外部声明:extern,只是对变量进行声明,没有开辟存储空间
修饰符:const(不可变量),volatile(易变的,编译器优化)
8、c语言中的操作
9、算数运算
算数运算符:
例子:
int a=7;
int b=3;
1:+ ————>a+b
2:- ————>a-b
3:* ————>a*b
4:/:分母不能为0 ——>a/b
5:%:参与求余运算的数是整数 ——>a%b
课堂练习:
1:求7和3的和、差、乘积、商和余数
2:指定一个大写字母,输出与他对应的小写字母。 printf(“%c”, );
#include <stdio.h>
int main(int argc, const char *argv[])
{
char ch = 'A';
ch = ch + 32;
printf("ch = %c\n", ch);
return 0;
}
3:设圆的半径r=1.5,圆柱的高h=3,求圆的周长、圆面积、圆球表面积、圆球体积、圆柱体积。
printf(“%f”, );
#include <stdio.h>
#define PI 3.14
int main(int argc, const char *argv[])
{
float r = 1.5;
float l = 2*PI*r;
float s = PI*r*r;
printf("l = %f\n", l);
printf("s = %f\n", s);
return 0;
}
10、关系运算
关系运算符:
例子:int a = 7; int b = 3;
1:<(小于) ————>a<b
2:<=(小于等于)———>a <= b
3:>(大于) ———>a > b
4:>=(大于等于)———>a >= b
5:==(等于) ————> a== b
6:!=(不等于)————>a!=b
关系表达式:由关系运算符构成的式子
关系表达式的值:关系表达式的值只有真(1)和假(0)
11、逻辑运算
练习:
(参加少年运动会的运动员的年龄在13~17之间) (13<age) && (age<17)
(动物园年龄小于12,大于65的老人免票) (age<12) || (age>65)
(年龄不小于15岁以上的人才可以观影) !(age<=15)
1: &&
2: ||
3: !
逻辑表达式:由逻辑运算符构成的式子
逻辑表达式的值:逻辑表达式的值只有真(1)和假(0)
例子:
a&&b : a和b都为真时,整个表达式为真
a || b:a和b都为假时,整个表达式为假
!a:a真表达式假,a假表达式为真
1:判断下列表达式哪个为true哪个为false。
a:(100>3)&&(‘a’>’c’)
b:(100>3)||(‘a’>’c’)
c:!(100>3)
2:构造一个表达式来表示下列条件:
a:number等于或大于90,但小于100 (number>=90) && (number<100)
b:ch不是字符q也不是字符k (ch != ‘q’) && (ch != ‘k’)
c:number界于1到9之间(包括1不包括9),但是不等于5 ((number>=1) && (number<9)) && (number!=5)
d:number不在1到9之间 !((number>1) && (number<9))
课堂练习:
1:判断ch这个字符是空格,是数字,是字母 ch == ‘’, (ch >=‘0’) && (ch<=‘9’),((ch >= ‘a’) && (ch<=‘z’)) || ((ch >= ‘A’) && (ch<=‘Z’))
2:有3个整数a,b,c,判断谁最大,列出所有可能
a最大:(a>b) && (a>c)
b最大:(a<b) && (b>c)
c最大:(c>b) && (a<c)
3:判断year表示的某一年是否为闰年,用逻辑表达式表示。
闰年的条件是符合下面二者之一:
a:能被4整除但不能被100整除 (year%4==0) && (year%100!=0)
b:能被400整除 (year%400==0)
((year%4==0) && (year%100!=0))||(year%400==0)
12、c程序中的表达式/语句/复合语句
表达式:由运算符构成的式子
例子:a >b
语句:表达式加分号
例子:a >b;
复合语句:程序段,代码段,由多条语句构成复合语句{}
13、复合运算
复合运算符:由算术运算符(+,-,*,/,%)和赋值运算符(=)构成复合运算符
例子:int a = 7; int b = 3;
1: += ———>a+=b———>a = a+b
2:-= ———>a-=b———>a = a-b
3:*= ———>a*=b ———>a = a*b
4:/= ———>a/=b ———>a = a/b
5:%= ———>a%=b ———>a = a%b
练习
写出下面表达式运算后a的值,设原来a=12
1:a+=a 24
2:a-=2; 10
3:a*=2+3; ———>a = a * (2+3) ———>60
4:a/=a+a; ———>a = a/(a+a) ———>0
14:++,- -
i++, ++i ————>i = i + 1;
i- -, - -i ————>i = i - 1;
当++和- - 参与表达式计算时:
i = 3
i++, i - -:先将i参与表达式的计算,再对i进行++
++i, - -i:先对i进行计算,将计算的结果参与表达式的计算
课堂练习:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 3;
printf("i = %d\n", i++);//输出的是3, i = 4
printf("i = %d\n", ++i);//i = 5, 输出5
return 0;
}
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 1;
int b = 1;
int aplus;
int bplus;
aplus = a++;//aplus = 1, a = 2
bplus = ++b;//b = 2, bplus = 2
printf("a = %d\n", a);//2
printf("b = %d\n", b);//2
printf("aplus = %d\n", aplus);//1
printf("bplus = %d\n", bplus);//2
return 0;
s}