C语言学习笔记01

一、计算机语言

1. 机器语言

010101010100110101010

2. 汇编语言

add 1,2; ------编译器------> 001110101010101010111010

3. 高级语言

1. 面向过程的语言 – C语言

C语言源程序 --编译–>目标程序–连接–>可执行程序 011010101010100101101010

2. 面向对象的语言 --Java语言

计算机语言越是低级速度就越快,因为越低级就越符合计算机的思维。

二、环境设置

需要:1.文本编辑器 2.编译器

只要安装开发工具:C-Free,VC++

三、C程序结构

最简单的c程序:

#include <stdio.h>
int main()
{
	/* 我的第一个 C 程序 */
	printf("Hello, World! \n");
	return 0;
}

C 程序主要包括以下部分:

  • 预处理器指令
  • 函数
  • 变量
  • 语句 & 表达式
  • 注释

四、C基本语法

  1. 分号

    是语句结束符。每个语句必须以分号结束。它表明一个逻辑实体的结束。

  2. 注释

    (1)单行注释

    ​ // 单行注释

    (2)多行注释

    ​ /*

    ​ 多行注释1

    ​ 多行注释…

    ​ 多行注释n

    ​ */

  3. 标识符

    标识符,就是所有编程过程中,需要我们自己取名字的地方。比如:项目名,函数名,变量名等等

    标识符的规范:由字母,数字,下划线组成,且不能以数字开头。

    C语言是区分大小写的。

  4. 关键字

    关键字,就是必须原样写的单词。即保留字。

  5. 空格

    空格用于描述空白符、制表符、换行符和注释。

    (1)空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。因此,在下面的语句中:

    int age;
    

    (2)为了增强可读性,您可以根据需要适当增加一些空格。

    fruit = apples + oranges;   // 获取水果的总数
    

五、数据类型

  1. char
  2. int(整数类型)
  3. float(浮点类型)-单精度浮点数
  4. double(浮点类型)-双精度浮点数

数据类型转换

(1)自动类型转换【小转大】
a)浮点数赋给整型,该浮点数小数被舍去;
b)整数赋给浮点型,数值不变,但是被存储到相应的浮点型变量中;
(2)强制类型转换【大转小】
(类型说明符)(表达式)

注意:在一个C程序的项目中,只能有一个main()函数!

printf()函数的说明:
(1)printf(“字符串\n”); //原样打印
(2)printf(“输出控制符”,输出参数);

参考网址:http://c.biancheng.net/view/159.html

C语言中的格式化说明符:
%f :代表单精度实数 float
%d:代表整数 int的十进制

六、变量

语法

type   variable_list;

例子:

//声明变量
int    i, j, k;
char   c, ch;
float  f, salary;
double d;
i = 2;//声明后赋值

//声明的同时赋值
int a = 10,b = 20,c;

七、常量

1. 字面量常量

10
2.3
‘a’
“Hello”

2.符号常量

2.1 #define

#define LENGTH 10
#define PI 3.1415926
注意:最后不要加分号!

2.2 const

const int WIDTH = 5;
const float PI = 3.1415926;

八、运算符

1. 算术运算符

(1)+
(2)-
(3)*
(4)/ 除法,可以理解为取整运算。10/3=3
(5)% 取模,可以理解为取余运算。10%3=1
(6)++ 自增,注意a++和++a的区别。

int a = 10,b;
b = a++;//先返回值,再自增
b = ++a;//先自增,再返回值

(7)-- 自减,运算规则类似自增。

2. 关系运算符

(1)==
(2)!=
(3)>
(4)<
(5)>=
(6)<=

由关系运算符,构成的表达式,称为关系表达式。其返回值为真(1)或假(0)。一般关系表达式用于充当条件,比如:用在if(a > b){ … }

3. 逻辑运算符

(1)&& 逻辑与运算 同真为真,否则为假。
(2)|| 逻辑或运算 同假为假,否则为真。
(3)! 逻辑非运算 非真即假,非假即真。

4. 位运算符(不讲)

(1)&
(2)|
(3)^
(4)~
(5)<<
(6)>>

5. 赋值运算符

(1)=
(2)+= c+=a 等价于 c = c + a;
(3)-=
(4)*=
(5)/=
(6)%=

6. 杂项运算符

(1)条件运算符
语法:(表达式)?值1:值2;
运算规则:如果表达式返回值为真,则整个条件表达式返回值1,否则返回值2;
例子:

int a = 10,b = 5,c;
c = (a > b)?a:b;
printf("%d\n",c); //10

(2)sizeof 获取变量所占字节数。

7. 运算符的优先级

括号成员是老大; // 括号运算符 成员运算符. ->

全体单目排老二; // 所有的单目运算符比如++、 --、 +(正)、 -(负) 、指针运算*、&

乘除余三,加减四; // 这个"余"是指取余运算即%

移位五,关系六; // 移位运算符:<< >> ,关系:> < >= <= 等

等与不等排行七; // 即 == 和 !=

位与异或和位或; // 这几个都是位运算: 位与(&)异或(^)位或(|)

"三分天下"八九十;

逻辑与,逻辑或; // 逻辑运算符: || 和 &&

十一十二紧挨着; // 注意顺序: 优先级(||) 底于 优先级(&&)

条件只比赋值高, // 三目运算符优先级排到 13 位只比赋值运算符和 “,” 高

逗号运算最低级! //逗号运算符优先级最低

8.输入&输出

