Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)( =(5/9)(F-32) 2004-12-19 A Tutorial Introduction 3 打印华氏温度与摄氏温度对照表 /* 对 fahr = 0, 20,..., 300 打印华氏温度与摄氏温度对照表 */ fahr, celsius; lower, upper, step; lower = 0; /* 温度表的下限 */ upper = 300; /* 温度表的上限 */ step = 20; /* 步长 */ fahr = lower; while (fahr <= upper) celsius = 5 * (fahr-32) / 9; prf("%d %d\t%d\n",, fahr, celsius); fahr = fahr + step; fc1.c 2004-12-19 A Tutorial Introduction 4 1
代码风格 /* 对 fahr = 0, 20,..., 300 打印华氏温度与摄氏温度对照表 */ fahr, celsius; lower, upper, step; lower = 0; /* 温度表的下限 */ upper = 300; /* 温度表的上限 */ step = 20; /* 步长 */ fahr = lower; while (fahr <= upper) celsius = 5 * (fahr-32) / 9; prf("%d %d\t%d\n",, fahr, celsius); fahr = fahr + step; fc1.c 2004-12-19 A Tutorial Introduction 5 没有代码风格 fahr,celsius; lower,upper,step; lower=0;upper=300;step=20; fahr=lower; while (fahr<=upper) celsius=5*(fahr-32)/9; prf("%d %d\t%d\n",fahr,celsius); fahr=fahr+step; http://www.ioccc.org The International Obfuscated C Code Contest 两个获奖的例子 :dance.c: sqrt.c 2004-12-19 A Tutorial Introduction 6 fc2.c 更简单 精确的对照表打印程序 #define LOWER 0 /* 表的下限 */ #define UPPER 300 /* 表的上限 */ #define STEP 20 /* 步长 */ /* 打印华氏 - 摄氏温度对照表 */ fahr; for ( fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP ) prf ( "%3d # %6.1f\n", fahr, (5.0 / 9.0) * (fahr( - 32 ) ); 2004-12-19 A Tutorial Introduction 7 fc3.c 字符输入输出 c = getchar() 从键盘读入一个字符, 赋值给变量 c putchar(c) 把 c 输出到屏幕 拷贝的基本思想 : 读一个字符 while ( 该字符不是文件结束指示符 ) 输出刚读进的字符读下一个字符 2004-12-19 A Tutorial Introduction 8 2
拷贝 (Copy) /* 用于将输入复制到输出的程序 ; 第 1 个版本 */ c; c = getchar ( ); while ( c!= EOF ) putchar ( c ); c = getchar ( ); 2004-12-19 A Tutorial Introduction 9 copy1.c 一个更好的版本 /* 用于将输入复制到输出的程序 ; 第 2 个版本 */ c; while ( (c = getchar ( ) )!= EOF ) putchar ( c ); 2004-12-19 A Tutorial Introduction 10 copy2.c 计算行数 /* 统计输入的行数 */ c; long nl; nl = 0; while ( (c = getchar ( ) )!= EOF ) if ( c == '\n'' ) nl++; prf("%d\n", ", nl); counter.c 2004-12-19 A Tutorial Introduction 11 加法器 /* 计算输入的两个整数的和 */ a, b; prf("please input two egers:"); scanf("%d%d", ", &a, &b); prf("sum=% =%d\n", a+b); 2004-12-19 A Tutorial Introduction 12 add.c 3
平均分 /* 计算某科成绩的平均值 */ #define TOTAL_NUMBER 10 /* 总人数 */ float sum=0, score[total_number]; i; prf("input %d scores:\n", TOTAL_NUMBER); for (i=0; i<total_number; i++) scanf("%f", ", &score[i& score[i]); sum = sum + score[i]; prf("average=% =%f\n", sum/total_number); average.c 2004-12-19 A Tutorial Introduction 13 函数 (Function) 前面使用了系统提供的函数 :prf: prf, scanf,getchar getchar,putchar 使用函数时, 我们不用知道这个函数内部是如何运作的, 只按照我们的需要和它的参数形式调用它即可 我们也可以定义自己的函数 一个程序应该是轻灵自由的, 它的函数就象串在一根线上的珍珠 ( 编程之道编程之道 ) 2004-12-19 A Tutorial Introduction 14 power 函数 /* power: 求底的 n 次幂 ; n >=0 */ power( base, n) i, p; p = 1; for ( i = 1; i <= n; ++i ) p = p * base; return p; power.c 2004-12-19 A Tutorial Introduction 15 power 函数的调用 (Call) power( base, n); /* 测试 power 函数 */ m, n; m = power(2, 1); n = power(-3, 3); prf("%d %d\n", m, n); return 0; power.c 2004-12-19 A Tutorial Introduction 16 4
这一章我们学到了 #define prf(), scanf() getchar(), putchar() <=, >=, ==,!=, long, float 数组 while, for, if 代码风格 注释 缩进 空行 命名 函数 2004-12-19 A Tutorial Introduction 17 5