第二章 C语言概述

1. 解析第一个C程序

一个基本的程序结构包含如下部分:

#include<stdio.h> // 包含另一个文件,C编译器软件包的标准部分,提供键盘输入和屏幕输出的支持。
/**#include 指令和头文件* 是一条C预处理器指令(preprocessor directive),C编译器在编译前会对源代码做一些准备,即预处理(preprocessing)。** stdio.h 文件的含义是标准输入/输出头文件。通常,在C程序顶部的信息集合被称为头文件(header)。*/int main(void) /*一个简单的C程序*/
/** main()函数* C程序一定要从main()函数开始执行,除了main()函数,可以任意命名其他函数。圆括号是用于识别main()是一个函数。*/
{/** 花括号、函数体和块* {*  ...* }* * 所有的C函数都使用花括号标记函数体的开始和结束。* 不能省略*/int num; /**声明一个名为num的变量,int是C语言的一个关键字(keyword),表示一种基本的C语言数据类型,* num是一个标识符(identifier),也就是一个变量、函数或其他实体的名称。* */num = 7; /*为num赋一个值*/printf("I'm a simple "); /*使用printf()函数*/printf("Computer .\n");printf("My favorite number is %d . \n",num); /*换行符是一个转义序列,转义序列用于代码难以表示或无法输入的字符,如 \t 代表 Tab键*/return 0;
} //结束

程序由一个或多个函数组成,必须有main() 函数。

函数由 函数头函数体 组成。

  • 函数头包含函数名、传入函数的信息类型和函数的返回类型
  • 函数体被花括号括起来,由一系列语句、声明组成。

2. 提高程序可读性的技巧

  • 使用有意义的变量名和函数名
  • 使用注释(模块太大时备注说明)
  • 在函数中用空行分隔概念上的多个部分。
  • 每条语句各占一行

    分行易读,配合分号,可以更好确定语句开始和结束。

3. 调试程序

Bug:程序的错误
调试(Debug):找出并修正程序错误的过程。

3.1 语法错误

不遵循C语言的规则,把有效的C符号放在正确的位置。

一般使用 编译器(gcc) 时会报错,一般情况下,报错的位置比实际错误位置要滞后一行。

3.2 语义错误

编译器检测不到语义错误,因为这类错误未违反C语言的规则。

遵循C规则,但结果不正确的错误属于语义错误。

3.3 程序状态

程序状态:在程序的执行过程中,某给定点上所有变量值的集合。

跟踪程序状态的3个方法

  • 自己模拟计算机逐步执行程序。

    小部分程序实用,大型程序不适合。

  • 在程序中的关键点插入额外的printf() 语句,以监视制定变量值的变化。
  • 使用调试器

    Linux环境中,C和C++一般使用GDB调试器

4. 关键字和保留标识符

关键字由于特殊的含义,故不能用作标识符。

如果使用关键字不当(如,关键字用作变量名),编译器会将其视为语法错误。

保留标识符包括以下划线字符开头的标识符和标准库函数名,如printf() 。

5. 复习题

1.C语言的基本模块是什么?

基本模块和用户自定义模块的都称为函数。

2.什么是语法错误和语义错误?

  • 语法错误:违反组成语句或程序的语法规则。例:printf "hello world";

  • 语义错误:含义错误。例:n3 = n2*n

  1. Indiana Sloth编写了下面的程序,并征求你的意见,请帮助他评定。
