第1讲:C语言常见概念易错点

本文介绍了C语言的基础概念,如C语言的编译过程,main函数的不同表达形式,以及关键字、ASCII码表和字符串处理,包括转义字符的使用。通过实例演示了如何处理字符输出换行问题和字符串长度计算。
摘要由CSDN通过智能技术生成

第1讲:C语言常见概念

一、C语言简介

1、C语言是一门编译型计算机语言,C语言源代码都是文本文件,文本文件本身无法执行,必须通过编译器翻译和链接器的链接,生成二进制的可执行文件,可执行文件才能执行。

注:

  1. 每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj为后缀的文件)
  2. 多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)

二、main函数的三种表达形式:

1、int型

int main(){

return 0;

}

或者

int main(void){

return 0;

}

2、void型

void main(){

}

3、含参型

int main(int argc,char* argv[]){

return 0;

}

例题1:

三、关键字

1、auto break case char const continue default do double else enum extern

2、float for goto if int long register return short signed sizeof static

3、struct switch typedef union unsigned void volatile while

4、注意:typedef是关键字,但是define不是关键字!

注:在C99标准中加入了inline 、restrict 、_Bool 、_Complex 、_Imaginary 等关键字。

四、ASCLL码表

1、字符A-Z的ASCII码值从65-90

2、字符a-z的ASCII码值从97-122

3、对应的大小写字符(a和A)的ASCII码值的差值是32 大写字母+32=小写字母

4、数字字符0-9的ASCII码值从48-57

5、换行 \n 的ASCII值是:10

6、在这些字符中ASCII码值从0-31,这32个字符是不可打印字符,无法打印在屏幕上观察

五、专题:处理输出多少个数字就换行的通解

#include 

int main() {

 /*

 打印全部可见字符,十六个一换行

 */

 //方法一:

 for (int i = 32; i 

  printf("%c ", i);

  if ((i - 31) % 16 == 0)

   printf("\n");

 }

 printf("\n\n---------------------------------\n\n");

 //或者,

 for (int i = 32; i 

  printf("%c ", i);

  if ((i - 32) % 16 == 15)

   printf("\n");

 }

 printf("\n\n---------------------------------\n\n");

 /*

 然而似乎不需要减去那么大,对于取余计算来说,如果想把取余结果从0或1开始,

 并不需要将初始值减成0或1,只需要“减”或者“加”到取余号%后面那个数字的

 倍数或者那个数字的倍数+1,就可以保证取余结果从0或1开始了,比如此题目初

 始值就是号%后面那个数字的倍数,本身就是从0开始的,因此只需要-0,就可以保

 证取余结果从0开始了,也可以-15或者+1,也可以保证取余结果从1开始了。

 */

 //方法二:

 for (int i = 32; i 

  printf("%c ", i);

  if ((i-0) % 16 == 15)

   printf("\n");

 }

 printf("\n\n---------------------------------\n\n");

 //或者

 for (int i = 32; i 

  printf("%c ", i);

  if ((i - 15) % 16 == 0)

   printf("\n");

 }

 printf("\n\n---------------------------------\n\n");

 //或者

 for (int i = 32; i 

  printf("%c ", i);

  if ((i + 1) % 16 == 0)

   printf("\n");

 }

 printf("\n\n---------------------------------\n\n");

 /*

 其实通过前两个方法,我们发现了一个本质,在“==”左侧我们努力的在凑0或者1,

 而在等号右侧,我们努力在凑0或者1的上一位数字,因为取余运算是循环的,所以

 0的上一位就是“%后面那个数字-1”,那我们是不是可以不再追求0或者1,而是将

 初始值直接取余作为“基准”,只要保证“==”右侧是“基准”的上一个数字,就

 可以了呢?于是我们拥有了方法三。

 */

 for (int i = 32; i 

  printf("%c ", i);

  if (i % 16 == 15)

   printf("\n");

 }

 printf("\n\n---------------------------------\n\n");

以上的输出结果均为:

 /*

 综上所述,我们找到了最简洁的方法三,之后遇到类似模式我们就可以直接使用方法三

 了,接下来,重新出一道题,只需要用方法三解决就可以了。

 */

 /*

 输入正整数a,num,count,其中a是整数的开始,num是要输出整数的个数,count是每多少

 个数字就换行

 */

 int a, num, count = 0;

 printf("请输入a,num,count:\n");

 scanf("%d %d %d",&a, &num, &count);

 for (int i = a; i < a + num; i++) {

  printf("%d  ", i);

  if (a % count!= 0) {

   if (i % count== a % count - 1)

    printf("\n");

  }

  else {

   if(i % count == count-1)

    printf("\n");

  }

 }

 return 0;

}

  • 运行结果1

(1)输入:71 32 13

(2)输出:

  • 输出结果2

(1)输入:71 32 13

(2)输出:

六、字符串

1、使用双引号括起来的一串字符就被称为字符串,如:"abcdef",使用单引号括起来就是字符,如:'a'、'6'、'D'等等

2、\0是字符串的结束标志。所以我们在使用库函数printf()打印字符串或者strlen()计算字符串长度的时候,遇到\0的时候就自动停止了。strlen()不包括\0

3、strlen()的返回值是size-t,应使用%zd

4、C语言中也可以把一个字符串放在一个字符数组中,我们在这里利用下面的代码验证一下\0 的功能

这样的代码,我调试的时候,观察一下arr1 和arr2 的内容:

运行结果:

我们可以看到, arr1 字符数组在打印的时候,打印了a 、b 、c 后还打印了一些随机值,这就是因为arr1 在末尾的地方没有\0 字符作为结束标志,在打印的时候没有停止。但是arr2 的打印就是完全正常的,就是因为arr2 数组是使用字符串常量初始化的,数组中有\0作为技术标志,打印可以正常停止。

如果我们在arr1数组中单独放一个 '\0' 字符会怎么样呢?

看到三次打印的结果是一样的了,都是打印到\0 的时候就停止了,那从上述的例子我们确实能够观察到\0 的作用和重要性的。

5、关于"abc"和{'a','b','c'}的strlen的区别

#include 

#include 

int main(){

 char arr1[] = "abcdef";

 char arr2[] = { 'a','b','c','d','e','f' };

 char arr3[] = { 'a','b','c','d','e','f','\0'};

 printf("arr1=%zd,arr2=%zd,arr3=%zd", strlen(arr1), strlen(arr2), strlen(arr3));

 return 0;

}

运行结果:

七、转义字符

1、C语言中转义字符有很多,具体如下:

2、下面2种转义字符可以理解为:字符的8进制或者16进制表示形式

3、代码演示:

4、转义字符在strlen()中只占一个字符

例题1:

5、\b:退格键,光标回退一个字符,但不删除字符。但是后续若继续有字符,则会覆盖,但是不影响strlen对它测量时,仍然正常算作1个字符。

例子:

#include 

int main(){

 printf("abcd\befg\n");

 printf("abcd\b\n");

return 0;

}

运行结果:

  • 29
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值