You are on page 1of 18
Exarn-!. FY-Bse Sub-) Dmakercet NE Progeracrrm oe Exar Desté-* uf 5I!F@x Hours) [Total Marks: 75 N.B.: (1) All questions are compulsory. @P. code-0 395 (2) Make suitable assumptions wherever necessary and state the assumptions made, (3) Answers to the same question must be written together. (4) Numbers to the right indicate marks. (5) Draw neat labeled diagrams wherever necessary. (6) Use of Non-programmable calculators is allowed. 1. ‘Attempt any three of the following: 15 ‘What is the role of a compiler and interpreter in programming? A program that is written in a high-level language must, however, be translated into machine language before it can be executed, This is known as compilation or interpretation, depending on how itis carried out, (Compilers translate the entire program into machine language before executing any of the instructions. Interpreters, on the other hand, proceed through a program by translating and then executing single instructions or small groups of instructions.) In either case, the translation is carried out automatically within the computer. In fact, inexperienced programmers may not even be aware that this process is taking place, since they typically ‘see only their original high-level program, the input data, and the calculated results. Most implementations of C operate as compilers. A compiler or interpreter is itself a computer Program. It accepts a program written in a high-level language (e.g., C) as input, and generates a corresponding machine-language program as output. The original high-level program is called the source program, and the resulting machine-language program is called the object program. Every computer must have its own compiler or interpreter for a particular high-level language. b. Draw a flowchart to generate numbers from 1 to 10. What are the various datatypes in C ? Explain them. C supports several different types of data, each of which may be represented differently within the computer's memory. The basic data types are listed below. Typical memory requirements are also given. (The memory requirements for each data type will determine the permissible range of values for that data type. Note that the memory requirements for each data type may vary from one C compiler to another.) Built in int integer quantity 2 bytes or one word (varies fromone compiler to another) char single character 1 byte float floating-point number (.e., a number containing 1 word (4 bytes) a decimal point andor an exponent) double double-precision floating-point number (i.e., more 2 words (8 bytes)significant figures, and an exponent which maybe larger in magnitude) Derived types They includ (c) Structure types, (d) Union types and (e) Function types. The array types and structure types are referred collectively as the aggregate types. The type of a function specifies the type of the function's return value. d.| What are the rule for all numeric constants in C. Integer and floating-point constants represent numbers. They are often referred to collectively as numeric-type constants. The following rules apply to all numeric-type constants. 1. Commas and blank spaces cannot be included within the constant. 2. The constant can be preceded by a minus (-) sign if desired. (Actually the minus sign is an operator that changes the sign of a positive constant, though it can be thought of as a part of the constant itself.) 3. The value of constant cannot exceed specified minimum and maximum bounds. For each type of constant, these bounds will vary from one C compiler to another. What is a variable? How are they declared and used in expressions in C? A variable is an identifier that Is used to represent some specified type of information within a designated portion of the program. in its simplest form, a variable is an identifier that is used to represent a single data item; i.e., a numerical quantity or a character constant. The data item must be assigned to the variable at some point in the program. The data item can then be accessed later in the program simply by referring to the variable name. Agiven variable can be assigned different data items at various places within the program. ‘Thus, the information represented by the variable can change during the execution of the program. However, the data type associated with the variable cannot change. A declaration associates a group of variables with a specific data type. All variables must be declared before they can appear in executable statements. A declaration consists of a data type, followed by one or more variable names, ending with a semicolon. inta,b,c; float root! , root2; char flag, text [80] ; ¥. | Determine if the following identifiers are valid inC i) record — valid Hl) Stax —~ invalid 123-45-6789 — invalid iv) address and name — invalid v)__file_3-— valid 2.| Attempt any three of the following: a.| Write a program in Cto finds the area and circumference ofa circle. b.| Explain the incrementer and decrementer operator in C with example. There are two other commonly used unary operators: The increment operator, ++, and the decrement toperator, ~. The increment operator causes its operand to be increased by 1, Example Suppose that iis an integer variable that has been assigned a value of 5. The expression +#,which is equivalent to writing i= i+ 1, causes the value of i to be increased to 6. Similarly, the expression --1, which is equivalent to i =i- 1, causes the (original) value of i to be decreased to 4. The increment and decrement operators can each be utilized two different ways, depending on whether the operator is written before or after the operand. If the operator precedes the operand (e.g., ++i), then the operand will be altered in value before it is utilized for its intended purpose within the program. If, however, the operator follows the operand (e.g., i+), then the value of the operand will be altered after it is utilized. ¢.| Explain the following functions in C i) sin() — Return the sine of double i) exp() -- Raise e to the power d (e = 2.7182818 * is the base of the natural (Naperian)system of logarithms). i) pow() -——- Return a raised to the b power. (a°) iil) tolower( c) —- Convert letter to lowercase. iv) putchar(c) —-~ Send a character to the standard output device like display ¢ contents to screen d.| Write a program in C to find fourth roots of a number entered by the user. | | Finciade emathihs = #iinclude int main(void) : double x= 0.0, result; | | | seanteaar, 6; result = sqrt(sqrt(x)); printi("The square root of %lFis %Ifn®, x, result); | | return 0: | | z Describe the syntax of the scanf{) statement in C. Input data can be entered into the computer from a standard input device by means of the C library function scanf. This function can be used to enter any combination of numerical values, single characters and strings. The function returns the number of data items that have been entered successfully.In general terms, the scanf function is written as scanf{controi string, argl, arg2, ..., argn) where control string refers to a string containing certain required formatting information, and argl,arg2, .. . argn are arguments that represent the individual input data items. The control strine consists of individual groups of characters. ‘one character croup for conversion character which indicates the type of the corresponding data item.Within the control string, multiple character groups can be contiguous, or they can be separated by whitespace characters (ie., blank spaces, tabs or newline characters). If whitespace characters are used to separate multiple character groups in the control string, then all consecutive whitespace characters in the input data will be read but ignored, The use of blank spaces as character-group separators is very common € data item is a single character d data item is a decimal integer e data item is a floating-point value f data item is a floating-point value & data item is a floating-point value h data item is a short integer idata item is a decimal, hexadecimal or octal integer 0 data item is an octal integer S data item is a string followed by a whitespace character (the null character \ 0 will automatically be added at the end) U data item is an unsigned decimal integer X data item is a hexadecimal integer [..] data item isa string which may include whitespace characters The arguments are written as variables or arrays, whose types match the corresponding character groupsin the control string. Each variable name must be preceded by an ampersand (&). Example char item(201; intpartno; floatcost; "9s She %6f",item, Bpartno, &cost); Explain :?, += and %= in and expression in C. :? THE CONDITIONALOPERATOR Simple conditional operations can be carried out with the conditional operator (7 :). An expression that makes use of the conditional operator is called a conditional expression. Such an expression can be written in place of the more traditional if -else statement Aconditional expression is written in the form expression 1 ? expression 2 : expression 3 When evaluating a conditional expression, expression 1 is evaluated first. If expression 1 is true (1e,, ifits value is nonzero), then expression 2 is evaluated and this becomes the value of the conditional expression. However, if expression 1 is false (i.e., i its value is zero), then expression 3is evaluated and this becomes the value of the conditional exoression. Note ‘that only one of the embedded expressions (either expression 2 or expression 3) is evaluated when determining the value of a conditional expression. EXAMPLE In the conditional expression shown below, assume that iis an integer variable. 0)?0:100 ‘The expression (i <0) is evaluated first. If itis true entire conditional expression takes on the value 0. Otherwise (if the value of iis not less than 0),the entire Pen -o~ oper “eerie eatin nt eieeeinn faerie ate My if the value of iis less than 0), the += The assignment expression expression 1 += expression 2 Is equivalent to expression 1 = expression 1 + expression 2 9%= The assignment expression expression 1 %= expression 2 is equivalent to expression 1 = expression 1 % expression 2 3.| Attempt any three of the following: 15 | a.) Describe the syntax of the for statement in C. The f or statement is the third and perhaps the most commonly used looping statement in C. This statement includes an expression that specifies an initial value for an index, another expression that determines whether or not the loop is continued, and a third expression that allows the index to be modified at the end of each pass. The general form of the for statement is for ( expression 1; expression 2; expression 3) statement where expression 1 is used to initialize some parameter (called an index) that controls the looping action, expression 2 represents a condition that must be true for the loop to continue execution, and expression 3is used to alter the value of the parameter initially assigned by expression 1. Typically, expression 1 is an assignment expression, expression 2 is a logical expression and expression 3 is a unary expression or an assignment expression. When the for statement is executed, expression 2is evaluated and tested at the beginning of each pass through the loop, and expression 3 is evaluated at the end of each pass. Thus, the for statement is equivalent to expression 1; while (expression 2) { statement expression 3; t The looping action will continue as long as the value of expression 2 is not zero, that is, as Jong as the logical condition represented by expression 2s true. The f or statement, like the while and the do - while statements, can be used to carry out looping actions where the number of passes through the loop Is not known in advance. Because of the features that are built into the f or statement, however, itis particularly well suited for loops in which the number of passes is known in advance. As a rough rule of thumb, while loops are generally used when the number of passes is not known in advance, and fo r loops are generally used when the number of passes is known in advance b.| Write a program in C to generate the Fibonacci series 0, 1, 1, 2, 3, 4, nterms using a while loop. #includesstdio.h> int main({ int kr; long int i=01, printi("Enter the number range:"); scanf("9%d", 8); printf("FIBONACCI SERIES: printf("%6ld 961d",i,j); printf(" %ld",)); } return 0; } .| What is the conditional statement in C? Describe its various syntax. The general form of an if statement which includes the else clause is if (expression) statement 1 else statement 2 If the expression has a nonzero value (i.e., if expression is true), then statement 1 will be executed, Otherwise (Le., if expression is false), statement 2 will be executed. Itis possible to nest (.e., embed) if- else statements, one within another. There are several different forms that nested if - else statements can take. The most general form of two- layer nesting is, ifelifezst else s2 else if €3 s3 else s4 where e |, e2 and e3 represent logical expressions and s 1, s2,s3and s4 represent statements. Now, one complete if - else statement will be executed if el is nonzero (true), and another complete if - else statement will be executed if e 1 is zero (false). Itis, of course, possible that s1, s2,s3and s4 will contain other if - else statements. We would then have multilayer nesting. ‘the general form of four nested if - else statements could be written as ifels! else if 2 52 else if e3 s3 else if e4 s4 else sS When a logical expression is encountered whose value is nonzero (true), the corresponding statement will be executed and the remainder of the nested if- else statements will be bypassed. Thus, control will be transferred out of the entire nest once a true condition is encountered. The final else clause will apply if none of the expressions is true. It can be used to provide a default condition or an error message. Ge aks ee el anaes Thane diecues, dicieeee task. Every C program consists of one or more functions One of these functions must be called main, Execution of the program will always begin by carrying out the instructions in main, Additional functions will be subordinate to main, and perhaps to one another. Ifa program contains multiple functions, their definitions may appear in any order, though they must be independent of one another. That is, one function definition cannot be embedded within another. A function will carry out its intended action whenever it is accessed (i.e., whenever the function is "called") from some other portion of the program. The same function can be accessed from several different places within a program. Once the function has carried out its intended action, control will be returned to the point from which the function was accessed. Generally, a function will process information that is passed to it from the calling portion of the program, and return a single value. Information is passed to the function via special identifiers called arguments (also called parameters), and returned via the return statement In general terms, a function declaration can be written as Function prototypes are usually written at the beginning of a program, ahead of any programmer-defined functions (including main). The general form of a function prototype is data-type name{ type 1 arg 1, type 2 arg 2,...., typenargn); where data- type represents the data type of the item that is returned by the function, name represents the function name, and type 1, type 2, . . ., type n represent the data types of the arguments arg 1, arg 2,...., arg n. Notice that a function prototype resembles the first line of a function definition (though a function prototype ends with a semicolon). The names of the arguments within the function prototype need not be declared elsewhere in the program,since these are "dummy" argument names that are recognized only within the prototype. In fact, the argumentnames can be omitted (though it is not a good idea to do so);however, the argument data types are essential A function definition has two principal components: the first line (including the argument declarations), and the body of the function. The first line of a function definition contains the type specification of the value returned by the function, followed by the function name, and (optionally) a set of arguments, separated by commas and enclosed in parentheses. Each argument is preceded by its associated type declaration. An empty pair of parentheses must follow the function name if the function definition does not include any arguments. In general terms, the first line can be written as data- type name( type 1 arg 7, type 2 arg 2, ..., type n arg n) where data - type represents the data type of the item that is returned by the function, name represents the function name, and type I,type 2, ..., type n represent the data types of the arguments arg, arg 2,..., arg n. The arguments are called formal arguments, because they represent the names of data items that are transferred into the function from the calling portion of the program. They are also known as parameters or formal parameters. The remainder of the function definition is a compound statement that defines the action to be taken by the function. This compound statement is sometimes referred to as the boafy of the function. Like any other compound statement, this statement can contain expression statements, other compound statements, control statements, and so on. It should include one or more return statements, in order to return a value to the calling portion of the program. numbers from 1 to 10. #include +#include int fact(int); void main() A int ix; ph) printf("\nfactorial of %d is %d ",j,x); | getch(); } int fact(int z) {int fac=1; forljzl=0;2--) {fact=z; } return(fac); } Explain with example the various ways of calling a function in C. Call by Value If data is passed by value, the data is copied from the variable used in for example main() to a variable used by the function. So if the data passed (that is stored in the function variable) is modified inside the function, the value is only changed in the variable used inside the function. #include void call_by_value(int x) { printf("Inside call_by_value x = %d before adding 10.\n", x); 0; printf("Inside call_by_value x = %d after adding 10.\n", x); } int main() { int =10; printf("a = %d before function call_by_value.\n", a); call_by_value(a); printf("a = %d after function call_by_value,\n", a); return 0; iH The output of this call by value code example will look like this: Inside call_by_value x = 20 after adding 10. a= 10 after function call_by_value. In the main() we create a integer that has the value of 10. We print some information at every stage, beginning by printing our variable a. Then function call_by_value is called and we input the variable a. This variable (a) is then copied to the function variable x. In the function we add 10 to x (and also call some print statements). Then when the next | _ statements called in main() the value of variable ais printed. We can see that the value of variable a isn’t changed by the call of the function call_by_value(). Call by Reference In this method the reference variables of the actual arguments are created as formal arguments. Reference variables are aliases of the original variables and refer to the same memory locations as the original variables do. Since the formal arguments are aliases of the actual arguments, if we do any changes in the formal arguments they will affect the actual arguments. #include void call_by_value(int &x) { printf("Inside call_by_value x = %d before adding 10.\n", x); x42 10; | printf("Inside call_by_value x = %d after adding 10.\n", x); int main() { int a=: 0; printf("a = %d before function call_by_value.\n", a); call_by_value(a); printf("a = %d after function call_by_value,\n", a); return 0; Call by address In this method the addresses of the actual arguments are copied to the formal arguments. Since the formal arguments point to the actual arguments as they contain addresses of the actual arguments, if we do any changes in the formal arguments they will affect the actual arguments. The formal arguments will be pointers because we have to store addresses in them #include void call_by_value(int *x) { printf("Inside call_by_value x *\ 42 10; printf("Inside call_by_value x = %d after adding 10.\n", *x); sd before adding 10.\n", *x); printf("a = %d before function call_by_value.\n", a); call_by_value(&a); printf("a = %d after function call_by_value.\n", a); return 0; 4,| Attempt any three of the following: 2 | What are storage classes in C ? What are thelr scope in C? Storage class refers to the permanence of a variable, and its scope within the program, i.e, the portion of the program over which the variable is recognized. There are four different storage-class specifications in C: automatic, external, static and register. They are identified by the keywords auto, extern, statie and register, respectively. The storage class associated with a variable can sometimes be established simply by the location of the variable declaration within the program. In other situations, however, the keyword that specifies a particular storage class must be placed at the beginning of the variable dectaration Automatic variables are always declared within a function and are local to the function in which they are declared; that is, their scope is confined to that function. Automatic variables defined in different functions will therefore be independent of one another, even though they may have the same name. External variables, in contrast to automatic variables, are not confined to single functions. Their scope extends from the point of definition through the remainder of the program. Hence, they usually span two or more functions, and often an entire program. They are often referred to as global variables. Since external variables are recognized globally, they can be accessed from any function that falls within their scope. They retain their assigned values within this scope. Therefore an external variable can be assigned a value within one function, and this value can be used (by accessing the external variable) within another function. Static variables are defined within a function in the same manner as automatic variables, except that the variable declaration must begin with the s ta ti c storage-class designation. Static variables can be utilized within the function in the same manner as other variables. They cannot, however, be accessed outside of their defining function Registers are special storage areas within the computer's central processing unit. The actual arithmetic and logical operations that comprise a program are carried out within these | registers. Normally, these operations are carried out by transferring information from the computer’s memory to these registers, carrying out the indicated operations, and then transferring the results back to the computer’s memory. This general procedure is repeated many times during the course of a program's execution. The values of register variables are stored within the registers of the central processing unit. A | variable can be assigned this storage class simply by preceding the type declaration with the | keyword register_. b | What are preprocessor directives in C? Explain #include and # define in C. The C preprocessor is a collection of special statements, called directives, that are executed at the beginning of the compilation process. The #include and #define statements are preprocessor directives. Additional preprocessor directives are #f, #elif, #else, #endlf, #if def, tif ndef, #line and #undef. The preprocessor also includes three special operators: defined, #, and ##. Preprocessor directives usually appear at the beginning of a program, ‘though this is not a firm requirement. Thus, a preprocessor directive may appear anywhere | The preprocessor statement #include; i.e., #include < filename> where filename represents the name of a special file. The names of these special files are specified by each individual implementation of C, though there are certain commonly used file names such as stdio. h, st d lib. h and math. h. The suffix “h” generally designates a “header” file, which indicates that itis to be included at the beginning of the program. A symbolic constant is defined by writing define name text where name represents a symbolic name, typically written in uppercase letters, and text represents the sequence of characters that is associated with the symbolic name. Note that text does not end with a semicolon, since a symbolic constant definition is not a true C statement. Moreover, if text were to end with a semicolon, this semicolon would be treated as though it were a part of the numeric constant, character constant or string constant that is substituted for the symbolic name. itdefine TAXRATE 0.23 #define PI 3.141593 #idefine TRUE 1 #tdefine FALSE 0 #define FRIEND "Susan" What are two dimensional arrays in C? How can they be declared and initialized in C? Multidimensional arrays are defined in much the same manner as one-dimensional arrays, except that a separate pair of square brackets is required for each subscript. Thus, a two- dimensional array will require two pairs of square brackets storage-class data- type arrayl expression 1 ] [ expression 2] anm xn, two-dimensional array can be thought of as a table of values having m rows and n columns, float table[50][50]; char page[24][80]; The first line defines table as a floating-point array having 50 rows and 50 columns (hence 50 x 50 = 2500 elements),and the second line establishes page as a character array with 24 rows and 80 columns (24 x 80 = 1920 elements). int values[3][4] = (1, 2, 3, 4,5, 6, 7,8, 9, 10, 11, 12); Note that values can be thought of as a table having 3 rows and 4 columns (4 elements per row). Since the initial values are assigned by rows (ie., last subscript increasing most rapidly), the results of this initial assignment are as follows. values[O]{I] = 2 values(0][2] = 3 values(0][3] = 4 values(!][O] = 5 values(I]{I] = 6 values(!][2] = 7 values[I][3] = 8 values[2][0] = 9 values[2][1] = 10 values[2][2] = 11 values[2][3] = 12 Remember that the first subscript ranges from 0 to 2, and the second subscript ranges from int values[3][4] = {1, 2,3, 4}, {5,6,7, 8}, {9, 10, 11, 12} & | Write a program in C to find the sum of 20 double values entered by the user. #include int main() { int ¢; double sum = 0, array[20]; for (¢=0; ¢< 20; c+4) { scanf("%d", &arrayle)); sum = sum + array[c]; } printf("Sum = %d\n",sum); return 0; } | Write a short note on strings in C. Astring can be represented as a one-dimensional character-type array. Each character within the string will be stored within one element of the array. Strings are actually one-dimensional array of characters terminated by a null character "\0'. Thus a null-terminated string contains the characters that comprise the string followed by anull, The following declaration and initialization create a string consisting of the word "Hello". To hold the null character at the end of the array, the size of the character array containing the string is one more than the number of characters in the word "Hello." If you follow the follows - tule of array initialization then you can write the above statement as ‘automatically places the ‘\0' at the end of the string when it initializes the array Explain the following functions in C- i) streat() —-streat(s1, s2) Concatenates string s2 onto the end of string s1. {l) _strlen() —strlen(s1) Returns the length of string s1 ii!) stremp( ) — The stremp function accepts two strings as arguments and returns an integer value, depending upon the relative order of the two strings, as follows: 1. A negative value if the first string precedes the second string alphabetically. 2. Avalue of zero if the first string and the second string are identical (disregarding case). 3. A positive value if the second string precedes the first string alphabetically. Therefore, if stremp( string |, string2) returns a positive value, it would indicate that s tr in g2 must be moved, placing it ahead of string lin order to alphabetize the two strings properly. [2] ret] 2] 5.| Attempt any three of the following: 15 .| What are pointers in C? Write a program in C to add 2 float numbers using pointers. A pointer is a variable that represents the location (rather than the value) of a data item, such as a variable or an array element. ‘Suppose v is a variable that represents some particular data item. The compiler will | automatically assign memory cells for this data item. The data item can then be accessed if we know the location (i.e., the address) of the first memory cell.* The address of v’s | memory location can be determined by the expression &v, where & is a unary operator, called the address operator, that evaluates the address of its operand. Now let us assign | the address of v to another variable, pv. Thus, | pv= av | This new variable is called a pointer to v, since it “points” to the location where vis stored in memory Remember, however, that pv represents v's address, not its value. Thus, pv is referred to as a pointer variable. #include int main() ih int first, second, *p, *q, sum; printf("Enter two integers to add\n"); "seds6d", &first, &second); sum = *p+"q; printi("Sum of entered numbers = %d\n" sum); return 0; } arithmetic operations on a pointer just as you can on a numeric value. There are four arithmetic operators that can be used on pointers: +4, —, +, and- To understand pointer arithmetic, let us consider that ptris an integer pointer which Points to the address 1000. Assuming 32-bit integers, let us perform the following arithmetic operation on the pointer ~ After the above operation, the ptr will point to the location 1004 because each time ptr is incremented, it will point to the next integer location which is 4 bytes next to the current location. This operation will move the pointer to the next memory location without | impacting the actual value at the memory location. If ptr points to a character whose | address is 1000, then the above operation will point to the location 1001 because the next character will be available at 1001. Similarly ptr — ptr decrements 4 bytes in case of interges and one byte in case of characters Pointers may be compared by using relational operators, such as ==, <, and >. If p1 and p2 point to variables that are related to each other, such as elements of the same array, then pi and p2 can be meaningfully compared. | Explain the terms “array of pointers” and “pointer to an array” in C. | ARRAYS OF POINTERS. A multidimensional array can be expressed in terms of an array of pointers rather than a | pointer to a group of contiguous arrays. In such situations the newly defined array will have | one less dimension than the original multidimensional array. Each pointer will indicate the | beginning of a separate (n- 1)-dimensional array.In general terms, a two-dimensional array can be defined as a one-dimensional array of pointers bywriting data - type *array[ expression 1) ; rather than the conventional array definition, data- type arrayf expression J { expression 2]; Similarly, an n-dimensional array can be defined as an (n - 1)-dimensional array of pointers. by writing data- type *array[ expression1] [ expression 2) .. .[ expression n- 1]; rather than data- type array[ expression |] [ expression 2]. . . | expression n] ; In these declarations data- type refers to the data type of the original n-dimensional array, array is the array name, and expression I, expression 2, ..., expression n are positive- valued integer expressions that indicate the maximum number of elements associated with each subscript. int*x[10]; Hence, x[ 01 points to the beginning of the first row, x[ 1 ] points to the beginning of the second row, and so on. Note that the number of elements within each row is not explicitly specified. x{0] xf] *@(1}#2) X(t] +2 Pointer to a array: An array name is a constant pointer to the first element of the array. Therefore, in the declaration - balance is a pointer to &balance[0], which is the address of the first element of the array balance. Thus, the following program fragment assigns pas the address of the first element of balance ~ Itis legal to use array names as constant pointers, and vice versa. Therefore, *(balance + 4) is a legitimate way of accessing the data at balance(4]. d.| Explain the declaration in C. struct { int acct_no; char acct_type; char name[80]; float balance; } account ; account cust, customer1[10], *pe; This structure is named account (i.e., the tag is account). It contains four members: an integer quantity (acct-no), a single character (acct-type), an 80-element character array (name [ 80}),and a floating-point quantity (balance). cust is structure variable , and customer1[10] is an array of structure *pcis a pointer of the structure account type e.| Explain the difference between structure and union in C. difference between structure and union in C I aera: Lie | Example structure declarati struct s tag { int ival; float fval; | char *cptr; Us: | Within a structure all members gets memory] |allocated and members have addresses that, increase as the deciarators are read left-to- right. That is, the members of a structure all | |begin at different offsets from the base of| ||the structure, The offset of a particular member corresponds to the order of its declaration; the first member is at offset 0. ‘The total size of a structure is the sum of the size of all the members or more because of | appropriate alignment. | Within a structure all members gets memory] |allocated; therefore any member can be | retrieved at any time. One or more members of a structure can be, initialized at once. | Example union declaration: union u_tag { int ival; float fval; char *cptr; For a union compiler allocates the memory, for the largest of all members and in a union all members have offset zero from the base, ithe container is big enough to hold the WIDEST member, and the alignment is appropriate for all of the types in the union. When the storage space allocated to the union contains a smaller member, the extra space between the end of the smaller member and the end of the allocated memory remains unaltered. While retrieving data from a union the type that is being retrieved must be the type most recently stored. It is the programmer's responsibility to keep track of which type is currently stored in a union; the results are implementation-dependent if something is stored as one type and extracted as another. A union may only be ized with 2 value of the type of its first member; thus union u described above (during example declaration) can only be initialized with an integer value. Explain how members of a structure be acces PROCESSING A STRUCTURE The members of a structure are usually proce: Therefore, we must be writing variable. Member where variablerefers to-th separates the variable name from the menhet Accessing Structure Members 1. Array elements are accessed using able to access the individual structure members. A structure member can be accessed by member refers to the rAme of a member within the structure. Notice the period (.) that, sed by a variable and a pointer in C. ssed individually, as separate entities. e name of a structure-type variable, and fname. sit the Subscript variable , rly Structure | #include | struct Vehicle { int wheels; char vname|20]; char color[10}; | va = "Nani "Red" int main() < printf("Vehicle No of Wheels : %d",vi.wheels); printf("Vehicle Name = %s",v1.vname]; printf("Vehicle Color: %s",vi.color); return(0); } | More complex expressions involving the repeated use of the period operator may also be written. For example, ifa structure member is itself a structure, then a member of the embedded structure can be accessedby writing variable. member. submember where member refers to the name of the member within the outer structure, and submember refers to the name of the member within the embedded structure. Similarly, it a structure member is an array, then an individual array element can be accessed by writing variable. member{ expression] where expression is a nonnegative value that indicates the | | array element. Accessing Structure Members with a pointer An individual structure member can be accessed in terms of its corresponding pointer variable by writing ptvar- >member where ptvar refers to a structure-type pointer variable and the operator -> is comparable to the period (.) operator Thus, the expression ptvar->member |_| isequivalent to writing variable. member where variable is a structure-type variable, The operator -> falls into the highest structure (ie.,to access a member of a structure that is itself a member of another structure). Hence, a submember can be accessed by writing ptvar- >member. submember Similarly, the -> operator can be used to access an element of an array that is a member of a structure. This is accomplished by writing ptvar- >member{ expression] where expression is a nonnegative integer that indicates the array element.

You might also like