初始C语言(2)

4.字符串、转义字符、注释

补充:变量声明和定义:

若变量在main函数之后定义时,此时就需要在main函数之前先声明有这样一个变量,让编译器提前知道有这么一个变量,编译器才不会报错。

//声明
int a;
int main()
{
    printf("%d\n",a);
    return 0;
}

//定义
int a=-1;

4.1字符串

"hello word C!"

这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。

注:字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串的内容。

----->请看下面代码,如下图:结果会是怎样的呢?


#include<string.h>

int main()
{
	char ch = 'w';
	//数组
	char ch1[] = { 'a','b','c' };
	char ch2[] = "abc";
	printf("%d\n", strlen(ch1));
	printf("%d\n", strlen(ch2));
	return 0;
}

 总结:

       C语言提供了一个库函数strlen来统计字符串的个数,

       strlen:统计字符串的长度,统计的是\0之前的字符个数,但是由于ch1数组中存放的是'a','b','c',没有存放'\0',所以编译器找不到\0它会继续往后找,直到找到\0最后返回一个随机值;而ch2中存放的是字符串,字符串里面会有隐藏的'\0',实际上ch2中存放的字有:'a','b','c','\0',当strlen函数统计的是'\0'之前的字符个数,字符'\0'不算作个数,所以最后是3。

       如果想要让ch1打印出来的数值和ch2一样,则可以像下面这样写代码:

#include<stdio.h>
int main()
{
	char ch = 'w';
	//数组
	char ch1[] = { 'a','b','c' ,'\0'};
	char ch2[] = "abc";
	printf("%d\n", strlen(ch1));
	printf("%d\n", strlen(ch2));
	return 0;
}

运行结果如下:

也可以这样改: 

#include<stdio.h>
int main()
{
	char ch = 'w';
	//数组
	char ch1[] = { 'a','b','c' ,0};
	char ch2[] = "abc";
	printf("%d\n", strlen(ch1));
	printf("%d\n", strlen(ch2));
	return 0;
}

----->请看下面代码:如下图,为什么使用%s来打印两个数组的内容时,会有如此大的区别?

 总结:

      对字符数组ch1来说,以%s打印字符串时,需要找到字符串里面的'\0'才打印结束,由于ch1中未存放'\0',所以以%s来打印时找不到'\0',则继续往后找,直到找到'\0'打印结束,所以打印的是随机值;对字符数组ch2来说,本身字符串中就存放着隐藏的'\0',所以以%s打印时,直到找到'\0'打印结束,得到上述结果。

4.2转义字符

       假如我们要在屏幕上打印一个目录: c:\code\test.c,我们该如何写代码?

#include <stdio.h>
int main()
{
	printf("c:\code\test.c\n");
	return 0;
}

运行结果如下:

 ???为什么会出现这样的结果呢?------------------------------------------------------转义字符的因素

这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思。

下面看一些转义字符。

转义字符             释义
\?       在书写连续多个问号时使用,防止他们被解析成三字母词
\'       用于表示字符常量'
\“       用于表示一个字符串内部的双引号
\\       用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a       警告字符,蜂鸣
\b       退格符
\f       进纸符
\n       换行
\r       回车
\t       水平制表符
\v       垂直制表符
\ddd     ddd表示1~3个八进制的数字。 如: \130 X
\xdd     dd表示2个十六进制数字。 如: \x30 0

注意:\ddd中,ddd表示一到三个八进制的数字,一个也行,两个也行,三个也行。 

//什么是三字母词????
#include<stdio.h>
int main()
{
	//三字母词:??)----->]
	printf("(are you ok??)");
	return 0;
}
#include<stdio.h>
int main()
{
	//打印字符%c
	printf("%c\n", 'a');
	printf("%c\n", 'w');

	//打印字符串%s
	printf("%s\n", "abcde");
	//打印双引号
	printf("%s\n", "\"");
	//\a警告字符,蜂鸣
	printf("\a");
	//\b退格符,先退格覆f再继续打印\b后面的元素
	printf("abcdef\bc\n");
	//打印八进制
	printf("%c\n", '073');
	//dd表示2个十六进制数字
	printf("%c\n", 'x46');

	printf("c:\\code\\test.c");
	return 0;
}

10进制、8进制、16进制分别转换为10进制:

 

 

 十进制:由0~9(包含9)组成的数字,如:99,20,40等。

 八进制:由0开头,由0~8(包含8)组成的数字,如:074,056等。

 十六进制:由0x开头,由0~9(包含9)、A、B、C、D、E、F组成的数字,如0x887,0x231等。

 ------------>想要再屏幕上打印一个单引号、打印一个双引号,怎么打印?

#include<stdio.h>
int main()
{
	printf("\'");
	printf("'");
	printf("\\");
	printf("\"");
	printf("\"");
	return 0;
}

若想要算一下字符串:c:\test\628\test.c的长度,代码如下:

#include <stdio.h>
int main()
{
	printf("%d\n", strlen("abcdef"));
	printf("%d\n", strlen("c:\test\628\test.c"));
	return 0;
}

