C语言程序设计基础知识
C语言特点
1、是一种兼有高级语言和汇编语言优点的语言
2、是一种结构化程序设计语言
3、数据类型丰富
4、具有丰富的运算符
5、具有预处理功能
合理算法的特点
1、有输入
2、有输出
3、有穷性
4、确定性
5、高效性
C语言程序的特点
1、对大小写是有区分的
2、不存在行概念
3、充分利用注解
4、把程序中的语句根据其功能和嵌套关系进行缩进编排,使程序的模块和复合关系都变得明显
5、一对花括号标志一个程序功能模块的开始与结束
6、在程序适当使用空格和空行会是程序变得更加清晰
程序结构
C语言程序为函数模块结构,每一个C语言程序都是由一个或多个函数组成,其中至少一个main函数,程序从main函数开始执行,在执行过程中可以调出有编译系统提供的各种彼岸准库函数和自定义函数
基本形式:
类型定义符 函数名(形式参数)
{
数据说明部分;
语句部分;
}
基本语法单位
1、字符集
2、标识符 :只能由数字、下划线和数字组成,且第一个字符必须是字母或下划线
3、关键字
存储类型关键字:auto、extern、register、static
4、运算符和分隔符
5、常量和变量
基本数据类型及运算
数据类型
基本数据类型
整型、字符型、单精度浮点型、双精度浮点型
常量
1、整型常量:十进制整常量、八进制整常量、十六进制整常量、无符号型后缀(U)、长型后缀(L)
2、浮点型常量:十进制数形式、指数形式
3、字符型常量:【单括号括起】 简单转义字符、八进制转义字符、十六进制转义字符
4、字符串常量:【双括号括起、后自动加上 ' '】
5、符号常量:宏定义【#define】 、const类型定义符
变量
参考:链接
运算符与表达式
1、算术运算符和算术表达式
结合方向:自左向右
2、赋值运算符和赋值表达式
结合方向:自右向右左
3、关系运算符和关系表达式
结合方向:自左向右
4、逻辑运算符和逻辑表达式
结合方向:自左向右
5、位运算符和位表达式
结合方向:自左向右
6、条件运算符和条件表达式
三目运算符:
7、逗号运算符和逗号表达式
逗号用途:运算符【优先级最低】、分隔符
运算的优先级与结合性
数据的输入输出
参考:链接
控制语句
程序的三种基本结构
顺序
分支
循环
循环嵌套
循环嵌套时内层循环必须完全包含在外层循环内,不允许循环结构交叉
数组和结构
一维数组
1、常量表达式中不允许包含变量
int n = 10; int score[n];
2、数组先定义【即分配存储空间】后使用
二维数组
1、可以省略第一维的长度,不能省略第二维的长度
字符数组
1、单个字符赋初值
2、字符串赋初值:自动在后加上一个终止符,即数组长度加一
3、输入和输出
(1)逐个字符输出和输入
由循环次数控制字符长度,不检测字符串结束标志
(2)字符串整体输入输出
或者:
gets(字符数组名)
puts(字符数组名)
字符串处理函数
参考:链接
结构
结构数组
指针
参考:链接
函数
模块化程序设计方法
在求解一个问题时,采样逐步求解、分而治之的方法,就是把一个大问题分解成若干比较好求的小问题,然后分别求解。
在处理一个复杂的应用程序也是如此,把整个程序划分为若干功能较为单一的程序模块。然后分别寄予实现,最后爱吧所有的程序模块像搭积木似的一起装配起来。
函数参数
1、传值调用
把实参的值传递给形参,而被调用函数中形参的改变对调用函数的实参没有影响,这相当于把实参赋值一份给形参,然后调用内存回收。
int sum(int x,int y){ return x+y; } int mian(){ int result=sum(2,3);//通过直接对sum传递参数 printf("%d",result); return 0; }
2、传址调用
地址传递与按值传递的不同在于,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。
#include<stdio.h> int sum(int *x,int *y){ return *x+*y;//表示获取x中的内容+y中内容 } int main(){ int a,b; a=2;b=3; int result=sum(&a,&b);//通过地址对sum传递参数 printf("%d ",result); return 0; }
3.引用传递
以引用为参数,则既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便,自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。引用相当于实参的别名,他和实参是同一个变量或数值,它的改变就是实参的改变。
int sum(int &x,int &y){ //定义引用类型 return x+y; } int main(){ int a,b; a=2;b=3; int result=sum(a,b);//通过引用对sum传递参数 printf("%d ",result); return 0; }
例题:
在调用函数时,如果形参和实参分别是下列情况,则相应的调用方式是什么?(5分) 【见2012年笔试题2.3】
(1) 实参和形参都是数组元素 //传值调用(值传递)
(2) 形参是指针 //传地址调用(地址传递)
(3) 实参和实参都是数组 //传地址调用(地址传递)
函数与数组
数组元素作函数实参,数组名作为函数参数
函数与指针
1、返回指针的函数
举例:
#include <stdio.h> #include <stdlib.h> int count; int main() { char s[80],ch,*p,*match(); gets(s); ch = getchar(); p = match(ch,s); if(p) printf("%s %d ",p,(count + 1)); else printf("no match found "); return 0; } char *match(c,s) char c, *s; { count = 0; while(c != s[count] && s[count] != '