明解C語言 入門篇 第七章答案


練習7-1

#include <stdio.h>

int main() {
    int n;
    printf("%d\t%d\t%d\n", sizeof 1,sizeof(unsigned)-1,sizeof n+2 ); //此行顯示結果為 4 3 6 因為1的字節就是為4,而-1的字節也是4再減去-1所以顯示為3,最后是n+2為6                                                                  
    printf("%d\t%d\t%d\n", sizeof +1, sizeof(double) - 1, sizeof(n + 2));//此行顯示結果是 4 7 4 因為1的字節是4,double的字節長是8 -1是7,把(n+2)括起來之后使其為一個值,所以是4;
    printf("%d\t%d\t%d\n", sizeof - 1, sizeof((double)-1), sizeof (n + 2.0)  );//此行結果是 4 8 8 因為1的字節是4,把double-1都括起來之后,就是double類型字節為8,同理最后也是8
}

練習7-2

#include <stdio.h>
#include<math.h>
int main() {
    unsigned int number;
    int x;
    int i;
    int number1;
    
    printf("請輸入初始值:" );
    scanf("%d", &number);
    number1 = number;
    printf("左移多少位:");
    scanf("%d", &x);
    number <<= x;
    printf("左移后的值:%d",number);
    putchar('\n');
    for (i = 0; i < x; i++) {
        number1 *= 2;
    }
    printf("乘以2的指數冪的值:%d", number1);

}
#include <stdio.h>
#include<math.h>
int main() {
    unsigned int number;
    int x;
    int i;
    int number1;
    
    printf("請輸入初始值:" );
    scanf("%d", &number);
    number1 = number;
    printf("右移多少位:");
    scanf("%d", &x);
    number >>= x;
    printf("右移后的值:%d",number);
    putchar('\n');
    for (i = 0; i < x; i++) {
        number1 /= 2;
    }
    printf("除以2的指數冪的值:%d", number1);

}

練習7-3

#include <stdio.h>
#include<math.h>
unsigned rrotate(unsigned x,int n){
    x >>=n;
    return x;
}

int main() {
    unsigned int number;
    int x;
    printf("請輸入初始值:");
    scanf("%d", &number);
    printf("右移多少位:");
    scanf("%d", &x);


    printf("右移后的值:%d", rrotate(number, x));

}
#include <stdio.h>
#include<math.h>
unsigned lrotate(unsigned x,int n){
    x <<=n;
    return x;
}

int main() {
    unsigned int number;
    int x;
    printf("請輸入初始值:");
    scanf("%d", &number);
    printf("左移多少位:");
    scanf("%d", &x);


    printf("左移后的值:%d", lrotate(number, x));

}

練習7-4

unsigned set(unsigned x, int pos)
{
    unsigned mask = (1u << pos);
    x = (mask | x);
    return x;
}
//將第pos位設置為1
unsigned reset(unsigned x, int pos) {
    unsigned mask = 1u;
    
    if (x & (1u<<pos))
        return (x ^ (1u << pos));
    else
        return x;

}
//將第pos為設置為0
unsigned inverse(unsigned x, int pos) {
    unsigned mask = 1u << pos;
    x = (x ^ mask);
    return x;


}
//將第pos位取反

練習7-5

unsigned set_n(unsigned x, int pos, int n) {

    int i;
    for (i = 0; i < n - pos; i++) {
        unsigned mask = (1u << (pos + i));
        x = (mask | x);
    }
    return x;
}
//一個位段都設置為1
unsigned reset_n(unsigned x, int pos, int n) {
    unsigned mask = 1u;
    int i;
    for (i = 0; i < n-pos; i++) {
        if (x & (1u<<pos+i))
            x= (x ^ (1u << pos+i));    
    }
    return x;

}
//一個位段都設置為0
unsigned inverse_n(unsigned x, int pos, int n) {
    int i;
    unsigned mask = 1u;
    for (i = 0; i < n - pos; i++) {
        x = (x ^ (mask << pos + i));
    }
    return x;
}
//一個位段都取反

練習7-6

#include <stdio.h>
// 顯示unsigned類型的值最大值,同時驗證最大值+1是0.
int main() {
    unsigned a = 0;
    while (++a > 0);
        printf("%u", a - 1);
        putchar('\n');
        printf("%u", a);
}

練習7-7

#include <stdio.h>

int main() {
    float a;
    double b;
    long double c;

    scanf("%f",&a);
    printf("a=%f", a);
    putchar('\n');
    scanf("%lf", &b);
    printf("b=%f", b);
    putchar('\n');
    scanf("%lf", &c);
    printf("c=%f", c);

}

練習7-8

#include <stdio.h>

int main() {
    float a;
    double b;
    long double c;
    printf("%d,%d,%d",sizeof(a), sizeof(b), sizeof(c));

}

練習7-9

#include <stdio.h>
#include<math.h>


int main() {
    double m;
    double x;
    printf("正方形的面積是:");
    scanf("%lf", &m);
    printf("邊長是:%.2f", sqrt(m));
    

}

練習7-10

#include <stdio.h>
int main(void)
{
    float x;
    int i;
    float m = 0.0;




    for (i = 0; i <= 100; i++) {
        x = i / 100.0;
        printf("x=%f x=%f\n",m,x);
        m += 0.01;
    }
    
    return 0;
}

練習7-11

#include <stdio.h>
int main(void)
{
    float x;
    int i;
    float m = 0.0;
    float sum1 = 0;
    float sum2 = 0;

    for (i = 0; i <= 100; i++) {
        x = i / 100.0;
        printf("x=%f x=%f\n",m,x);
        m += 0.01;
        sum1 += m;
        sum2 += x;
    }
    printf("%f,%f", sum1, sum2);
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM