BeautifulMan

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  16 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks

2015年11月21日 #

     摘要: 复习题1、将下列十进制数转换为二进制形式:a. 3b. 13c. 59d. 119答:a. 11b. 1101c. 111011d. 11101112、将下列二进制值转换为十进制、八进制和十六进制形式:a. 00010101b. 01010101c. 01001100d. 10011101答:a. 21, 025, 0x15b. 85, 0125, 0x55c. 76, 0114, 0x4Cd. ...  阅读全文
posted @ 2016-01-06 09:27 李阿昀 阅读(472) | 评论 (0)编辑 收藏

这是王爽老师的《汇编语言(第3版)》,经知友推荐确实是一本极好的书!

实验4 [bx]和loop的使用
(1)、(2)
assume cs:code
code segment
    mov ax,0020h
    mov ds,ax
    mov bx,0
    mov cx,64
  s:mov [bx],bl   ;这里必须是mov [bx],bl,而不能是mov [bx],bx,否则会出现类型不匹配
    inc bl
    loop s
    mov ax,4c00h
    int 21h
code ends
end









posted @ 2015-12-15 09:06 李阿昀 阅读(327) | 评论 (0)编辑 收藏

     摘要: 复习题1、以下模板有什么错误?Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->structure {    char itable;    int&nb...  阅读全文
posted @ 2015-12-10 16:53 李阿昀 阅读(1563) | 评论 (0)编辑 收藏

     摘要: 书中的一个例子,我也是想了半天了!!!有点难度!!!Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->/* 把多个文件的内容追加到一个文件中 */#include <stdio.h>#include &...  阅读全文
posted @ 2015-12-07 12:02 李阿昀 阅读(1051) | 评论 (0)编辑 收藏

     摘要: 复习题1、哪一存储类生成的变量对于包含他们的函数来说是局部变量?答:自动存储类、寄存器存储类和静态空链接存储类2、哪一存储类的变量在包含它们的程序运行时期内一直存在?答:静态空链接存储类、静态内部链接存储类和静态外部链接存储类3、哪一存储类的变量可以在多个文件中使用?哪一存储类的变量只限于在一个文件中使用?答:静态外部链接存储类和静态内部链接存储类4、代码块作用域变量具有哪种链接?答:空链接5、关...  阅读全文
posted @ 2015-12-04 20:03 李阿昀 阅读(501) | 评论 (0)编辑 收藏

     摘要: 今天学到了一个新知识——选择排序算法核心思想:(查找和放置)选择剩余最大值的一个办法就是比较剩余数组的第一和第二个元素。如果第二个元素大,就交换这两个数据。现在比较第一个和第三个元素。如果第三个大,就交换这两个数据。每次交换都把大的元素移到上面。继续这种方法,直到比较第一个和最后一个元素。完成以后,最大的数就在剩余数组的第一个元素中。此时第一个元素已经排好了序,但是数组中的...  阅读全文
posted @ 2015-11-30 09:47 李阿昀 阅读(789) | 评论 (0)编辑 收藏

     摘要: 这一章感觉好难啊!!!学习笔记:(关于指针和多维数组)Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// 多维数组和指针#include <stdio.h>int main(void){  ...  阅读全文
posted @ 2015-11-24 22:31 李阿昀 阅读(837) | 评论 (0)编辑 收藏

问题:编写一个函数将一个整数转换成二进制形式?(扩展请移步编程练习9)
#include <stdio.h>
void to_binary(unsigned long n);
int main(void)
{
    unsigned long number;
    printf("Enter an integer (q to quit): \n");
    while(scanf("%lu", &number) == 1)
    {
        printf("Binary equivalent: ");
        to_binary(number);
        putchar('\n');
        printf("Enter an integer (q to quit): \n");
    }
    printf("Done!\n");
    return 0;
}
void to_binary(unsigned long n)
{
    int r;
    r = n % 2;
    if(n >= 2)
        to_binary(n / 2);
    putchar('0' + r);
    return;
}
复习题
1、实际参数和形式参量有何不同?
答:
形式参量(也被称为形式参数)是一个变量,它在被调函数中进行定义。实际参数是在函数调用中出现的值,它被赋值给形式参量。可以把实际参数认为是在函数被调用时用来初始化形式参量的值。
2、写出下面所描述的各个函数的ANSI函数头。注意:只写出函数头即可,不需要实现。
a.donut()接受一个int类型的参数,然后输出若干个0,输出0的数目等于参数的值。
b.gear()接受两个int类型的参数并返回int类型的值。
c.stuff_it()的参数包括一个double类型的值以及一个double类型变量的地址,功能是把第一个数值存放到指定的地址中。
答:
a.void donut(int n)
b.int gear(int n, int m)
c.void stuff_it(double n, double * d)
3、只写出下列函数的ANSI C函数头,不需要实现函数。
a.n_to_char()接受一个int类型的参数并返回一个char类型的值。
b.digits()接受的参数是一个double类型的数值和一个int类型的数值,返回值类型是int。
c.random()不接受参数,返回int类型的数值。
答:
a.char n_to_char(int n)
b.int digits(double n, int m)
c.int random(void)
4、设计一个实现两整数相加并将结果返回的函数。
答:
int plus(int n, int m)
{
    return n + m;
}
5、假如问题4中的函数实现两个double类型的数值相加,那么应该如何修改原函数?
答:
double plus(double n, double m)
{
    return n + m;
}
6、设计函数alter(),其输入参数是两个int类型的变量x和y,功能是分别将这两个变量的数值改为它们的和以及它们的差。
答:(注意:下面这种写法是错误的!!!)
void alter(int x, int y)
{
    x = x + y;
    y = x - y;
}
正确的写法如下:
void alter(int * u, int * v)
{
    int temp;

    temp = *u;
    *u = *u + *v;
    *v = temp - *v;
}
7、判断下面的函数定义是否正确。
void salami(num)
{
    int num, count;

    for(count = 1; count <= num; num++)
        printf("O salami mio!\n");
}
答:
有错误。num应该在salami()的参数列表中而不是在花括号之后声明,而且应该是count++而不是num++。
8、编写一个函数,使其返回3个整数参数中的最大值。
答:
int max(int x, int y, int z)
{
    int max;
    if(x > y)
        if(x > z)
            max = x;
        else
            max = z;
    else
        if(y > z)
            max = y;
        else
            max = z;
    return max;
}
or (更简洁一点)
int max(int x, int y, int z)
{
    int max = x;
    if(y > max)
        max = y;
    if(z > max)
        max = z;
    return max;
}
9、给定下面的输出:
Please choose one of the following:
1)copy files 2)move files
3)remove files 4)quit
Enter the number of your choice:
a.用一个函数实现菜单的显示,且该菜单有4个用数字编号的选项并要求你选择其中之一(输出应该如题中所示)。
b.编写一个函数,该函数接受两个int类型的参数:一个上界和一个下界。在函数中,首先从输入终端读取一个整数,如果该整数不在上下界规定的范围内,则函数重新显示菜单(使用本题目a部分中的函数)以再次提醒用户输入新值。如果输入数值在规定的范围内,那么函数应该将数值返回给调用函数。
c.使用本题目a和b部分中的函数编写一个最小的程序。最小的意思是该程序不需要实现菜单中所描述的功能;它只需要显示这些选项并能获取正确的响应即可。
答:(参考课后答案)
#include <stdio.h>
void menu(void);
int get_input(intint);
int main(void)
{
    int res;

    menu();
    while((res = get_input(1, 4)) != 4)
        printf("I like choice %d.\n", res);
    printf("Bye!\n");
    return 0;
}
void menu(void)
{
    printf("Please choose one of the following: \n");
    printf("1)copy files          2)move files\n");
    printf("3)remove files        4)quit\n");
    printf("Enter the number of your choice: \n");
}
int get_input(int min, int max)
{
    int number;

    scanf("%d", &number);
    while(number < min || number > max)
    {
        printf("%d is not a valid choice; try again.\n", number);
        menu();
        scanf("%d", &number);
    }
    return number;
}
编程练习
1、
#include <stdio.h>
double min(doubledouble);
int main(void)
{
    printf("One of the smaller of the two numbers is %.2f", min(23.34, 12.11));
    return 0;
}
double min(double x, double y)
{
    return x < y ? x : y;
}
2、
#include <stdio.h>
void chline(char ch, int i, int j);
int main(void)
{
    chline('$', 3, 5);
    return 0;
}
void chline(char ch, int i, int j)
{
    int index;

    for(index = 1; index < i; index++)
        putchar(' ');
    for(index = 1; index <= j - i + 1; index++)
        putchar(ch);
}
3、
#include <stdio.h>
void chline(char ch, int col, int row);
int main(void)
{
    chline('$', 3, 5);
    return 0;
}
void chline(char ch, int col, int row)
{
    int i, j;

    for(i = 0; i < row; i++)
    {
        for(j = 0; j < col; j++)
           putchar(ch);
        putchar('\n');
    }
}
4、
#include <stdio.h>
double computer(double a, double b);
int main(void)
{
    printf("%.2f和%.2f的谐均值是:%.3f\n", 0.3, 0.5, computer(0.3, 0.5));
    return 0;
}
double computer(double a, double b)
{
    double result;

    result = 1 / ((1/a + 1/b) / 2);
    return result;
}
5、
#include <stdio.h>
void larger_of(double *, double *);
int main(void)
{
    double x = 23.3;
    double y = 34.4;
    printf("Originally x = %.1f; y = %.1f\n", x, y);
    larger_of(&x, &y);
    printf("Now x = %.1f; y = %.1f\n", x, y);
    return 0;
}
void larger_of(double * u, double * v)
{
    double temp;
    temp = *u > *v ? *u : *v;
    *u = temp;
    *v = temp;
}
6、(第一次码的程序读取到换行符的时候也会打印出来,会给人看不明白的感觉,索性按[Enter]键的时候就退出循环,不要读到EOF)
#include <stdio.h>
#include <ctype.h>
void printchar(char ch);
int main(void)
{
    char ch;

    printf("请输入要分析的东西:\n");
    while((ch = getchar()) != EOF)
    {
        printchar(ch);
    }
    return 0;
}
void printchar(char ch)
{
    if(isalpha(ch))
    {
        printf("%c %d\n", ch, toupper(ch) % 'A' + 1);
    }
}
修改之后,程序如下:
#include <stdio.h>
#include <ctype.h>
int show_c_location(char ch);

