c程序设计语言 练习1-6,C程序设计语言:第一章练习

练习1-1 在你自己的系统中运行”hello,world“程序。再有意去掉部分内容,会看到什么出错信息。

练习1-2 做个实验,当printf函数的参数字符串中包含\c(其中c是上面的转义字符序列中未曾列出的某一个字符)时,观察一下啊情况。

warning C4129: “c”: 不可识别的字符转义序列

练习1-3 修改温度转换程序,使之能在转换表的顶部打印一个标题。

#include

int main()

{

float fahr, celsius;

float lower, upper, step;

lower = 0;

upper = 300;

step = 20;

fahr = lower;

printf(" Fahr Celsius\n");

while (fahr<=upper)

{

celsius = 5 * (fahr - 32) / 9;

printf("%3.0f\t%6.1f\n", fahr, celsius);

fahr = fahr + step;

}

getchar();

}

练习1-4 编写一个程序打印摄氏温度转换为相应华氏温度的的对照表。

#include

int main()

{

float fahr, celsius;

float lower, upper, step;

lower = 0;

upper = 300;

step = 20;

celsius= lower;

printf(" Celsius Fahr\n");

while (celsius<=upper)

{

fahr = celsius * 9 / 5 + 32;

printf("%3.0f\t%6.1f\n", celsius, fahr);

celsius = celsius +step;

}

getchar();

}

练习1-5 修改温度转换程序,要求以逆序(即按照从300度到0度的顺序)打印温度转换表。(尝试用for语句)

#include

int main()

{

float fahr, celsius;

float lower, upper, step;

lower = 0;

upper = 300;

step = 20;

printf(" Fahr Celsius\n");

for (fahr = lower; fahr <= upper; fahr = fahr + step)

{

printf("%3.0f\t%6.1f\n", fahr, 5 * (fahr - 32) / 9);

}

getchar();

}

练习1-6 验证表达式getchar()!=EOF的值是0还是1。

#include

int main()

{

int c;

while (c=(getchar()!=EOF))

{

printf("%d isn't EOF\n", c);

}

printf("%d is EOF", c);

getchar();

}

练习1-7 编写一个打印EOF值的程序。

#include

int main()

{

printf("%d is EOF", EOF);

getchar();

}

练习1-8 编写一个统计空格、制表符、换行符个数的程序。

#include

int main()

{

int c, row_num, blank_num, t_num;

row_num = blank_num = t_num = 0;

while ((c=getchar())!=EOF)

{

switch (c)

{

case '\n':

row_num++;

break;

case ' ':

blank_num++;

break;

case '\t':

t_num++;

default:

break;

}

printf("row_num:%d,blank_num:%d,t_num:%d\n", row_num, blank_num, t_num);

}

}

练习1-9 编写一个将输入复制到输出的程序,并将其中连续多个空格用一个空格代替。

#include

int main()

{

int a,b;

while ((a=getchar())!=EOF)

{

if (a == ' '&& b==' ') //如果发现a为空格,且排在后面的b也为空格则直接跳过该a

{

continue;

}

else

{

b = a;

}

printf("%c", b);

}

}

练习1-10 编写一个将输入复制到输出的程序,并将其中的制表符替换为\t,并把回退符替换为\b,并把反斜杠替换为\。这样可以将制表符和回退符以可见的方式显现出来。

#include

int main()

{

int c;

while ((c=getchar())!=EOF)

{

switch (c)

{

case '\t':

printf("\\t"); //putchar()一次只能输出一个字符不好实现效果

break;

case '\b':

printf("\\b");

break;

case '\\':

printf("\\\\");

break;

default:

break;

}

}

}

练习1-11 你准备如何测试单词计数程序?如果程序存在某种错误,那么什么样的输入最可能发现这类错误?

该单词计数程序:

#include

#define IN 1 //在单词内

#define OUT 0 //在单词外

//统计输入行数、单词数与字符数

int main()

{

int c, nl, nw, nc, state;

state = OUT;

nl = nw = nc = 0;

while ((c=getchar())!=EOF)

{

++nc;

if (c == '\n')

{

++nl;

}

if (c == ' ' || c == '\n' || c == '\t')

{

state = OUT;

}

else if (state == OUT)

{

state = IN;

++nw;

}

printf("%d %d %d\n", nl, nw, nc);

}

}

