程序清单4.1,talkback.c:
// talkback.c -- 演示与用户交互
#include <stdio.h>
#include <string.h> // 提供 strlen() 函数的原型
#define DENSITY 62.4 // 人体密度(单位:磅/立方英尺)
int main(void)
{
float weight, volume;
int size, letters;
char name[40]; // name 是一个可容纳 40 个字符的数组
printf("Hi! What's your first name?\n");
scanf("%s", name);
printf("%s, what's your weight in pounds?\n", name);
scanf("%f", &weight);
size = sizeof name;
letters = strlen(name);
volume = weight / DENSITY;
printf("Well, %s, your volume is %2.2f cubic feet.\n", name, volume);
printf("Also, your first name has %d letters,\n", letters);
printf("and we have %d bytes to store it.\n", size);
return 0;
}
输出结果:
程序清单4.2,praise1.c:
/* praise1.c -- 使用不同类型的字符串 */
#include <stdio.h>
#define PRAISE "You are an extraordinary being."
int main(void)
{
char name[40];
printf("What's your name?");
scanf("%s", name);
printf("Hello, %s. %s\n", name, PRAISE);
return 0;
}
输出结果:
程序清单4.3,praise2.c:
/* praise2.c */
// 如果编译器不识别 %zd,尝试换成 %u 或 %lu
#include <stdio.h>
#include <string.h> /* 提供 strlen() 函数原型 */
#define PRAISE "You are an extraordinary being."
int main(void)
{
char name[40];
printf("What's your name?");
scanf("%s", name);
printf("Hello, %s. %s\n", name, PRAISE);
printf("Your name of %zd letters occupies %zd memory cells.\n", strlen(name), sizeof name);
printf("The phrase of phrase has %zd letters ", strlen(PRAISE));
printf("and occupies %zd memory cells.\n", sizeof PRAISE);
return 0;
}
输出结果:
程序清单4.4,pizza.c:
/* pizza.c -- 在比萨程序中使用已定义的常量 */
#include <stdio.h>
#define PI 3.14159
int main(void)
{
float area, circum, radius;
printf("What is the radius of your pizza?\n");
scanf("%f", &radius);
area = PI * radius * radius;
circum = 2.0 * PI * radius;
printf("Your basic pizza parameters are as follows:\n");
printf("circumference = %1.2f, area = %1.2f\n", circum, area);
return 0;
}
输出结果:
程序清单4.5,defines.c:
// defines.c -- 使用 limit.h 和 float 头文件中定义的明示常量
#include <stdio.h>
#include <limits.h> // 整型常量
#include <float.h> // 浮点型限制
int main(void)
{
printf("Some number limits for this system:\n");
printf("Biggest int: %d\n", INT_MAX);
printf("Smallest long long: %lld\n", LLONG_MIN);
printf("One byte = %d bits on this system.\n", CHAR_BIT);
printf("Largest double: %e\n", DBL_MAX);
printf("Smallest normal float: %e\n", FLT_MIN);
printf("float precision = %d digits\n", FLT_DIG);
printf("float epsilon = %e\n", FLT_EPSILON);
return 0;
}
输出结果:
程序清单4.6,printout.c:
/* printout.c -- 使用转换说明 */
#include <stdio.h>
#define PI 3.141593
int main(void)
{
int number = 7;
float pies = 12.75;
int cost = 7800;
printf("The %d contestants ate %f berry pies.\n", number, pies);
printf("The value of pi is %f.\n", PI);
printf("Farewell! thou art too dear for my possessing,\n");
printf("%c%d\n", '$', 2 * cost);
return 0;
}
输出结果:
程序清单4.7,width.c:
/* width.c -- 字段宽度 */
#include <stdio.h>
#define PAGES 959
int main(void)
{
printf("*%d*\n", PAGES);
printf("*%2d*\n", PAGES);
printf("*%10d*\n", PAGES);
printf("*%-10d*\n", PAGES);
return 0;
}
输出结果:
程序清单4.8,floats.c:
// floats.c -- 一些浮点型修饰符的组合
#include <stdio.h>
int main(void)
{
const double RENT = 3852.99; // const 变量
printf("*%f*\n", RENT);
printf("*%e*\n", RENT);
printf("*%4.2f*\n", RENT);
printf("*%3.1f*\n", RENT);
printf("*%10.3f*\n", RENT);
printf("*%10.3E*\n", RENT);
printf("*%+4.2f*\n", RENT);
printf("*%010.2f*\n", RENT);
return 0;
}
输出结果:
程序清单4.9,flags.c:
/* flags.c -- 演示一些格式标记 */
#include <stdio.h>
int main(void)
{
printf("%x %X %#x\n", 31, 31, 31);
printf("**%d**% d**% d**\n", 42, 42, -42);
printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);
return 0;
}
输出结果:
程序清单4.10,stringf.c:
/* stringf.c -- 字符串格式化 */
#include <stdio.h>
#define BLURB "Authentic imitation!"
int main(void)
{
printf("[%2s]\n", BLURB);
printf("[%24s]\n", BLURB);
printf("[%24.5s]\n", BLURB);
printf("[%-24.5s]\n", BLURB);
return 0;
}
输出结果:
程序清单4.11,intconv.c:
/* intconv.c -- 一些不匹配的整型转换 */
#include <stdio.h>
#define PAGES 336
#define WORDS 65618
int main(void)
{
short num = PAGES;
short mnum = -PAGES;
printf("num as short and unsigned short: %hd %hu\n", num, num);
printf("-num as short and unsigned short: %hd %hu\n", mnum, mnum);
printf("num as int and char: %d %c\n", num, num);
printf("WORDS as int, short, and char: %d %hd %c\n", WORDS, WORDS, WORDS);
return 0;
}
输出结果:
程序清单4.12,floatcnv.c:
/* floatcnv.c -- 不匹配的浮点型转换 */
#include <stdio.h>
int main(void)
{
float n1 = 3.0;
double n2 = 3.0;
long n3 = 2000000000;
long n4 = 1234567890;
printf("%.1e %.1e %.1e %.1e\n", n1, n2, n3, n4);
printf("%ld %ld\n", n3, n4);
printf("%ld %ld %ld %ld\n", n1, n2, n3, n4);
return 0;
}
输出结果:
程序清单4.13,prntval.c:
/* prntval.c -- printf() 的返回值 */
#include <stdio.h>
int main(void)
{
int bph2o = 212;
int rv;
rv = printf("%d F is water's boiling point.\n", bph2o);
printf("The printf() function printed %d characters.\n", rv);
return 0;
}
输出结果:
程序清单4.14,longstrg.c:
/* longstrg.c -- 打印较长的字符串 */
#include <stdio.h>
int main(void)
{
printf("Here's one way to print a ");
printf("long string.\n");
printf("Here's another way to print a \
long string.\n");
printf("Here's the newest way to print a "
"long string.\n"); /* ANSI C */
return 0;
}
输出结果:
程序清单4.15,input.c:
// input.c -- 何时使用 &
#include <stdio.h>
int main(void)
{
int age;
float assets;
char pet[30];
printf("Enter your age, assets, and favorite pet.\n");
scanf("%d %f", &age, &assets);
scanf("%s", pet);
printf("%d $%.2f %s\n", age, assets, pet);
return 0;
}
输出结果:
程序清单4.16,varwid.c:
/* varwid.c -- 使用变宽输出字段 */
#include <stdio.h>
int main(void)
{
unsigned width, precision;
int number = 256;
double weight = 242.5;
printf("Enter a field witdh:\n");
scanf("%d", &width);
printf("The number is :%*d:\n", width, number);
printf("Now enter a width and a precision:\n");
scanf("%d %d", &width, &precision);
printf("Weitht = %*.*f\n", width, precision, weight);
printf("Done!\n");
return 0;
}
输出结果:
程序清单4.17,skip2.c:
/* skiptwo.c -- 跳过输入中的前两个整数 */
#include <stdio.h>
int main(void)
{
int n;
printf("Please enter three integers:\n");
scanf("%*d %*d %d", &n);
printf("The last integer was %d\n", n);
return 0;
}
输出结果:
编程练习
题目1,方法:输入并打印字符串。示例代码4_1.c:
#include <stdio.h>
int main(void)
{
char first_name[20], last_name[20];
printf("Please input your first name: ");
scanf("%s", first_name);
printf("Please input your last name: ");
scanf("%s", last_name);
printf("your name is \"%s,%s\".\n", first_name, last_name);
return 0;
}
输出结果:
题目2,输入并按指定要求打印字符串。示例代码4_2.c:
#include <stdio.h>
#include <string.h>
int main(void)
{
char first_name[20];
char last_name[20];
int length_first = 0;
int length_last = 0;
printf("Please input your first name: ");
scanf("%s", first_name);
printf("Please input your last name: ");
scanf("%s", last_name);
length_first = strlen(first_name);
length_last = strlen(last_name);
printf("a. Your name is \"%s,%s\"\n", first_name, last_name);
printf("b. \"%20s %20s\"\n", first_name, last_name);
printf("c. \"%-20s %-20s\"\n", first_name, last_name);
printf("d. %*s %*s\n", length_first + 3, first_name, length_last + 3, last_name);
return 0;
}
输出结果:
题目3,输入并打印浮点数。示例代码4_3.c:
#include <stdio.h>
int main(void)
{
float num;
printf("Please input a float number:\n");
scanf("%f", &num);
printf("The input is %.1f or %.1e.\n", num, num);
printf("The input is also %+.3f or %.3E.\n", num, num);
return 0;
}
输出结果:
题目4,输入并按要求打印身高和姓名。示例代码4_4.c:
#include <stdio.h>
#include <string.h>
int main(void)
{
float height;
char name[40];
printf("Please input your height with inch:\n");
scanf("%f", &height);
printf("Please input your name:\n");
scanf("%s", name);
printf("%s, you are %.3f feet tall\n", name, height);
return 0;
}
输出结果:
题目5,方法:计算下载速度。示例代码4_5.c:
#include <stdio.h>
int main(void)
{
float size, speed;
printf("Please input the size and the download speed of the file:\n");
scanf("%f %f", &size, &speed);
printf("At %.2f megabits per second, a file of %.2f megabytes\n", speed, size);
printf("download in %.2f seconds.\n", size * 8 / speed);
return 0;
}
输出结果:
题目6,方法:输入并按照指定要求打印姓名。示例代码4_6.c:
#include <stdio.h>
#include <string.h>
int main(void)
{
int length_first, length_last;
char first_name[40], last_name[40];
printf("Please input your first name:\n");
scanf("%s", first_name);
printf("Please input your last name:\n");
scanf("%s", last_name);
length_first = strlen(first_name);
length_last = strlen(last_name);
printf("%s %s\n", first_name, last_name);
printf("%*d %*d\n", length_first, length_first, length_last, length_last);
printf("%s %s\n", first_name, last_name);
printf("%-*d %-*d\n", length_first, length_first, length_last, length_last);
return 0;
}
输出结果:
题目7,显示不同精度的浮点值。示例代码4_7.c:
#include <stdio.h>
#include <float.h>
int main(void)
{
double num1 = 1.0 / 3.0;
float num2 = 1.0 / 3.0;
printf("%.6lf %.12lf %.16lf\n", num1, num1, num1);
printf("%.6f %.12f %.16f\n", num2, num2, num2);
printf("%d %d\n", FLT_DIG, DBL_DIG);
return 0;
}
输出结果:
题目8,计算燃油的消耗。示例代码4_8.c:
#include <stdio.h>
#define PER_GALLON 3.785
#define PER_KM 1.609
int main(void)
{
float mileage, gasoline;
printf("Please input your mileage and your gasoline consumption:\n");
scanf("%f %f", &mileage, &gasoline);
printf("Per consumption of gasoline of gallon can move %.1f miles.\n", mileage / gasoline);
printf("%.1f consumption of gasoline of litre can move 100 kilometres.\n",
gasoline * PER_GALLON * 100 / mileage * PER_KM);
return 0;
}
输出结果: