C语言学习(第十天)

今天学第三章的第二节,我们先上一道题再说:

例. 求解简单的四则运算表达式。输入一个形式如 " 操作数 运算符 操作数 " 的四则运算表达式,输出运算结果,要求对除数为0的特殊情况做特殊处理。

咱们先上代码再解释:

#include <stdio.h>
int main(void)
{
	double value1, value2;
	char op;
	printf("Type in an expression:");
	scanf("%lf%c%lf", &value1, &op, &value2);
	if(op=='+'){
		printf("=%.2f\n", value1+value2);
	}else if(op=='-'){
    	printf("=%.2f\n", value1-value2);
	}else if(op=='*'){
		printf("=%.2f\n", value1*value2);
	}else if(op=='/'){
		if(value2!=0){
		printf("=%.2f\n", value1/value2);
	}
	}else{
		printf("Unknown operator!\n");
	}
    return 0;
}

今天要讲的东西有点多,慢慢理解。

一、 字符型数据:

首先讲大家最关心的怎么用,然后再讲原理。

1、首先,最重要的就是字符的定义,字符变量在定义的时候用的类型名为:char 。给字符变量赋值的时候,记得要用 ' ' 括起来,如:

#include<stdio.h>
int main(void)
{
	char op;
	op = 'a';
	printf("%c\n", op);
	return 0;
}

这里要注意的是 op = 'a' :就是把 a 赋值给 op 。如果是 op = 'abcd' ,输出出来的结果就会是最后一个字符 d 。我也不知道是什么原理。一定要注意要区分数字和数字字符,例如:1 是整型数字,而 '1' 是字符。

2、字符的输入与输出可以调用函数scanf() 、printf() 和 getchar() 、putchar() 。输入可以调用函数:getchar() 、scanf() ,输出可以调用函数 printf() 、putchar()。

(1)、调用函数 seanf() 和 printf() 输入输出字符。

函数 scanf() 和 printf() 除了处理整型数据和浮点型数据的输入输出外,也可以处理字符型数据的输入输出。此时,在函数调用的格式控制字符串中相应的格式控制说明为 %c , 如:

#include<stdio.h>
int main(void)
{
	char op;
	printf("Please enter a character:");
	scanf("%c", &op);
	printf("%c\n", op);
	return 0;
}

(2)、调用函数 getchar() 和 putchar() 输入输出字符。

调用字符输入函数 getchar() 可以从键盘输入一个字符。设 ch 是字符型变量,函数 getchar() 的一般调用格式为:

ch = getchar();

其功能是从键盘输入一个字符,并赋值给变量ch。

调用字符输出函数 putchar() 可以输出一个字符。函数 putchar() 的一般调用格式为:

putchar(输出参数);

其功能是输出参数是字符型变量或字符型常量。

由于函数 getchar() 和 putchar() 分别只能输入和输出一个字符,如果要处理多个字符的输入和输出,就需要多次调用函数,一般采用循环调用的方式,如:

for(i=1;i<=n;i++){
    ch = getchar();
    putchar(ch);
}

最基本的使用讲了,然后我们看看具体的细节。

首先,字符型常量指单个字符,用一对单引号及其所括起的字符来表示。例如:'A' 、'a' 、'9' 、'$' 是字符型常量,它们分别表示字母 A 、a 、数字字符 9 和符号 $ 。

然后,先讲逻辑运算再补充字符的东西。

我的理解就是数学里面的或、且、非。当然所表达的意思也就和数学一样了,比如:

1、(op>='a')&&(op<='z') 表达的意思就是 op 属于字符 'a'、'b'、... 、'z' 这个区间。

2、(a>=1)||(a<=9) 表达的意思就是 a 属于[1,9]这个区间。

3、a ! = b 表达的意思就是 a 不等于 b 。

我们直接上一道题实战一下:

#include<stdio.h>
int main(void)
{
	int i, n, Numeric_characters, English_characters, Other_characters;
	char ch;
	printf("Enter n:");
	scanf("%d", &n);
	getchar();
	printf("Enter %d characters:",n);
	Numeric_characters = 0;
	English_characters = 0;
	Other_characters = 0;
	for(i=1;i<=n;i++){
		ch = getchar();
		if((ch>='0')&&(ch<='9')){
			 Numeric_characters++;
		}else if((ch>='a')&&(ch<='z')||(ch>='A')&&(ch<='z')){
			English_characters++;
		}else{
			Other_characters++;
		}
	}
	printf("Numeric_characters=%d\nEnglish_characters=%d\nOther_characters=%d\n", Numeric_characters, English_characters, Other_characters);
	return 0;
}

这道题其实并不难,重在对知识的理解。

在打代码的时候遇到了个问题,我相信你们应该也会遇到,我们就拿出来看看,减少犯错:

比如,我们要输入n个字符,然后再输出这n个字符,并且在每个字符之间加上一个链接符(-)。

代码按道理应该长这样:

#include<stdio.h>
int main(void)
{
	int i, n;
	char op;
	printf("Please enter n:");
	scanf("%d", &n);
	printf("Please enter %d character:", n);
	for(i=1;i<n;i++){
		scanf("%c", &op);
		printf("%c-", op);
	}
	scanf("%c", &op);
	printf("%c", op);
	printf("\n");
	return 0;
}

但是,运行一下你会发现一个离谱的事情:结果不对!

当我们输入 6 时,程序已经运行了一次了。怎么会这样呢?因为我们输入 6 后,我们还按了一下Enter键从而让程序继续运行,但是别忘了,回车也是一个字符,程序把回车也当成了一个字符,并把它赋值给了 op 。那这个问题怎么解决呢?其实很简单,我们只需要在循环之外把回车赋给 op ,然后循环里面再次赋值的时候就会把回车给覆盖掉,这个问题就被完美解决了。也就是在

printf("Please enter %d character:", n);
	for(i=1;i<n;i++){

这两句之间加一句:

op = getchar();

就行了。

突然还想到一个:在输入 n 个字符的时候,必须连续输入,字符之间不能有间隔哟,因为空格也是算一个字符的。

今天就打到这里吧,我打不动了,嘿嘿。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值