1. #include "stdio.h"
  2. #include "string.h" //提供了strlen()函数
  3. #define DENSITY 62.4 //人体密度(单位: 磅/立方英尺)
  4. int main(void){
  5. float weight,volume;
  6. int size,letters;
  7. char name[40]; //name是可容纳40个字符的数组
  8. printf("请输入你的名字:");
  9. scanf("%s",&name);
  10. printf("你的名字是:%s\n",name);
  11. printf("your weight:");
  12. scanf("%f",&weight);
  13. size = sizeof name;
  14. letters = strlen(name);
  15. volume = weight / DENSITY;
  16. printf("你的名字:%s,volume:%2.2f。\n",name,volume);
  17. printf("your fist name has %d letters\n");
  18. return 0;
  19. }

注意:C中的字符串默认是不支持中文

使用字符串

  1. #include "stdio.h"
  2. #define PRAISE "Hello My Name is Chentianyu"
  3. int main(void){
  4. char name[40];
  5. printf("What's your name?");
  6. scanf("%s",&name);
  7. printf("%s.%s",name,PRAISE);
  8. return 0;
  9. }

strlen()函数

  1. #include "stdio.h"
  2. #include "string.h"
  3. #include "praise2.h"
  4. int main(void){
  5. char name[40];
  6. float bill,sum;
  7. printf("What's your name?");
  8. scanf("%s",&name);
  9. printf("Hello %s.%s\n",name,PRAISE);
  10. printf("你的名字的长度%zd,你的名字的大小:%zd。\n",strlen(name),sizeof(name));
  11. sum = 10;
  12. bill = TAXRATE * sum;
  13. printf("%d",bill);
  14. }
  1. #define PRAISE "My Name is Chentianyu"
  2. #define TAXRATE 0.015

常量和C处理器

  1. /*pizza.c -- 在披萨饼中使用以定义的常量*/
  2. #include "stdio.h"
  3. #define PI 3.1415926
  4. int main(void){
  5. float r;
  6. printf("请输入半径:");
  7. scanf("%f",&r);
  8. printf("%f",2*PI*r);
  9. return 0;
  10. }

const限定符

C90标准新增了const关键字,用于一个变量为只读。其声明如下

  1. const int MONTHS = 12;//MONTHS在程序中不可变,值为12

明示常量

C头文件limits.hfloat.h分别提供了与整数类型和浮点数类型大小限制相关的详细信息,每个头文件定义了一系列实现使用的明示常量。例如limits.h头文件包含以下代码:

  1. #define INT_MAX +32767
  2. #define INT_MIN -32768

所以引用了limits.h可以使用

  1. printf("int最大值:%d\n",INT_MAX);

limits.h中的一些明示常量
明示常量 含义
CHAR_BIT char类型的位数
CHAR_MAX char类型的最大值
CHAR_MIN char类型的最小值
SCHAR_MAX signed char类型的最大值
SCHAR_MIN signed char类型的最小值
UCHAR_MAX unsigned char类型的最大值
SHORT_MAX short类型的最大值
SHORT_MIN short类型的最小值
USHORT_MAX unsigned short类型的最大值
INT_MAX int类型的最大值
INT_MIN int类型的最小值
UINT_MAX unsigned int类型的最大值
LONG_MAX long类型的最大值
LONG_MIN long类型的最小值
ULONG_MAX unsigned long类型的最大值
LLONG_MAX long long 类型的最大值
LLONG_MIN long long类型的最小值
ULLONG_MAX unsigned long long类型的最大值
  1. #include "stdio.h"
  2. #include "limits.h"
  3. int main(void){
  4. printf("char类型位数:%d\n",CHAR_BIT);
  5. printf("char最大值:%d\n",CHAR_MAX);
  6. printf("char最小值:%d\n",CHAR_MIN);
  7. printf("uchar最大值:%d\n",UCHAR_MAX);
  8. printf("int类型最大值:%d\n",INT_MAX);
  9. printf("int类型最小值:%d\n",INT_MIN);
  10. printf("unsigned int类型最大值:%d\n",UINT_MAX);
  11. return 0;
  12. }