答:单词计数工作要从没有任何输入的情况下开始。此时,该程序的输出结果应该是“0 0 0”,即零行、零单词、零字符。

接下来测试输入的单字符单词的情况。此时,该程序的输入结构应该是“1 1 2”,即一行、一个单词、两个字符(一个字符加上一个换行符)。

再测试一个由两个字符组成的单词。此时,该程序的输入结果为“1 1 3”,即一行、一个单词、三个字符(两个字母加上一个换行符)。

让后再测试两个单词的情况。首先,两个单词出现在同一行,此时的输出结果应该是“1 2 4”;然后,两个单词各占一行,此时的输出结果应该是“2 2 4”。

那些满足边界条件的输入情况最有助于发现单词计数程序中的错误。这些边界条件包括:

——没有输入

——没有单词(只有换行符)

——没有单词(只有空格、制表符、和换行符)

——每个单词各占一行的情况(没有空格和制表符)

——单词出现于文本行行首的情况

——单词出现于一串空格之后的情况

练习1-12 编写一个程序,以每行一个单词的形式打印其输入。

自己的答案:

#include

int main()

{

int a, b, state;

while ((a=getchar())!=EOF)

{ //a不为空时,直接赋值给b

if (a != ' ')

{

b = a;

putchar(b);

}

//a位空时分b也为空即连续空格的情况,和b不为空格的情况

if ((a == ' ')&&(b==' '))

{

continue;

}

if ((a == ' ') && (b != ' '))

{

b = a;

putchar('\n');

}

}

}

标准答案:

#include

#define IN 1 //在单词内

#define OUT 0 //在单词外

//统计输入行数、单词数与字符数

int main()

{

int c, state;

state = OUT;

while ((c=getchar())!=EOF)

{

if (c == ' ' || c == '\n' || c == '\t')

{

if (state == IN)

{

putchar('\n'); //一个单词输入结束

state = OUT;

}

}

else if (state == OUT)

{

state = IN;

putchar(c); //一个单词输入开始

}

else

{

putchar(c); //在输入一个单词时

}

}

}

练习1-13 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些。

#include

#define IN 1 //在单词内

#define OUT 0 //在单词外

int main()

{

//c为输入的字符,state为当前状态,wLength为当前单词长度

//Maxnum为数量最大的单词单词长度的个数

int c,a,b,state,wLength,Maxnum;

int wordLength[10]; //设置一个记录对应单词长度的个数的数组

for (int i = 0; i < 10; i++) //比如wordLength[1]表示单词长度为1的单词个数

{

wordLength[i] = 0;

}

state = OUT;

wLength = 0;

//记录输入中统计的得出的绘图数据

//第一种方法

while ((c=getchar())!=EOF)

{

if ((c == ' ') || (c == '\t') || (c == '\n'))

{

if (state == IN)

{

state = OUT;

++wordLength[wLength];

wLength = 0;

}

else

{

continue;

}

}

else if(state==OUT)

{

wLength=1;

state = IN;

}

else

{

++wLength;

}

}

//第二种统计数据方法

/*

while ((a = getchar()) != EOF)

{

if ((a != ' ') && (a != '\n'))

{

wLength++;

b = a;

}

if (((a == ' ') || (a == '\n')) && (b == ' '))

{

continue;

}

else if (((a == ' ') || (a == '\n')) && (b != ' '))

{

wordLength[wLength]++;

b = ' ';

wLength = 0;

}

}

*/

Maxnum = 9;

/*这样写图表不漂亮

for (int i = 0; i < 10; i++)

{

if (Maxnum < wordLength[i + 1])

{

Maxnum = wordLength[i + 1];

}

}

*/

for (int i = Maxnum; i >= 0; i--)

{

printf("%4d", i);

for (int j = 0; j < 10; j++)

{

if (wordLength[j] >= i)

{

printf(" * ");

}

else

{

printf(" ");

}

}

printf("\n");

}

printf(" ");

for (int i = 0; i < 10; i++)

{

printf("%3d", i);

}

getchar();

}

练习1-14 编写一个程序,打印输入各个字符出现频度的直方图。