int main(void)
{
    char ch;

    printf("Please enter some characters: \n");
    while((ch = getchar()) != '\n')
        printf("%c-%d ", ch, show_c_location(ch));
    return 0;
}
int show_c_location(char ch)
{
    int result;

    if(isalpha(ch))
        result = toupper(ch) - 'A' + 1;
    else
        result = -1;
    return result;
}
7、
#include <stdio.h>
double power(double n, int p);
int main(void)
{
    double x, xpow;
    int exp;

    printf("Enter a number and the positive integer power");
    printf(" to which\nthe number will be raised. Enter q");
    printf(" to quit.\n");
    while(scanf("%lf%d", &x, &exp) == 2)
    {
        xpow = power(x, exp);
        printf("%.3g to power %d is %.5g\n", x, exp, xpow);
        printf("Enter next pair of numbers or q to quit.\n");
    }
    printf("Hope you enjoyed this power trip -- bye!\n");
    return 0;
}
double power(double n, int p)
{
    int i;
    double result = 1;

    if(n != 0)
    {
        if(p > 0)
        {
            for(i = 1; i <= p; i++)
                result *= n;
        }
        else if(p < 0)
        {
            for(i = 1; i <= -p; i++)
                result *= (1 / n);
        }
        else
            result = 1;
    }
    else
    {
        if(p == 0)
            result = 1;// 0的0次方是一个有争议的数,本题认为会得到1
        else
            result = 0;
    }
    return result;
}
8、
#include <stdio.h>
double power(double n, int p);
int main(void)
{
    double x, xpow;
    int exp;

    printf("Enter a number and the positive integer power");
    printf(" to which\nthe number will be raised. Enter q");
    printf(" to quit.\n");
    while(scanf("%lf%d", &x, &exp) == 2)
    {
        xpow = power(x, exp);
        printf("%.3g to power %d is %.5g\n", x, exp, xpow);
        printf("Enter next pair of numbers or q to quit.\n");
    }
    printf("Hope you enjoyed this power trip -- bye!\n");
    return 0;
}
double power(double n, int p)
{
    double result = 1;

    if(n != 0)
    {
        if(p > 0)
            result = n * power(n, p-1);
        else if(p < 0)
            result = (1/n) * power(n, p+1);
        else
            result = 1;
    }
    else
    {
        if(p == 0)
            result = 1;// 0的0次方是一个有争议的数,本题认为会得到1
        else
            result = 0;
    }
    return result;
}
9、
#include <stdio.h>
void to_base_n(unsigned long n, int range);
int main(void)
{
    unsigned long number;
    int range;
    printf("请输入要转换的无符号整数和所规定的进制数: \n");
    while(scanf("%lu %d", &number, &range) == 2)
    {
        if(range >= 2 && range <= 10)
        {
            printf("无符号整数%lu转换成%d进制数为: ", number, range);
            to_base_n(number, range);
            putchar('\n');
            printf("请输入要转换的无符号整数和所规定的进制数: \n");
        }
        else
            printf("所规定的进制数的范围是2~10,请输入正确的数字\n");
    }
    printf("Done!\n");
    return 0;
}
void to_base_n(unsigned long n, int range)
{
    int r;

    r = n % range;
    if(n >= range)
        to_base_n(n / range, range);
    putchar('0' + r);
    return;
}
10、(题意理解不清楚,借鉴CSDN——vs9841原作者的做法,脑子太笨,实在想不出来)
#include <stdio.h>
int Fibonacci(int n);
int main(void)
{
    int n = 9;
    printf("当n为%d时,斐波纳契数值为%d", n, Fibonacci(9));
    return 0;
}
int Fibonacci(int n)
{
    int a, b, i;
    a = 0;
    b = 1;
    int sum;
    if(n == 0)
        return 0;
    if(n == 1)
        return 1;
    else
    {
        for(i = 2; i <= n; i++)
        {
            sum = a + b;
            a = b;
            b = sum;
        }
        return sum;
    }
}
总结:总体来说编程练习相对以往来说要简单了,但第10题没明白什么意思,所以只能借鉴别人的了,真是天下文章一大抄!
posted @ 2015-11-22 23:03 李阿昀 阅读(1042) | 评论 (0)编辑 收藏

