第四章 字符串和格式化输入/输出

  • 程序清单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;
}

输出结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值