基本思想跟上题类似。分三大块,第一块初始化各个数据,第二块采集各个数据,第三块画出直方图。本题可以利用ascii码来作为数组序号。

练习1-15 重新编写1.2中的温度转换程序,使用函数实现温度转换计算。

#include

void change(int lower, int upper, int step);

int main()

{

float lower, upper, step;

lower = 0;

upper = 300;

step = 20;

change(lower, upper, step);

getchar();

}

void change(int lower,int upper,int step)

{

float fahr,celsius;

fahr = lower;

printf(" Fahr Celsius\n");

while (fahr <= upper)

{

celsius = 5 * (fahr - 32) / 9;

printf("%3.0f\t%6.1f\n", fahr, celsius);

fahr = fahr + step;

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

然爸读书笔记(2014-5)----团队正能量

先说下题外话&#xff0c;今天下午吃烤肉&#xff0c;吃了2个小时&#xff0c;我擦啊&#xff0c;时间真心挺长&#xff0c;上面的图就是咯&#xff0c;你们嘴馋不咯。嘿嘿&#xff01; 今天真的是快速阅读了一本书&#xff0c;很早以前买的&#xff0c;一直没时间来看。刚看了…

ssh密钥代理转发(ssh agent forwarding)

之前一直用SecureCRT登陆服务器A然后再跳到服务器B&#xff0c;某日突然需要从另一台可信任的机器C用ssh登陆&#xff0c;ssh的key已经复制好&#xff0c;所以登陆A没有问题&#xff0c;但是登陆B会出现Pubkey Unauthorization.仔细翻查SecureCRT的设置&#xff0c;发现有密钥代…

c语言程序编程线性方程,C语言编程求解线性方程

C语言编程求解线性方程 本 科 专 业 学 年 论 文题 目 &#xff1a; 线性方程组求解方法比较姓 名 郭 凤 专 业 计算机科学与技术专业 班 级 08 级本科(2 )班 指导教师 刘 晓 娜 完成日期&#xff1a;2010 年 1 月 8 日题 目 &#xff1a; 线性方程组求解方法比较摘 要目前在许…

FastReport问题整理(转)

FastReport问题整理 博客分类&#xff1a; 软件开发部分来自网上&#xff0c;部分来自网友&#xff0c;部分来自Demo如果有新的内容&#xff0c;会不断更新.. 更新历史&#xff1a; 2009-02-27 加入套打方案全攻略&#xff08;原&#xff1a;jinzhili博客&#xff09; 2009-03-…

EISCONN的故事

在这春风明媚的日子里&#xff0c;有位T同学很苦恼。忙碌了一整天&#xff0c;有个BUG愣是定位不出来。简单描述呢&#xff0c;现象是这样子的&#xff1a; 第一次处理是正常的&#xff0c;但是后续的处理就是报错。sendto()调用错误码是 EISCONN&#xff08;已被连接&#xff…

c语言局限性,C语言陷阱与缺陷.pdf

C 语言陷阱和缺陷[1]winxos 11-01-28winxos 11-01-28原著&#xff1a;Andrew Koenig - AT&T Bell Laboratories Murray Hill, New Jersey 07094原文&#xff1a;收藏翻译&#xff1a;lover_P[译序]那些自认为已经“学完”C 语言的人&#xff0c;请你们仔细读阅读这篇文章吧…

[随记][asp.net基础]Page_Load和OnLoad

标题&#xff1a;[随记][asp.net基础]Page_Load和OnLoad 一、前言 东西好久不用、不想&#xff0c;就会忘&#xff0c;所以没办法&#xff0c;只好记下来。 二、正文 aspx页面加载的时候会自动执行Page_Load&#xff0c;也会执行OnLoad方法&#xff0c;这两个是什么关系呢&…

POLLERR的故事

今天code review时&#xff0c;同事B对我代码中的poll()的处理做法提出了异议。于是做了些研究&#xff0c;还发现了一些好玩的故事。 异议的代码 我的代码是参考manpage写的&#xff0c;类似下面的做法。同事B说没有处理POLLERR、而且应当使用else if。 OK。我赞同补充POLLERR…

c语言内循环,C语言循环控制语句

C语言循环控制语句是一个基于C语言的编程语句&#xff0c;该语句主要有while循环语句、do-while循环语句和for循环语句来实现循环结构。中文名C语言循环控制语句类 别while循环语句&#xff0c;do-while语句等目 地实现循环结构属 于计算机领域归 类编程语句基 …

同步,异步,多线程,你怎么看?

同步&#xff0c;异步&#xff0c;多线程&#xff0c;你怎么看&#xff1f; 原文:同步&#xff0c;异步&#xff0c;多线程&#xff0c;你怎么看&#xff1f;[原创]讲解同步与异步的帖子多如牛毛&#xff0c;个人的理解&#xff0c;简单地说同步就是串行&#xff0c;异步就是并…

openssl-1.0.0b - libssl 移植到ARM Linux

开发环境&#xff1a; ubuntu 10.04 arm-linux-gcc version 4.4.1 目标环境 友善之臂mini6410 linux-2.6.36 移植步骤 1&#xff0e;至官网下载最新的openssl&#xff0c;解压缩 2&#xff0e;cd进入openssl-1.0.0b目录 3&#xff0e;执行./Confiugre linux-elf-arm&#xff0c…

C语言的putpiel函数,C语言graphics.h函数介绍

可编辑(一) 像素函数56. putpiel() 画像素点函数57. getpixel()返回像素色函数(二) 直线和线型函数58. line() 画线函数59. lineto() 画线函数60. linerel() 相对画线函数61. setlinestyle() 设置线型函数62. getlinesettings() 获取线型设置函数63. setwritemode() 设置画线模…

ARM-Linux下交叉编译opessl-1.0.0

本次任务是要完成嵌入式Linux下对openssl程序的支持。 我的开发环境&#xff1a;ARM9开发板 和 嵌入式Linux操作系统。装有Linux系统&#xff08;我的是ubuntu9.04&#xff09;的PC机一台。串口和串口连接线。串口调试软件&#xff1a;minicom。交叉编译工具:arm-unknown-l…

modf函数C语言,C / C ++中的modf()

该函数modf()用于将传递的参数拆分为整数和小数。在“ math.h”头文件中声明该变量以进行数学计算。它返回传递的参数的分数值。这是modf()C语言的语法&#xff0c;double modf(double value, double *integral_pointer);这里&#xff0c;值-分为整数和分数的值。积分指针-分割…

codeforces #236 div2 简洁题解

A:A. Nutstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou have a nuts and lots of boxes. The boxes have a wonderful feature: if you put x (x ≥ 0)divisors (the spacial bars that can divide a box) to…

南京大学c语言试卷,2007年4月南京大学C语言期中试题.doc

2007年4月南京大学C语言期中试题南京大学《C语言程序设计》期中试卷(2006年4月15日)系科 学号______________姓名_____________成绩_______________注意事项&#xff1a;1、答案均写在答题纸上&#xff0c;写在卷面上无效;2、答题结束后将试卷及答题纸全部交给监考教师;3、闭卷…

web通信 长连接、长轮询

http://www.cnblogs.com/hoojo/p/longPolling_comet_jquery_iframe_ajax.html转载于:https://www.cnblogs.com/kszit/p/3605340.html

V210 SPI驱动分析

对于总线设备驱动&#xff0c;是需要分别创建设备和驱动两个结构体&#xff0c;然后根据name&#xff0c;互相匹配&#xff0c;匹配成功后&#xff0c;调用 驱动的probe函数&#xff0c;然后创建设备文件&#xff0c;实现驱动的业务逻辑。 因此&#xff0c;我们就以设备和驱动…

android 有值代码,Android:如何在代码中获取“listPreferredItemHeight”属性的值?

这样做&#xff1a;TypedValue value new TypedValue();((Activity)context).getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true);编辑&#xff1a;由于尚未正确初始化DisplayMetrics实例&#xff0c;因此您将获得零值。它需要一个参考框架(显…

android 多个按钮响应,处理Android Recyclerview中的多个按钮单击并将响应存储在Array或ArrayList中...

我正在设计在线测验App。我设计了PlayQuiz.java文件如下&#xff1a;public class PlayQuiz extends AppCompatActivity {private RecyclerView recyclerView;DataBaseHelper database;private List quizList;private QuizAdapter adapter;Overrideprotected void onCreate(Bun…