复习题
1、putchar(getchar())是一个有效的表达式,它实现什么功能?getchar(putchar())也有效吗?
答:
语句putchar(getchar())使程序读取下一个输入字符并打印它,getchar()的返回值作为putchar()的参数。getchar(putchar())则不是合法的,因为getchar()不需要参数而putchar()需要一个参数。
2、下面的每个语句实现什么功能?
    a.putchar('H');
    b.putchar('\007');
    c.putchar('\n');
    d.putchar('\b');
答:
a. 显示字符H
b.如果系统使用ASCII字符编码,则发出一声警报
c.把光标移动到下一行的开始
d.退后一格
3、假设您有一个程序count,该程序对输入的字符进行统计。用count程序设计一个命令行命令,对文件essay中的字符进行计数并将结果保存在名为essayct的文件中。
答:
count < essay > essayct
4、给定问题3中的程序和文件,下面哪个命令是正确的?
答:
a.essayct <essay
b.count essay
c.essay >count
答:
c是正确的。
5、EOF是什么?
答:
它是由getchar()和scanf()返回的信号(一个特定的值),用来表明已经到达了文件的结尾。
6、对给出的输入,下面每个程序段的输出是什么(假定ch是int类型的,并且输入是缓冲的)?
a. 输入如下所示:
    If you quit, I will.[enter]
    程序段如下所示:
    while ((ch = getchar()) != 'i')
            putchar(ch);