float.h中的一些明示常量
明示常量 含义
FLT_MANT_DIG float类型的尾数位数
FLT_DIG float类型的最小有效数字位数(十进制)
FLT_MIN_10_EXP 带全部有效数字的float类型的最小负指数(以10为底)
FLT_MAX_10_EXP float类型的最大正指数(以10为底)
FLT_MIN 保留全部精度的float类型最小正数
FLT_MAX float类型最大正数
FLT_EPSILON 1.00和比1.00大的最小float类型值之间的差值

printf()函数

转换说明以及打印的输出结果

转换说明 输出
%a 浮点数,十六进制数和p计数法(C99/C11)
%A 浮点数,十六进制数和p计数法(C99/C11)
%c 单个字符
%d 有符号的十进制整数
%e 浮点数,e计数法
%E 浮点数,e计数法
%f 浮点数,十进制计数法
%g 根据值的不同,自动选择%f或%e格式用于指数小于-4或者大于或等于精度时
%G 根据值的不同,自动选择%f或%e格式用于指数小于-4或者大于或等于精度时
%i 有符号十进制整数(于%d相同)
%o 无符号的八进制整数
%p 指针
%s 字符串
%u 无符号的十进制整数
%x 无符号十六进制整数,使用16进制数0f
%X 无符号十六进制整数,使用16进制数0F
%% 打印一个百分号

使用printf()

  1. /*printout.c -- 使用转换说明*/
  2. #include "stdio.h"
  3. #define PI 3.1415926
  4. int main(void){
  5. int number = 7;
  6. float pies = 12.75;
  7. int cost = 7800;
  8. printf("PI:%f.\n",PI);
  9. printf("%c%d",'$',2*cost);
  10. return 0;
  11. }

printf()的转换说明修饰符

printf()的修饰符

