1、 参考书和IDE
参考书:《C程序设计(第四版)》,谭浩强著,清华大学出版社,IDE:code::blocks.
2、C语言程序结构
C语言程序由一个主函数和若干个其他函数构成,主函数的作用是按照一定的逻辑顺序调用其他函数,实现C程序的功能,其他函数的作用是实现某个小模块的功能,其他函数之间也可以相互调用,但是不能调用主函数,主函数是有系统调用的。下面是C语言的一段示例,功能是求两个整数的最大值。
#include <stdio.h>
int main() {
// 声明函数,给编译器检查函数调用格式是否正确
int getMax(int x,int y);
printf("求两个整数的最大值,请分别输入两个整数并用“,”隔开\n");
int x,y;
//%d表示以十进制整数
scanf("%d,%d",&x,&y);
printf("最大值是:%d",getMax(x,y));
return 0;
}
//求两个整数的较大者
int getMax(int x,int y) {
if(x>y) {
return x;
} else {
return y;
}
}
2.1函数的声明
由于程序的编译是从上到下逐行进行的,程序由main()函数开始,在main()函数中结束。如果没有对被调用的函数事先声明,那么编译器在执行调用的时候将不能检查传值类型和个数是否正确,如果传值错误也会编译通过,在程序执行的时候才报错,bugs也不方便查找。只有对被调用函数进行事先声明,编译器才能对调用函数的合法性型进行全面检查,所以要养成声明函数的良好编程习惯。
2.2输入和输出函数
scanf(格式控制,地址列表);
scanf("%d,%d",&x,&y),%d表示从键盘上输入十进制整数型数,用“,”隔开,&是C语言中的取地址符,"&x"表示变量x的地址。执行scanf函数,从键盘上读入两个整数,送到变量x和y的地址处,然后把这两个整数分别赋给x和y。
printf(格式控制,输出列表);
printf("最大值是:%d",x),以十进制类型输出x。格式控制由“%”和格式字符组成,它的作用是将输出的数据转换为指定的格式输出。格式字符有d,o,x,u,c,s,f,e,g等,如下:
- %d 输出有符号的十进制整数,%xd,指定输出数据的域宽(所占的列数);
int x=12;
printf("%5f",x);
//输出
12; //12前面有3个空格
- %o以八进制数形式输出整数,
- %x以十六进制数形式输出整数,
- %u以十进制数输出unsigned型数据(无符号数)。
- %c用来输出一个字符,
- %s用来输出一个字符串,
-
%f用来输出实数,以小数形式输出,%5.3f,表示小数点后保留3位小数,输出数据占5列,不足5列在左边补空格;%-5.3f也表示输出数据占5列,但是不足5列则在右边补空格。
-
%e以指数形式输出实数,
-
%g根据大小自动选f格式或e格式,且不输出无意义的零。
以上所有输出格式都可以指定输出数据的域宽,在%之后指定即可,浮点数还可以指定保留几位小数。
3、C语言常用运算语句
3.1强制类型装换
强制类型转换之后,变量的类型没有被改变,如(int)x的类型是int,但是x仍然是double型。
//强制类型转换测试
void transformTest(double x){
int y=(int)x;
printf("浮点型:x=%f,整型:y=%d\n",x,y);
}
/*input:
transformTest(2.8);
output:
x=2.800000
y=2
*/
3.2关于运算语句
(1)for(; ; ;){ },for中的三个值都可以写在外面;
(2)对于while(){ }循环,do{ } while();循环,for( ){ }循环,可以用break 跳出循环,用continue结束本次循环。
4、数组和用函数实现模块化程序设计
4.1数组定义和初始化
定义数组的一般形式:类型符 数组名 [常量表达式];定义数组的时候需要指定数组的长度。
如:int array[10] 、char array[3+2]、double array[6/3],
(1)数组的长度必须是常量,不能是变量
C语言不允许对数组的长度进行动态定义,及数组的大小不依赖运行过程中变量的值,例如下面定义的数组是不合法的,
int n;
scanf("%d",&n); //企图在程序中临时输入数组的大小
int a[n]; //n是变量,不合法
(2)可变长数组
如果在被调用函数(不包括主函数)中定义数组,其长度可以使变量或非常量表达式。如:
void function(int n){
int a[2*n]; //合法,n由实参传来
...
}
允许在每次调用函数 function时n有不同的值,但是在执行函数时,n的值是不变的,数组长度是固定的。
如果指定数组为静态存储方式,则不能用可变长数组。
void fun(int n){
static int a[n]; //不合法
}
(3)数组的初始化
int a[10]={0,1,2,3,4},未被赋值的后5个元素自动被赋初值为0;
int b[ ]={0,1,2,3,4}, //合法,b数组的长度是5
凡是未被初始化的数组元素,对于数值型数组,元素被初始化为0,对于字符型数组,元素被初始化为'\0',对于指针型数组,元素被初始化为NULL。
----------待更新--------
5、善于利用指针
6、建立自己的数据类型:结构体和共用体