Skip to main content

C Programming Questions – Part 1


1. What do curly braces denote in C? Why does it make sense to use curly brac es to surround the body of a function?  
Answer: The curly braces denote a block of code, in which variables can be declared. Variables declared within the block are valid only until the end of the block, marked by the matching right curly brace ’}’. The body of a function is one such type of block, and thus, curly braces are used to describe the extent of that block.

2.Describe the difference between the literal values 7, "7", and ’7’ ? 

Answer: The first literal is integer 7.Second literal is null terminated string value '7'.Third literal is character '7' having ASCII character code (55).


3. Consider the statement double ans = 10.0+2.0/3.0−2.0∗2.0; Rewrite this statement, inserting parentheses to ensure that ans = 11.0 upon evaluation of this statement ?



Answer: double ans = 10.0+2.0/((3.0−2.0)∗2.0);



4.Consider the statement double ans = 18.0/squared(2+1); For each of the four versions of the function macro squared() below, write the corresponding value of ans.

1. #define squared(x) x*x

2. #define squared(x) (x*x)

3. #define squared(x) (x)*(x)

4. #define squared(x) ((x)*(x))



Answers:

1. #define squared(x) x*x

18.0/ 2+1 * 2+1

18.0/2+2+1

9+2+1

double ans= 12

2. #define squared(x) (x*x)

18.0/ (2+1 * 2+1)

18.0/(2+2+1)

18.0/5

double ans = 3.6

3.#define squared(x) (x)*(x)

18.0/ (2+1) *(2+1)

18.0/3*3

6*3

double ans = 18

4.#define squared(x) ((x)*(x))

18.0/ ((2+1) *(2+1))

18.0/(3*3)

18.0/9

double ans = 2





5. write a C program to print “I love C language” and run in gdb explain the commands used.



Program:

#include<stdio.h>


/* C Program to print and run using gdb

* Surendra Patil - 9/15/2013

*/


int main()

{


printf("I Love C Language");

return 0;

}





Output:

[spatil@localhost ~]$ gcc -g -Wall print_pgm.c -> enables gdb on the pgm

[spatil@localhost ~]$ gdb a.out ->open the pgm with gdb

GNU gdb (GDB) Fedora (7.6-30.fc19)

Copyright (C) 2013 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "x86_64-redhat-linux-gnu".

For bug reporting instructions, please see:

<http://www.gnu.org/software/gdb/bugs/>...

Reading symbols from /home/spatil/a.out...done.

(gdb) run -> run the program

Starting program: /home/spatil/a.out

I Love C Language[Inferior 1 (process 4430) exited normally]

(gdb) quit ->exit from gdb



6.The following lines of code, when arranged in the proper sequence, output the simple message “All your base are belong to us.”

1. return 0;

2. const char msg[] = MSG1;

3. }

4. #define MSG1 "All your base are belong to us!"

5. int main(void) {

6. #include <stdio.h>

7. puts(msg);


Answer:

#include <stdio.h>

#define MSG1 "All your base are belong to us!"

int main(void) {

const char msg[] = MSG1;

puts(msg);

return 0;

}



7. For each of the following statements, explain why it is not correct, and fix it.

1 . #include <stdio.h>;

2.int function(void arg1)

  {

    return arg1-1;

  }

3. #define MESSAGE = "Happy new year!"

  puts(MESSAGE);

Answers:

1 . #include <stdio.h>;
 - preprocessor directives should not be terminated with semicolon correct code is,

#include <stdio.h>

2.int function(void arg1)

{

return arg1-1;

- arg1 is void variable which represents empty ,should not return the void values,correct code is,


int function(int arg1)

{

return arg1-1;

}

3. #define MESSAGE = "Happy new year!"

puts(MESSAGE); 
- Assignment operator should not be used in MACRO definitions,correct code is,



#define MESSAGE "Happy new year!"

puts(MESSAGE);

Comments

Unknown said…
in prob 4, 3rd part why division is done first and not multiplication in 18.0/3*3
/ and * have equal precedence. so why can't it be 18.0/9=2

Popular posts from this blog

Sampling and FFT Size derivation in LTE

Sampling and FFT Size derivation in LTE Ts = 1 / (15000 x 2048) seconds, which corresponds to the 30.72 MHz sample clock for the 2048 point FFT used with the 20 MHz system bandwidth. In the frequency domain, the number of sub-carriers N ranges from 128 to 2048, depending on channel bandwidth with 512 and 1024 for 5 and 10 MHz, respectively, being most commonly used in practice. The sub-carrier spacing is ∆f = 1/T u = 15 kHz. The sampling rate is fs = ∆f · N = 15000 N. This results in a sampling rate that’s multiple or sub-multiple of the WCDMA chip rate of 3.84 Mcps: LTE parameters have been chosen such that FFT lengths and sampling rates are easily obtained for all operation modes while at the same time ensuring the easy implementation of dual-mode devices with a common clock reference. Sampling frequency is Multiple's of 2, For 15 Mhz Bandwidth - Sampling Frequency = 23.04 (6 * 3.84). FFT SIZE = S

C Programming Questions - Part 2

1) How do you determine the size and range of the following data types ? char unsigned char short int unsigned int unsigned long float Ans:- limits.h header file defines the minimum and maximum range macros for each of the data types , sizeof(datatype) returns the number of bytes used by the datatype in current machine. 2) Write logical expressions that tests whether a given character variable c is lowercase letter uppercase letter digit white space(includes space,tab,newline) Ans:- lowercase letter = (c >= 'a' && c <= 'z') uppercase letter = (c >= 'A' && c <= 'Z') digit = (c >= '0' && c <= '9') white space(includes space,tab,newline) = (c == ' ' || c == '\t' || c == '\n') 3) Consider unsigned int val=0xCAFE; Write expressio