计算机中的数据存储
在计算机中,数据有三种表示方法:原码、反码和补码。 计算机用一个二进制的最高位存放所表示数值的符号,最高位为0表示正数,最高位为1表示负数。 对于一个正数,原码是将该数转换成二进制,它的反码和补码与原码相同。 对于一个负数,原码是将该数按照绝对值大小转换成二进制数,最高位即符号位为1;它的反码是除符号位外将二进制数按位取反,所得的新二进制数称为原二进制数的反码;它的补码是将其二进制的反码加1. 计算机中任何一个带有符号的二进制数都是以补码形式进行运算和存储的。例:
整数 | 原码 | 反码 | 补码 |
---|---|---|---|
1 | 0000 0001 | 0000 0001 | 0000 0001 |
-1 | 1000 0001 | 1111 1110 | 1111 1111 |
算法的概念
广义上的算法是指解决问题的方法。
在程序设计中,算法应该是能有离散成具体的若干个操作步骤,每一个步骤都是能够用程序设计语言提供的语句或者语句串来完成的。
计算机解题的方法分为两大类:数值运算算法和非数值运算算法。
数值运算算法解决的是求数值的问题,运算一定的求值公式如二元一次方程的求根公式、圆面积的计算公式等。
非数值运算的算法设计的内容比较广,而且难以量化,一般都需要参考已有的类似算法,针对具体问题重新设计。
算法的特点
- 1.有穷性
一个算法应包括有限个操作步骤,其中每一步都应该在合理的时间范围内完成。有的可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。他执行的时间没有严格的限制,受所处理问题的约束。 - 2.确定性
算法在指导计算执行每步程序时,这些指令都是明确的,没有任何歧义的。
例如:输出: A/正整数
是无法执行的,因为正整数是指一类数,没有指定A除以哪一个整数,所以这个步骤是不确定的。
- 3.有消性 算法中的每个步骤都因该是有意义、能够有效执行的,并且得到确定的结果。比如,开方运算的数不能是负数;分母不能为0.
- 4.输入
一个算法有零个或者多个输入。 - 5.输出
一个算法有一个或多个输出。算法的输出反应了输入数据加工的结果,没有输入的算法是毫无意义的。数据类型
c语言可以处理多个数据种类(或类型),例如整数、字符和浮点数。把一个变量声明为整数类型或者字符类型是计算机正确存储、获取和解释该数据的基本前提。
名字的选择
可供使用的字符有小写字母、大写字母、数字和下划线(_)。第一个字符必须是字母或者下划线。
能够使用的字符的数量和C语言的不同实现有关。C99标准允许一个标识符最多有63个字符,
除了外部标识符后者只识别31个字符。c90只有31个字符和6个字符,更早的编译器只支持8个字符。使用的字符可以超过规定的最大值,但编译器不会识别额外的字符。C语言的名字区分大小写。
声明变量的4点好处
- 把所有变量放在一起,可以让读者更容易掌握程序的内容。
- 在编写程序之前,考虑一下需要声明的变量会促使自己做一些计划工作。
- 声明变量可以帮助避免程序中出现一些很难发现的细微错误。
- 如果没有声明变量将不能编译C程序。
赋值
赋值语句(assignment statement)是C语言的基本操作之一。
例:num = 1;
printf()函数
printf("I am a sample"); printf("computer.\n"); printf("my favourite number is %d because it is first. \n");
所有的这些行都使用了C语言中的一个标准函数:printf() 。圆括号表明print是一个函数。圆括号中包括的内容是从函数main()传递到函数printf()的信息。例如第一行把I am a simple传递给printf()函数。这样的信息称为参数(argument),更完整的名称是函数的实际参数(actual argument)。程序将识别两个双引号之间的内容并把它显示在屏幕上。
第一行 printf()语句是如何在C语言中调用(call)或请求(invoke)一个函数的例子。只需键入函数的名字,把一个或多个参数放进圆括号内。当程序运行到这一行时,控制权将转交给该函数,在这个例子中是(printf())。当函数完成了它所要做的工作,将控制权返还给原来的函数(调用函数),在这个例子中是main()。
\n 字符的意思是开始新的一行。\n组合代表一个成为换行字符(newline character)的字符。换行字符是转义字符(Escape sequence)的一个例子。转义字符通常用于难于表达或者无法键入的字符。每个转义字符都是从斜线字符(\)开始的。
%d是一个占位字符,其作用是指出num值的位置。Return语句
return 0;
return语句(返回语句)是程序的最后一个语句。在 int main(void)中int 表示main()函数的返回值应该是个整数。C标准要求main()这样做。带有返回值的C语言函数要使用一个return语句,该语句包括关键字return,后面紧跟着要返回的值,然后是一个分号。
一个简单的程序结构
#include <stdio.h> int main(void) { statement return 0; }
使程序可读的技巧
让程序可读史一个良好的编程习惯。
- 选择有意义的变量名和使用注释。
- 使用空行分隔一个函数的概念上的多个部分。
- 每个语句用一行。 例:
int main(void) /* convents 2 fathoms to feet */ 使用注释。
{
int feet,fathoms; 选择有意义的名字。
fathoms=2; 使用空行。
feet=6*fathoms; 每行一个语句。
printf("There are %d feet in %d fathoms ! \n",feet,fathoms);
return 0;
}
多个函数
程序清单: two_func.c
/* two_func.c --在一个文件中使用两个函数 */
#include <stdio.h>
void butler (void); /* ISO/ANSI C函数原型*/
int main(void)
{
printf("I will summon the butler function.\n");
butler();
printf("yes. Bring me sume tea and writeable CD-ROMS.\n");
return 0;
}
void butler(void) /*函数定义开始*/
{
printf("You rang , sir?\n");
}
butler()函数在程序中出现了3次。第一次出现在原型中,通知编译器要用到该函数。第二次是在main()函数中以函数调用的方式出现。最后,程序给出了函数的定义,即函数本身的原代码。
数据和C
程序清单:rhodium.c
/*rhodium.c -- 用金属铑 */
#include <stdio.h>
int main(void)
{
float weight; /*用户体重*/
float value; /*相等重量的铑的价值*/
printf("Are you worth your weight in rhodium?\n");
printf("Let's check it out.\n");
printf("Please enter your weight in pounds: ");
/*从用户处获取输入*/
scanf("%f",&weight);
/*假设铑为每盎司770美元*/
/*14.5833把常恒制的英镑转换为金恒制的盎司*/
value = 770 * weight *14.5833;
printf("Your weight in rhodium is worth $%.2f.\n",value);
printf("You are easily worth taht! If rhodium prices drop. \n");
printf("eat more to maintain your value. \n");
return 0;
}
此程序中的新元素
- 请注意代码中使用了一种新的变量声明。前面的例子中只有整型变量(int),而本例子中还包含了一个浮点变量(float)类型,以便处理更大范围的数据。float类型可以处理带有小数点的数字。
- 程序还示范了常量的几种新的写法,现在可以使用带有小数点的数了。
- 要打印这种新的变量类型,请在printf()代码中使用%f说明符来处理浮点值。对%f说明符使用.2修饰词可以精确控制输出格式,使浮点数xian