修饰符 含义
标记 5种标记(-,+,空格,#和0),可以不使用标记或使用多个标记。示例:”%-10d”
数字 最小字段宽度。如果该字段不能容纳待打印的数字或字符串,系统就会使用更宽的字段。示例: “%4d”
.数字 精度。对于%e %E和%f转换,表示小数点右边数字的位数。对于%g %G转换,表示有效数字最大位数。对于%s转换,表示待打印字符的最大数量。对于整型转换,表示待打印数字的最小位数。如果有必要,使用前导0来达到这个位数。只使用.表示其后跟随一个0.所以%.f和%.0f相同。示例: “%5.2f”打印一个浮点数,字段宽度为5个字符,其中小数点后俩位数字。
h 和整型转换说明一起使用,表示short int或unsigned short int 类型的值。示例: “%hu”,”%hx”,”%6.4hd”
hh 和整型转换说明一起使用,表示signed char或unsigned char 类型的值。示例:”%hhu”,”%hhx”,”%6.4hhd”
j 和整型转换说明一起使用,表示intmax_t或uintmax_t 类型的值。这些类型定义在stdint.h中。示例:”%jd”,”%8jx”
l 和整型转换说明一起使用,表示long int 或 unsigned long int类型的值。示例: “%ld”,”%8lu”
ll 和整型转换说明一起使用,表示long long int 或 unsigned long long int类型的值。示例: “%ld”,”%8lu”
L 和浮点转换说明一起使用,表示long double类型的值。示例:”%Ld”,”%10.4Le”
t 和整型转换说明一起使用,表示ptrdiff_t类型的值。ptrdiff_t是指俩个指针插值的类型(C99)。示例: “%td”,”%12ti”
z 和整型转换说明一起使用,表示size_t类型的值。size_t是sizeof返回的类型(C99)。示例:”%zd”,”%12zd”

printf()中的标记

标记 含义
- 待打印项左对齐,从字段的左侧开始打印该项。示例: “%-20s”
+ 有符号值若为正数,则在值面前显示加号;若为负,则在值前面显示减号。示例:”%+6.2f”
空格 有符号值若为正,则在之前面显示前导空格(不显示任何符号);若为负,则在前面显示减号+标记覆盖一个空格。示例: “% 6.2f”
# 把结果转换成另一种形式。如果是%o格式则以0开始;如果是%x或%X格式则以0x或0X开始;对于所有浮点格式,’#’保证了即使后面没有任何数字,也打印一个小数点字符。对于%g或%G格式,’#’防止结果后的0被删除。示例:”%#o”,”%#8.0f”,”%#10.3e”
0 对于数值格式,用前导0代替空格填充字段宽度。对于整数格式,如果出现-标记或指定精度,则忽略该标记

使用修饰符和标记的示例
  1. #include "stdio.h"
  2. #define PAGES 959
  3. int mian(void){
  4. printf("*%d*\n",PAGES);
  5. printf("*%2d*\n",PAGES);
  6. printf("*%10d*\n",PAGES);
  7. printf("*%-10d\n",PAGES);
  8. return 0;
  9. }
  1. /*floats.c -- 一些浮点类型修饰符的组合*/
  2. #include "stdio.h"
  3. int main(void){
  4. const double RENT = 3852.99; //const 变量:只读,不可修改
  5. printf("*%f*",RENT);
  6. printf("*%e*",RENT);
  7. printf("*%4.2f*",RENT);
  8. printf("*%3.1f*",RENT);
  9. printf("*%10.3f*",RENT);
  10. printf("*%10.3E*",RENT);
  11. printf("*%+4.2f*",RENT);
  12. printf("*%010.2f*",RENT);
  13. return 0;
  14. }

ANSI C中scanf()的转换说明

转换说明 含义
%c 把输入解释成字符
%d 把输入解释成有字符的十进制整数
%e,%f,%g,%a 把输出解释成浮点数(C99标准新增了%a)
%E,%F,%G,%A 把输出解释成浮点数(C99标准新增了%A)
%i 把输入解释成有字符的十进制整数
%o 把输入解释成有字符的八进制整数
%p 把输入解释成指针(地址)
%s 把输入解释成字符串,从第一个非空白字符开始,到下一个空白字符之间的所有字符都是输入
%u 把输入解释成无符号十进制整数
%x,%X 把输入解释成有符号的十六进制

scanf()转换说明中的修饰符

修饰符 含义
* 抑制赋值。示例: “%*d”
数字 最大字段宽度。输入达到最大字段宽处,或第一次遇到空白字符是停止。示例: “%10s”
hh 把整数作为signed char或unsigned char类型读取。示例: “%hhd”,”%hhu”
ll 把整数作为long long或unsigned long long类型读取(C99)。示例: “%lld”,”%llu”
hh 和整型转换说明一起使用,表示signed char或unsigned char 类型的值。示例:”%hhu”,”%hhx”,”%6.4hhd”
h、l或L “%hd”和”%hi”把对应的值存储为short int类型。”%ho”、”%hx”和”%hu”把对应的值存储为unsigned short int类型。”%ld”和”%li”把对应的值存储为long类型。”%lo”、”%lx”和”%lu”把对应的值存储为unsigned long类型。”%le”、”%lf”和”%lg”把对应的值存储为double类型。在e、f和g前面使用L不是l,表明对应的只被存储为int类型,f和g表明把对应的值存储为float类型
j 在整型转换说明后面时,表明使用intmax_t或uintmax_t 类型的值。这些类型定义在stdint.h中。示例:”%jd”,”%8jx”
z 在整型转换说明后面时,表明使用sizeof
的返回类型(C99)。示例:”%zd”,”%zo”
t 在整型转换说明后面时,表明使用表明俩个指针差值
类型(C99)。示例:”%td”,”%tx”

scanf()的返回值

scanf()函数返回成功读取的项数。如果没有读取任何项,且需要读取一个数字而用户却输入一个非数值的字符串,scanf()便返回0。当scanf()检测到”文件结尾”时,会返回EOF(EOF是stdio.h中定义的特殊值,通常用#define指令把EOF定义为-1)。

printf()和scanf()的*修饰符

  1. /*varwid.c -- 使用变宽输出字段*/
  2. #include "stdio.h"
  3. int main(void){
  4. unsigned width,precision;
  5. int number = 256;
  6. double weight = 242.5;
  7. printf("width:\n");
  8. scanf("%d",&width);
  9. printf("the number is : %*d:\n",width,number);//*:width;d:number
  10. printf("Now Enter a width and a precision:\n");
  11. scanf("%d,%d",&width,&precision);
  12. printf("Weight = %*.*f\n",width,precision,weight);//*:width;*:precision;d:number
  13. printf("Done!\n");
  14. return 0;
  15. }