C语言培训_009

getchar()和putchar()

  这两个貌似像函数的东西,用于单个字符的读取和输入。说貌似,因为他们并不是函数,而是一个宏(#define )。所以用不到函数的参数传递,从而执行效率较高,而且写起来也简单些。
char a;
a=getchar();//相当于 scanf("%c",&a);

char b='m';
putchar(b);//相当于 printf("%c",b);
完整的例子:
#include"stdio.h"
#include"stdlib.h"//system()函数的头文件之一
//大写字母的阿斯克码比小写大32。 如a=97,A=65。
int main()
{
	char a;
	//输入 "#" 结束。实现小写字母转化为大写。 
	while((a=getchar())!='#'&&a>='a'&&a<='z')
	{
		putchar(a-32);
	}
	system("pause");
	return 0;
} //这样的大小写转化函数,是我们自己写的。因为这些函数很常用。在“ctype.h”文件中写好了一组函数。当使用时,只要包含这些头文件就可以了。

getchar()缓冲区问题。

#include"stdio.h"
#include"stdlib.h"

int main()
{
	char a;
	char b;
	char c;
	//输入5个数,看看结果如何。 比如输入:abcde。 
	a=getchar();
	b=getchar();
	putchar(a);
	putchar(b);
	fflush(stdin);// 清空输入缓冲区的函数。比较一下屏蔽这行和不屏蔽这行的区别。前提是输入数量大于3. 
	
	c=getchar();
	putchar(c);
	system("pause");
	return 0;
} 

#include"ctype.h"

tolower()转化成小写字母
toupper()转化为大写字母

#include"stdio.h"
#include"stdlib.h"
#include"ctype.h"// 单字符转化和判断的函数头文件
 
int main()
{
	char a='H';
	printf("H被转化为了:");
	putchar(tolower(a));
	
	char b='b';
	printf("\nb被转化为了:");
	putchar(toupper(b));
	
	system("pause");
	return 0;
} 

  其实这些 ctype.h 内的函数我们都可以自己写出来。可以试试简单的凯撒加密解密。

  写一个简单的凯撒密码函数试试。(a变成b,b变成c,以此类推的加密。解密原理相反。只是简单的,以后会培训到复杂的凯撒密码如何写)

isalnum() //返货true或者false 即0和1判断是否为字母或数字
isalpha()判断是否为字母
isblank()判断是否为标准的空白符
iscntrl()判断控制符。如 ctrl+B
isdigit()判断阿拉伯数字
isgraph()判断是否为除空格外可打印字符
islower()判断小写西姆
isprint()可打印字符
ispunct()判断标点
isspace判断空字符
isupper判断大写字母
isxdigit判断十六进制数字字符

统计字符,字母,数字,行数。

课后复习题答案。


字符串的输入输出 

原理:

  连续的输出单个字符,遇到 '\0'  则停止。

基本的字符串函数。

gets(),puts(),strlen(),sizeof(),其他函数下一小节讲。( strlen()头文件是 string.h ,其他3个头文件是 stdio.h )

#include"stdio.h"
#include"string.h"//strlen() 用到的头文件。可以自己试试写一个strlen()。 
int main()
{
	char a[40];
	gets(a);//输入 a,回车结束输入 
	puts(a);//输出 a, 
	printf("sizeof(a); 的值为:%d \n",sizeof(a));//结果为总长40. 
	printf("strlen(a); 的值为:%d \n",strlen(a));//到 '\0' 的长度。
	//每个汉字占连个 char 的位置。判断汉字相等需要两个位置都一样。 
	
	return 0;
} 

  现在我们来自己写一个计算字符串长度的函数。叫做 getchang();和一个判断汉字想等的函数,叫做isequ()。

#include"stdio.h"
#include"stdbool.h"
int getchang(const char m[])//求字符串长度。 
{
	int sum=0;
	while(m[sum]!='\0')//并不知道 m 的长度, 所以用while() 
	{
		sum++;
	}
	return sum;
}

bool isequ(const char m[],const char n[])//判断汉字字符串是否相等。 
{
	bool b=true;//一假则假,所以先赋值为 true。
	if(m[0]!=n[0]||m[1]!=n[1])
	{
		b=false;
	}
	return b;
}

int main()
{
	char a[]="国";
	char b[]="国";
	char c[]="中";
	char *d="中" ;
	printf("%d\n",isequ(a,d));
	return 0;
} 


函数的使用

  函数是传递值,并没有改变原来的变量。
  函数可以递归调用。递归可以使思路简化,但是浪费电脑资源。一般不要调用递归。

汉诺之塔问题:

#include"stdio.h"
#include"windows.h"
void move(char x, char y)
{
	printf("%c-->%c\n", x, y);
}

void hanoi(int n,char one,char two,char three)
{
	if (n ==1)
	{
		move(one,three);
	}
	else 
	{
		hanoi(n-1,one,three,two);
		move(one, three);
		printf("**********") ;
		hanoi(n - 1, two, one, three);
	}
}

int main()
{
	int n;
	printf("输入需要移动几个盘子:\n");
	scanf("%d", &n);
	printf("**********************\n",n);
	hanoi(n, 'A', 'B', 'C');
	system("pause");
	return 0;
} 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值