C语言学习——第六章 字符型数据

一、基础知识

1.字符型常量

(1)字符常量

  • 定义:‘ 一个字符 

               注:(1)‘ 大小写字母 ’  代表不同的字符常量

                      (2)’  ‘ 中只能包含一个字符     (’abc'  X

                      (3)只能用单引号,不能用双引号   (”a“是字符串,不是字符常量)

                      (4)字符常量在内存中占一个字节,存放字符的ASCII代码值

  • 记忆:
    字符常量ASCII值
    ' A '65
    ' a '97
    ' 空格 '32
    ' 0 '48

(2)转义字符常量

  • 定义:‘ \一个字符 

               注:(1)转义字符常量只代表一个字符,如  \n ’  \101 ’  \141 ’  

                      (2)’ \八进制数 ‘ 中的八进制数可以不以0开头     ('\101'  代表字符常量 ' A ' ;'\141'  代表字符常量 ' a ' ;)

                               反斜线后跟一个八进制数来表示一个ASCII字符

                      (3)' \十六进制 ' 只可由小写字母x开头,大写字母X和0x均不可以    (' \x41' 代表 ' A ')(' \x6d' 代表 ' m ')

                               反斜线后跟一个十六进制数来表示一个ASCII字符

C语言中的转义字符
                 字符形式                    功能
                      \n                   回车换行
                      \t                   代表Tab
                      \v                   竖向跳格
                      \r                   回车符
                      \f                   换页符
                      \b                   退格符(代表"Backspace"键)
                      \\                   反斜杠字符”\“
                      \‘                      单引号
                      \"                      双引号
                      \ddd     三位八进制数代表的一个ASCII字符
                      \xhh     二位十六进制数代表的一个ASCII字符
                      \0              空值,其ASCII码值为0

 

 

(3)字符串常量

(4)可对字符量进行的运算

 2.字符变量

 3.字符的输入和输出

(1){\color{Blue} printf}{\color{Blue} scanf}

(2){\color{Blue} putchar}{\color{Blue} getchar}

 

二、程序举例

例6.1  以下程序输出26个大写字母和它们的ASCII代码,每行输出两组数据。

#include <stdio.h>
int main()
{
	char ch;
	int i;
	for(i=0;i<26;i++)
	{
		ch=i+65;
		printf(" %c ASCII=%d",ch,ch);
		if(i%2!=0)
			printf("\n");
	}
}
/*参考答案:*/
#include <stdio.h>
int main()
{
	char ch;
	int i;
	for(i=0;i<26;i++)
	{
		ch=i+65;
		if(i%2==0)
			printf("\n");
		printf(" %c ASCII=%d",ch,ch);
	}
	putchar('\n');
}
运行结果:
 A ASCII=65 B ASCII=66
 C ASCII=67 D ASCII=68
 E ASCII=69 F ASCII=70
 G ASCII=71 H ASCII=72
 I ASCII=73 J ASCII=74
 K ASCII=75 L ASCII=76
 M ASCII=77 N ASCII=78
 O ASCII=79 P ASCII=80
 Q ASCII=81 R ASCII=82
 S ASCII=83 T ASCII=84
 U ASCII=85 V ASCII=86
 W ASCII=87 X ASCII=88
 Y ASCII=89 Z ASCII=90
Press any key to continue

例6.2  以下程序段等待从终端输入一个字符,当按Enter键时,程序才往下继续进行。

 

例6.3  以下程序把从终端输入一行字符中所有的小写字母转换成大写字母,其他字符不变。

 

例6.4  编写程序统计输入的字符中空格符、换行符和横向跳格(制表)符的个数,用!号结束输入。

 

​​​​​​​例6.5  把一串密文译成明文,密文以字符@表示结束。译码规则如下:

(1)如果是字母,转换成字母序列的下一个字母。如A译成B、B译成C。

(2)如果是字母Z,译成A。

(3)无论是大小字母都译成小写字母。

(4)其他字符一律按照原样译出。

 

三、习题

6.19  输入一行字符(用回车结束),输出每个字符以及与之对应的ASCII代码值,每行输出三对。

#include <stdio.h>
int main()
{
	char ch;
	int n=0;
	while((ch=getchar())!='\n')
	{
			if(n%3==0)
				putchar('\n');
			n++;
			printf("%c : %d ",ch,ch);
	}
}

6.20  输入一行数字字符(用回车结束),每个数字字符的前后都有空格,把这一行中的数字转换成一个整数,例如输入  2  4  8  3  <CR> ,则输出整数:2483

/*6.20*/
#include <stdio.h>
int main()
{
	char ch;
	while((ch=getchar())!='\n')
	{
		if(ch!=' ')
		putchar(ch);
	}
	putchar('\n');
}


运行结果:
 2 4 6 8
2468
Press any key to continue
参考:
#include <stdio.h>
int main()
{
	char ch;
	while((ch=getchar())!='\n')
	{
		if(ch>='0'&&ch<='9')
		{
			ch=ch-'0';
		    printf("%d",ch);
		}
	}
	putchar('\n');
}

 

6.21  请编写程序统计输入的行数,用!号结束,!号所在行不计入行数。

#include <stdio.h>
int main()
{
	char ch;
	int n=0;
	while((ch=getchar())!='!')
	{
		if(ch=='\n')
			n++;
	}
	printf("%d\n",n);
}

6.22  请编写程序统计输入的一行中小写字母的个数。

/*错误的*/
#include <stdio.h>
int main()
{
	char ch;
	int n=0;
	ch=getchar();
	if(ch>='a'&&ch<='z')
		n++;
	printf("%d\n",n);
}
/*改正的:*/
#include <stdio.h>
int main()
{
	char ch;
	int n=0;
	while((ch=getchar())!='\n')
	{
		if(ch>='a'&&ch<='z')
		n++;
	}
	printf("%d\n",n);
}

 

6.23  请编写输出以下图案的程序,图形行数由输入的整数值确定(每行中字符之间没有空格)。

/*6.23*/
#include <stdio.h>
int main()
{
	int n,i,j,k;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		for(j=1;j<=n-i;j++)
			putchar(' ');
		for(k=0;k<2*i+1;k++)
			printf("%c",'A'+i);
		putchar('\n');
	}
}


运行结果:
5
     A
    BBB
   CCCCC
  DDDDDDD
 EEEEEEEEE
Press any key to continue
参考答案:
#include <stdio.h>
int main()
{
	int L,i,j,k,n;
	char ch;
	scanf("%d",&L);
	for(i=1;i<=L;i++)
	{
		ch='A'+i-1;
		n=2*i-1;
		for(j=L;j>=i;j--)
			putchar(' ');
		for(k=1;k<=n;k++)
			putchar(ch);
		putchar('\n');
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crow_jing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值