b. 输入如下所示:
    Harhar[enter]
    程序段如下所示:
    while ((ch = getchar()) != '\n')
    {
               putchar(ch++);
               putchar(++ch);
    }
答:
a.If you qu
b.HJacrthjacrt
7、C如何处理具有不同文件和换行约定的不同计算机系统?
答:
C的标准I/O库把不同的文件形式映射为统一的流,这样就可以按相同的方式对它们进行处理。
8、在缓冲系统中把数值输入与字符输入相混合时,您所面临的潜在问题是什么?
答:
数字输入跳过空格和换行符,但是字符输入并不是这样。假设您编写了这样的代码:
    int score;
    char grade;
    printf("Enter the score.\n");
    scanf("%d", &score);
    printf("Enter the letter grade.\n");
    grade = getchar();
假设您输入分数98,然后按下回车键来把分数发送给程序,您同时也发送了一个换行符,它会成为下一个输入字符被读取到grade中作为等级的值。如果在字符输入之前进行了数字输入,就应该添加代码以在获取字符输入之前剔除换行字符。
编程练习
1、
#include <stdio.h>
int main(void)
{
    int ch;
    int count = 0;
    while((ch = getchar()) != EOF) // 包括换行符
        count++;
    printf("The number of characters is %d\n", count);
    return 0;
}
2、(觉得这题超难的!!!看了一些他人写的例子,简直胡说八道!!!不过还是完美解决了)
#include <stdio.h>
int main(void)
{
    int ch;
    int i = 0;

    while((ch = getchar()) != EOF)
    {
        if(ch >= 32)  // 可打印字符
        {
            putchar(ch);
            printf("/%d  ", ch);
            i++;
        }
        else if(ch == '\n')  // 打印换行符
        {
            printf("\\n");
            printf("/%d  ", ch);
            putchar(ch); // 清除输入缓冲区里面的换行符
            = 0// i置为0重新开始计数,因为题目要求每次遇到一个换行符时就要开始打印一个新行
        }
        else if(ch == '\t')  // 打印制表符
        {
            printf("\\t");
            printf("/%d  ", ch);
            i++;
        }
        else // 打印控制字符
        {
            putchar('^');
            putchar(ch + 64);
            printf("/%d  ", ch);
        }
        if(i == 10)
        {
            putchar('\n');
            i = 0;
        }
    }
    return 0;
}
运行结果如下:
I love you!
I/73   /32  l/108  o/111  v/118  e/101   /32  y/121  o/111  u/117(每行打印10个值)
!/33  \n/10(每次遇到一个换行符时就开始一个新行)
My hello world^A
M/77  y/121   /32  h/104  e/101  l/108  l/108  o/111   /32  w/119(每行打印10个值)
o/111  r/114  l/108  d/100  ^A/1  \n/10(每次遇到一个换行符时就开始一个新行)
^Z
3、
#include <stdio.h>
#include <ctype.h>
int main(void)
{
    int ch;
    int low_count = 0, up_count = 0;

    while((ch = getchar()) != EOF)
    {
        if(islower(ch))
            low_count++;
        if(isupper(ch))
            up_count++;
    }
    printf("A number of capital letters: %d\n", up_count);
    printf("A number of lower case letters: %d\n", low_count);
    return 0;
}
4、
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
int main(void)
{
    char ch;
    long chars = 0L; // 统计单词的字符数
    int words= 0; // 单词数
    bool inword = false// 如果ch在一个单词中,则inword为true

    printf("Enter text to be analyzed: \n");
    while((ch = getchar()) != EOF)
    {
        if(!isspace(ch) && !ispunct(ch))
            chars++;
        if(!isspace(ch) && !inword)
        {
            inword = true;
            words++;
        }
        if(isspace(ch) && inword)
            inword = false;
    }
    printf("The average number of words per word: %ld\n", chars / words);
    return 0;
}
5、(二分搜索算法第一次碰见,搞了大半天了,借鉴的是CSDN-----vs9841作者的做法,不过稍微加了下工)
#include <stdio.h>
char get_choice(void);
char get_first(void);
int main(void)
{
    int low = 1, high = 100, guess = 50;
    char ch;

    printf("Pick an integer from 1 to 100. I will try to guess it\n");
    printf("Unis your number %d?\n", guess);
    while((ch = get_choice()) != 'q')
    {
        if(ch == 'a')
        {
            printf("I knew I could do it!\n");
            break;
        }
        else if(ch == 'b')
        {
            printf("It is too small!\n");
            low = guess + 1;
        }
        else if(ch == 'c')
        {
            printf("It is too big!\n");
            high = guess - 1;
        }
        guess = (low + high) / 2;
        printf("Unis your number %d?\n", guess);
    }
    printf("Done!\n");
    return 0;
}
char get_choice(void)
{
    int ch;

    printf("Enter the letter of your choice: \n");
    printf("a. right       b. too small\n");
    printf("c. too big     q. quit\n");
    ch = get_first();
    while((ch < 'a' || ch > 'c') && ch != 'q')
    {
        printf("Please respond with a, b, c, or q.\n");
        ch = get_first();
    }
    return ch;
}
char get_first(void)
{
    int ch;

    ch = getchar();
    while(getchar() != '\n')
        continue;
    return ch;
}
6、
char get_first(void)
{
    int ch;

    while((ch = getchar()) == '\n')
        continue;
    while(getchar() != '\n')
        continue;
    return ch;
}
7、
#include <stdio.h>
#define WORK_OVERTIME 40
#define MULTIPLE 1.5
#define RATE1 0.15
#define RATE2 0.20
#define RATE3 0.25
#define BREAK1 300
#define BREAK2 450
#define BASE1 (BREAK1 * RATE1)
#define BASE2 (BASE1 + (BREAK2 - BREAK1) * RATE2)
char get_choice(void);
char get_first(void);
int main(void)
{
    int hour, choise;
    double total, tax, net_pay;
    double base_pay; // 基本工资等级不能用#define来定义了,因为它要随着程序而改变了,书上真是胡说八道

    while((choise = get_choice()) != 'q')
    {
        switch(choise)
        {
        case 'a':
            base_pay = 8.15;
            break;  // break只是导致程序脱离switch语句,跳到switch之后的下一条语句!!!
        case 'b':
            base_pay = 9.33;
            break;
        case 'c':
            base_pay = 10.00;
            break;
        case 'd':
            base_pay = 11.20;
            break;
        default:
            printf("Program error!\n");
            break;
        }
        printf("Please enter the hour used: ");
        scanf("%d", &hour); // 获取每周工作小时数时没有像书上那样判断,我偷懒了!!!
        if(hour <= WORK_OVERTIME)
        {
            total = hour * base_pay;
            if (total <= BREAK1)
            {
                tax = total * RATE1;
                net_pay = total - tax;
            }
            else
            {
                tax = BASE1 + (total - BREAK1) * RATE2;
                net_pay = total - tax;
            }
        }
        else
        {
            total = base_pay * WORK_OVERTIME + (hour - WORK_OVERTIME) * MULTIPLE * base_pay;
            if(total <= BREAK2)
            {
                tax = BASE1 + (total - BREAK1) * RATE2;
                net_pay = total - tax;
            }
            else
            {
                tax = BASE2 + (total - BREAK2) * RATE3;
                net_pay = total - tax;
            }
        }
        printf("The total pay: %.2f; tax: %.2f; net pay: %.2f\n", total, tax, net_pay);
    }
    printf("Bye!\n");
    return 0;
}
char get_choice(void)
{
    int ch;

    printf("*****************************************************************\n");
    printf("Enter number corresponding to the desired pay rate or action:\n");
    printf("a) $8.75/hr\tb) $9.33/hr\n");
    printf("c) $10.00/hr\td) $11.20/hr\n");
    printf("q) quit\n");
    printf("*****************************************************************\n");
    printf("Please enter your choise: ");
    ch = get_first();
    while((ch < 'a' || ch > 'd') && ch != 'q')
    {
        printf("Please respond with a, b, c, d, or q.\n");
        ch = get_first();
    }
    return ch;
}
char get_first(void)
{
    int ch;

    while((ch = getchar()) == '\n')
        continue;
    while(getchar() != '\n')
        continue;
    return ch;
}
8、
#include <stdio.h>
char get_choice(void);
char get_first(void);
float get_float(void);
int main(void)
{
    char choise;
    float first_number, second_number;

    while((choise = get_choice()) != 'q')
    {
        printf("Enter first number: ");
        first_number = get_float();
        printf("Enter second number: ");
        second_number = get_float();
        switch(choise)
        {
        case 'a':
            printf("%.1f + %.1f = %.1f\n", first_number, second_number, first_number + second_number);
            break;
        case 's':
            printf("%.1f - %.1f = %.1f\n", first_number, second_number, first_number - second_number);
            break;
        case 'm':
            printf("%.1f * %.1f = %.1f\n", first_number, second_number, first_number * second_number);
            break;
        case 'd':
            if(second_number == 0)
            {
                printf("Enter a number other than 0: ");
                second_number = get_float();
                printf("%.1f / %.1f = %.1f\n", first_number, second_number, first_number / second_number);
            }
            else
                printf("%.1f / %.1f = %.1f\n", first_number, second_number, first_number / second_number);
            break;
        default:
            printf("Program error!\n");
            break;
        }
    }
    printf("Bye.\n");
    return 0;
}
char get_choice(void)
{
    int ch;

    printf("Enter the operation of your choice: \n");
    printf("a. add\ts. subtract\n");
    printf("m. multiply\td. divide\n");
    printf("q. quit\n");
    ch = get_first();
    while(ch != 'a' && ch != 's' && ch != 'm' && ch != 'd' && ch != 'q')
    {
        printf("Please respond with a, s, m, d, or q.\n");
        ch = get_first();
    }
    return ch;
}
char get_first(void)
{
    int ch;

    while((ch = getchar()) == '\n')
        continue;
    while(getchar() != '\n')
        continue;
    return ch;
}
float get_float(void)
{
    float input;
    char ch;

    while((scanf("%f", &input)) != 1)
    {
        while((ch = getchar()) != '\n')
            putchar(ch);
        printf(" is not a number.\nPlease enter a ");
        printf("number, such as 2.5, -1.78E8, or 3: ");
    }
    return input;
}

posted @ 2015-11-21 20:12 李阿昀 阅读(419) | 评论 (0)编辑 收藏