Module2 POPC
Module2 POPC
Chapter 9
Introduction to C
v. Type specifiers: They are used to define the type and the interpretation of
the value of the corresponding argument.
Note: The minimum field width and precision specifiers are usually constants. However,
they may also be provided by arguments to printf(). This is done by using the * modifier
as shown in the printf statement below.
printf("%*.*#", 10, 4, 1234.34);
Here, the minimum field width is 10, the precision is 4, and the value to be displayed is
1234.34
Examples:
float a=98.765432;
printf(“\n %7.4f \n %7.2f \n %-7.2f \n %f \n %10.2e \n %11.4e \n %-10.2e \n
%e”, a, a, a, a, a, a, a, a);
Output:
98.7654
98.77
98.77
98.7654
9.88e+01
9.8765e+01
9.88e+01
9.876540e+0
char ch = ‘A’;
printf(“\n %c \n %3c \n %5c", ch, ch, ch);
Output:
A
A
A
printf(“\n This is \’so\’ beautiful”);
O/P: This is ‘so’ beautiful
printf(“\n a = |%-+7.2f| b = %07.2f c = %-0+8.2f", 1.2, 1.2, 1.2);
O/P: a= +1.20 b = 0001.20 c = 1.20
c) The address of the variable is denoted by an *&’ sign followed by the name of the
variable.
The rules to use a scanf function in C programs.
Rule 1: The scanf function works until
(a) the maximum number of characters has been processed,
(b) a white space character is encountered, or
(c) an error is detected.
Rule 2: Every variable that has to be processed must have a conversion specification associated
with it. Therefore, the following scanf statement will generate an error as num3 has no
conversion specification associated with it
scanf(“%d %d", &num1, &num2, &num3);
Rule 3: There must be a variable address for each conversion specification. Therefore, the
following scan statement will generate an error as no variable address is given for the third
conversion specification.
scanf("%d %d %d", &num1, &num2);
Rule 4: An error will be generated if the format string is ended with a white space character.
Rule 5: The data entered by the user must match the character specified in the control string
(except white space or a conversion specification), otherwise an error will be generated and
scanf will stop its processing.
Rule 6: Input data values must be separated by spaces.
Rule 7: Any unread data value will be considered as a part of the data input in the next call to
scanf.
Rule 8: When the field width specifier is used, it should be large enough to contain the input
data size.
Example-3:
Char ch;
scanf(%ch ", &ch); -> reads a single character
char str[10];
scanf("%s ", str); -> reads a string of length 10
The below table shows the scanf format codes commonly used:
Example:
The following code combines reading of variables of different data types in one single
statement
int num;
float frum;
char ch;
char str[10];
scanf ("%d %f %e %s", &num, &fnum, &ch, str);
The statement ignores the character variable and does not store it (as it is preceded by *)
scanf("%d %f %*c %s", &num, &fnum, &ch, str);
9.15 Operators in C
An operator is a symbol that tells the compiler to perform specific mathematical, logical or
relational operations to be performed. The different operators supported in ‘C’ are:
1. Arithmetic Operators
2. Relational Operators
3. Equality Operators
4. Logical Operators
5. Unary Operators
6. Increment and Decrement
7. Conditional Operators
8. Bitwise Operators
9. Assignment Operators
10. Comma operators
11. sizeof operators.
1. Arithmetic Operators:
➢ The operators that are used to perform arithmetic operations such as addition,
subtraction, multiplication, division and modulus operations are called
Arithmetic operators.
➢ These operators perform operations on two operands and hence they are binary
operators.
consider three variables declared as
int a=9, b=3, result;
a and b on which the operator is applied are called operands. Arithmetic operators can
be any integer or floating point number.
The different arithmetic operators are:
Operator Name Result Syntax Example (b=5, c=2)
+ Addition Sum a=b+c a=7
- Subtraction Difference a=b-c a=3
* Multiplication Product a=b*c a = 10
/ Division Quotient a=b/c a=2
% Modulus Remainder a=b%c a=1
4. Logical Operators: These are used to test more than one condition and make decision.
The differentlogical operators are: NOT, AND, OR
• Logical NOT (!) The output is true when input is false and vice versa. It
accepts only one input.
Input Output
X !X
0 1
1 0
➢ Logical AND (&&) The output is true only if both inputs are true. It accepts two or
moreinputs.
Input Output
X Y X && Y
0 0 0
0 1 0
1 0 0
1 1 1
➢
➢
BIT, Bangalore-04 Page 11
Principles of Programming Using C BPOPS103
➢ Logical OR (| |) The output is true only if any of its input is true. It accepts two or
more inputs.
Input Output
X Y X || Y
0 0 0
0 1 1
1 0 1
1 1 1
For example: int a=10, b;
b = !a; => result b = 0 (since a = 10 and !a = 0)
Let x=8, y=0; (x > 9) && (y + 1) => results in 0
(x > 9) || (y + 1) => results in 1
Ex: large = (4 > 2) ? 4: 2 # the condition 4>2 holds True hence the value 4 is assigned
to variable large so,
large = 4
7. Bitwise Operators: These works on bits and performs bit by bit operations.
The different types of bitwise operators are:
i. Bitwise NOT (~)
ii. Bitwise AND (&)
iii. Bitwise OR (|)
iv. Bitwise XOR (^)-> Output is True when odd number of 1’s are present.
v. Bitwise left shift (<<)
vi. Bitwise right shift (>>)
Bitwise AND (&) : The truth table is same as shown in logical AND operation. The
bitwise AND operator compares each bit of its first operand with the corresponding bit
of its second operand. If both bits are 1,the corresponding bit in result is 1 otherwise 0.
Example:
10101010 & 01010101 = 00000000
In a C program, the & operator is used as follows.
int a=10, b=20, c=0;
c = a&b;
BIT, Bangalore-04 Page 13
Principles of Programming Using C BPOPS103
Bitwise OR ( | ): The bitwise OR operator compares each bit of its first operand with
the corresponding bit of its second operand. If both bits are 0, the corresponding bit in
result is 0 otherwise 1.
Example:
10101010 | 01010101 = 11111111
In a C program, the & operator is used as follows.
int a=10, b=20, c=0;
c = a|b;
X Y X&Y X|Y
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1
Bitwise XOR (^): The bitwise XOR operator compares each bit of its first operand
with the corresponding bit of its second operand. If one of the bit is 1, the corresponding
result bit is 1 otherwise 0.
Truth table for XOR
A B A^B
0 0 0
0 1 1
1 0 1
1 1 0
Example:
10101010 ^ 01010101 = 11111111
In a C program, the ^ operator is used as follows:
int a=10, b=20, c=0;
c = a^b;
Bitwise NOT (~): It is a unary operator, performs logical negation on each bit of the
operand.
Example: ~10101011 = 01010100
X ~X
0 1
1 0
Bitwise Left Shift (<<) Shift specified number of bits to left side.
X 0 1 0 0 0 1 1 0
X<<2 0 0 0 1 1 0 0 0
Bitwise Right Shift (>>) Shift specified number of bits to right side.
X 0 1 0 0 0 1 1 0
X>>2 0 0 0 1 0 0 0 1
8. Assignment Operators: These are used to assign the result or values to a variable. The
different types of assignment operators are:
Simple Assignment a = 10
Multiple Assignment a = b = c = 10
variable=expression
• Ex: 1. c=5 //5 is assigned to c
2. b=c; // c is assigned to b
3. 5=c; // Error! 5 is a constant
The operators such as + =, * = are called shorthand assignment operators.
➢ It is used to determine the amount of memory space the variable/data type will take.
➢ It is a unary operator it can be applied to all the data types.
int a=10;
result = sizeof(a);
the result value will be 2. since integer requires 2 bytes of memory.
EXPRESSIONS
✓ It is combination of operands (variables, constants) and operators.
✓ Precedence: The order in which operators are evaluated is based on the priority
value.
✓ Associativity: It is the parsing direction used to evaluate an expression. It
can be left to right orright to left.
✓ Evaluation of expressions: Expressions are evaluated using an assignment
statement.
Ex: variable = expression
sum = a + b
➢ It is clear from the above pyramid that the following relationship holds well:
sizeof(char) < sizeof(short) < sizeof(int)< ..........< sizeof(double)
➢ If one or parent type is same as other operand type, no conversion takes place and type of
result remains same as the operands stop dictating ie., int + int=int, float + float=float
➢ If one operand type is char and the other operand type is int, the operand with type char is
promoted to
➢ int(This is because int is up in the pyramid when compared to char )
➢ If one operand type is int and the other operand type is float, the operand with type int is
promoted to (This is because float is up in the pyramid when compared to int )
➢ The table shows the examples of implicit type conversions. In the table below, two
operands are added and the results are as shown.
1. Explain how the evaluation is done for the expression 4.0/3
float/int float
The second operand 3 which is of type int is promoted to float and becomes 3.0 and
then evaluation is done. So the result must be of type float.
Advantages and Disadvantages of Implicit Conversion:
Advantages:
➢ Compiler does conversion from lower rank to higher rank. So, programmer need not worry
about the conversion procedure or the syntax.
Disadvantages:
➢ Conversion from higher rank to lower rank is not performed automatically by the compiler.
ii. Type Casting /Manual Type Conversion (Explicit) Narrow Conversion
➢ The programmer can instruct the compiler to change the type of the operand from one data
type to another data type. This forcible conversion from one data type to another data type
is called as explicit type conversion.
➢ In typing casting, a data type is converted into another data type by the programmer using
the casting operator during the program design.
➢ Syntax/Declaration:-
(type)Expression
(int)9.4333
Where,
• type is the required type of the expression.
• expression can be an operand such as variables or a constant.
Example:
i = (int)8.999 8.999 is truncated to 8 and is stored in i. So, i=8
i =(int)5.99 / (int)2.4 5.99 is truncated to 5 and 2.4 is truncated to 2 which results in
5/2=2
So, i=2
BIT, Bangalore-04 Page 18
Principles of Programming Using C BPOPS103
Chapter 10
Decision Control and Looping Statements
Selection /branching
statements
Conditional Unconditional
type type
1. if- statement:
The if statement is the simplest form of decision control statements that is frequently
used in decision making.
The general form of if statement is as shown below
if ( test Expression)
{
Statement1;
}
Statement2;
OUTPUT:
a is less than 20
value of a is 10
2. if-else statement:
• The if-else statement is an extension of simple if statement.
• The test expression is evaluated, if the result is true, the statement followed by
the expression is executed
• else if the expression is false, the statement is skipped by the compiler.
• If the test Expression is true (or non-zero) then Statement1 will be executed; otherwise if
it is false (or zero),then Statement2 will be executed.
• In this case either true block or false block will be executed, but not both.
• In both the cases, the control is transferred subsequently to the Statement X.
Example:
#include <stdio.h>
int main ()
{
/* local variable definition */
int a = 100;
/* check the Boolean condition */
if( a < 20 )
{
/* if condition is true then print the following */
printf("a is less than 20\n" );
}
else
{
/* if condition is false then print the following */
printf("a is greater than 20\n" );
}
printf("value of a is : %d\n", a);
return 0;
}
OUTPUT:
a is greater than 20
value of a is 100
3. if-else-if statement:
• It is used to test additional conditions apart from the initial test expression.
• if-else-if construct is also known as Nested if construct.
• Depending on the expressions that have to be tested, the programmer can have
as many as else-if branches.
if (Expression1)
{
if(Expression2)
{
Statement1;
}
else
{
Statement2;
}
}
else if(Expression3)
{
Statement3;
}
else
{
Statement4;
}
• If Expression1 is true, check for Expression2, if it is also true then Statement1 is executed.
• If Expression1 is true, check for Expression2, if it is false then Statement2 is executed.
• If Expression1 is false, then Statement3 is executed.
• Once we start nesting if -else statements, we may encounter a classic problem known as
dangling else.
• This problem is created when no matching else for every if.
• C solution to this problem is a simple rule “always pair an else to most recent unpaired if in
the current block”.
• Solution to the dangling else problem, a compound statement.
• In compound statement, we simply enclose true actions in braces to make the second if a
compound statement.
Example:
#include <stdio.h>
void main()
{
int age;
printf("Please Enter Your Age Here:\n");
scanf("%d",&age);
if ( age < 18 )
{
printf("You are Minor.\n");
• It is not necessary that every if statement should have an else block as C supports simple if
statements. After the first test expression or the first if branch, the programmer can have as
many else-if branches as he wants depending on the expressions that have to be tested.
if ( test expression 1)
{
statement block 1;
}
else if ( test expression 2)
{
statement block 2;
}
...........................
else if (test expression N)
{
statement block N;
}
else
{
Statement Block X;
}
Statement Y;
Example:
#include<stdio.h> void main( )
{
int a=20, b=5,c=3;
if((a>b) && (a>c))
printf(“A is greater\n”);
else if((b>a) && (b>c))
printf(“B is greater\n”);
else if((c>a) && (c>b))
printf(“C is greater\n”);
else
printf(“all are equal”);
}
Output:
A is greater
➢ Let us now summarize the rules for using if, if-else, and if-else-if statements.
Rule 1: The expression must be enclosed in parentheses.
Rule 2: No semicolon is placed after the if/if-else/ if-else-if statement. Semicolon is placed
only at the end of statements in the statement block.
Rule 3: A statement block begins and ends with a curly brace. No semicolon is placed after
the opening/closing braces.
Example program:
C- program to create result w.r.t., pass and fail, first class. Distinction, second class and
fail using else if ladder.
# include <stdio.h>
void main()
{
int m ;
printf(“ enter the marks:\n”) ;
scanf (“%d”, &m) ;
if (m<=34)
{
printf (“Fail”) ;
}
else if ( m>=35 && m<50 )
{
printf(“Pass”) ;
}
else if (m>=50 && m<60 )
{
printf(“Second Class”) ;
}
else if (m>=60) && m<70 )
{
printf(“First Class”);
}
else
printf(“Distinction”) ;
}
• Here switch, case, break and default are built-in C language words.
• If the choice matches to label1 then block1 will be executed else if it evaluates to label2
then block2will be executed and so on.
• If choice does not matches with any case labels, then default block will be executed.
• The choice is an integer expression or characters.
• The label1, label2, label3,….are constants or constant expression evaluate to integer
constants.
• Each of these case labels should be unique within the switch statement. block1, block2,
block3, are statement lists and may contain zero or more statements.
• There is no need to put braces around these blocks. Note that case labels end with colon (:).
• Break statement at the end of each block signals end of a particular case and causes an exit
from switch statement.
• The default is an optional case when present, it will execute if the value of the choice
does not match with any of the case labels.
Example:
Label →Number Label → Character
#include<stdio.h> #include<stdio.h>
#include<stdlib.h> #include<stdlib.h>
void main( ) void main( )
{ {
int ch, a, b, res; int a, b, res;
float div; char ch;
printf(“Enter two numbers:\n”); floatdiv;
scanf(“%d %d”,&a,&b); printf(“Enter two numbers:\n”);
printf(“1.Addition\n 2.Subtraction\n scanf(“%d%d”,&a,&b);
3.Multiplication\n 4.Division\n printf(“a.Addition\n b.Subtraction\n
5.Remainder\n”); c.Multiplication\n d.Division\n
printf(“Enter your choice:\n”); e.Remainder\n”);
scanf(“%d”,&ch); printf(“Enter your choice:\n”);
switch(ch) scanf(“%c”,&ch);
{ switch(ch)
case 1: res=a+b; {
break; case ‘a’: res=a+b;
case 2: res=a-b; break;
break; case‘b’: res=a-b;
case 3: res=a*b; break;
break; case‘c’: res=a*b;
case 4: div=(float)a/b; break;
break; case ‘d’: div=(float)a/b;
case 5: res=a%b; break;
break; case ‘e’ : res=a%b;
default: printf(“Wrong break;
choice!!\n”); default: printf(“Wrong
} choice!!\n”);
printf(“Result=%d\n”,res); }
} printf(“Result=%d\n”,res);
}
➢ In this program if ch=1 case ‘1’ gets ➢ In this program if ch=’a’ case ‘a’ gets
executed and if ch=2, case ‘2’ gets executed executed and if ch=b, case ‘b’ gets executed
and so on and so on.
1. while loop:
• The while loop provides a mechanism to repeat one or more statements while a
particular condition is true.
Syntax: Flowchart for while loop:
Statement x;
while (condition)
{
statement-block;
}
Statement Y;
• In while loop the condition is tested before any of the statements in the statement block
is executed. If the condition is true, only the statements will be executed otherwise if
the condition is false, the control will jump to statement Y, which is the immediate
statement outside the while loop block.
• From the flow chart diagram, it is clear that we need to constantly update the condition
of the while loop.
• The while loop will execute as long as the condition is true
• Note that if the condition is never update and the condition never becomes false then
the computer will run into an infinite loop which is never desirable.
• A while loop is also referred to as a top-checking loop since the control condition is
placed as the first line of the code. If the control condition evaluates to false ,then the
statements enclosed in the loop are never executed.
Example:
#include <stdio.h>
int main ()
{
/* local variable definition */
int a = 10;
/* while loop execution */
while( a < 20 )
{
printf("value of a: %d\n", a);
a++;
}
return 0;
}
OUTPUT:
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19
2. do-while loop:
It is a post-test loop (also called exit controlled loop) it has two keywords do
and while.
Syntax: Flowchart of do-while loop:
Statement x;
do
{
statement_block;
} while (condition);
statement y;
• The do-while loop is similar to the while loop. The only difference is that in do-while
loop, the test condition is tested at the end of the loop. Now that the test condition is
tested at the end, this clearly means that the body of the loop gets executed at least once.
• Note that the test condition is enclosed in parentheses and followed by a semicolon.
The statement blocks are enclosed within curly brackets. The curly bracket is optional
if there is only one statement in the body of the do-while loop.
• The major disadvantage of using a do-while loop is that it always executes at least once,
even if the user enters some invalid data, the loop will execute. One complete execution
of the loop takes place before the first comparison is actually done.
Example:
#include <stdio.h>
int main ()
{
/* local variable definition */
int a = 10;
/* do loop execution */
do
{
printf("value of a: %d\n", a);
a = a + 1;
}while( a < 20 );
return 0;
}
OUTPUT:
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19
3. for loop:
• Similar to the while and do-while loops, the for loop provides a mechanism to repeat a
task until a particular condition is true.
• For loop is usually known as determinate or definite loop because the programmer knows
exactly how many times the loop will repeat.
• The number of times the loop has to be executed can be determined mathematically by
checking the logic of the loop.
• When a for loop is used, the loop variable is initialized only once. With every iteration
of the loop, the value of the loop variable is updated and the condition is checked. If the
condition is true, the statement block of the loop is executed, else the statements
comprising the statement block of the for loop are skipped and the control jumps to the
immediate statement following the for loop body.
• In the syntax of for loop, initialization of the loop variable allows the programmer to give
it a value. Second, the condition specifies that while the condition expression is TRUE
the loop should continue to repeat itself. Every iteration of the loop must make the
condition near to approachable. So, with every iteration the loop variable must be
updated.
Syntax:
Example:
#include <stdio.h>
int main ()
{
int a;
/* for loop execution */
for( a = 10; a < 20; a = a +1 )
{
printf("value of a: %d\n", a);
}
return 0;
}
OUTPUT:
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19
int i=0;
for(;i<10;)
{
printf(" %d", i);
i=i+1;
}
return 0;
}
OUTPUT:
0123456789
• Multiple statements can be included in the third part of the for statement by using the
comma operator.
Example: for(i=0, j=l0; i<; i++, j--)
• The controlling variable can also be incremented / decremented by values other than 1.
Example:
#include<stdio.h>
int main()
{
int i, sum;
for(i=0;i<10;i+=2) //Increment is done by 2
printf(" %d", i);
return 0;
}
OUTPUT:
02468
• If the for loop contains nothing but two semicolons, that is no initialization, condition
testing and updating of the loop control variable then the for loop may become an infinite
loop.
Example:
#include<stdio.h>
int main()
{
int i=0, sum;
for( ; ; ) //print 0 infinitly
printf(" %d", i);
return 0;
}
• Never use floating point variable as a loop control variable. This is because floating point
values are just approximations and therefore may result in imprecise values and thus
inaccurate test for termination.
{
statement(s);
}
statement(s);
}
do {
statement(s);
}while( condition );
}while( condition );
NOTE: A final note on loop nesting is that you can put any type of loop inside any other type
of loop
Syntax sample
while(condition) #include<stdio.h>
{ void main( )
Statements; {
if(condition) int i;
break; for(i=1; i<=5; i++)
Statements; {
} if(i==3)
Statement x; break;
printf(“%d”, i)
Or }
for( ) }
{
statements; OUTPUT 12
if (condition)
break;
statements;
}
Statement x;
2. Continue:
• It terminates only the current iteration of the loop.
• Similar to the break statement the continue statement can only appear in the body of a loop.
When the compiler encounters a continue statement then the rest of the statements in the
loop are skipped and the control is unconditionally transferred to the loop- continuation
portion of the nearest enclosing loop
Syntax Flowchart
#include<stdio.h>
while(condition) void main( )
{ {
Statements; int i;
if(condition) for(i=1; i<=5; i++)
continue; {
Statements; if(i==3)
} continue;
printf(“%d”, i)
Or }
for( ) }
{
statements; OUTPUT 1245
if (condition)
continue;
statements;
}
label: OUTPUT: 5 7
• If the label is placed after the goto statement , then it is called a forward jump and in
case it is located before the goto statement, it is said to be a backward jump
Example 1: C program to find only odd no in the given range n using continue
statement
#include<stdio.h>
void main( )
{
int i , n ;
printf(“Enter the range in which odd no are to be generated \n”) ;
scanf( “%d “ , &n) ;
for(i=1; i<=n; i++)
{
if ( i%2= = 0 )
continue;
printf(“%d ”, i) ;
}
}
OUTPUT:
Enter the range in which odd no are to be generated
10
13579
#include<stdio.h>
void main( )
{
int i=1, fact=1, n ,loop;
printf(“Enter the no for which fact is to be found \n”) ;
scanf( “%d“ , &n) ;
Example Programs:
1. Write a C program to find sum of first N natural numbers using for, while and do-
while loop.
Hint: ( 1 + 2 + 3 + 4 + . . . . . . . . . . n )
a. for loop:
# include< stdio.h>
void main( )
{
int n, i, sum=0 ;
printf( “ Enter the total no of elements to be summed\n”) ;
scanf( “%d” , &n) ;
for (i=0 ; i<=n ; i++ )
sum = sum + i ;
printf ( “ The sum of first N natural no=%d” , sum) ;
}
b. while loop:
# include< stdio.h>
void main( )
{
int n , i=1 , sum=0 ;
printf( “ Enter the total no of elements to be summed\n”) ;
scanf( “%d” , &n) ;
while ( i<=n )
{
sum = sum + i ;
i++
}
printf ( “ The sum of first N natural no=%d” , sum) ;
}
c. do-while loop:
# include< stdio.h>
void main( )
{
int n , i=1, sum=0 ;
printf( “ Enter the total no of elements to be summed\n”) ;
scanf( “%d” , &n) ;
do
{
sum = sum + i ;
i = i+1 ;
} while ( i<=n ) ;
printf ( “ The sum of first N natural no=%d” , sum) ;
}
2. Write a C program to find sum of squares of N natural numbers using for loop.
Hint: ( 12+ 22 + 32 + 42 + ----------- + n2 )
# include< stdio.h>
void main( )
{
int n, i, sq_sum=0 ;
printf( “ Enter the total no of elements to be summed\n”) ;
scanf( “%d” , &n) ;
for (i=0 ; i<=n ; i++ )
sq_sum = sq_sum + i * i ;
printf ( “ The sum of first N natural no=%d” , sq_sum) ;
}
3. Write a C program to find sum of odd no. and even no. in first N natural no.
Hint: ( 1 + 3 + 5 + ----------- ) & ( 2 + 4 + 6 + )
# include< stdio.h>
void main()
{
int n, i, even_sum=0 , odd_sum=0 ;
printf( “ Enter the total no of elements to be summed\n”) ;
scanf( “%d” , &n) ;
for (i=1 ; i<=n ; i+=2 )
odd_sum = odd_sum + i ;
for (i=2 ; i<=n ; i+=2 )
even_sum = even_sum + i ;
printf ( “ The sum of odd no. in first N natural no=%d” , odd_sum) ;
printf ( “ The sum of even no. in first N natural no=%d” , even_sum) ;
}