3.1示例程序
platinum.c程序
/* platinum.c -- your weight in platinum */
#include<stdio.h>
int main(void)
{
float weight; /*你的体重*/
float value; /*相等重量的白金价格*/
printf("Are you worth your weight in platinum?\n");
printf("Let's check it out.\n");
printf("Please enter your weight in pounds:");
/*获取用户的输入*/
scanf("%f",&weight);
/*假设白金的价格是每盎司$1700*/
value = 1700.0 * weight * 14.5833;
printf("Your weight in platinum is worth $%.2f.\n",value);
printf("You are easily worth that!If platinum prices drop,\n");
printf("eat more to maintain your value.\n");
return 0;
}
3.11程序中的新元素
整数类型的变量(int)//以前例子出现
浮点数类型的变量(float)//在printf()中使用%f来处理浮点值
scanf()函数 //用于读取键盘输入,%f说明scanf()函数读取输入的浮点数,&weight是把输入的值赋予名的变量。scanf()函数使用&符号表明找到变量的地点
本程序体现交互性
3.2变量与常量数据
3.3数据:数据类型关键字
表3.1 C语言的数据类型关键字
最初K&R给出的关键字 | C90标准添加的关键字 | C99标准添加的关键字 |
int//表示整数类型 | signed | _Bool布尔值(true或false) |
long | 用于提供基本整数类型的变式 | _Complex复数 |
short | _Imaginary虚数 | |
unsigned | ||
char指定字母和其他字符(#%¥*)、较小的整数 | ||
float带小数点的数 | void | |
double |
3.3.1 整数和浮点数
浮点数:e记数法3.16E7表示3.16*10^7,7被称为10的指数
3.4 C语音基本数据类型
3.4.1 int类型
- 声明int变量:
声明创建变量: int erns;int hogs,cows,goats;
提供值:1.cows = 112;
2.通过函数(如,scanf())获得值。
- 初始化变量
在变量名后面加上赋值运算符(=)和待赋给变量的值即可
- int类型常量
整数常量或整数字面量
- 打印int值
%d指明printf()用整数类型打印显示一个值
- 八进制和十六进制(C语言中用特定的前缀表示使用哪种进制)
Ox或OX前缀表示十六进制
O前缀表示八进制
- 显示八进制和十六进制
十进制显示数字,使用%d
八进制显示数字,使用%o
十六进制显示数字,使用%x
要显示各进制前缀O、Ox、OX,必须分别使用%#o、%#x、%#x。
bases.c程序
/*basecs.c--以十进制、八进制、十六进制打印十进制数100*/
#include<stdio.h>
int main(void)
{
int x = 100;
printf("dec = %d; octal = %o; hex = %x\n",x,x,x);
printf("dec = %d; octal = %#o; hex = %#x\n",x,x,x);
return 0;
}
3.4.2 其他整数类型
- short int或short
- long int或long
- long long int或long long
- unsigned int或unsigned只用于非负值的场合
- C90中,添加unsigned long int 或unsigned long和unsigned short int或unsigned short C99添加unsigned long long int或unsigned long long
3.4.3 使用字符:char类型
char类型用于储存字符
char grade = 'A';
//单引号括起来的单个字符被称为字符常量
- 单引号只适用于字符、数字和标点符号(三种方法表示字符)
- 使用ASCII码(例:蜂鸣字符的ASCII值是7,char beep = 7;)
- 使用特殊的符号序列——转义序列表示一些特殊的字符。
转义序列 | 含义 |
\a | 警报(ANSI C) |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\\ | 反斜杠(\) |
\' | 单引号 |
\" | 双引号 |
\? | 问号 |
\0oo | 八进制值(oo必须是有效的八进制数, 即每个o可表示0~7中的一个数) |
\xhh | 十六进制数(hh必须是有效的十六进制数, 即每个h可表示0~f中的一个数) |
类型 | 十六进制 | 八进制 | 十进制 |
char | \x41 | \101 | N.A. |
int | 0x41 | 0101 | 65 |
unsigned int | 0x41u | 0101 | 65 |
long | 0x41L | 0101L | 65L |
unsigned long | 0x41UL | 0101UL | 65UL |
long long | 0x41LL | 0101LL | 65LL |
unsigned long long | 0x41ULL | 0101ULL | 65ULL |
charcode.c程序
/* charcode.c-显示字符的代码编号*/
#include<stdio.h>
int main(void)
{
char ch;
printf("Please enter a character.\n");
scanf("%c",&ch); /*用户输入字符*/
printf("The code for %c is %d.\n",ch,ch);
return 0;
}
3.4.4 _Bool类型
_Bool类型用于表示布尔值,即逻辑值true(1)和false(0)
3.4.5 可移植类型:stdint.h和inttypes.h
3.6altnames.c程序
/*altnames.c --可移植整数类型名 */
#include <stdio.h>
#include <inttypes.h> //支持可移植类型
int main(void)
{
int32_t me32; //me32是一个32位有符号的整形变量
me32 = 45933945;
printf("First, assume int32_t is int:");
printf("me32 = %d\n",me32);
printf("Next, Let's not make any assumptions.\n ");
printf("Instead,use a \"macro\"from inttrypes.h:");
printf("me32 = %" PRId32 "\n",me32);
return 0;
}
3.4.6 float、double和long double
数字 | 科学记数法 | 指数记数法 |
1000000000 | 1.0*10^9 | 1.0e9 |
123000 | 1.23*10^5 | 1.23e5 |
322.56 | 3.2256*10^2 | 3.2256e2 |
0.000056 | 5.6*10^-5 | 5.6e-5 |
3.7 showf_pt.c 程序
/* showf_pt.c -- 以两种方式显示float类型的值 */
#include <stdio.h>
int main(void)
{
float aboat = 32000.0;
double abet = 2.14e9;
long double dip = 5.32e-5;
printf("%f can be written %e\n",aboat,aboat);
//下一行要求编译器支持C99或其中的相关特性
printf("And it's %a in hexadecimal, powers of 2 notation\n",aboat);
printf("%f can be written %e\n",abet,abet);
printf("%Lf can be written %Le\n",dip,dip);
return 0;
}
3.4.7 复数和虚数类型
- 三种复数类型:float_Complex、double_Complex、long double_Complex
- 三种虚数类型:float_Imaginary、double_Imaginary、long double_Imaginary
.如果包含complex.h头文件,便可用complex代替_Complex,用imaginary代替_Imaginary,还可以用I代替-1的平方根
3.4.8 其他类型
数组、指针、结构和联合
3.7 转义序列示例
程序清单3.10演示了退格(\b)、水平制表符(\t)和回车(\r)的工作方式
3.10 escape.c 程序
/* escape.c -- 使用转义序列 */
#include <stdio.h>
int main(void)
{
float salary;
printf("\aEnter your desired monthly salary:"); //1
printf(" $______\b\b\b\b\b\b\b");//2
scanf("%f",&salary);
printf("\n\t$%.2f a month is $%.2f a year.",salary,salary * 12.0);//3
printf("\rGee!\n");//4
return 0;
}
3.11 编程练习