第二章 C语言概述

第二章 C语言概述

1. 简单的C程序示例

cat first.c
#include <stdio.h>
int main(void)
{
    
    int num;
    num = 1;

    printf("I am a simple ");
    printf("Computer. \n");
    printf("My favorite number is %d besause it is first.\n",num);

    return 0;
}

编译执行:

[root@hans ~]# gcc -o first first.c 
[root@hans ~]# ls -rlt first
-rwxr-xr-x 1 root root 8536 Aug  5 08:30 first
[root@hans ~]# ./first 
I am a simple Computer. 
My favorite number is 1 besause it is first.

C程序剖析

image

2. 程序剖析

​ C程序包含一个或多个函数,它们是C程序的基本模块。

​ /* */ C语言中的注释,/* 和*/之间是注释的内容。注释只是为了帮助读者理解程序,编译器会忽略它们。

#include <stdio.h>   /*这是程序的第1行,把stdio.h文件中的所有内容都输入该行所在的位置,#include这行代码是一条C预处理器指令(preprocessor directive).所有的C编译器都提供stdio.h文件,该文件包含了供编译器使用的输入和输出函数,该文件名的含义是标准输入输出头文件。*/
int main(void)  /*主函数,C程序一定是从main()函数开始执行,除了main函数外还可以随意命名其他函数,但main()函数必须是开始函数
int是main()函数返回类型,表明main()函数返回的值是整数。函数名后面的圆括号中包含一些传入函数的信息,本例中没有传递任何信息。因此为void。*/
{   /*花括号里面是函数体,所有的C函数都使用花括号标记函数整体的开始和结束,不能省略,而且必须是成对出现,这是开始*/
    
    int num; /*变量声明,表示设置一个变量num,它是int类型。
    int是C语言中的一个关键字(keyword),表示C语言中数据类型,在C语言中所有的有变量都必须先声明才能使用,变量命名时要使用有意义的变量名或标识符。
    C99和C11允许使用更长的标识符名,但是编译器只识别前63个字符。对于外部标识符只允许使用31个字符。
    可以用小写字母、大写字母、数字和下划线(_)来命名,而且第一个字符必须是字符或下划线,不能是数字。*/
    num = 1;/*赋值,可以给num赋不同的值,但是赋得值必须都是int类型。赋值表达式语句从右侧把值赋到左侧*/

    printf("I am a simple ");/*printf函数,利用printf函数把传递给printf函数的信息输出。()内的内容为参数,这种有特定值的为实参,形参是函数中用于保存值的变量*/
    printf("Computer. \n");
    printf("My favorite number is %d besause it is first.\n",num);/*%d为占位符,表明要在这里打印一个变量,d表明变量为十进制整数*/

    return 0; /*int main(void) 表明main()函数执行完后返回一个整数,有返回值的C函数要有return语句,该语句以return为关键字开始,后面是待返回的值。并以分号结尾*/
} /*函数结束*/

声明变量的4个理由:

  • 把所有的变量放在一处,方便读者查找和理解程序的用途
  • 声明变量会促使你在编写程序之前做一些计划
  • 声明变量有助于发现隐藏在程序中的小错误,如变量名拼写错误。
  • 如果事先未声明变量,C程序将无法通过编译。

C99之前的标准要求把声明都置于块的顶部,好处是把声明放在一起更容易理解程序的用途。C99允许在需要时才声明变量,好处是在给变量赋值之前声明变量就不会忘记给变量赋值。

2.1 提高程序可读性的技巧

  1. 选择有意义的函数名
  2. 程序要写注释
  3. 在函数中用空行分隔概念上的多个部分。
  4. 每条语句各占一行。

2.3 打印多个值

#include <stdio.h>
int main(void){
	printf("There are %d feet in %d fathoms\n", 12, 2);
	return 0;
}

2.4 多个函数

