简单的C语言程序示例
//2.1 first.c
#include <stdio.h> //预处理指令(#define 也是预处理指令)
int main(void) //main()总是第一个被调用的函数
{ //函数体开始
int num; //声明
num = 1; //赋值
printf("I am a simple"); //调用printf()函数
printf("computer.\n"); // \n 指的是换行
printf("My favourite number is %d because it is first.\n", num); //%d 是输出十进制的数字
return 0; //return 语句
} //结束
程序细节
1.#include 指令和头文件
#include <stdio.h>
作用:相当于把stdio.h文件中的所有内容都输入到该行所在的位置
#include这行代码是一条C预处理器指令。通常,C编译器在编译前会对源代码做一些准备工作,即预处理。
stdio.h :标准输入输出头文件
通常,在C程序顶部的信息集合被称为头文件,头文件帮助编译器把你的程序正确地组合在一起。
2.main()函数
int main(void)
C程序一定从main()函数开始执行(不考虑例外),int 是main()函数的返回类型
3.注释
/**/存在潜在问题,不能嵌套
//注释单行
4.花括号、函数体和块
所有的C函数都使用花括号标记函数体的开始和结束
花括号还可用于把函数中的多条语句合并为一个单元或块
5.声明
int num;
声明完成了两件事
1.在函数中有一个名为num的变量
2.int表明num是一个整数
int是一种数据类型,编译器使用这些信息为num变量在内存中分配存储空间
int是C语言的一个关键字,表示一种基本的C语言数据类型。
num是一个标识符,也就一个变量、函数或其他实体的名称
声明把特定标识符与计算机内存中的特定位置联系起来,同时也确定了储存在某位置的信息类型或数据类型
数据类型
C 语言可以处理多种类型的数据,把变量声明为整型或字符类型,计算机才能正确地储存、读取和解释数据
命名
给变量命名时要使用有意义的变量名或标识符,如果变量名无法清楚地表达自身的用途,可在注释中进一步说明
可以用小写字母、大写字母、数字和下划线(_)来命名。而且,名称的第1个字符必须是字符或下划线,不能是数字
操作系统和C库经常使用以一个或两个下划线字符开始的标识符,因此最好避免在自己的程序中使用这种名称
声明变量的4个理由
1.把所有的变量放在一处,方便读者查找和理解程序的用途。如果变量名无法表述清楚,在注释中解释变量的含义。这种方法让程序的可读性更高。
2.声明变量会促使你在编写程序之前做一些计划
3.声明变量有助于发现隐藏在程序中的小错误,如变量名拼写错误,如数字1和字母l
4.如果事先未声明变量,C程序将无法通过编译
6.赋值
num = 1;
声明时,编译器在计算机内存中为变量num预留了空间,然后在执行这行赋值表达式语句时,把值储存在之前预留的位置
可以给num赋不同的值,这就是num之所以被称为变量的原因
该赋值表达式语句从右侧把值赋到左侧
7.printf()函数
printf("I am a simple");
printf("computer.\n");
printf("My favourite number is %d because it is first.\n", num);
圆括号表明printf是一个函数名,圆括号中的内容是从main()函数传递给printf()函数的信息
第1行的I am a simple是函数的实际参数。
调用函数, 只需输入函数名,把所需的参数填入圆括号即可。当程序运行到这一行时,控制权被转给已命名的函数,函数执行结束后,控制权被返回至主调函数。
第2行的\n代表一个换行符,打印换行符的效果与按下Enter 键相同,但如果直接按下Enter键,编辑器会退出当前行并开始新的一行,而换行符仅会影响程序输出的显示格式。
第3行的%d相当于是一个占位符,其作用是指明输出num值的位置,%提醒程序,d表明把变量作为十进制整数打印
printf()函数名中的 f 提醒用户,这是一种格式化打印函数
8.return 语句
return 0;
int main(void)中的int 表明main()函数应返回一个整数,有返回值的函数要有return语句,该语句以return 关键字开始,后面是待返回的值,并以分号结尾
简单程序的结构
程序由一个或多个函数组成,必须有main()函数。函数由函数头和函数体组成。函数头包括函数名、传入该函数的信息类型和函数的返回类型。通过函数名后的圆括号可识别出函数,圆括号里可能为空,可能有参数。函数体被花括号括起来,由一系列语句、声明组成。
提高程序可读性的技巧
选择有意义的函数名和写注释
如果变量名是width,就不必写注释说明该变量表示宽度,但是如果变量名是video_routine_4,就要解释一下该变量名的含义。
在函数中用空行分隔概念上的多个部分。
每条语句各占一行。
进一步使用C
//fathm_ft.c--把2音寻转换成英寸
#include <stdio.h>
int main(void)
{
int feet, fathoms;
fathoms = 2;
feet = 6 * fathoms;
printf("There are %d feet in %d fathmos!\n", feet, fathoms);
printf("Yes, I said %d feet!\n", 6 * fathoms);
return 0;
}
多个函数
//two_func.c 一个文件中包含两个函数
#include <stdio.h>
void butler(void);//ANSI/ISO函数原型
int main(void)
{
printf("I will summon the butler function.\n");
butler();
printf("Yes. Bring me some tea and writeable DVDs.\n");
return 0;
}
void butler(void)//函数定义开始
{
printf("You rang, sir?\n");
}
butler()函数出现3次,
第一次是函数原型,告知编译器在程序中要使用该函数,函数原型指明了函数的属性。butler()函数的第一个void表明butler()函数没有返回值,第二个void表明butler()函数不带参数。
第二次是函数调用,在main()函数中调用butler()很简单,写出函数名和圆括号即可。
第三次是函数定义,其形式和main()函数相同,都包含函数头和用花括号括起来的函数体。
调试程序
//nogood.c 有错误的程序
#include <stdio.h>
int main(void)
{
int n, n2, n3;
//该程序有一个语义错误
n = 5;
n2 = n * n;
n3 = n2 * n2;
printf("n = %d,n squared = %d,n cubed = %d\n", n, n2, n3);
return 0;
}
n3得到的值是n的四次方,但 n cubed 表示的是n的立方,语义错误
关键字和保留标识符
关键字不能用做标识符(如,变量名)
对于保留标识符,C语言已经指定了他们的用途或保留他们的使用权,不能随便使用。
编程练习
#include <stdio.h>
int main(void)
{
printf("Gustav Mahler\n");
printf("Gustav \nMahler\n");
printf("Gustav ");
printf("Mahler\n");
return 0;
}
#include <stdio.h>
int main(void)
{
int age = 20;
printf("age: %d\n", age);
printf("days: %d\n", age * 365);
return 0;
}
#include <stdio.h>
void jolly(void);
void deny(void);
int main(void)
{
jolly();
jolly();
jolly();
deny();
return 0;
}
void jolly(void)
{
printf("For he's a jolly good fellow!\n");
}
void deny(void)
{
printf("Which nobody can deny!\n");
}
#include <stdio.h>
void br(void);
void ci(void);
int main(void)
{
br();
printf(",");
ic();
printf("\n");
ic();
printf(",");
printf("\n");
br();
return 0;
}
void br(void)
{
printf("Brazil, Russia");
}
void ic(void)
{
printf("India, China");
}
#include <stdio.h>
int main(void)
{
int toes = 10;
printf("toes: %d\n", toes);
printf("toes squared: %d\n", toes * toes);
printf("double toes : %d\n", toes * 2);
return 0;
}
#include <stdio.h>
void smile(void);
int main(void)
{
smile();
smile();
smile();
printf("\n");
smile();
smile();
printf("\n");
smile();
return 0;
}
void smile(void)
{
printf("Smile!");
}
#include <stdio.h>
void one_three(void);
void two(void);
int main(void)
{
printf("starting now:\n");
one_three();
printf("done!\n");
return 0;
}
void one_three(void)
{
printf("one\n");
two();
printf("three\n");
}
void two(void)
{
printf("two\n");
}
读书记录,欢迎指正