前言
本来学JAVA学着学着听不懂什么叫空指针异常
上网上看感觉还是不够系统,趁着国庆重温C语言的经典C Primer Plus
这本书写的真的很细致,需要慢慢去消化吸收
纸上得来终觉浅,绝知此事要躬行
这句话看了好几遍了,我也写上去,很适合编程方向的学习
好了,开始啃书了
资源在这
一、简单的C程序
/* 一个简单的C程序 */ #include <stdio.h> int main(void) { int num; num = 1; printf("I am a simple "); printf("computer.\n"); printf("My favorite number is %d because it is first.\n",num); return 0; }
1.快速概要
这一节先简单介绍一下作用,后面会详细讨论
#include 包含另一个文件
int main(void) 函数名
/* ....*/ 注释
{ 函数体开始
int num 声明一个num变量
num = 1赋值表达式语句,把值1赋给名为num的变量
printf("I am a simple "); 调用一个函数
printf("computer.\n"); 调用另一个函数,在上一条语句后面加上computer并换行,\n的作用是换行
printf("My favorite number is %d because it is first.\n",num); 这个printf函数是把num的值嵌套在双引号中和内容一起打印,%d告诉计算机以何种形式输出num的值
return 0; 可以先看作是结束main函数的作用
} 表示程序的结束
2.程序细节
(1)#include指令和头文件
#include
#include这行代码是一条C预处理指令(preprocessor directive),什么是预处理?就是C编译器在编译之前会对源码进行一些准备工作,即预处理
stdio.h文件。这个包含许多供编译器使用的输入输出函数(printf())该文件。通常在C程序顶部的信息被称为头文件
为什么不内置输入输出函数在语言中,还要每次导入stdio.h文件?
原因之一是,并非所有的程序都会用到I/O(输入输出)包,轻装上阵是C语言的哲学
(2)main()函数
int main(void)
C程序一定从main()开始执行,除了main函数其他函数可以随便命名,main()
int是main()函数的返回值类型。这表明main()函数返回的值是整数,返回到操作系统
通常,函数后面的圆括号中包含一些传入函数的信息。这个例子没有传递任何信息。因此是单词void
没错上面的就算标准形式
不要这样写int main() ,void main()
(3)注释
/*一个简单的C程序*/
注释可以卸载任何地方,在注释之间的会被编译器忽略
还有单行注释
//我是单行注释
C++,Java都是一样的方式,C++还没学过,Java的确是这样的哈哈哈
(4)花括号、函数体和块
{
...
}
所有C函数都用花括号标记函数的开始和结束
(5)声明
int num;
在上面的例子中,声明完成了两件事,第一是在函数中有个名为num的变量,第二是int表名num是一个整数
int是关键字
num是标识符,也就是一个变量,函数或其他实体的名称。因此声明把特点标识符与计算机内存中的特点位置联系起来,同时确定了存储在某位置的信息类型或数据类型
C语言中所有的变量必须先声明才能使用。
int main(void) //旧规则 { int doors; int dogs; doors = 5; dogs = 3; //其他语句 return 0; }
int main(void) //新规则 { int doors; doors = 5; int dogs; dogs = 3; //其他语句 return 0; }
(6)赋值
num = 1;
把值1赋值给num,不是num = 1,该表达式语句从右侧把值赋到左侧
(7)printf()函数
printf("I am a simple "); printf("computer.\n"); printf("My favorite number is %d because it is first.\n",num);
圆括号表名printf是一个函数名。圆括号中的内容是参数,是实际参数,也就是确切的值
那么形式参数就是函数中用于存储值变量
这个函数可以将括号内的内容打印到屏幕上
(8)return语句
return 0;
可以理解为代码规范,在后面会i详细解释用途
3.程序规范
函数头和函数体
见名知意
使用空行,一条语句一行
写注释
4.多个函数
#include <stdio.h> void buttler(void); //函数原型 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"); }
该程序输入如下: I will summon the butler function. You rang,sir? Yes,Bring me some tea and writeable DVDs.
其中butler()函数出现了3次。
第一次是函数原型,作用是告诉编译器要在程序中使用该函数;
第二次调用是函数调用的形式出现在main()中;
最后一次出现在函数定义中,函数定义就是函数本身的源代码
这是因为C的标准建议,要为所有程序中应用到的所有函数提供函数原型。标准include文件为标准库文件提供了函数原型
5.调试程序
(1)语法错误
编程和数学英语有亲密的联系,学习之余可以多学学英语和数学,提高英文阅读能力和逻辑思维能力
#include <stdio.h> int main(void) ( int n,int n2,int n3; /*多行错误 n=5; n2 = n * n; n3 = n2 * n2; return 0; )
1、main()函数体用花括号
2、变量的声明应该这样写
int n , n2 ,n3;
int n;
int n2;
int n3;
3、注释有头有尾
(2)语义错误
n=5; n2 = n * n; n3 = n2 * n2;
程序出错就出现bug,解决bug叫调试程序
6.关键字和保留标识符
就是你不能在起这个名字了,这些词已经被计算机用了
7.小结
(1)C程序由一个或多个C函数组成。每个C程序必须包含一个main()函数,这是C程序要调用的第一个函数
(2)在C语言中,大部分语句都以分号结尾。
(3)声明为变量创建变量名和标识该变量中储存的数据类型。
(4)变量名是一种标识符。
(5)赋值表达式语句把值赋给变量,或者更一般地说,把值赋给存储空间。
(6)函数表达式语句用于调用指定的已命名函数。调用函数执行完毕后,程序会返回到函数调用后面的语句继续执行。
(7)关键字是C语言的词汇!!!
8.编程练习
纸上得来终觉浅,绝知此事要躬行。
1、
#include <stdio.h> int main(void) { printf("Gustav Mahler\n"); printf("Gustav\n"); printf("Gustav\n"); printf("Gustav "); printf("Mahler"); return 0; }
结果:
Gustav MahlerGustavGustavGustav Mahler
这一题还是挺简单的,掌握换行符\n就可以了
2、
#include <stdio.h> int main(void) { printf("My name is pengyuyan.\n"); printf("My address is beijing.\n"); return 0; }
My name is pengyuyan. My address is beijing.
3、
#include <stdio.h> int main(void) { int age = 21; int year = 365; int days = age * year; printf("Days are %d",days); return 0; }
Days are 7665
4、
#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"); return; } void deny(void) { printf("Which nobody can deny!\n"); return; }
For he's a jolly good fellow! For he's a jolly good fellow! For he's a jolly good fellow! Which nobody can deny!
5、
#include <stdio.h> void br(void); void ic(void); int main(void) { br(); printf(", "); ic(); printf("\n"); ic(); printf(",\n"); br(); return 0; } void br(void) { printf("Brazil, Russia"); return; } void ic(void) { printf("India, China"); return; }
6、
#include <stdio.h> int main(void) { int toes = 10; printf("toes = %d\n", toes); printf("toes * 2 = %d\n", toes * 2); toes = toes * toes; printf("toes ^ 2 = %d\n", toes); return 0; }
7、
#include <stdio.h> void smile(void); int main(void) { smile(); smile(); smile(); printf("\n"); smile(); smile(); printf("\n"); smile(); printf("\n"); return 0; } void smile(void) { printf("Smile!"); return; }
8、
#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"); return; } void two(void) { printf("two\n"); return; }