(5) 外部变量、头文件、多个文件
 
InBlock.gif //File:     extvar.h
InBlock.gif#ifndef _EXTVAR_H
InBlock.gif#define  _EXTVAR_H
InBlock.gif
InBlock.gif#ifdef  __cplusplus
InBlock.gif extern "C" {
InBlock.gif#endif
InBlock.gif
InBlock.gif#define MAXLINE 1000
InBlock.gif int Max = 0;
InBlock.gif char LongestLine[MAXLINE] = "";
InBlock.gif
InBlock.gif#ifdef  __cplusplus
InBlock.gif}
InBlock.gif#endif
InBlock.gif
InBlock.gif#endif   /* _EXTVAR_H */
 
InBlock.gif //getLine.c
InBlock.gif#include<stdio.h>
InBlock.gif int getLine( char tmpStr[]){
InBlock.gif         int ch, i = 0;
InBlock.gif         while((ch = getchar()) != EOF && ch != '\n'){
InBlock.gif                tmpStr[i++] = ch;
InBlock.gif        }
InBlock.gif        tmpStr[i] = '\0';
InBlock.gif         return i;
InBlock.gif}
 
InBlock.gif //copy.c
InBlock.gif void copy( char target[], const char source[]){
InBlock.gif         int i;
InBlock.gif         for(i = 0; source[i] != '\0'; i++){
InBlock.gif                target[i] = source[i];
InBlock.gif        }
InBlock.gif        target[i] = '\0';
InBlock.gif}
 
InBlock.gif#include <stdio.h>
InBlock.gif#include <stdlib.h>
InBlock.gif#include "extvar.h"
InBlock.gif /*
InBlock.gif 注意:程序中,MAXLINE,Max,LongestLine定义在extvar.h中
InBlock.gif*/

InBlock.gif int main( int argc, char** argv) {
InBlock.gif         char tmpStr[MAXLINE];
InBlock.gif         int length;
InBlock.gif         while((length = getLine(tmpStr)) > 0){ //调用getLine函数
InBlock.gif                 if(length > Max){
InBlock.gif                        Max =    length;
InBlock.gif                        copy(LongestLine,tmpStr); //调用copy函数
InBlock.gif                }
InBlock.gif        }
InBlock.gif        printf( "The Max Length is: %d\n", Max);
InBlock.gif        printf( "%s\n", LongestLine);
InBlock.gif         return (EXIT_SUCCESS);
InBlock.gif}

(4)字符数组:求最长的行
 
InBlock.gif#include<stdio.h>
InBlock.gif#include<stdlib.h>
InBlock.gif#define MAX 1000
InBlock.gif /*
InBlock.gif 字符串拷贝
InBlock.gif*/

InBlock.gif void copy( char target[], const char source[]){ //从source拷贝到target字符数组
InBlock.gif         int i = 0;
InBlock.gif         while(source[i] != '\0')
InBlock.gif                target[i] = source[i++]; //i++ 自增,向后挪
InBlock.gif        target[i] = '\0'; //在target字符串的末尾加上'\0'
InBlock.gif}
InBlock.gif /*
InBlock.gif 获取最长行,并返回其长度
InBlock.gif*/

InBlock.gif int getLongestLine( char longestLine[]){ //用字符数组做参数,实质上传地址
InBlock.gif         char tmpLine[MAX];
InBlock.gif         char ch;
InBlock.gif         int maxLength, i;
InBlock.gif
InBlock.gif        maxLength = i = 0;
InBlock.gif         while((ch = getchar()) != EOF){
InBlock.gif                 if(ch != '\n') tmpLine[i++] = ch;    
InBlock.gif                 else {
InBlock.gif                        tmpLine[i] = '\0';
InBlock.gif                         if(maxLength < i){ //是否出现了新的最长行
InBlock.gif                                maxLength = i;
InBlock.gif                                copy(longestLine, tmpLine); //copy的定义在前,调用在后
InBlock.gif                        }
InBlock.gif                        i = 0; //让tmpLine行重新回到行首
InBlock.gif                }
InBlock.gif        }
InBlock.gif         return maxLength;
InBlock.gif}
InBlock.gif
InBlock.gif int main( int args, char** argv){
InBlock.gif         char longestLine[MAX];
InBlock.gif        printf( "Please input several lines end with Ctrl+D:\n");
InBlock.gif         int length = getLongestLine(longestLine); //数组名作参数,传地址
InBlock.gif        printf( "length = %d, line = %s\n", length, longestLine);
InBlock.gif         return EXIT_SUCCESS;
InBlock.gif}
 

(3)用数组统计每个'0'~'9'之间每个字符出现的个数
 
InBlock.gif /*
InBlock.gif 用数组统计每个'0'~'9'之间每个字符出现的个数
InBlock.gif * 而不是用10个变量来记忆
InBlock.gif*/

InBlock.gif#include<stdio.h>
InBlock.gif#include<stdlib.h>
InBlock.gif int main( int argc, char** argv){
InBlock.gif         int ch, i, nwhite, nother;
InBlock.gif         char ndigit[10];
InBlock.gif
InBlock.gif        nwhite = nother = 0;
InBlock.gif         for(i = 0; i < 10; i++)
InBlock.gif                ndigit[i] = 0;
InBlock.gif
InBlock.gif         while((ch = getchar()) != EOF){
InBlock.gif                 if(ch <= '9' && ch >= '0') //判断ch是否满足'0'<ch<'9'
InBlock.gif                        ndigit[ch-'0']++;     //正好可以定位到ch[x]的下标
InBlock.gif                 else if(ch == ' ' || ch == '\t' || ch == '\n')
InBlock.gif                        nwhite++;
InBlock.gif                 else
InBlock.gif                        nother++;
InBlock.gif        }
InBlock.gif
InBlock.gif         for(i = 0; i < 10; i++)
InBlock.gif                printf( "%d's num is: %d\n", i, ndigit[i]);
InBlock.gif
InBlock.gif        printf( "number of white is: %d\n", nwhite);
InBlock.gif        printf( "number of other is: %d\n", nother);
InBlock.gif        
InBlock.gif         return EXIT_SUCCESS;
InBlock.gif}
 