#include stdio.hint main(void)
(int ss:=56;printf(There are s weeks in a year.);return 0;

程序错误是无法正常运行的。正确的修改如下:

#include <stdio.h>
int main(void)
{int s;s = 56; // 变量赋值方式不正确printf("There are %d weeks int a year.",s);return 0;
}
  1. 假设下面的4个例子都是完整程序中的一部分,他们都输出什么结果?
a. printf("Baa Baa Black Sheep."); /*输出结果为:Baa Baa Black Sheep.Have you any wool?*/printf("Have you any wool?\n");
b. printf("Begone!\nO creature of lard!\n"); /*输出结果为:Begone!此处换行 O creature of lard!*/
c. printf("What?\nNo/nfish?\n"); /*输出结果为:What? 此处换行 No/nfish?*/
d. int num;num = 2;printf("%d + %d = %d",num,num,num+num); /*输出结果为:2 + 2 = 4*/
  1. main、int、function、char、=中,哪些是C语言的关键字?

关键字为:main、int char。

  1. 如何以下面的格式输出变量words和lines的值(例,3020和350代表两个变量的值)?
    There were 3020 words and 350 lines
#include <stdio.h>int main(void)
{int words,lines;words = 3020;lines = 350;printf("There were %d words and %d lines\n",words,lines);return 0;
}
  1. 考虑下面的程序
#include <stdio.h>
int main(void)
{int a,b;a = 5;b = 2; /*第 7 行*/b = a; /*第 8 行*/a = b; /*第 9 行*/printf("%d %d \n",b,a);return 0;
}

请问,在执行完第7、第8、第9行后,程序的状态分别是什么?

  • 执行完第7行,a = 5,b = 2;
  • 执行完第8行,a = 5,b = 5
  • 执行完第9行,a = 5,b = 5
  1. 考虑下面的程序
#include <stdio.h>int main(void)
{int x,y;x = 10;y = 5; /*第 7 行*/y = x + y; /*第 8 行*/x = x * y; /*第 9 行*/printf("%d %d \n",x,y);return 0;
}

请问,在执行完第7、第8、第9行后,程序的状态分别是什么?

  • 执行第7行后,x = 10,y = 5
  • 执行第8行后,x = 10,y = 15
  • 执行第9行后,x = 150,y = 15

6. 编程练习题

  1. 编写一个程序,调用一次printf()函数,把你的姓名打印在一行,再调用一次printf()函数,把你的姓名打印在两行。然后,再调用两次printf()函数,把你的姓名打印在一行。打印形式如下:

    Soler HO 第一次的内容

    Soler 第二次打印

    HO 第三次打印

    Soler HO 第三次 和第四次 打印

#include <stdio.h>int main(void)
{printf("my name is : Soler HO\n");/*第一次打印内容*/printf("my first name is : Soler \n");/*第二次打印 ---- 名字*/printf("my last name is : HO \n"); /*第三次打印 ---- 姓*/printf("total name is : Soler HO \n"); /*第三次和第四次打印*/return 0;
}
  1. 编写一个程序,打印你的姓名和地址
#include <stdio.h>
int main(void)
{char name[] = "Soler HO";char address[] = "Shanghai";printf("my name is %s , Address is %s .\n",name,address);return 0;
}
  1. 编写一个程序,把你的年龄转换成天数,并显示这两个值,不用考虑闰年的问题
/*编写一个程序,把你的年龄转换成天数,并显示这两个值,不用考虑闰年的问题*/
#include <stdio.h>
int main(void)
{int age,days;int oneYear = 365; /*此处默认一年为365天*/printf("please input your age : \n");scanf("%d",&age);days = age * oneYear;printf("you live %d days\n",days);return 0;}
  1. 编写一个程序,生成以下输出:

    For he's a jolly good fellow!
    For he's a jolly good fellow!
    For he's a jolly good fellow!
    Which nobody can deny!
    

除了main()函数以外,该程序还要调用两个自定义函数:一个名为jolly(),用于打印前3条消息,调用一次打印一条:另一个函数名为deny(),打印最后一条消息。

#include <stdio.h>void jolly(void);
void deny(void);int main(void)
{for(int i=1;i<=3;i++)jolly();deny();
}
void jolly(void)
{printf("For He's a jolly good fellow!\n");
}void deny(void)
{printf("which nobody can deny!\n");
}
  1. 编写一个程序,生成以下输出:

    Brazil, Russia, India, China
    India, China,
    Brazil, Russia
    

除了main()以外,该程序还要调用两个自定义函数:一个名为br(),调用一次打印一次"Brazil,Russia";另一个名为ic(),调用一次打印一次"India,China"。其他内容在main()函数中完成。

/*编程练习题05*/
#include <stdio.h>void br(void);
void ic(void);int main(void)
{br();printf(",");ic();printf("\n");ic();printf(",\n");br();printf("\n");return 0;
}void br(void)
{printf("Brazil,Russia");
}void ic(void)
{printf("India,China");
}
  1. 编写一个程序,创建一个整型变量toes,并将toes设置为10.程序中还要计算toes的两倍和toes的平方。该程序应打印3个值,并分别描述以示区分。
#include <stdio.h>int main(void)
{int toes = 10;int twotimes = 2 * toes;int square = toes * toes;printf("origin toes is %d \n",toes);printf("double toes is %d \n",twotimes);printf("square toes is %d \n",square);return 0;
}
  1. 编写一个程序,生成以下格式的输出:

    Smile!Smile!Smile!
    Smile!Smile!
    Smile!
    

该程序要定义一个函数,该函数要被调用一次打印一次“Smile!”,根据程序的需要使用该函数。

#include <stdio.h>void smile(void);int main(void)
{/*具体优化后续重新优化*/for(int i = 3;i>=1;i--)smile();printf("\n");for(int i = 1;i<3;i++)smile();printf("\n");smile();printf("\n");return 0;
}
void smile(void)
{printf("Smile!");
}
  1. 在C语言中,函数可以调用另一个函数。编写一个程序,调用一个名为one_three()的函数。
    该函数在一行打印单词"one",再调用第2个函数two(),然后在另一行打印单词“three”。
    two()函数在一行显示单词“two”。main()函数在调用one_three()函数前要打印短语“starting now:”,
    并在调用完毕后显示短语“done!”。因此,该程序的输出应如下所示:

    starting now:
    one
    two
    three
    done!
    
#include <stdio.h>void one_three(void);
void two(void);int main(void)
{printf("starting Now : \n");one_three(); /*函数嵌套*/printf("Done!\n");return 0;
}
void one_three(void)
{printf("one \n");two();
}void two(void)
{printf("two\n");printf("three\n");
}

C Primer Plus 第02章 C语言概述 学习笔记及复习题、编程题解答相关推荐

  1. 《C Primer Plus》第二章——C语言概述(程序示例与解释,提高程序可读性,函数的定义与使用,调试,关键字,复习题与编程练习)

    文章目录 第二章-C语言概述 本章内容 简单的C程序示例 示例解释 快速概要 程序细节 简单程序的结构 提高程序可读性的技巧 进一步使用C 多个函数 调试程序 语法错误 语义错误 程序状态 关键字和保 ...

  2. 【C语言】C语言从入门到精通|第1章 C语言概述—自学笔记

    前言 本篇是本人自学C语言过程进行编辑的文章笔记,如果对大家有用,点赞加收藏吧. 注:笔记基于<C语言从入门到精通(第3版)>明日科技编著,清华大学出版社出版的. 目录 一.C语言发展史 ...

  3. c语言编译器能不能找出逻辑错误,《C Primer Plus》- 第二章 C语言概述

    本笔记写于2020年1月27日. 本系列文章参考的是<C Primer Plus>(第六版),其中里面会有笔者自己的相关补充. 以下示例均运行于macOS Catalina 10.15.2 ...

  4. 第1章 Java语言概述

    第1章 Java语言概述 声明 0. Java语言应用场景 1. 软件开发介绍 2. 计算机编程语言介绍 3. Java语言概述 4. Java程序运行机制及运行过程 5. Java的环境搭建  5. ...

  5. vc 运行c语言步骤,第1章_C语言概述(vc++环境如何运行c语言程序)[精选].ppt

    第1章_C语言概述(vc环境如何运行c语言程序)[精选] C语言程序设计 授课对象:电子商务06 时间安排: 理论课(1-9周): 星期一 5-6节 9407D 星期三 5-6节 9410D 实验课( ...

  6. 【JAVA SE】第一章 Java语言概述、环境变量和HelloWorld

    第一章 Java语言概述.环境变量和HelloWorld 文章目录 第一章 Java语言概述.环境变量和HelloWorld 一.Java语言概述 1.Java简介 2.Java发展历史 3.Java ...

  7. c语言i=5.6a=(int)i,第一章C语言概述.ppt

    <第一章C语言概述.ppt>由会员分享,可在线阅读,更多相关<第一章C语言概述.ppt(35页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计,课程安排和理论教学:(419 ...

  8. 上海电机学院c语言,上海电机学院第1章_C语言概述.ppt

    上海电机学院第1章_C语言概述 第一章 本章要点 C语言的特点 C程序的结构 在计算机上运行C程序的方法 主要内容 1.1 计算机与程序.程序设计语言1.2 C语言出现的历史背景 1.3 C语言的特点 ...

  9. [转载] 《python程序设计应用教程》第一章 python语言概述

    参考链接: Python语言的优势和应用 第一章 python语言概述 1.1 python语言简介 ① 众多的开源的科学计算软件包都提供了python的调用接口,例如:计算机视觉库OpenCV.三维 ...

最新文章

  1. UE商城资源 Motion Symphony 运动匹配插件
  2. nginx http 服务器搭建
  3. ubuntu 14.04 no valid active connections found
  4. 只显示小方格_木托盘拼成院子围栏,镂空方格里都种上菜,一物两用,收获满满...
  5. python二维数组遍历输出每行最大值_如何在二维数组中找到每行的最大值?
  6. log4net日志文件的应用
  7. 波卡生态预言机ROOM上线Uniswap,最高涨幅达862%
  8. 跟我学习dubbo-ZooKeeper注册中心安装(2)
  9. 黑盒测试的测试方法及其案例
  10. java舆情分析_基于Java实现网络舆情分析系统的研究与实现
  11. 小米一键解锁system分区_不要浪费小米10的双扬声器!杜比全景音刷入教程分享...
  12. 这些曾盛极一时的经典软件,现在再看,还是记忆犹新
  13. Hexo博客美化之蝴蝶(butterfly)主题魔改
  14. 量子纠缠在量子计算机中的作用,解密量子计算机,量子叠加和量子纠缠是制胜关键...
  15. matlab里方框一个叉号,Word输入×叉号和方框打叉方法
  16. pyltp的初始化报错:segmentor = Segmentor() # 初始化实例TypeError: __init__(): incompatible constructor argument
  17. 不用深度学习网络,只需预先设置NAS算法,就能实现AutoML自动机器学习的革命吗?
  18. 压缩png命令cmd_使用pngquant工具对PNG格式图片进行压缩
  19. 服务器和工作站有什么区别?
  20. 终极音频增强软件 SRS Audio Sandbox 特别版

热门文章

  1. html中怎样写渐变色代码,如何用CSS写渐变色
  2. SpringCloud微服务使用Feign如何暴露接口并整合SpringBoot测试
  3. python界面设计
  4. 常用服务器查询日志命令(持续添加)
  5. python连通域提取 原理_连通域的原理与Python实现
  6. 公众号网课搜题系统-掘光者题库
  7. 国赛学习——5种数学规划模型
  8. LightOJ 1274 Beating the Dataset
  9. learn language Part-One
  10. maximo自动发送工作流