C Prime Plus 第二章 C语言概述

简单的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");
}

读书记录,欢迎指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值