C头文件:

#include<stdio.h>//常用getchar()、putchar()、scanf()、printf()、gets()、puts()等函数

#include<math.h>//常用sqrt(变量)[计算变量的平方根];

pow(变量1,变量2)[得到变量1的变量2次方];

fabs(变量)[浮点数绝对值]。

ceil(实型变量)[得到不小于变量的最小整数];

floor(变量)[得到不大于变量的最大整数]。

#include<stdlib.h>//常用malloc()free()函数

#include<string.h>//用于字符串函数

6.3.2.2字符串函数

  1. gets(arr):从输入端读取一个字符串存到字符数组中。
  2. puts(arr):输出一个字符串。
  1. strcat(字符数组1, 字符数组2):将2字符数组连接到1字符数组的尾部。
  2. strcpy(字符数组1, 字符串2):将2字符串复制到1字符数组中。
  3. strcmp(字符串1,字符串2):比较两个字符串的“大小”。

比较规则将两个字符串自左向右逐个字符进行比较(按ASCII),直到出现不同的字符或\0

结果:如果字符串1与字符串2相同,则返回0

如果字符串1 > 字符串2,返回一个正整数

如果字符串1 < 字符串2,返回一个负整数

  1. strlen(字符数组):直接测量字符串长量的长度(不包括’\0’)。

  1. strlwr(字符串):将字符串中的写字母转换成写字母。
  2. strupr(字符串):将字符串中的写字母转换程写字母。

字符与字符代码...ASCII码表,包含127个字符。

‘A’:65

‘Z’:90——24个英文字母

‘a’:97——大写与小写字母的顺序值差32

‘0’:48

‘1’:49

‘  ’:32

‘%’:37

运算符的优先级:!>  算数运算符  >  关系运算符  >  &&和||  >  赋值运算符

(++、+=、/) (低!=、==、高>=)   =

三目运算符:x > y ? x:y ;//如果x大于y则返回x,否则返回y

小四红色加粗 -> 小四加粗 -> 小四加粗 -> 小四 -> 五号

三、顺序程序设计

3.2数据的表现形式及其运算

3.2.1常量和变量

