C程序设计语言1.9字符数组示例

1. 要求: 程序读入一组文本行, 并把最长的文本行打印出来. 2. 分析. 要做什么, 读取一行, 与最长行比较, 保存最长行, 读取完, 比较完了, 打印最长行. 读取一行, 碰到换行符或EOF结束符是一行, 能读取的最大长度也是一行, 记录行的长度. 循环内当前行长度与最大行长度比较, 当前行比最大行长, 最大行=当前行, 否则不变. 循环结束后, 结束行与最大行比较, 结束行长度>最大行, 最大行=结束行. 打印最大行. 3. 代码. 1. 为了结束循环, 结束行的长度返回负数. 负数比较时需要转为正数. 2. int数组中’\0’表示结束, 这个特殊需要记下. #include<stdio.h> #include<stdlib.h> #define MAXLINE 1000 int getLine(char line[], int maxline); void copy(char to[], char from[], int maxline); int main(){ int index; int len; int max; max = 0; char line[MAXLINE]; char maxlong[MAXLINE]; while((len=getLine(line, MAXLINE)) > 0){ if(len > max){ max = len; copy(maxlong, line, MAXLINE); } } if(len<0){ if(abs(len) > max){ copy(maxlong, line, MAXLINE); } } for(index=0;maxlong[index] !...

C程序设计语言练习1-15

1. 要求: 重新编写1.2节中的测试计划转换程序, 使用函数实现温度转换计算. 2. 分析. 1. C = (5 / 9) (F - 32) 2. 华氏温度与摄氏温度都是整数, 故输入是整数, 输出也是整数. 3. 代码. 1. 整数. #include<stdio.h> // 华氏温度转摄氏温度 int transfc(int f); int main(){ int i; for(i=0;i<=300;i=i+20){ printf("%-3d %-3d\n", i, transfc(i)); } return 0; } int transfc(int f){ return (f - 32) * 5 / 9; } 2. 补充double数. #include<stdio.h> // 华氏温度转摄氏温度 double transfc(double f); int main(){ double i; for(i=0;i<=300;i=i+20){ printf("%-3.1f %-3.1f\n", i, transfc(i)); } return 0; } double transfc(double f){ return (f - 32....

C程序设计语言练习1-14

1. 要求: 编写一个程序, 打印输入中各个字符出现频度的直方图. 2. 分析. 一.输入部分: 1. 统计什么样的字符? 这里就统计ASCII表中可显示字符, 查询ASCII表可显示字符知, 字符 32~126是可见的, 共95个. 2. 使用一维数组来计数. 3. 不在32~126中的字符, 单独统计到sum中. 4. 超出最大个数则用H打印出. 二.输出部分: 1. 水平直方图, 每行进行判断, 字符统计个数<=HIST, 打印字符和字符统计个数的*, 字符统计个数>HIST, 打印H. 2. 垂直直方图, 每行进行判断. 字符统计个数<=HIST(能统计的最大数), HIST-字符统计个数>当前行row, 打印空格, HIST-字符统计个数<=当前行row, 打印*号. 字符统计个数>HIST(能统计的最大数), 最后一行MAX-1(因为数组0开始数, 最后一行MAX-1)打印H, 其余打印空格. 3. 代码. #include<stdio.h> #define MAX 95 #define HIST 20 int main(){ int input; int a[MAX]; int sum, row, col; sum = 0; for(row=0;row<MAX;row++){ a[row] = 0; } while( (input=getchar()) !...

C程序设计语言练习1-13

1. 要求: 编写一个程序, 打印输入中单词长度的直方图. 水平方向的直方图学校录取容易绘制, 垂直方向的直方图则要困难些. 2. 水平直方图和垂直直方图. 1. 水平方向的直方图: 清楚直方图的定义: 又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况. 单词长度的直方图, 就是打印输入单词的长度. 水平方向的, 容易, 打印这个单词的长度就可以. 需要注意: 单词组成的字符个数不能超过MAXHIST20位, 暂时可以这么定义, 超出这20位用X表示. 统计单词的数量MAXWORDS最多15个, 使用数组来存储单词长度. 读取单词的字符长度练习1-12更改下即可得到. 2. 垂直直图. 使用数组来存单词长度 说明打印规则, 在第0行时, w1列打印空格还是*号, 取决于(HIST-w1长度) 和 当前行row比较, 大于当前行则打印空格, 小于等于则打印*号. 为何从0开始, 数组是从0开始. 下面举例HIST是4, w3单词的长度是2, 在第0行时, w1列是, 4-2 >0 则打印空格. 考虑到有些单词长度可能超出限制,如果有则打印X, 判断逻辑(单词长度>HIST) && 当前不在(row-1)行打印空格, 否则打印X....

