C语言学习之路

文章介绍了C语言的基础知识,从helloworld程序开始,探讨了注释、库的使用、数据类型(如浮点型和字符串)、表达式和运算符,以及程序设计中的规约论和整体论观点。
摘要由CSDN通过智能技术生成

C语言的科学和艺术

The Art and Science of C

第二章 通过例子学习



前言

观察一个C语言基础程序hello world的源程序来了解C语言的结构;
理解库作为简化程序设计过程的工具盒的重要性,知道简单库与利用库完成输入输出;
程序组成:输入、计算、输出;
理解程序中变量用于保存数据的作用;
了解数据类型与利用程序算术表达式。


一、"hello world"程序

代码如下:

/*
 *File: hello.c
 *-------------
 *This program prints the message "Hello, world.”
 *on the screen. The program is taken from the
 *classic C reference text "The C Programming
 *Language" by Brian Kernighan and Dennis Ritchie.
 */
 //注释
 
#include <stdio.h>
#include "genlib.h"
//库包含列表

main()
{
	printf("hello, world.\n");
}
//主程序

1.1 注释

可读性的保障,对机器无影响,对程序或语句的解释
长注释 /* 程序注释 */ 或单行注释 // 程序注释

1.2 库包含

头文件形式提供库的引用
#include <stdio.h> 标准输入输出(< >)
#include “genlib.h” 扩展库(或个人库“ ”)

基础功能工具的集合,对库的引用,方便简化程序设计,不用在基础的程序需求上重复造轮子

1.3 主程序

函数 程序步骤的集合
main()
{
}
语句 程序执行步骤
printf(“hello, world.\n”);
函数主体 由所有语句共同构成
调用库函数 printf( ) 声明过函数所在库#include <stdio.h> 后使用函数名即可引用
参数 “hello, world.\n” 字符串 即为 数据: 程序所操作的信息
换行字符 \n 相当于键盘的 Enter 键位

二、两个数的加法程序

代码如下:

/*
 *File: add2.c
 *-------------
 *This program reads in two numbers, adds them together
 *and prints their sum.
 */
#include <stdio.h>
#include "genlib.h"
#include "simpio.h"

main()
{
	int n1, n2, total;//变量声明
	
	printf("This program adds two numbers.\n");
	printf("1st number?");
	n1 = GetInteger();
	printf("2nd number? ");
	n2 = GetInteger();
	total = n1 + n2;
	printf("The total is %d.\n", total);
}

1.输入

提示消息:程序在screen上显示一个学校的使得用户了解程序需要什么,如下:
printf(“This program adds two numbers.\n”);
printf(“1st number?”);
赋值语句:将等号右边的数值存储于等号左边的变量中;
n1 = GetInteger();//对GetInteger函数的调用,返回用户输入的数值,存储输入的整数信息到变量n1中

2.计算

计算通过表达式来指定数据的必须操作步骤,表达式的结果由赋值语句存储在一个变量中,以便后续操作
total = n1 + n2;

3.输出

printf(“The total is %d.\n”, total);
%d 格式码 作为printf函数中的作用为值的占位符,输出过程中对应的值将被插入到该位置,%d对应数据类型为十进制整数
输出为 The total is _____. ——>The total is total. 即返回total存储的值。
也例如有:
printf(“%d + %d = %d\n”, n1, n2, total);
即输出 对应 n1 + n2 = total,其中各个变量名位置为各自存储的值输出

程序设计的观点

规约论(reductionism):

只有理解一个事物的每个组成部分后才能很好地理解该事物,对程序设计来说是对程序逐句分析,从每个独立部分的层面上理解程序;

整体论(holism):

认为整体并非每一部分的简单叠加,从作为一个整体的层面理解事物,对程序设计来说是从整体考虑功能设计等;

二者在设计程序时都要同时运用,只看整体,则不能理解解决问题的工具;只看细节,则无法对程序实际需求与功能设计有相当的敏感性,明白程序是干什么的。

三、数据类型

如各种数字类型或文字类型从字符到字、句、段等,程序中处理使用输出的各种信息统称为数据(data)
使用数据时,C编译器需要知道其数据类型。

数据类型(data type) 整体上由以下两个性质定义:
1.值的集合,即值域(domain)
2.操作的集合
值域是数据类型的元素的值的集合;操作集由操作该数据类型的值的工具构成;

