C语言拯救者 (关键字--2)

目录

一.字符串

下面代码的结果是:( )

二.关键字

1.C语言关键字:C语言定义的,具有特定含义、专门用于特殊用途的C语言标识符,也称为保留字

练习1.判断2个数的大小

练习2.总成绩和平均分计算

练习3.反向输出一个四位数

  static修饰局部变量


一.字符串

C语言规定:以'\0'作为有效字符串的结尾标记

数组的下标是从0开始的。

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

strlen:获取字符串的有效长度,不包括'\0'

"c:\test\121": 在该字符串中,\t是转移字符,水平制表,跳到下一个tab的位置;而\121表示一个字符,是讲121看做8进制数组,转换为10进制后的81,作业为ASCII码值的字符,即:字符'Q' ,故上述字符串实际为:"c esty",只有7个有效字符

'\n' 转义字符,代表换行

'\060' 转义字符,060八进制数据,十进制为48,表示ASCII码为48的'0'

'\b' 转义字符,表示退格


下面代码的结果是:( )

#include <stdio.h>
#include <string.h>

int main()
{
    char arr[] = {'b', 'i', 't'};
    printf("%d\n", strlen(arr));
	return 0;
}

strlen是用来获取字符串的有效长度的,结尾标记'\0'不包含在内。

strlen获取的规则非常简单:从前往后依次检测,直到遇到'\0'是就终止检测。

而上体中arr是一个字符数组,不是一个有效的字符串,因为后面没有放置'\0',因此strlen在求解时,将有效字符检测完之后,还会继续向后检测,直到遇到'\0'是才终止,因此答案为不确定,就看紧跟在't'之后的第一个'\0'在什么位置。


二.关键字

C语言定义的,具有特定含义、专门用于特殊用途的C语言标识符,也称为保留字

关键字具有特殊含义,不能作为变量名

(其中define不是关键字,是编译器实现的,用来定义宏的预处理指令,不是C语言中的内容。)

例题


用在switch语言中的关键字不包含哪个?



  A.continue
  B.break
  C.default
  D.case
  
  答案是A

  switch是用来进行多分支选择的语句,一般结构是:

  switch(变量表达式)

  {

    case xx1:

     // ...

     break;

    case xx2

     // ...

     break;

    default:

      // ...

  }

  

当变量表达式的内容与某个case后的常量相等后,就执行该case下的语句
break表示该case以后的内容不会执行,如果没有跟break,会继续执行当前case之后的case分支。

当变量表达式的内容没有与那个case匹配,就会执行default下的内容。

switch中常用的关键字:case 、break、 default,当然case中语句比较复杂时,可能会用if进行判断。

continue是用来结束本次循环的,而switch不是循环,因此其中不能使用continue关键字。

练习1.判断2个数的大小

#include <stdio.h>
int main()
{
    int a, b;
    while (scanf("%d%d", &a, &b) != EOF)
    {
        if (a > b)
            printf("%d>%d\n", a, b);
        else if (a < b)
            printf("%d<%d\n", a, b);
        else
            printf("%d=%d\n", a, b);
    }
    return 0;
}

练习2.总成绩和平均分计算

%3.2f意思

%m.nf
m - 决定了输出数据的总长度,如果输出数据的总长度没有指定输出的长,则在数据的左侧用空格补上。如果大于或等于输出的长度则不用。

n - 决定小数点输出的位数,末位四舍五入。如果数据的小数位小于指定的位数,则末尾补0。

int main()
{
    float a=0;
    float b=0;
    float c=0;
    scanf("%f %f %f",&a,&b,&c);
    float ret=a+b+c;
    float Average=(a+b+c)/3;
    printf("%3.2f ",ret);
    printf("%3.2f",Average);
    
     
    return 0;
}

练习3.反向输出一个四位数

例如n=1234,首先1234%10=4,n除10=123.         123%10=3,123除10=12

循环下去直到n=0,循环结束打印4 3 2 1

#include <stdio.h>
void Nixu(int n)
{
    while(n)
    {
    printf("%d",n%10);
    n/=10;
    }
   
}
int main()
{
    int n=0;
    scanf("%d",&n);
    Nixu(n);
    return 0;
}

C语言中,0表示假,非0表示真

//#define 定义常量

#define MAX 1000

#define STR "hello world"

int main()
{
	int m = MAX;
	printf("%d\n", m);/1000
	printf("%s\n", STR);/hello world
	return 0;
}

static修饰局部变量



void test()
{
	static int a = 5;
	a++;
	printf("%d ", a);
}

int main()
{
	int i = 0;
	while (i<10)
	{
		test();
		i++;
	}

	return 0;
}


static修饰局部变量,延长生命周期

static修饰局部变量的时候,局部变量就变成了静态的局部变量出了局部的范围,不会销毁

下一次进入函数依然存在其实是因为: static修饰的局部变量是存储在静态区的static修饰局部变量时,实际改变的是变量的存储位置

本来一个局部变量是放在栈区的,被static修饰后放在了静态区。从而导致,出了作用域依然存在,生命周期并没有结束。

  • 42
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北方留意尘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值