运行结果如下:

 总结:

        strlen是统计字符串长度的库函数,以\0为结束标志,统计\0之前的字符个数。在字符串“abcdef”中存放这'a,'b','c','e','f'','\0','\0'之前有5个元素,所以打印5;字符串"c:\test\628\test.c"中,\t是一个转义字符,'\628'是'\ddd'抽象,表示一个8进制数,为一个字符,所以打印14。

注意:数字0---------实际上是0;

           字符'0'--------实际上ASCII码值是48;

            '\0'-------------字符串的结束标志--实际上ASCII码值是0;

int main()
{
	printf("%d\n", 100);
	printf("%c\n", 100);
	printf("%d\n", strlen("abc\qdef"));

	return 0;
}




//\q不是转义字符

5.注释

1. 代码中有不需要的代码可以直接删除,也可以注释掉
2. 代码中有些代码比较难懂,可以加一下注释文字

比如:

#include <stdio.h>
int Add(int x, int y)
{
  return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
  return x-y;
}
*/
int main()
{
  //C++注释风格
  //int a = 10;
  //调用Add函数,完成加法
  printf("%d\n", Add(1, 2));
  return 0;
}

总结:

  • C语言风格的注释 /*xxxxxx*/,缺陷:不能嵌套注释。
  • C++风格的注释 //xxxxxxxx,可以注释一行也可以注释多行。

6.选择语句

如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!

#include<stdio.h>
int main()
{
	int input = 0;
	printf("你要好好学习吗(1/0)?");
	scanf("%d", &input);//

	if (input == 1)
		printf("好offer\n");
	else if (input == 0)
		printf("回家卖红薯\n");
	else
		printf("输入错误\n");

	return 0;
}

7.循环语句

有些事必须一直做,比如我日复一日的讲课,比如大家,日复一日的学习。

#inlcude<stdio.h>
int main()
{
	int line = 0;

	while (line <= 20000)
	{
		printf("敲代码: %d\n", line);
		line++;
	}

	if (line > 20000)
		printf("好offer\n");
	else
		printf("好好学习,天天编程\n");

	return 0;
}

总结:

       C语言中如何实现循环呢?

  • while语句
  • for语句
  • do ... while语句

8.函数

代码如下所示:

//int Add(int x, int y)
//{
//	int z = 0;
//	z = x + y;
//	return z;
//}
//
//int Add(int x, int y)
//{
//	return (x + y);
//}
//
//int main()
//{
//	int num1 = 0;
//	int num2 = 0;
//	int sum = 0;
//	//输入
//	scanf("%d %d", &num1, &num2);
//	//求和
//	sum = Add(num1, num2);
//
//	//输出
//	printf("%d\n", sum);
//
//	return 0;
//}
//

 函数的调用过程:

 9.数组

要存储1-10的数字,怎么存储?
C语言中给了数组的定义:一组相同类型元素的集合

9.1数组定义

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

 9.2数组的下标、数组的使用

/int main()
//{
//	/*int a = 1;
//	int b = 2;
//	int c = 3;
//	int d = 4;*/
//	//1~10
//	//数组的概念 - 数组中可以存放一组相同类型的元素
//	//数组 - 一组相同类型元素的集合
//	//数组的创建和初始化
//	//int arr1[10] = {1,2,3,4,5,6,7,8,9,10};
//	//int arr2[10] = { 1,2,3,4,5};//不完全初始化,剩余的默认初始化为0
//	//char ch[5] = { 'a', 'b', 'c' };//不完全初始化,剩余默认初始化为\0
//	
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	//0~9
//	/*printf("%d\n", arr1[6]);*/
//	int i = 0;
//	while (i<10)
//	{
//		printf("%d ", arr1[i]);
//		i = i + 1;
//	}
//
//	return 0;
//}

//

10.操作符

  • 算数操作符
+ - * / %
  • 移位操作符
>>    <<
  • 位操作符
&   ^   |
  • 赋值操作符
= += -= *= /= &= ^=  |=   >>=  <<=
  • 单目操作符
!      逻辑反操作
-      负值
+      正值
&      取地址
sizeof    操作数的类型长度(以字节为单位)
~      对一个数的二进制按位取反
--      前置、后置--
++      前置、后置++
*      间接访问操作符(解引用操作符)
(类型)    强制类型转换
  • 关系操作符
>
>=
<
<=
!=  用于测试“不相等”
==    用于测试“相等”
  • 逻辑操作符
&&   逻辑与
||      逻辑或
  • 条件操作符
exp1 ? exp2 : exp3
  • 逗号表达式
exp1 ? exp2 : exp3
  • 下标引用、函数调用和结构成员
[] () . ->

11.常见关键字

auto  break  case  char  const  continue  default  do  double else  enum 
extern float  for  goto  if  int  long  register   return  short  signed
 sizeof  static struct  switch  typedef union  unsigned  void  volatile  while

       C语言提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值