The C Programming language notes
0. 基础变量类型、运算符和判断循环
char 字符型 character --> char c = '\n' ; [ASCII码 0-255]
short int long 整数形 interger --> int num = 120;[ unsigned 无符号表示]
float double 浮点型(单精度,双精度)--> float celsius = 12.3;
加减乘除取余, 与或非位运算, 赋值大于小于等于, if else,switch case, for do while continue break goto
1 习题代码
1.1摄氏转华氏,华氏转摄氏以及逆序输出代码
#include <stdio.h> #define LOWER 0 /* 下限 */ #define UPPER 300 /* 上限 */ #define STEP 20 /* 步长 */ typedef float ElementType; void fahrToCelsius() { ElementType fahr, celsius; fahr = LOWER; // %o oct-8 | %x hex-16 | %c %s | %f %e(科学) | %d %i printf("\nfahr to celsius:\n"); while ( fahr <= UPPER ) { celsius = (5.0 / 9.0) * (fahr- 32.0); // %6.2f 6个字符宽 printf("%6.2f\t%6.2f\n", fahr, celsius); fahr = fahr + STEP; } } void celsiusToFahr() { /* 1.4 摄氏温度转华氏 */ ElementType fahr, celsius; celsius = UPPER; printf("\ncelsius to fahr:\n"); for ( ; celsius >= LOWER ; celsius -= STEP ) { fahr = (9.0 / 5.0)*celsius + 32.0; printf("%6.2f\t%6.2f\n", celsius, fahr); } } int main(int argc, char *argv[]) { fahrToCelsius(); celsiusToFahr(); return 0; }
1.2 标准输入输出库的单个字符获取和输出
getchar()从STDIN中获取单个字符并返回其值,如果到达文件尾则返回EOF, putchar( cha ) 将单个字符cha输出到STDOUT
printf("This is:%d\n", EOF); /* EOF define as -1 */
gets()可获取包含空格的字符串,并返回 char *指针, puts()则将字符串输出
printf()和scanf()函数原型如下,分别以特定格式输出和获取输入
int printf( const char *format, ... ); int scanf( const char *format, ... );
字符获取输出程序如下: getchar()直到在WIndows上按下CTRL+Z产生EOF输入才停止
void getPutChar() { /* 1.5 字符输入输出 copy input to output */ int c; /* c要足够大,能存储任何getchar()的返回值 */ while ( (c = getchar())!= EOF ) { // 赋值表达式的值为赋值后左边变量的值 putchar(c); /* EOF end of file */ } }
1.3 标准输入输出库的单个字符获取和输出
统计字符流中的空白、换行和制表符
void cntSpaceTable() { /* 1-8 count space table and newline chars */ int c; /* big volume */ int nl, nt, ns; nl = ns = nt = 0; while ( (c = getchar()) != EOF ) { if ( c == '\n' ) { nl++; } else if ( c == '\t' ) { nt++; } else if ( c == ' ' ) { ns++; } } printf("num of space, table, newline: %d, %d, %d\n" , ns, nt, nl); }
1-9将字符流中的多个空格替换为一个空格, 1-10将字符进行替换
void spaceChange() { /* 1-9 alterante mutilple sapces into one space */ int c, cs = 0; /* cs -> count space */ while ( (c = getchar()) != EOF ) { if ( c == ' ' ) { // print the first space, omit other space if ( cs == 0 ) { putchar( c ); cs++; } } else { cs = 0; // 恢复计数 putchar( c ); } } } void charChange() { /* 1-10 alterante table back and slash */ int c; while ( (c = getchar()) != EOF ) { switch( c ) { case '\t': printf( "\\t" ); break; case '\b': printf( "\\b" ); break; case '\\': printf( "\\\\ "); break; default: putchar(c); break; } } printf("End\n"); }
1.4 统计单词数量
/* 1.5.4 count lines, words, and chars in input */ void countWords() { /* 单词计数,单词不包含空格、制表、换行符 */ int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; /* 每当遇到单词的第一个字符,就作为一个新单词计数 */ while ( (c = getchar()) != EOF ) { ++nc; /* count char */ if ( c == '\n' ) { ++nl; } if ( c == ' ' || c == '\n' || c == '\t' ) { state = OUT; /* not a word */ } else if ( state == OUT ) { state = IN; ++nw; /* start count word */ } } /* end of while */ printf("chars:%d, lines:%d, words:%d\n", nc, nl, nw); } void showSingleWord() { /* 1-12 每个单词一行 */ int c, state; state = OUT; printf("Print Single Word:\n"); while ( (c = getchar()) != EOF ) { if ( c == ' ' || c == '\n' || c == '\t' ) { if ( state == IN ) { printf("\n"); /* end of a word */ } state = OUT; /* not a word */ } else if ( state == OUT ) { state = IN; /* start count word */ } if ( state == IN ) { putchar(c); /* print each char of word */ } } /* end of while */ }
1.5统计字符打印次数直方图
void printGraph( int num ) { /* Histograph subprogram*/ int i; for ( i = 0; i < num; i++ ) { printf("|"); } printf("\n"); } void countOtherChars() { /* 统计数字和字母以及空格和其他字符,打印直方图 */ int c, i, nwhite ,nother; int ndigit[10]; /* 0-9 */ int nalpha[26]; /* A-Z */ nwhite = nother = 0; for ( i = 0; i < 26; ++i ) { if ( i < 10) { ndigit[i] = 0; /* init */ } nalpha[i] = 0; } while ( (c = getchar()) != EOF ) { if ( c >= '0' && c <= '9' ) { ++ndigit[c - '0']; } else if( c >='A' && c <= 'Z' ) { ++nalpha[c - 'A']; /* upper */ } else if( c >='a' && c <= 'z' ) { ++nalpha[c - 'a']; /* lower */ } else if ( c == ' ' || c == '\n' || c == '\t' ) { /* space */ ++nwhite; } else { ++nother; } } /* end of while */ for ( i = 0; i < 10; ++i ) { printf("%d->", i); //printf(" %d", ndigit[i]); printGraph( ndigit[i] ); } printf("\n "); for ( i = 0; i < 26; ++i ) { printf("%c->", i+'a');//printf(" %d", nalpha[i]); printGraph( nalpha[i] ); } printf("\nwhite space->"); printGraph(nwhite); printf("\nother->"); printGraph(nother); }
参考资料: 《C程序语言设计》
转载请注明:https://www.cnblogs.com/justLittleStar/p/10487055.html