下面的一些程序要求输入以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;
}
分享到:
相关推荐
#### 第八章 字符输入/输出和输入确认 **知识点:** 1. **字符输入/输出:** - `getchar()`和`putchar()`函数用于单个字符的输入和输出。 - 输入验证:确保用户输入符合预期。 2. **输入确认:** - 验证用户的...
Socket输入输出服务器程序是计算机网络编程中的基础组件,主要用于实现客户端和服务器之间的通信。这个程序是用Java语言编写的,提供了基本的TCP/IP通信功能。下面将详细解释这个程序涉及的知识点。 首先,Socket是...
在C语言程序设计中,第三章主要探讨了基本运算与输入输出的相关概念。这一章分为多个部分,包括运算符与表达式概述、数据对象的存取、基本数值运算、其他常用运算以及输入与输出。 首先,我们来看运算符与表达式。...
在这个程序中,我们需要计算从1900年1月1日到用户输入日期的总天数,以便确定该月的第一天是星期几。 2. **闰年判断**:闰年的判断规则是:能被4整除但不能被100整除,或者能被400整除的年份。Java代码可以这样实现...
25) C语言之字符输入/输出和输入确认 指针 26) C语言之初识指针 27) C语言之指针的简单用法 28) C语言之字符串指针详解 数组 29) C语言之定义数组 30) C语言之一维数组的使用 31) C语言之二维数组和多维数组 32) ...
Python语言程序设计基础第二版第二章主要探讨了编程的基础概念,包括数组的定义与操作,以及C语言的小型编程练习。在Python语境下,我们虽然没有直接讨论Python的数组,但可以将其与C语言的一维数组进行对比,理解...
8. **输入和输出**: - `fgetwc()` 对应 `fgetc()`: 从流中读取一个字符并转换为宽字符。 - `fgetws()` 对应 `fgets()`: 从流中读取一个字符串并转换为宽字符串。 - `fputwc()` 对应 `fputc()`: 将宽字符转换为多...
- **小键盘输入**:通过实验22中的8255A并行口实验以及教材第10章的相关内容,可以学习到如何通过行扫描法或行反转法来识别小键盘的输入。行扫描法是一种常见的按键检测方法,通过逐行扫描的方式确定闭合键的具体...
- 使用格式化输入输出函数如scanf和printf时,可以实现整数与字符之间的转换。 上述知识点涵盖了C语言字符串处理的核心概念,包括字符串操作的基本算法和程序设计的基本技巧。在实际编程实践中,这些知识点是基础...
25) C语言之字符输入/输出和输入确认 指针 26) C语言之初识指针 27) C语言之指针的简单用法 28) C语言之字符串指针详解 数组 29) C语言之定义数组 30) C语言之一维数组的使用 31) C语言之二维数组和多维数组 32) ...
**题目解析**:将字符串 "ooops" 入栈,由于字符串的特殊性(o 出现两次),我们需要找出所有可能的出栈顺序,并判断哪些顺序能保持原始顺序不变。通过枚举所有可能的出栈顺序,可以发现只有 6 种不同的顺序可以保持...
在Kettle8中,模拟表输入查询表名并使用变量是一项常见的数据处理任务,它涉及到工作流中的动态数据源选择和参数化。Kettle8,也称为Pentaho Data Integration (PDI),是一款强大的ETL(提取、转换、加载)工具,...
这对于动态构建字符串非常有用,特别是在需要生成复杂文本输出的情况下。 #### 4. Delete:字符串删除 `Delete` 函数允许从字符串中删除指定位置的字符或子串。例如,`Delete('ILikeReadingCPCW.', 16, 1)` 将从 ...
// 输出 0 (因为 "0x" 不是八进制的有效字符) console.log(parseInt("0x10", 16)); // 输出 16 (因为 "0x" 表示十六进制) console.log(parseInt("0x10", 17)); // 输出 0 (因为 "0x" 不是十七进制的有效字符) ``...
《单片机原理及应用:第7章 80C51的系统扩展》 在深入探讨80C51单片机系统扩展之前,我们首先需要了解80C51的基本架构。80C51是一款广泛使用的8位微处理器,其内部集成了CPU、RAM、ROM以及输入/输出(I/O)端口。然而...
在第八章中,我们重点关注了几个关键的接口技术,包括LED显示器接口、键盘与单片机接口、D/A转换器接口以及A/D转换器接口。 **8-2 LED显示器接口** LED显示器广泛应用于工业控制和过程状态显示。LED数码管分为共...
通常,出生日期的格式为YYYYMMDD,因此可以通过简单的字符串截取和格式化,将其转换为人类可读的日期格式,如YYYY年MM月DD日,然后显示在“出生年月”输入框内。 性别信息位于身份证号码的第17位,奇数表示男性,...
本资源是关于C语言输入输出的练习题集,包含了多个选择题和编程题,涉及到scanf函数、printf函数、变量定义、输入输出格式等方面的知识点。 一、选择题1. 的解析: 题目:以下程序的运行结果是。 ```c #include ...
14. **字符数组输入**:正确的输入语句是`scanf("%s%s", a, b)`,这将分别读取两个字符串到`a`和`b`中。 15. **数组参数**:数组名在函数参数中被视为指向数组首元素的指针,因此传递的是数组的首地址。 16. **一...
在C语言中,可以使用`scanf`和`printf`来输入输出字符串,如`scanf("%s", t)`和`printf("%s", t)`。在C++中,使用`cin`和`cout`,如`cin >> t`和`cout 。对于完整的字符串输入,可以使用`gets`和`puts`函数,但`gets...