C Programming Test And Answer 03

本文深入解析了C语言中位字段的使用及其在内存中的表示方式,通过实例展示了如何正确理解和应用位字段,同时解释了数组在C语言中的初始化和访问方式,以及变量声明和循环控制语句的细节。

1.What will be the output of the program ?

#include<stdio.h>
int main()
{
    struct value
    {
        int bit1:1;
        int bit3:4;
        int bit4:4;
    }bit={1, 2, 13};

    printf("%d, %d, %d\n", bit.bit1, bit.bit3, bit.bit4);
    return 0;
}

Explanation:
Note the below statement inside the struct:

int bit1:1; --> ‘int’ indicates that it is a SIGNED integer.

For signed integers the leftmost bit will be taken for +/- sign.

If you store 1 in 1-bit field:

The left most bit is 1, so the system will treat the value as negative number.

The 2’s complement method is used by the system to handle the negative values.

Therefore, the data stored is 1. The 2’s complement of 1 is also 1 (negative).

Therefore -1 is printed.

If you store 2 in 4-bits field:

Binary 2: 0010 (left most bit is 0, so system will treat it as positive value)

0010 is 2

Therefore 2 is printed.

If you store 13 in 4-bits field:

Binary 13: 1101 (left most bit is 1, so system will treat it as negative value)

Find 2’s complement of 1101:

1’s complement of 1101 : 0010
2’s complement of 1101 : 0011 (Add 1 to the result of 1’s complement)

0011 is 3 (but negative value)

Therefore -3 is printed.
2.What will be the output of the program ?

#include<stdio.h>
int main()
{
    int arr[1]={10};
    printf("%d\n", 0[arr]);
    return 0;
}

Explanation:
Step 1: int arr[1]={10}; The variable arr[1] is declared as an integer array with size ‘2’ and it’s first element is initialized to value ‘10’(means arr[0]=10)

Step 2: printf("%d\n", 0[arr]); It prints the first element value of the variable arr.

Hence the output of the program is 10.
3.Which of the following statements are correct about the program?

#include<stdio.h>
char *fun(unsigned int num, int base);
int main()
{
    char *s;
    s=fun(128, 2);
    s=fun(128, 16);
    printf("%s\n",s);
    return 0;
}
char *fun(unsigned int num, int base)
{
    static char buff[33];
    char *ptr = &buff[sizeof(buff)-1];
    *ptr = '\0';
    do
    {
        *--ptr = "0123456789abcdef"[num %base];
        num /=base;
    }while(num!=0);
    return ptr;
}

Explanation:
char *ptr = &buff[sizeof(buff)-1]; makes ptr point to 32nd index of buff.
buff[32] is made null in the next statement. (*ptr=’\0’). Reason being strings are supposed to be terminated with null.

Now considering 128,2

128%2=0 so “0123456789abcdef”[num %base]; returns 0. ptr is decremented and then the value 0 is assigned. This value 0 is written on to the next six places from the right towards left till num becomes 1. Now when num becomes 1, “0123456789abcdef”[num %base] returns 1. and hence the binary rep of 128.

Similar analysis will lead one to see that with 128,16 the value returned is 80, the hexadecimal rep pf 128.
4.What will be the output of the program?

#include<stdio.h>
int main()
{
    int i=0;
    for(; i<=5; i++);
        printf("%d", i);
    return 0;
}

Explanation:
Step 1: int i = 0; here variable i is an integer type and initialized to ‘0’.
Step 2: for(; i<=5; i++); variable i=0 is already assigned in previous step. The semi-colon at the end of this for loop tells, “there is no more statement is inside the loop”.

Loop 1: here i=0, the condition in for(; 0<=5; i++) loop satisfies and then i is incremented by ‘1’(one)
Loop 2: here i=1, the condition in for(; 1<=5; i++) loop satisfies and then i is incremented by ‘1’(one)
Loop 3: here i=2, the condition in for(; 2<=5; i++) loop satisfies and then i is incremented by ‘1’(one)
Loop 4: here i=3, the condition in for(; 3<=5; i++) loop satisfies and then i is increemented by ‘1’(one)
Loop 5: here i=4, the condition in for(; 4<=5; i++) loop satisfies and then i is incremented by ‘1’(one)
Loop 6: here i=5, the condition in for(; 5<=5; i++) loop satisfies and then i is incremented by ‘1’(one)
Loop 7: here i=6, the condition in for(; 6<=5; i++) loop fails and then i is not incremented.
Step 3: printf("%d", i); here the value of i is 6. Hence the output is ‘6’.
5.What will be the output of the program?

#include<stdio.h>
int main()
{
    int x = 3;
    float y = 3.0;
    if(x == y)
        printf("x and y are equal");
    else
        printf("x and y are not equal");
    return 0;
}

Explanation:
Step 1: int x = 3; here variable x is an integer type and initialized to ‘3’.
Step 2: float y = 3.0; here variable y is an float type and initialized to ‘3.0’
Step 3: if(x == y) here we are comparing if(3 == 3.0) hence this condition is satisfied.
Hence it prints “x and y are equal”.

Mircea has n pictures. The i-th picture is a square with a side length of si centimeters. He mounted each picture on a square piece of cardboard so that each picture has a border of w centimeters of cardboard on all sides. In total, he used c square centimeters of cardboard. Given the picture sizes and the value c, can you find the value of w? A picture of the first test case. Here c=50=52+42+32, so w=1 is the answer. Please note that the piece of cardboard goes behind each picture, not just the border. Input The first line contains a single integer t (1≤t≤1000) — the number of test cases. The first line of each test case contains two positive integers n (2≤n≤2⋅105) and c (1≤c≤1018) — the number of paintings, and the amount of used square centimeters of cardboard. The second line of each test case contains n space-separated integers si (1≤si≤104) — the sizes of the paintings. The sum of n over all test cases doesn't exceed 2⋅105. Additional constraint on the input: Such an integer w exists for each test case. Please note, that some of the input for some test cases won't fit into 32-bit integer type, so you should use at least 64-bit integer type in your programming language (like long long for C++). Output For each test case, output a single integer — the value of w which was used to use exactly c squared centimeters of cardboard. Example inputCopy 10 3 50 3 2 1 1 100 6 5 500 2 2 2 2 2 2 365 3 4 2 469077255466389 10000 2023 10 635472106413848880 9181 4243 7777 1859 2017 4397 14 9390 2245 7225 7 176345687772781240 9202 9407 9229 6257 7743 5738 7966 14 865563946464579627 3654 5483 1657 7571 1639 9815 122 9468 3079 2666 5498 4540 7861 5384 19 977162053008871403 9169 9520 9209 9013 9300 9843 9933 9454 9960 9167 9964 9701 9251 9404 9462 9277 9661 9164 9161 18 886531871815571953 2609 10 5098 9591 949 8485 6385 4586 1064 5412 6564 8460 2245 6552 5089 8353 3803 3764 outputCopy 1 2 4 5 7654321 126040443 79356352 124321725 113385729 110961227 Note The first test case is explained in the statement. For the second test case, the chosen w was 2, thus the only cardboard covers an area of c=(2⋅2+6)2=102=100 squared centimeters. For the third test case, the chosen w was 4, which obtains the covered area c=(2⋅4+2)2×5=102×5=100×5=500 squared centimeters. c++实现
07-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值