#two_func.c
#include <stdio.h>
void butler(void); /*函数原型,C90标准新增。*/
int main(void){
	printf("I will summon the butler function.\n");
    butler();
    printf("Yes. Bring me some tea and writeable DVDs.\n");
    
    return 0;
}
void butler(void){  /*没有返回值也没有任何参数*/
    printf("You rang, sir?\n")
}
/* 
butler()函数的执行主要看在main()中什么位置调用,而不是butler()函数在什么位置.
如果写了函数原型:void butler(void),则butler()函数放在什么位置都可以。如果没有写,则butler()函数的定义一定要在调用它的函数的前面。
如果程序这样写则会在编译时报错:
#include <stdio.h>
/*void butler(void); 把这个函数原型注释掉*/
int main(void){
	printf("I will summon the butler function.\n");
    butler();
    printf("Yes. Bring me some tea and writeable DVDs.\n");
    
    return 0;
}
void butler(void){  /*没有返回值也没有任何参数*/
    printf("You rang, sir?\n")
}
*/

2.5 关键字和保留标识符

ISO C关键字

auto extern short while
break float signed _Alignas
case for sizeof _Alignof
char goto static _Atomic
const if struct _Bool
continue inline switch _Complex
default int typedef _Generic
do long unio _Imaginary
double register unsigned _Noreturn
else restrict void _Static_assert
enum return volatile _Thread_local

如果使用关键字不当,编译器会将其视为语法错误。这些都不要用来做变量名。

3 编程练习

  1. 按格式打印名字

    #include <stdio.h>
    
    int main(void){
        printf("Hans Wang\n");
        printf("Hans\nWang\n");
        printf("Hans");
        printf(" Wang\n");
    }
    
    #gcc -o name name.c
    #./name
    Hans Wang
    Hans
    Wang
    Hans Wang
    
  2. 打印姓名和地址

    #include <stdio.h>
    int main(void){
        printf("name: Hans Wang\n");
        printf("address: ShanDong HeZe\n");
        
        return 0;
    }
    
  3. 把年龄转换成天数,并显示这两个值,不考虑闰年

    #include <stdio.h>
    
    int main(void){
        int age;
        int day = 365;
        int days;
    
        printf("Please input your age:");
        scanf("%d", &age);
    
        days = age * day;
    
        printf("Your age is %d,equel %d days.\n",age,days);
    
        return 0;
    }
    
  4. 生成指定输出,除main()函数外还要调用两个自定义函数

    #include <stdio.h>
    void jolly(void);
    void deny(void);
    
    int main(void){
       jolly(); 
       jolly(); 
       jolly(); 
       deny();
        return 0;
    }
    
    void jolly(void){
        printf("For he's a jolly good fellow!\n");
    }
    void deny(void){
        printf("Which nobody can deny!\n");
    }
    
  5. 生成指定输出

    #include <stdio.h>
    void br(void);
    void ic(void);
    
    int main(void){
        br();
        ic();
        printf("India,China,\n");
        printf("Brazil,Russia\n");
    }
    
    
    void br(void){
        printf("Brazil,Russia,");
    }
    void ic(void){
        printf("India,China\n");
    }
    
  6. 编写程序创建整型变量,计算变量的两位和平方。

    #include <stdio.h>
    
    int main(void){
    
        int toes;
        toes = 10;
        
        int toes2;
        int toes_double;
        toes2 = 2 * toes;
        toes_double = toes * toes;
        
        printf("toes = %d\ntoes2 = %d\ntoes_double = %d\n", toes, toes2, toes_double);
    
        return 0;
    }
    
  7. 生成指定输出simle。

    #include <stdio.h>
    
    void smile(void){
        printf("Smile!");
    }
    
    int main(){
        smile();
        smile();
        smile();
        printf("\n");
        smile();
        smile();
        printf("\n");
        smile();
        printf("\n");
    
        return 0;
    }
    
  8. 写一个程序,在函数中调用另一个函数

    #include <stdio.h>
    
    void one_three(void);
    void two(void);
    
    int main(){
        printf("starting now:\n");
        one_three();
        printf("done!\n");
        return 0;
    }
    
    void one_three(void){
        printf("one\n");
        two();
        printf("three\n");
    }
    
    void two(void){
        printf("two\n");
    
    }
    
posted on 2021-11-28 10:27  Hans_Wang  阅读(359)  评论(0编辑  收藏  举报

回到顶部