C 语言中的 I/O (输入/输出) 通常使用 scanf()和 printf() 两个函数。

8.1 scanf() & printf()

scanf() 函数用于从标准输入(键盘)读取并格式化,
printf() 函数发送格式化输出到标准输出(屏幕)。

int scanf(const char *format, …) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。
int printf(const char *format, …) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。

scanf()函数的语法:
scanf(“格式化字符串”,&变量);
例子:

float f;
printf("请输入一个数字:");//输出 
//scanf()是一个阻塞式的函数 
scanf("%f",&f);//注意,第二个参数是&f,表示取f变量的地址。 
printf("f=%f",f); //打印f的变量值 

C语言中的格式化说明符:
%d:代表整数 int的十进制
%ld:代表长整型整数。
%f :代表单精度实数 float
%lf:代表双精度实数 double
%e,%E:代表指数
%c:代表单个字符 ‘a’
%s:代表一个字符串 “Hello”

8.2 getchar() & putchar()

int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。
int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。

int getch(void):隐式的输入一个字符。效果类似于getchar(),只是看不到用户输入的字符。

注意:getchar()和putchar()可以实现输入、输出一个字符

8.3 gets() & puts()

char *gets(char *s) 函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。
int puts(const char *s) 函数把字符串 s 和一个尾随的换行符写入到 stdout。

注意:gets()和puts()可以实现输入、输出一个字符串

9. 流程控制语句

结构化程序设计有三种基本结构,即顺序结构、选择结构和循环结构。

9.1 顺序结构

顺序结构:是程序设计中最简单、最基本的结构,其特点是程序运行时,按语句书写的次序依次执行。

9.2 选择结构/分支结构

选择结构:又称选取或分支结构,根据给定条件是否成立,以决定程序的分支转向的程序结构。

分类:
(1)单分支 :

if(boolean_expression)
{
   /* 如果布尔表达式为真将执行的语句 */
}

(2)双分支:

if(boolean_expression)
{
   /* 如果布尔表达式为真将执行的语句 */
}
else
{
   /* 如果布尔表达式为假将执行的语句 */
}

(3)多分支:

if(boolean_expression 1)
{
   /* 当布尔表达式 1 为真时执行 */
}
else if( boolean_expression 2)
{
   /* 当布尔表达式 2 为真时执行 */
}
else if( boolean_expression 3)
{
   /* 当布尔表达式 3 为真时执行 */
}
else 
{
   /* 当上面条件都不为真时执行 */
}

当使用 if…else if…else 语句时,以下几点需要注意:
一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后。
一个 if 后可跟零个或多个 else if,else if 必须在 else 之前。
一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试。
(4)嵌套if语句:

if( boolean_expression 1)
{
   /* 当布尔表达式 1 为真时执行 */
   if(boolean_expression 2)
   {
      /* 当布尔表达式 2 为真时执行 */
   }
}

(5)switch…case语句:

switch(expression){
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
    case constant-expression  :
       statement(s);
       break; /* 可选的 */
  
    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
}

switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。
在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
(6)嵌套 switch 语句

switch(ch1) {
   case 'A': 
      printf("这个 A 是外部 switch 的一部分" );
      switch(ch2) {
         case 'A':
            printf("这个 A 是内部 switch 的一部分" );
            break;
         case 'B': /* 内部 B case 代码 */
      }
      break;
   case 'B': /* 外部 B case 代码 */
}

9.3 循环结构

循环结构:又称重复结构,根据条件反复执行某一部分语句的程序结构。
(1)while

while(condition 循环条件)
{
   statement(s);//循环体
}

(2)do…while

do
{
   statement(s);//循环体

}while( condition 循环条件);

区别:
while循环执行次数为0-n次。
do…while循环执行次数为1-n次。即至少执行一次。
(3)for

for ( init初始值; condition循环条件; increment增量 )
{
statement(s);//循环体
}

循环控制语句
break:退出循环
continue:结束本次循环,进入下一次循环
goto:了解

10. 数组

(1)声明数组

type arrayName [ arraySize ];

例子:

int arr[10];

(2)数组初始化
<1>逐个初始化数组

arr[0] = 10;
arr[1] = 12;
...

一般通过循环来实现。

<2>整体初始化
int arr[5] = {10, 2, 3, 7, 5};

int arr[] = {10, 2, 3, 7, 5};//长度可省略
(3)访问数组元素
int num = arr[0]; //语法:数组名[索引];

11. 函数

*(1)语法:

return_type function_name( parameter list )
{
   body of the function
}

例子:

/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) 
{
   /* 局部变量声明 */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

(2)函数的分类:
1.无参,无返回值

void welcome01(){
	printf("*****************\n");
	printf("*** 欢迎光临 ***\n");
	printf("*****************\n");		
}

2.有参,无返回值

void calc(int a,int b){
	int sum = a + b;
	printf("和为:%d\n",sum); 
} 

3.无参,有返回值

#include <stdlib.h>
#include <time.h>
int getNum(){
	srand(time(NULL));//设置seed 
    return rand()%11;//生成0-10之间的随机数,对11取余。    生成0-100之间的随机数,对101取余。以此类推。
}

4.有参,有返回值

int amass(int num1,int num2){
	return num1 * num2;
}

(3)函数声明
语法:

return_type function_name( parameter list );

例子:

int max(int num1, int num2);

注意:声明要放在main函数之前,函数的实现,可以放在main函数之后。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值