(2) 字符输入输出及分析统计
 
InBlock.gif#include <stdio.h>
InBlock.gif#include <stdlib.h>
InBlock.gif#define OUT 0
InBlock.gif#define IN    1
InBlock.gif /*
InBlock.gif 计数空格、tab、行、字的数目
InBlock.gif*/

InBlock.gif void count(){
InBlock.gif         long nch;        
InBlock.gif         int nblanks, ntabs, nlines, nwords, ch;     //声明
InBlock.gif         int state;
InBlock.gif        nch = 0;
InBlock.gif        nblanks = ntabs = nlines = nwords = 0;                         //连续赋初值,从右向左
InBlock.gif        state = OUT;
InBlock.gif        
InBlock.gif        printf( "\nWorld Counting");
InBlock.gif        printf( "\nPlease input a paragraph with several lines end with Ctrl+D:\n");
InBlock.gif
InBlock.gif         while((ch = getchar()) != EOF){
InBlock.gif                ++nch;
InBlock.gif                 if(ch == ' ') nblanks++;
InBlock.gif                 else if(ch == '\t') ntabs++;
InBlock.gif                 else if(ch == '\n') nlines++;
InBlock.gif                 //统计字
InBlock.gif                 if(ch == ' ' || ch == '\t' || ch == '\n') // ||或,从左到右
InBlock.gif                        state = OUT;
InBlock.gif                 else if(state != IN){
InBlock.gif                        state = IN;
InBlock.gif                        ++nwords;
InBlock.gif                }
InBlock.gif        }
InBlock.gif        printf( "\nnch =%ld, nblanks = %d, ntabs = %d, nlines = %d, nwords = %d\n",
InBlock.gif                        nch, nblanks, ntabs, nlines, nwords); //%ld表示长×××
InBlock.gif}
InBlock.gif /*
InBlock.gif 获取输入,去掉多余的空格,然后输出
InBlock.gif*/

InBlock.gif void removeBlank21(){
InBlock.gif         int ch, nblank;
InBlock.gif        nblank = 0;
InBlock.gif         while((ch = getchar()) != EOF){
InBlock.gif                 if(ch != ' ') {
InBlock.gif                        putchar(ch);
InBlock.gif                        nblank = 0;
InBlock.gif                } else if(nblank == 0) {
InBlock.gif                        putchar(ch);
InBlock.gif                        nblank++;
InBlock.gif                }
InBlock.gif        }
InBlock.gif}
InBlock.gif /*
InBlock.gif 每行打印一个word
InBlock.gif*/

InBlock.gif void wordPerLine(){
InBlock.gif        printf( "\nPlease input several strings end with Ctrl+d\n");
InBlock.gif         int ch;
InBlock.gif         while((ch = getchar()) != EOF){
InBlock.gif                 if(ch == ' ' || ch == '\t')
InBlock.gif                        putchar('\n');
InBlock.gif                 else putchar(ch);
InBlock.gif        }
InBlock.gif}
InBlock.gif
InBlock.gif int main( int argc, char** argv) {
InBlock.gif         //count();
InBlock.gif         //removeBlank21();
InBlock.gif         //wordPerLine();
InBlock.gif        printf( "\n%d\t%d\n",'A','\n');     //打印字符'A'(65)和'\n'(10)的ASCII码
InBlock.gif         return (EXIT_SUCCESS);
InBlock.gif}
 
 

(1) 温度对应表
 
InBlock.gif#include <stdio.h>
InBlock.gif#include <stdlib.h>
InBlock.gif
InBlock.gif#define LOWER     0                 //符号常量
InBlock.gif#define UPPER     300
InBlock.gif#define STEP        20
InBlock.gif int main( int argc, char** argv) {
InBlock.gif         int ftemp;
InBlock.gif         float ctemp;
InBlock.gif /*                                             //注释
InBlock.gif        int lower, upper, step;
InBlock.gif        lower = 0;
InBlock.gif        upper = 300;
InBlock.gif        step = 20;
InBlock.gif*/

InBlock.gif        printf( "================================\n");
InBlock.gif        ftemp = LOWER;
InBlock.gif         while(ftemp <= UPPER){                             // /除符号,注意整除与float除
InBlock.gif                ctemp = 5 * (ftemp - 32) / 9.0; //int 转换为 float
InBlock.gif                printf( "%3d\t%5.2f\n", ftemp, ctemp); //%3d宽度为3,右对齐
InBlock.gif                ftemp = ftemp + STEP;
InBlock.gif        }
InBlock.gif        printf( "================================\n");
InBlock.gif         for(ftemp = LOWER; ftemp <= UPPER; ftemp += STEP){
InBlock.gif                ctemp = 5 * (ftemp - 32) / 9.0;         //
InBlock.gif                printf( "%3d\t%6.1f\n", ftemp, ctemp); //%6.1f宽度为6,小数点后一位有效数字
InBlock.gif        }
InBlock.gif        printf( "================================\n");
InBlock.gif         for(ftemp = LOWER; ftemp <= UPPER; ftemp += STEP)
InBlock.gif                printf( "%5d %6.2f\n", ftemp, (5.0/9)*(ftemp-32)); //表达式也可以错printf参数
InBlock.gif         printf( "================================\n");
InBlock.gif         return (EXIT_SUCCESS);    
InBlock.gif}