博文

[011] 模运算%符号由被除数决定(2006-02-15 19:51:00)

摘要:    模运算,即求余运算。%两侧均为整型数据。

★ 表达式的符号由被除数决定,如: 7%4值为3 、-7%4值为-3 、7%-4值为3 、 -7%-4值为-3 。......

阅读全文(3062) | 评论:0

[010] 除法运算符/及向零取整(2006-02-15 19:36:00)

摘要:《C程序设计第二版》(谭浩强)
两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分。但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定的。例如,-5/3在有的机器上得到结果-1,有的机器则给出结果-2。多数机器采取“向零取整”的方法,即5/3=1,-5/3=-1,取整后向零靠拢。如果参加+, -, *, /运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按double型进行运算。所以 除数、被除数有一个为实数时,结果为double 型. ★ 对"向零取整"似懂非懂,-5/3不就应该得-1吗, 如果得-2 又是什么依据呢? 这是由机器本身的规定所决定的吗?  先不管那么多了,记住就行,呵呵!......

阅读全文(4818) | 评论:0

[009] 实型常量的指数形式(2006-02-15 15:08:00)

摘要:如:123e3 或 123E3 ★ e 前后必须有数字,e 后必须为整型数 如:.3e3   3e3  3.e3 ★ 缺省类型为 double ★ 规范化的指数形式:在字母 e (或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。如 2.3478e2、3.0999e5、6.46832e12    一个实数在用指数形式输出时,是按规范化的指数形式输出的,如将指定实数5689.65按指数形式输出,必然输出 5.68965e+003
......

阅读全文(6002) | 评论:0

[008] 关键字必须小写 [该说法错误(后改)](2006-02-15 13:55:00)

摘要:    因为C语言对大小写敏感, 即区分大小写,所以关键字大写后被认为是用户自定义的标志符。如:if 为关键字,而 IF 为用户自定义标志符。 ######################################更正########################################

经网友指点(见评论),改正如下:

    因为C语言对大小写敏感, 即区分大小写,所以关键字必须规范书写。否则更改大小写的关键字会被认为是用户定义的标志符。如:if 为关键字,而 IF 为用户自定义标志符。关键字 _Bool 和 _Complex ,如果写成 _BOOL和_COMPLEX,或写成 _bool和_complex 都是不对的。会被做为用户自定义的标志符处理。     由此联想到,如果自定义标志符与关键字冲突了(即为关键字),可以通过更改某部分的大小写来解决, 但用不好的话, 可能自己都会弄混, 所以还是不用的好 ^_^......

阅读全文(3276) | 评论:2

[007] C语言中标志符的长度(2006-02-13 14:30:00)

摘要:    C语言规定标识符只能由字母、数字、和下划线三种字符组成,且第一个字符必须为字母或下划线。C语言中区分大小写。
    ANSI C 标准没有规定标识符的长度(字符个数),但各个c编译系统都有自己的规定。有的系统(如IMB PC的MSC)取8个字符,假如程序中出现的变量名长度大于8个字符,则只有前面8个字符有效,后面的不被识别。例如,有两个变量:student_name和student_number,由于二者的前8个字符相同,系统认为这两个变量是一回事而不加区别。可以将它们改为stud_name和stud_num,以使之区别。Turbo C则允许32个字符。因此,在写程序时应了解所用系统对标识符长度的规定,以免出现上面的混淆。这种错误并不反映在编译过程中(即语法无错误) ,但运行结果显然不对。为了程序的可移植性(即在甲机器上运行的程序可以基本上不加修改,就能移到乙机器上运行)以及阅读程序的方便,★ 建议变量名的长度不要超过8个字符。
......

阅读全文(4027) | 评论:2

[006] 百鸡问题(2006-02-15 14:28:00)

摘要:    张丘建《算经》中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?

分析:公鸡-cocks ,母鸡-hens,小鸡-chicks   
            cocks+hens+chicks=100
            5*cocks+3*hens+chicks/3=100

★ 关键:  受百钱买百鸡的约束有 0≤cocks≤19, 0≤hens≤33, 0≤chicks≤100
★ 思路:  累试法(枚举法)  依次取cocks值域中的值,然后求其余两数,看是否满足题意

算法描述:
cocks=0
    当cocks≤19时
    {
          找满足题意的hens,chicks数
          cocks加1
    }
细化:
cocks=0
    当cocks≤19时
    {
        hens=0
        当hens≤33时
        {
           ......

阅读全文(5471) | 评论:18

[005] 一个C程序总是从main函数开始执行(2006-02-12 13:33:00)

摘要:#include "stdio.h"
int max(int x,int y)
{
        int z;
        if (x>y) z=x;
        else z=y;
        return(z);
}
void main()
{
        int a, b, c;
        scanf("%d %d",&a, &b);
        c=max(a, b);
        printf("max=%d\n",c);
} ★ C程序总是从main函数开始执行......

阅读全文(5003) | 评论:1

[004] 整形变量以字符输出时的范围(2006-02-10 23:54:00)

摘要:    字符变量在计算机内占一个字节,而整形变量占两个字节,因此整形变量在可输出字符的范围内(ASCII码为0~255这间的字符)是可以与字符数据互相转换的.如果在此范围外,则不能代替. #include <stdio.h>
main()
{
    int a, b;
    printf("请输入两个整数 a, b:\n");
    scanf("%d,%d",&a,&b);
    printf("按字符输出为:\n");
    printf("%c,%c\n",a,b);
    char c1, c2;
    c1 = a;
    c2 = b;
    printf("转换为字符型后按整数输出为:\n");
    printf("%d,%d\n",c1,c2);
}
运行结果:
========================================
请输入两个整数 a, b:
97,289↙
按字符输出为:
a,!
转换为字符型后按整数输出为:
97,33
========================================

★ c1,c2是字符型变量,只占一个字节,只能存放0~255范围内的整数,97为a的ASCII码,而289超过了255,所以只将b在内存中的低8位赋值绐c2 (b按字符输出时同理) , 289-255=33 而33为!的ASCII码. ★ Turbo C 把字符处理成带符号的整数。

######################################更正########################################

经......

阅读全文(4788) | 评论:3

[003] 连续用两个getchar函数时字符的输入(2006-02-10 23:19:00)

摘要:<谭> 4.10

#include <stdio.h>
main()
{
    char c1, c2;
    printf("请输入两个字符 c1, c2: \n");
    c1 = getchar();
    c2 = getchar();
    printf("用putchar语句输出结果为:\n");
    putchar(c1);
    putchar(c2);
    printf("\n");
    printf("用printf语句输出结果为:\n");
    printf("%c,%c\n", c1, c2);
}
结果:
==========================================
请输入两个字符 c1, c2:
ab↙
用putchar语句输出结果为:
ab
用printf语句输出结果为:
a,b
==========================================

★ 输入时不应以如下方法输入:
a↙
b↙
否则第一个回车符会被赋于c2......

阅读全文(3580) | 评论:1

[002] scanf读入字符时与回车冲突的处理(2006-02-10 22:24:00)

摘要: <谭>
4.6 scanf函数输入数据的练习

#include <stdio.h>
main()
{
    int a, b;
    float x, y;
    char c1, c2;
    scanf("a=%d b=%d", &a, &b);
    scanf("%f %e", &x, &y);
    scanf("%c %c", &c1, &c2);    
    printf("a=%d, b=%d, x=%f, y=%f, c1=%c, c2=%c\n", a, b, x, y, c1, c2);
}
动行结果:
====================================
a=1 b=2↙
1.1 2.2↙
m n↙
a=1,b=2,x=1.100000,y=2.200000,c1=
,c2=m
====================================
★ 原因是输入完第二行数据后回车被当作一个字符读入了内存输入缓冲区,所以c1读入了回车符 ★ 解决方法:
<方法一> 在读字符函数中首位置加入一个空格

#include <stdio.h>
main()
{
    int a, b;
    float x, y;
    char c1, c2;
    scanf("a=%d b=%d", &a, &b);
    scanf("%f %e", &x, &am......

阅读全文(6686) | 评论:8