C程序设计语言练习1-12

1. 要求: 编写一个程序, 以每行一个单词的形式打印其输入. 2. 分析. 1. 在每个单词的结尾处换行, 单词结尾的判断, 即前一个字符即不是空格, 制表符, 也不是换行符,后面跟着空格或制表符或换行符. 2. 在遇到不是空格,不是制表符, 不是换行符时输出, 设置标记为1; 3. 遇到空格或制表符或换行符时, 同时判断标记 标记是1则打印换行符(\n), 重置标记位为0. 标记是0(表示上一个输入字符是空格或制表符或换行符)则不处理, 什么也不打印. 3. 代码 注意: 在执行的时候每次回车都是输入, 程序在while就开始循环判断, 同时打印数据. C程序设计语言练习1-12之前的习题则在EOF之后才打印. #include<stdio.h> #define IN 1 #define OUT 0 int main(){ int c, state; state = OUT; while( (c= getchar() ) !=EOF ){ if( c != ' ' && c != '\t' && c != '\n'){ putchar(c); state = IN; }else if( ( c == ' ' || c == '\t' || c !...

C程序设计语言练习1-10

1. 要求: 编写一个将输入复制到全输出的程序, 并将其中的制表符替换为\t, 将回退符替换为\b, 将反斜杠替换为\. 这样可以将制表符和回退符以可见的方式显示出来 2. 分析: 1. 制表符是\t, 输出是\\t, 反斜杠的输入\输出2个\, 那输出是\\\\. 3. 代码. #include<stdio.h> int main(){ int input; while((input=getchar()) != EOF){ if(input == '\\'){ printf("\\\\"); }else if(input == '\t'){ printf("\\t"); }else if(input == '\b'){ printf("\\b"); }else{ putchar(input); } } return 0; } ...

C程序设计语言练习1-9

1. 要求: 编写一个输入复制到输出的程序, 将其中多个空格用一个空格代替. 2. 分析. 1. 比较前一个字符和当前字符如果同为空格(’ ‘), 则不打印, 否则打印. 3. 代码. 1. a的上一个字符可设默认一个非空格字符, 方便判断. #include<stdio.h> int main(){ int a, alast; alast=0; while((a=getchar()) !=EOF){ if(a==' ' && alast ==' '){ continue; } else{ putchar(a); } alast = a; } } ...

C程序设计语言练习1-8

1. 要求: 编写一个统计空格,制表符与换行符个数的程序 2. 分析. 1. 使用getchar()获取输入的字符 2. 判断输入的符. 查询ASCII对照表, 空格ASCII值32(也可使用’ ‘). 制表符’\t’, 换行’\n’. 3. 代码 1. 想输入EOF, linux是按Ctrl + D组合键2次, windows Ctrl + Z, 2. else if的条件成立就进行下一次循环, 如果3个if条件程序判断3次, 没有效率. #include<stdio.h> int main(){ int sumspace = 0; int sumt = 0; int sumn = 0; int c ; while( (c = getchar()) != EOF ){ if( c == 32){ sumspace++; } else if(c == '\t'){ sumt++; } else if(c == '\n'){ sumn++; } } printf("空格数%d 制表符数%d 换行符数%d\n", sumspace, sumt, sumn); return 0; } ...

C程序设计语言练习1-7

1. 要求: 编写一个打印EOF值的程序 2. 分析 1. 查询得到EOF的值是-1, 帮用%d即可打印出来 3. 代码 #include<stdio.h> int main(){ printf("EOF is %d\n", EOF); return 0; } ...

C程序设计语言练习1-6

1. 要求: 验证表达式getchar() != EOF的值是0还是1 2. 分析. 1. getchar()是获取一个输入字符, 判断是否为输入结尾, 结尾特定EOF(End of File) 2. Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。) 3. 代码 1. 注意a = getchare() != EOF与a = (getchar() != EOF)等价, 原因是=是赋值, !=比=的优先级高, 就像四则运算/号的优先级比+号高一样. 2. while的判断到EOF时会中止执行, 里面语句不会执行, 故需要在外部打印getchar() != EOF的值. #include<stdio.h> int main(){ int a ; while(a = (getchar() != EOF)){ printf("%d\n", a); } printf("%d\n", a); return 0; } ...