1、常量

  1. 整型常量:如1000,0,-146等
  2. 实型常量1.十进制小数形式,如12.1,0.0等2.指数形式,如12.34e3//12.34乘10的3次方
  3. 字符常量1.普通字符,如‘2’,‘?’,‘A’,‘#’等2.转义字符,如\n,\\,\’,\”等
  4. 字符串常量:如“boy”,“123”等
  5. 符号常量(用#define指令,指定某符号代表一个常量):如 #define PI 3.1416等

//仅仅是字符替换

  1. 变量(遵循先定义,后使用的原则)
  2. 常变量(变量生存期内值不能改变)

在定义变量时,前面加上const,如const int a=3;

//占用储存单元

  1. 标识符

变量名、符号常量名、函数名等

标识符命名规则:由字母或下划线开头,后面可以接字母、数字、下划线。

3.2.2数据类型

  1. 整型
  1. 基本整型int:占4字节;范围31-1
  2. 短整型short:占2字节;范围15-1
  3. 长整型long:占4字节;范围31-1
  4. 双长整型long long:占8字节。范围63-1

(一个字节8位)

注:·对无符号整型unsigned XX,取范围在有符号基础上幂指数+1;

·对于无符号整型,输出格式用%u;

·以上类型的变量值在储存单元中都是以补码的形式存储的,存储单元中第一个二进制代 表符号:0为正,1为负。

  1. 字符型数据
  1. 字符与字符代码...ASCII码表,包含127个字符。

重要的:‘A’:65

‘Z’:90——24个英文字母

‘a’:97——大写与小写字母的顺序值差32

‘0’:48

‘1’:49

‘  ’:32

‘%’:37

  1. 字符变量char:占1字节;
  1. 浮点型数据
  1. 单精度float:占4字节;六位有效数字

(运算时,float自动转为double)

  1. 双精度double:占8字节;十五位有效数字

3.3运算符和表达式

3.3.5不同类型数据间的混合运算

规则:int、float、char和double一起算数运算时,先换成double类型,再进行运算。

3.3.6强制类型转换运算符

格式:(目标类型)(运算式)

例:(double)( 5 % 3 );

(int)( x + y );

注:对于a=(int)x:只是将目标类型的一个中间值赋给a, x的类型和数值不变。

3.5数据的输入输出

一、使用scanf()和printf()

输入:scanf(“变量的输入格式” , &变量);

注:·输入的格式必须和scanf内所写保持一致,如果紧贴默认输入中间有空格;

·取值符号不能丢;

·用%c输入时,空格也算作字符

输出:printf(“变量的输出格式” , 变量);

整型 int用%d(十进制) %ld、%lld

单精度浮点型 float用%f

双精度浮点型 double用%lf

字符型 char用%c:%m.nf:宽度为m,小数占n位的单精度浮点型。

字符串型 string用%s

(%o:八进制整型;%x:十六进制整型;)

  • 使用getchar()和putchar()

输入一个字符:getchar()

getchar()没有参数,单纯地从输入端获取一个字符。

例子:char a,b; a=getchar();b=getchar();此时需要输入GO后按回车才会完成赋值

输出一个字符:putchar()

例子:char a=‘G’,b=‘O’; putchar(a);putchar(b);

四、选择结构程序设计(可嵌套)

4.3关系运算符和关系表达式

>、<、<=、>= ==、!=

优先级相同高     优先级相同低

4.4逻辑运算符和逻辑表达式

&&、||、!

与  或 非

4.2if语句(可嵌套)

格式:if(){}

else if(){}

...

else if(){}

else{}

注:C语言中1代表真,0代表假。

4.5用switch实现多分支选择结构

格式:switch(变量)

{

case  ’变量值1’: {执行语句1}

break;

...

case  ’变量值n’: {执行语句n}

break;

default: {执行语句n+1;}

}

switch的特殊(解决区间性问题时应用)

case 1:

case 2:

case 3: d = 5;

break;

当输入为1/2/3时,d的值被赋为5,退出进入下一个case。

  • 循环结构程序设计(可嵌套)

5.2while语句

格式:while(条件判断语句)

{执行语句}

注:在while中,对于条件判断语句:非0为真,0为假。

(从1加到100用i++;不用++i)

5.3do...while语句

格式:do{执行语句}

while(条件判断语句);

与while的区别:while是先判断再执行;do...while是先执行再判断。

(从1加到100用i++;不用++i)

5.4for循环语句

格式:for(循环变量;循环判断条件;循环变量变化)

{执行语句}

执行顺序:表达式1->表达式2->循环语句->表达式3

5.7改变循环执行的状态

5.7.1用break提前终止循环

作用:使用break后,程序跳出当前循环,继续向下进行。

5.7.2用continue提前结束本次循环

作用:结束本次循环,跳过下面未执行的语句,继续向下进行。

技巧:P125输出矩阵五个一换行:if(n%5==0) printf(“\n”);

六、利用数组批量处理数据

6.1怎样定义和使用一维数组

定义一维数组:数组类型 数组名[];

数组的引用:数组名[下标]

一维数组的初始化不初始化则元素随意赋值;有一个初始化,其他未初始化元素默认为0

(1)全部初始化:int a[3] = {1,2,3};

(2)部分初始化:int a[10] = {1,2,3};

特殊:(3)int a[3] = {0}; <=> int a[3] = {0,0,0};

(4)int a[3] = {1,2,3}; <=> int a[] = {1,2,3};

数组的赋值和输出:可以使用循环。

6.2怎样定义和使用一维数组定义二维数组:数组类型 数组名[行数][列数];//二维数组行优先

数组的引用:数组名[行下标][列下标]

二维数组的初始化:如果确定行数(所有元素都初始化,或者int[][3] = {{1,0,3},{},{10,0}}这样)   的话,行数可以省略。

(1)分行赋值(推荐):int b[2][3] = {{1,2,3},{4,5,6}};

(2)对部分元素赋值:int b[2][3] = {{1},{5}};

1  0  0

5  0  0

6.3.1字符数组

定义字符数组:char c[3] = {‘a’, ’b’, ‘c’}; (赋值所有元素,3可以省略)

6.3.2.1字符串

·C语言将一个字符串当做一个字符数组进行处理。

·C语言规定了一个字符串的结束标志——’\0’;

·系统在储存字符串时会自动加上’\0’,字符串所占的字符数也自行+1。

定义一个字符串:char d[] = “I love C.”;

char e[] = {‘C’, ’h’, ’i’, n’, ’a’};

char e[] = {‘C’, ’h’, ’i’, ’n’, ’a’, ‘\0’};

两者是不等价的。

使用字符数组时最好在结尾加上’\0’。

6.3.2.2字符串函数(头文件包含<string.h>)

  1. gets(arr):从输入端读去一个字符串到字符数组中。
  2. puts(arr):输出一个字符串。
  1. strcat(字符数组1, 字符数组2):将2字符数组连接到1字符数组的尾部。
  2. strcpy(字符数组1, 字符串2):将2字符串复制到1字符数组中。
  3. strcmp(字符串1,字符串2):比较两个字符串的“大小”。

比较规则将两个字符串自左向右逐个字符进行比较(按ASCII),直到出现不同的字符或\0

结果:如果字符串1与字符串2相同,则返回0

如果字符串1 > 字符串2,返回一个正整数

如果字符串1 < 字符串2,返回一个负整数

  1. strlen(字符数组):直接测量字符串长量的长度(不包括’\0’)。

  1. strlwr(字符串):将字符串中的写字母转换成写字母。
  2. strupr(字符串):将字符串中的写字母转换程写字母。

七、用函数实现模块化程序设计

7.5函数的嵌套调用:为了满足顶层函数的需求,一个嵌套一个

7.6函数的递归调用:

简单实现函数的递归:

1计算年龄

int  age(int n)

{

int c;

if(n==1)

c=10;

else

e=age(n-1) + 2;//自身函数加条件

return c;

}

2求n!

int fac(int n)

{

int f;

if(n<0)

printf(“数据错误”);

else if(n==0 || n==1)

f = 1;

else

f = f(n-1) * n; //自身函数加条件

}

7.7数组与函数

7.7.1一维数组元素作函数参数

数组元素:可以作函数的实参,不能作函数的形参。

7.7.2一维数组名作函数参数

数组名:既可以作函数的实参,也可以作函数的形参。

示例:求平均值

double average(double array[10])//传的是首元素地址, 10可以省略

{

double sum=0,aver=0;

for(int i=0;i<10;i++)

{

sum+=array[i];

}

aver=sum/10;

return aver;

}

7.7.3二维数组名作函数参数

示例:找出3x4矩阵中所有元素的最大值

int max(int arr[][4])

{

int i,j,max;

max=arr[0][0];

for(i=0;i<3;i++)

{

for(j=0;j<4;j++)

{

if(arr[i][j]>max)

max=arr[i][j];

}

}

return max;

}

(7.8局部变量和全局变量)

全局变量:在函数外定义的变量。

特点:程序运行过程中值可修改。

(7.9变量的储存方式和生存期)

静态局部变量:

格式:static int a = 1;

特点:在函数内定义,经过主函数调用,保留值,再次调用时已有值。

  • 善于利用指针

8.2指针变量

取址运算符:&; 取值运算符:*

定义指针变量:int *a = &b;

经典:使用指针,通过改变形参值改变实参

void  swap(int *a,int *b)

{

int temp;

temp = *a;

*a = *b;

*b = temp;

}

8.3通过指针指引数组

指引一维数组

数组名就是首元素的地址

指引数组时指针的运算:p+1(p++):指向p指向的下一个元素。

p-1(p--):指向p指向的前一个元素。

通过指针指引数组元素:(1)下标法:int *p=arr;   p[i];

(2)指针法:int *p=arr;  *(p+i);

int a[10]; int *p; for(p=a;p<(a+10);p++){}

例:通过指针变量输出有10个元素的整型数组

#include<stdio.h>

int main()

{

int a[10], i, *p;

p=a;

for(i=0;i<10;i++)

{

scanf(“%d”,p++);

}

p=a;

for(i=0;i<10;i++,p++)

{

printf(“%d”,*p);

}

}

注:使用数组名作函数参数实际上就是将数组首元素的地址传递过去。

指引二维数组

表示形式

含义

a

指向第0行的起始地址

2000

a[0],*(a+0),*a

a[0][0]的地址

2000

a+1,&a[1]

指向第1行的起始地址

2016

a[1],*(a+1)

a[1][0]的地址

2016

a[1]+2,*(a+1)+2,&a[1][2]

a[1][2]的地址

2024

注:·a[0]+1中的”1”代表一个元素所占的字节数;

·a+1中的”1”代表一行中全部元素所占的字节数。

输出二维数组任意行,任意列元素的值:

int a[3][4]; int (*p)[4]; p=a; —— 第i行i列元素的值:*(*(p+i)+j);

p指向包含4个元素的一维数组

区别于二维数组:int a[4]; int(*p)[4]; p=&a;

例:输出3x4的表格中所有元素

#include<stdio.h>

int main()

{

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int *p;

for(p=a[0];p<a[0]+12;p++)

{

if(p-a[0]%4==0)

printf(“\n”);

printf(“%d”,*p);

}

printf(“\n”);

}

8.4通过指针引用字符串

两种指引字符串的方法:

1.char *string1=”I love China.”;

2.char  string2[]=”I love China.”;

printf(“%s”,string1)

printf(“%s”,string2);//输出完整字符串

printf(“%c”,string2[7]);//输出一个字符

8.5动态内存分配与指向它的指针变量(包含头文件<stdlib.h>)

malloc函数:只开辟空间,不进行类型检查,只在使用时强转。

int n=10;

int *p=(int*)malloc(sizeof(int)*n);

free(p);

注:使用malloc开辟的空间使用结束后一定要使用free释放。

九、用户自己建立数据类型

9.1结构体变量

定义一个结构体类型:

struct Student

{

char name[20];//字符串

int age;

int number;

}s1,s2;//定义结构体时定义结构体变量

注:结构体成员可以属于另一个结构体:

struct Date

{

int year;

int mouth;

int day;

};

struct Student

{

int num;

char name[20];

int age;

struct Date birthday;

};

定义一个结构体变量:

struct Student s3,s4;//单独定义

结构体变量的初始化和引用:

初始化

1.定义时初始化:

struct Student

{...}a={“张三”, 19,  222021321062071};

  1. 对某个元素初始化:

struct Student a={.name=”张三”};

  1. 也可以使用字符串函数strcpy对数组元素进行赋值:

strcpy(student1.name,”张三”);

引用

格式:student1.num = 200;

注:·只能对结构体变量中的各个成员分别进行输入和输出;

·在程序中可以对变量的成员进行赋值;

·如果成员本身又属于另一个结构体,则要用多个成员运算符:

student1.birthday.mouth = 12;

·对结构体变量的成员可以像普通变量一样进行各种运算(根据类型而定);

赋值;加法;自增......

·同类型的结构体变量可以相互赋值;

student1 = student2;

9.2结构体数组

结构体数组的定义方式:

  1. struct 结构体名

{成员列表}数组名[数组长度]={初值列表};

2.(已经声明过结构体类型)

结构体类型 数组名[数组长度]={初值列表};

9.3结构体指针

指向结构体变量的指针:

结构体指针既可以指向结构体变量,也可以指向结构体数组中的元素。(基类型必须相同)

struct Student student1;

struct Student *p = &student1;

从此*p代表student1。

而且,student1.num等价于(*p).num等价于p->num;

指向结构体数组的指针:

struct Student

{...}stu[3]={{1,”Li”,10},{2,”Liu”,11},{3,”Gou”,12}};

int main()

{

struct Student *p;

for(p=stu;p<stu+3;p++)

{

printf(“%d%s%d”,p->num;p->name;p->age);

}

}

C语言笔记(谭浩强)相关推荐

  1. C语言中怎么用循环统计买法,C语言入门谭浩强版简单选择法冒泡法用数组和for循环进行学生成绩简单统计处理...

    C语言入门谭浩强版 简单选择法排序 冒泡法排序 用数组和for循环进行学生成绩简单统计处理 例如:求个人平均分 学科平均分 单科最高分等 简单选择法 #include #define N 10 voi ...

  2. C语言(谭浩强第5版)课后习题知识总结

    目录 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第十章 第一章 1.程序:就是一组计算机能够识别和执行的指令集合,每一条指令使计算机执行特定操作. 程序设计:从确定任务到 ...

  3. 谭浩强c语言规范化的指数形式,C语言程序设计谭浩强第四期末复习重点.docx

    1. 1.问题分析2.设计算法3.编写程序4.对源程序进行编辑.编译和连接5.运行程序,分析结 6.编写程序文档 第一章程 序 设 计 和C 语 言 1.1.什么是计算机程序 程序:一组计算机能识别和 ...

  4. C语言指针 谭浩强版总结

    不掌握指针就是没有掌握C的精华 文章目录 不掌握指针就是没有掌握C的精华 一.指针是什么 二.指针变量 三.通过指针引用数组 四.通过指针引用字符串 五.指向函数的指针 六.返回指针值的函数 七.指针 ...

  5. C语言程序设计谭浩强第五版复习梳理2

    第2章 算法--程序的灵魂 前言:前两章都是c语言基础知识,软考还有考研笔试可能会考,下一章开始学的才是真正的编程. 2.1程序=算法+数据结构 算法+数据结构=程序 数据结构: 对数据的描述.在程序 ...

  6. C语言视频教程-谭浩强版-小甲鱼主讲—P4

    详细排列 视频知识点 代码 舍入误差(indexP401.c) 代码(indexP402.c) 代码(indexP403.c) 代码(indexP404.c) 小写字母转换成大写字母(indexP40 ...

  7. C语言程序设计 谭浩强 数据类型,运算符和表达式 知识点

    位bit 字节byte 1byte=8bit 实型变量 float单精度 一般4个字节 double双精度 一般8个字节 long double 长双精度 一般16个字节 字符型数据运算 字符数组中要 ...

  8. C语言程序设计谭浩强版 十 三

    9.1 概述        当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理 部分作处理, 处理完毕自动进入对源程序的编译. 9.2 宏定义 在C语言源程序中允许用一个标识符来表示 ...

  9. C语言视频教程-谭浩强版-小甲鱼主讲—P18

    详细排列 视频知识点 视频知识点

  10. C语言视频教程-谭浩强版-小甲鱼主讲—P13

    详细排列 视频知识点 视频知识点 年份是整百数的必须是400的倍数才是闰年,例如1900年.2100年就不是闰年.

最新文章

  1. 【Keras】Linux一个shell脚本安装python、keras、tensorflow、anaconda等~
  2. ASIC与FPGA能达到的频率差异巨大是为什么
  3. python基础训练题2-元组,字典
  4. Maven学习(一)——Maven入门
  5. 为QT添加qss样式文件
  6. Spring Boot————默认缓存应用及原理
  7. 关于Early-Z Culling(提前Z拣选)
  8. 将input file的选择的文件清空的两种解决方案
  9. Python生成二维码-qrcode
  10. 【cc2541历程】APP更改蓝牙设备名称
  11. android开发之嵌入广告
  12. 推荐几个代码静态分析工具
  13. android 极光推送测试,Android 极光推送基本步骤
  14. 企业微信接入第三方应用(以服务商身份)
  15. 网卡 eth0,eth1,eth2,lo分别代表是什么 意思
  16. 百度对网站就像西门庆对潘金莲
  17. Win 10系统安装3ds max 2014
  18. 世界上第一台电子数字式计算机诞生于美国,世界上公认的第一台电子数字计算机诞生于哪年哪个国家?...
  19. 久坐伤身?关于程序员站立式办公的体验,你会发现...
  20. 数组c语言抓小偷,警察抓小偷C语言源码

热门文章

  1. AxInterop.ShockwaveFlashObjects.dll 问题
  2. chrome中Js的setAttribute支持不好?
  3. Java语言基础 ——注释
  4. Power of Two(Leetcode231)
  5. hive if函数_数据仓库,Hive中使用 != 或 lt;gt;; 符号进行条件过滤时的坑
  6. 在c语言中怎么实现循环结构,浅议C语言中循环结构的教学方法.pdf
  7. apache-apollo Dockfile 镜像制作
  8. python递归函数分叉树枝_python递归函数绘制分形树的方法
  9. VS生成dump文件和调试dump文件
  10. linux raid类型,Linux学习笔记:RAID种类