一个语言的程序设计有一些常用的基本模式,这些模式是许多人长期工作的总结。在这个语言的程序中到处可见。对于一些典型问题,采用适当的模式是最容易把程序写好、写正确的。在这里我们将从简单到复杂,分门别类地列处一些C程序模式,供大家参考。
C程语言序模式
一个语言的程序设计有一些常用的基本模式,这些模式是许多人长期工作的总结。在这个语言的程序中到处可见。对于一些典型问题,采用适当的模式是最容易把程序写好、写正确的。在这里我们将从简单到复杂,分门别类地列处一些C程序模式,供大家参考。这里列出的东西选自各种材料(包括《从问题到程序》书中)。这里列出的东西是很初步的。如果你认为有些东西也很重要,请给我们提示。
在所有模式描述中,用$$符号括起来的一段段文字表示的是应该实际写出的东西。
有关解释如果写了页数,请参考《从问题到程序》书中相关的页。
--------------------------------------------------------------------------------
简单输出程序模式:
#include
main () {
$一个或几个输出语句,例如printf("Hello, world! ");$
}
----------------------------------------------------
例:
#include
main() {
printf("Welcome ");
printf("to ");
printf("Beijing! ");
}
--------------------------------------------------------------------------------
简单表达式计算模式:
#include
main() {
printf($格式描述串$, $一个或几个表达式$);
}
---------------------------------------------------
注意:格式描述串中转换描述与参数个数一致,类型一致。
---------------------------------------------------
#include
main() {
printf("%f * %f = %f", 3.14, 6.5, 3.14 * 6.5);
}
--------------------------------------------------------------------------------
简单算术计算函数定义:
double fun ($一个或几个参数的说明$) {
return $计算表达式$;
}
----------------------------------------------------
1,函数返回值类型根据需要写出,未必是double;
2,参数写出类型和参数名的对,多个参数用逗号分隔;
3,计算表达式描述如何由参数出发算出函数值;
4,如果计算中需要用数学函数,应该在程序开始写一行
#include
----------------------------------------------------
例:
double circle_area (double r) {
return r * r * 3.14159265;
}
--------------------------------------------------------------------------------
有函数定义的一般程序:
#include …
…… /* 函数定义写在这里(可以有一个或几个) */
main () {
…… /* 主程序体,通常包含对函数的调用 */
}
--------------------------------------------------------------------------------
常用while循环形式:
n = 1; /* 初始化循环中使用的变量 */
while (n <= 100) { /* 已知次数的循环用for结构写得更多 */
/* 其他语句 */
n = n + 1; /* 循环最后更新辅助变量 */
}
注:这种更常见的是采用for循环形式写。见下。
----------------------------------------------------
/* 有关变量的初始化 */
while ($表达式$ >= 1E-6) {
/* 循环中的计算应该影响“表达式”的值,否则将导致无限循环 */
}
--------------------------------------------------------------------------------
常用for循环形式:
for (n = 0; n < N; n++) {
$循环体里的语句$
}
---------------------------------------------------
注意:C语言里一般不用(除非有特殊目的):
for (n = 1; n <= N; n++) {
$循环体里的语句$
}
--------------------------------------------------------------------------------
给程序计时:
#include
#include
/* 其他定义 */
main () {
/* 其他程序变量的定义 */
double x;
x = clock() / CLOCKS_PER_SEC;
/* 需要计时的程序片段 */
x = clock() / CLOCKS_PER_SEC - x;
printf("Timing: %f ", x); /* 输出形式自己确定 */
}
---------------------------------------------------
注意:不同系统的计时精度可能不同。有些系统还有非标准的计时功能。
--------------------------------------------------------------------------------
输入和处理由标准输入文件来的一系列字符
int c;
/* 其他定义或语句 */
while ((c = getchar()) != EOF) {
/* 对读入字符的处理 */
}
---------------------------------------------------
1,接收读入字符的变量(例如上面的c)必须用int类型;
2,注意while条件中的括号,不能写错;
3,应该写 #include
--------------------------------------------------------------------------------
最常见的数组操作
for (i = 0; i < N; i++) {
.... ....
.... a .... b
.... ....
}
---------------------------------------------------
1,循环范围不能超出数组下标的范围
--------------------------------------------------------------------------------
典型的处理数组的函数
double sqsum(double a[], int n) {
double x = 0.0;
int i;
for (i = 0; i < n; i++)
x += a * a;
return x;
}
---------------------------------------------------
1,注意数组参数的写法;
2,增加一个描述数组长度的参数,借助于它控制对数组元素的处理;
3,通过这种函数可以改变实际参数数组。
--------------------------------------------------------------------------------
处理字符串的典型函数
void str_copy (char s[], char t[]) {
int i;
for (i = 0; t != '