浮点型数据

包含小数部分的数值称为浮点数(floating-point number),用来近似表示数学中的实数;
float是早期C语言中定义的浮点数类型,现在普遍使用double型,为双精度浮点数,精度是float型的两倍;

double n1, n2, total;//数据声明

n1 = GetReal();//取实数

printf("The total is %g.\n", total);//浮点数对应的格式码

如上代码,变量数据类型的改变点,其中格式码,浮点数有多种格式码,最简单的是用 %g

字符串类型的数据

文本数据的最基本元素是字符,C语言中一般由 ‘ ’ 单引号内单个字符表示,字符组合起来为一个连续单元时为字符串,C语言中一般由 " " 双引号内表示;
以操作和存储数值数据的方法类似来处理字符串,是计算机文本数据处理的重要思想;
string类型 (不用区分是语言定义还是库定义,定义细节不重要,会用就行)
一样的可以变量声明,与输入输出

string name;//数据声明

name = GetLine();//取字符串

printf("My name is %s.\n", name);//字符串对应的格式码

四、表达式

表达式(expression)运算符组成:
项(trem) 表示一个单独的数据值;
项的选择必须是如下之一:
常量 一个明确的数值
变量 数据的存放处,内容可在程序执行期间改变
函数调用
括号中的表达式
运算符(operator) 是一个表示运算的字符或一个字符序列

求值 即执行表达式中每一个特定操作的过程

n1 + n2 //一个表达式

常量

整型常量
浮点型常量 带有小数点,还可以用作科学计数法表示,即用浮点数乘10的整数次幂来表示,如光速近似2.9979x10*8,C语言中写作

2.9979E+8//E代表乘以10的指数次幂

字符串常量 C语言中一般将组成字符串的字符由 " " 双引号括在其内表示;

"hello, world.\n"

变量

变量是一个值的存放处,有三个重要属性:
名称 具有命名规则:
字母或下划线开头,区分字母大小写;
名称字符必须是字母、数字或下划线,不能使用空格和其他特殊符号;
名称不能取用关键字(keyword),关键字都在C语言中有特殊作用;
变量名可以任意长度 ,但C编译器只认为前31个字符有意义;
变量名最好具有可读性,能让人容易明白存储的值是什么

类型

赋值语句

变量 = 表达式;

variable = expression;

这里的 = 不是数学意义上的等于,而是赋值操作

运算符和操作数

表达式中实际的运算是由连接各项的运算符表示的,其中最简单的运算符是数学表达式中的运算符,采用的是算数中的标准运算符。适用于所有数字型数据的算术运算符为:

  • + 加法
    
  • - 减法(若左边无值则为负号)
    
  • * 乘法
    
  • / 除法
    

操作数 一般为独立的项,包括次级表达式(子表达式)
运算符作用于一个操作数时为一元运算符,如负号,运算符作用于一对操作数时为二元运算符

整数型和浮点型的结合

C语言中int型数据可以与double型数据随意结合,一个二元运算符两侧都是int型数,则结果为int型数;其中一边或两个都为double型,则结果为double型。

整数除法和求余运算符

  • / 除法
    整数型的除法运算,结果返回整型,会将余数丢弃,也不会像数学直觉中四舍五入,若想得到数学结果上的正确,则至少一个操作数为浮点数,结果返回也会是浮点数,不会直接丢弃余数
  • % 取余
    取余符号可以检测一个数是否可以被另一个数整除,若整除返回0,否则返回余数

优先级

优先级法则(rule of precedence) 对算术表达式来说有:
1.C编译器首先执行任何一元的负号运算符
2.C编译器接下来执行乘法运算符(*、/、%),同级和涉及同一操作数则从左执行
3.接下来执行加法运算符(+、-)
此时运算法则符合数学直觉,也有()内优先的执行法则

类型转换

C语言有自动类型转换,隐含在计算过程中,混用数据类型时int转向double;或赋值时,将输入按声明的类型转换,转换中浮点数转向int型时会截尾,直接取整数部分,舍去小数部分
强制类型转换可明确指出转换类型,是一个一元运算符


总结

以上就是今天要讲的内容,本文仅仅简单介绍了两个基础程序引申出的一些问题与思考,部分内容如优先级等还有其他运算符的优先级比较补充,常量,变量存储的形式等,其他内容后续章节会详解。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值