1_导言【C程序设计语言笔记】

文章目录

  • 1.1 入门
  • 1.2 变量与算术表达式
  • 1.3 for语句
  • 1.4 符号常量
  • 1.5 字符输入/输出
    • 1.5.1 文本复制
    • 1.5.2 字符计数
    • 1.5.3 行计数
    • 1.5.4 单词计数
  • 1.6 数组
  • 1.7 函数
  • 1.8 参数——传值调用
  • 1.9 字符数组
  • 1.10 外部变量与作用域

1.1 入门

C语言程序组成:函数和变量

每个程序都从main函数的起点开始执行

标准输入/输出库

调用函数时,只需要使用函数名加上用圆括号括起来的参数表即可

字符串或字符常量:用双引号括起来的字符序列

printf函数永远不会自动换行

1.2 变量与算术表达式

所有变量必须先声明后使用,声明通常放在函数起始处

int通常为16位,取值范围在 − 32768 − − + 32767 -32768--+32767 32768+32767之间

float通常为32位,至少有6位有效数字,取值范围在 1 0 − 38 — — 1 0 38 10^{-38}——10^{38} 10381038之间

long至少要占用32位存储单元

整数除法操作将执行舍位,结果中的任何小数部分都会被舍弃

如果在printf语句的第一个参数的%d中指明打印宽度,如%3d,则打印的数字会在打印区域内右对齐

如果某个算术运算符有一个浮点型操作数和一个整型操作数,则在开始运算之前整型操作数将会被转换为浮点型

printf中的转换说明==%3.0f==表明待打印的浮点数至少占3个字符宽,且不带小数点和小数部分

1.3 for语句

for (a = 0; a <= 10; a = a + 1)
{
    循环体;
}

第一部分

a = 0

是初始化部分,仅在进入循环前执行一次

第二部分

a <= 10

是控制循环的条件部分。如果结果为真,则执行循环体,然后执行第三部分;如果结果为假,则退出循环

第三部分

a = a + 1

将循环变量a增加1,再对条件求值

1.4 符号常量

#define指令可以把符号名(符号常量)定义为一个特定的字符串:

#define 名字	替换文本

1.5 字符输入/输出

一次读/写一个字符的函数:getchar()和putchar()

getchar():

每次调用时,getchar函数从文本流中读入下一个输入字符,并将其作为结果值返回。

在执行语句

c = getchar();

之后,变量c中将包含输入流中的下一个字符

putchar():

每次调用时,putchar函数将打印一个字符。

在执行语句

putchar(c);

之后,将把整型变量c的内容以字符的形式打印出来,通常是显示在屏幕上

1.5.1 文本复制

把输入一次一个字符地复制到输出,基本思想


读一个字符

while(该字符不是文件结束指示符)

​ 输出刚读入的字符

​ 读下一个字符


c = getchar();
while((c=getchar()) != EOF){
    putchar(c);
    c=getchar();
}

如何区分文件中有效数据与输入结束符?

​ C语言方法:在没有输入时,getchar函数返回一个特殊值EOF(end of file)。

c声明为int而不是char的原因

​ 为了能存储任何可能的字符外,还要能存储文件结束符EOF

1.5.2 字符计数

/*字符计数*/
long nc;
nc = 0;
while(getchar() != EOF)
    ++nc;
printf("%ld\n", nc);

改用for循环:

double nc;
for(nc = 0; getchar() != EOF; ++nc)
    ;
printf("%.0f\n", nc);

%.0f强制不打印小数点和小数部分

单独的分号称为空语句

1.5.3 行计数

/*行计数*/
int c, nl;
nl = 0;
while((c = getchar()) != EOF)
    if(c == '\n')
        ++nl;
printf("%d\n", nl);

=表示赋值运算符,==表示相等的逻辑关系

单引号中的字符表示一个整型值,该值等于此字符在机器字符集中对应的数值,称之为字符常量

1.5.4 单词计数

/* 统计输入的行数、单词数与字符数*/
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while((c = getchar()) != EOF){
    ++nc;//字符数
    if(c == '\n')
        ++nl;//行数
    if(c == ' ' || c == '\n' || c == '\t')
        state = OUT;
    else if(state == OUT){
        state = IN;
        ++nw;//单词数
    }
}

1.6 数组

数组下标总是从0开始的

1.7 函数

函数为计算的封装提供了一种简便的方法,此后使用函数时不需要考虑它是如何实现的

函数定义的一般形式

返回值类型 函数名(0个或多个参数声明)

{

​ 声明部分

​ 语句序列

}

函数的参数使用的名字只在函数内部有效,对其他任何函数都是不可见的:其他函数可以使用与之相同的参数名字而不会引起冲突

形式参数:函数定义中圆括号内列表中出现的变量

实际参数:函数调用中与形式参数对应的值

函数不一定都有返回值。不带表达式的return语句将把控制权返回给调用者,但不返回值

main函数中包含return语句是为了注意:程序要向其执行环境返回状态

函数原型中的参数名是可选的

1.8 参数——传值调用

所有函数参数都是通过值传递的,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中,被调用函数不能直接修改主函数中变量的值,而只能修改其私有的临时副本的值

1.9 字符数组

字符串常量,以字符数组的形式存储,数组的各元素分别存储字符串的各个字符,并以’\0’标志字符串的结束

调用getline函数的程序无法预先知道输入行的长度,因此getline函数需要检查是否溢出

1.10 外部变量与作用域

自动变量:函数中的每个局部变量只在函数被调用时存在,在函数执行完毕退出时消失

可以定义位于所有函数外部的变量,在所有函数中都可以通过变量名访问这种类型的变量,使用extern语句显式声明

外部变量必须定义在所有函数之外,且只能定义一次,定义后编译程序将为它分配存储单元

某些情况下可以省略extern声明。在源文件中,如果外部变量的定义出现在使用它的函数之前,那么在那个函数中就没有必要使用extern声明

定义与声明的区别

定义:表示创建变量或分配存储单元

声明:指的是说明变量的性质,但并不分配存储单元

过度依赖外部变量会导致一定的风险,因为它会使程序中的数据关系模糊不清——外部变量的值可能会被意外地修改,而程序的修改又变得十分困难

你可能感兴趣的:(C语言)