`

第八章 字符输入/输出和输入确定

 
阅读更多

下面的一些程序要求输入以EOF终止。如果您的操作系统难以使用或不能使用重定向,则使用一些其他的判断来终止输入,例如读取&字符。

 

1.设计一个程序,统计从输入到文件结尾为止的字符数。

 

  #include<stdio.h>

int main(void)
{
	
	int count = 0 ;
	printf("input characters:\n");
	while(getchar() != EOF)
		count++;
	printf("there are%d characters\n",count);
        return 0;
}
       
 

   2.编写一个程序,把输入作为字符流读取,直到遇到EOF。令该程序打印每个输入字符及其ASCII编码的十进制值。注意在ASCII序列中空格字符前面的字符是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分期打印\n或\t。否则,使用控制字符符号。例如,ASCII的l是Ctrl+A,可以显示为AA。注意A的ASCⅡ值是Ctrl+A的值加64。对其他非打印字符也保持相似的关系。除去每次遇到一个换行符时就开始一个新行之外,每行打印10对值。

 

#include<stdio.h>

#define SPACE ' '
#define ENTER '\n'
#define TAB '\t'

int main(void)
{
	printf("input characters:\n");
	char input ;
	int count = 1;
	
	while( (input = getchar() )!= EOF)
	{
		 if(input == ENTER)
				printf("\\n|%d  ",input);
		else if(input == TAB)
				printf("\\t|%d  ",input);
		else if( input >= 0 && input < SPACE)
			printf("^%c|%d  ",input + 64,input);
		else
			printf("%c|%d  ",input,input);
		if(count++ % 10 == 0)
			putchar(ENTER);
	}
 	return 0;

}
 

 

 

 

 

 3.编写一个程序,把输入作为字符流读取,直至遇到EOF。令其报告输入中的大写字母个数和小写字母个数。假设小写字母的数值是连续的,大写字母也是如此。或者你可以使用ctypc,h库中的合适的函数来区分大小写。

 

 

#include<stdio.h>
#include<ctype.h>

int main(void)
{
        printf("enter charactes:\n");
	char input;
	int COUNT = 0;
	int count = 0;
	while( (input =getchar() ) != EOF)
	{
		if(islower(input))
			count++;
		if(isupper(input))
			COUNT++;
	}
	printf("lower character is %d, upper character is %d \n",count,COUNT);
        return 0;
}
 

 

 4.编写一个程序,把输入作为字符流读取,直至遇到EOF。令其报告每个单词的平均字母数。不要将空白字符记为单词中的字母。实际上,标点符号也不应该计算,但现在不必考虑这一点(如果您想做得好一些,可以考虑使用ctype.h系列中的ispunct()函数)。

   源自:http://hi.baidu.com/ch314156/blog/item/a14fb9d79d916f173bf3cf22.html

 

#include<stdio.h>
#include<ctype.h>

int main(void)
{
       char input;
	int words_count = 0;
	int character_count = 0;
	bool inwords = false;  //

	printf("enter words:\n");
	while( (input = getchar() ) != EOF)
	{
		if(!isspace(input) && !ispunct(input))
             character_count++;    //字母数
		if(!isspace(input) && !inwords)
		{
			inwords = true;   //开始一个新单词
			words_count++;  //统计单词数
		}
		if( (ispunct(input) || isspace(input) ) && inwords)
			inwords = false;   //到达单词结尾
	}
	printf("%d characters read.\n",character_count);
	printf("%d words read.\n",words_count);
	printf("the average number of letters per word is %.2f .\n",(float)words_count/(float)character_count);
        return 0;
}
 

 

 

5.修改程序清单8,4中的猜测程序,使其使用更智能的猜测策略。例如,程序最初猜50,让其询问用户该猜测值是大、小还是正确。如果该猜测值小,则令下一次猜测值为50和100的中值,也就是75。如果75大,则下一次猜测值为75和50的中值,等等。使用这种二分搜索(binary search)策略,起码如果用户没有欺骗,该程序很快会获得正确答案。

 

 

#include<stdio.h>

 void clean(void);
 
int main(void)
{
int min = 1;
	int max = 100;
	int guess = 50;
	printf("is it %d?\n",guess);
	bool answer = false;
	while( getchar() != 'y')
	{
		clean();
		printf("%d is biger or smaller?(b or s): ",guess);
		char adjust = getchar();
        clean();
		if(adjust == 's')   //guess 猜小了
		{
			min = guess;
			guess = (max + min) / 2;
			printf("is it %d?\n",guess);
			continue;
		}
		if(adjust == 'b')  //guess 猜大了
		{
		   max = guess;
		   guess = (min + max) / 2;
		   printf("is it %d?\n",guess);
		   continue;
		}
	}
	printf("Good job\n");
        return 0;
}

void clean(void)
 {
	 while(getchar() != '\n')
			continue;
 }
 

 

 

6.修改程序清单8.8中的get_first()函数,使其返回所遇到的第一个非空白字符。在一个简单的程序中测试该函数。

 

 

#include<stdio.h>
#include<ctype.h>

 char get_first(void);

int main(void)
{
        printf("enter:\n");
	char firstChar = get_first();
	putchar(firstChar);
         return 0;

}


char get_first(void)
{
	int input;
	while(isspace(input = getchar()));
    while(getchar() != '\n')
		continue;
	return input;
}
 

 

 

 

 

 

 

 

 

8.编写一个程序,显示一个菜单,为您提供加法、减法、乘法或除法的选项。获得您的选择后,该程序请求两个数,然后执行您选择的操作。该程序应该只接受它所提供的菜单选项。它应该使用float类型的数,并且如果用户未能输入数字应允许其重新输入。在除法的情况中,如果用户输入O作为第二个数,该程序应该提示用户输入一个新的值。一个典型的程序运行应该如下所示:
Enter the operation of your choice:
a. add       s. subtract
m. multiply   d. divide
q. quic
Enter first number: 22.4
Enter second number: one
one is not an number.
Please enter a number, such as 2.5. -1.78E8, or 3. 1
22.4 + 1 = 23.4
Enter the operation of your choice:
a. add        s. subtract
m. multiply   d. divide
q. quit
Enter first number: 18.4
Enter second number: O
Enter a number other than 0: 0.2
18.4 / 0.2 = 92
Enter the operation of your choice:
a. add        s. subtract
m. multiply   d. divide
q. quit
q
Bye.

 

#include<stdio.h>
#include<ctype.h>
static  float num1,num2;  

 
 char get_first(void);
 void menu(void);
 float get_float(void);
 char get_choice(void);

int main(void)
{
        menu();
	char choice;

	while((choice = get_choice()) != 'q')
	{
		printf("enter first number:");
		num1 = get_float();
		printf("enter second number:");
		num2 = get_float();
		switch(choice)
		{
		case 'a': printf("%.2f + %.2f = %.2f\n",num1,num2,num1+num2);break;
		case 's': printf("%.2f - %.2f = %.2f\n",num1,num2,num1-num2);break;
		case 'm': printf("%.2f x %.2f = %.2f\n",num1,num2,num1*num2);break;
		case 'd': printf("%.2f / %.2f = %.2f\n",num1,num2,num1/num2);break;
		default: printf("program error\n"); break;
		}
		menu();
	}
	printf("Bye!\n");
	 

    return 0;

}



char get_first(void)
{
	int input;
	while(isspace(input = getchar()));
    while(getchar() != '\n')
		continue;
	return input;
}

void menu()
{
	printf("Enter the operation of your choice:\n");
	printf("a. add                 s. substract\n");
	printf("m. multiply          d.divide\n");
	printf("q. quit\n");
}

char get_choice()
{
	char choice;
	choice = get_first();
	while(choice != 'a' && choice != 's' && choice != 'm' & choice != 'd' && choice != 'q')
	{
		printf("please response with a,s,m,d or q.\n");
		choice = get_first();
	}
	return choice;
}

float get_float()
{
	float num;
	char ch;

	while(scanf("%f",&num) != 1)
	{
		while((ch = getchar()) != '\n')
			putchar(ch);
		printf("is not an number.\n");
		printf("enter a number,such as 2.5,-1.78E8 or 3:");
	}
	return num;
}
 

 

0
0
分享到:
评论

相关推荐

    C primer plus (第五版)课后习题

    #### 第八章 字符输入/输出和输入确认 **知识点:** 1. **字符输入/输出:** - `getchar()`和`putchar()`函数用于单个字符的输入和输出。 - 输入验证:确保用户输入符合预期。 2. **输入确认:** - 验证用户的...

    Socket输入输出服务器程序

    Socket输入输出服务器程序是计算机网络编程中的基础组件,主要用于实现客户端和服务器之间的通信。这个程序是用Java语言编写的,提供了基本的TCP/IP通信功能。下面将详细解释这个程序涉及的知识点。 首先,Socket是...

    C语言程序设计:第3章 基本运算与输入输出

    在C语言程序设计中,第三章主要探讨了基本运算与输入输出的相关概念。这一章分为多个部分,包括运算符与表达式概述、数据对象的存取、基本数值运算、其他常用运算以及输入与输出。 首先,我们来看运算符与表达式。...

    万年历,输入年份月份,输出当月日历

    在这个程序中,我们需要计算从1900年1月1日到用户输入日期的总天数,以便确定该月的第一天是星期几。 2. **闰年判断**:闰年的判断规则是:能被4整除但不能被100整除,或者能被400整除的年份。Java代码可以这样实现...

    自学去c语言视频教程

    25) C语言之字符输入/输出和输入确认 指针 26) C语言之初识指针 27) C语言之指针的简单用法 28) C语言之字符串指针详解 数组 29) C语言之定义数组 30) C语言之一维数组的使用 31) C语言之二维数组和多维数组 32) ...

    python语言程序设计基础第二版第二章答案-python语言程序设计基础(嵩天)第二章课 .pdf

    Python语言程序设计基础第二版第二章主要探讨了编程的基础概念,包括数组的定义与操作,以及C语言的小型编程练习。在Python语境下,我们虽然没有直接讨论Python的数组,但可以将其与C语言的一维数组进行对比,理解...

    C_宽字符处理函数函数与普通函数对照表(转).docx

    8. **输入和输出**: - `fgetwc()` 对应 `fgetc()`: 从流中读取一个字符并转换为宽字符。 - `fgetws()` 对应 `fgets()`: 从流中读取一个字符串并转换为宽字符串。 - `fputwc()` 对应 `fputc()`: 将宽字符转换为多...

    微机原理课程设计——通过小键盘的输入控制输出的演示

    - **小键盘输入**:通过实验22中的8255A并行口实验以及教材第10章的相关内容,可以学习到如何通过行扫描法或行反转法来识别小键盘的输入。行扫描法是一种常见的按键检测方法,通过逐行扫描的方式确定闭合键的具体...

    C语言课程设计报告-字符串处理.pdf

    - 使用格式化输入输出函数如scanf和printf时,可以实现整数与字符之间的转换。 上述知识点涵盖了C语言字符串处理的核心概念,包括字符串操作的基本算法和程序设计的基本技巧。在实际编程实践中,这些知识点是基础...

    C语言全套视频教程 视频.txt

    25) C语言之字符输入/输出和输入确认 指针 26) C语言之初识指针 27) C语言之指针的简单用法 28) C语言之字符串指针详解 数组 29) C语言之定义数组 30) C语言之一维数组的使用 31) C语言之二维数组和多维数组 32) ...

    王道模拟题第一套

    **题目解析**:将字符串 "ooops" 入栈,由于字符串的特殊性(o 出现两次),我们需要找出所有可能的出栈顺序,并判断哪些顺序能保持原始顺序不变。通过枚举所有可能的出栈顺序,可以发现只有 6 种不同的顺序可以保持...

    kettle8 模拟表输入查询表名,然后在另一个表输入中使用变量使用

    在Kettle8中,模拟表输入查询表名并使用变量是一项常见的数据处理任务,它涉及到工作流中的动态数据源选择和参数化。Kettle8,也称为Pentaho Data Integration (PDI),是一款强大的ETL(提取、转换、加载)工具,...

    Delphi 字符串截取函数

    这对于动态构建字符串非常有用,特别是在需要生成复杂文本输出的情况下。 #### 4. Delete:字符串删除 `Delete` 函数允许从字符串中删除指定位置的字符或子串。例如,`Delete('ILikeReadingCPCW.', 16, 1)` 将从 ...

    javascript parseInt() 函数的进制转换注意细节.docx

    // 输出 0 (因为 "0x" 不是八进制的有效字符) console.log(parseInt("0x10", 16)); // 输出 16 (因为 "0x" 表示十六进制) console.log(parseInt("0x10", 17)); // 输出 0 (因为 "0x" 不是十七进制的有效字符) ``...

    单片机原理及应用:第7章 80C51的系统扩展.ppt

    《单片机原理及应用:第7章 80C51的系统扩展》 在深入探讨80C51单片机系统扩展之前,我们首先需要了解80C51的基本架构。80C51是一款广泛使用的8位微处理器,其内部集成了CPU、RAM、ROM以及输入/输出(I/O)端口。然而...

    第八章微型计算机接口技术8-2LED显示器接口.pptx

    在第八章中,我们重点关注了几个关键的接口技术,包括LED显示器接口、键盘与单片机接口、D/A转换器接口以及A/D转换器接口。 **8-2 LED显示器接口** LED显示器广泛应用于工业控制和过程状态显示。LED数码管分为共...

    根据身份证号自动输出相关信息(籍贯,出身日期,性别)

    通常,出生日期的格式为YYYYMMDD,因此可以通过简单的字符串截取和格式化,将其转换为人类可读的日期格式,如YYYY年MM月DD日,然后显示在“出生年月”输入框内。 性别信息位于身份证号码的第17位,奇数表示男性,...

    广技师c语言复习题2. 练习输入输出有答案.doc

    本资源是关于C语言输入输出的练习题集,包含了多个选择题和编程题,涉及到scanf函数、printf函数、变量定义、输入输出格式等方面的知识点。 一、选择题1. 的解析: 题目:以下程序的运行结果是。 ```c #include ...

    C语言程序设计第二阶段练习(江南大学).docx

    14. **字符数组输入**:正确的输入语句是`scanf("%s%s", a, b)`,这将分别读取两个字符串到`a`和`b`中。 15. **数组参数**:数组名在函数参数中被视为指向数组首元素的指针,因此传递的是数组的首地址。 16. **一...

    高级语言程序设计:第五章 数组.ppt

    在C语言中,可以使用`scanf`和`printf`来输入输出字符串,如`scanf("%s", t)`和`printf("%s", t)`。在C++中,使用`cin`和`cout`,如`cin &gt;&gt; t`和`cout 。对于完整的字符串输入,可以使用`gets`和`puts`函数,但`gets...

Global site tag (gtag.js) - Google Analytics