2007 Pearson Education, Inc. All rights reserved.
Structs as Function Arguments and Results
Arrays– Pass by referance
Struts– the same way as the basic types in C - char, int, float
- passed as arguments
- returned as results
1
2007 Pearson Education, Inc. All rights reserved.
typedef struct Person{
int age;
char gnd;
float weight;
} PERSON;
2
2007 Pearson Education, Inc. All rights reserved.
the use of the members of a struct.
int adjustAge( int oldAge ){
if ( oldAge < 39 ) return( ++oldAge );
else return( oldAge );
/*return (oldAge<39) ? ++oldage : oldage;*/
}
void main(){
PERSON Jim;
:
Jim.age = adjustAge( Jim.age );
:
}
3
2007 Pearson Education, Inc. All rights reserved.
typedef struct Book{
int edition;
int pages;
double weight;
char type;
int WC; /*weight classification 1 heavy, 0 is not */
} BOOK;
Write a function tack an argument double to test the weight of a book and return 1 if the weight greater than 2 and 0 otherwise. The value to be assign to WC member.
4
2007 Pearson Education, Inc. All rights reserved.
int weightC(double w){
if(w > 2) return 1;
else return 0;
}
void main(){
BOOK myBok;
:
myBoK.wc = weightC(myBok.weight);
:
}
5
int weightC(double w){
return (w > 2)? 1 : 0;
}
2007 Pearson Education, Inc. All rights reserved.
ASS
Consider the student struct: add a new member name it GL /*Grades Later*/
Write a function tack a double to test the average of the student and return a later match the average to be assign to the new member
Test the function
6
2007 Pearson Education, Inc. All rights reserved.
The whole of a struct is returned by a function
PERSON get_details() {
PERSON temp;
printf("Please enter Age, Gender and Weight (Kg): ");
scanf("%d %c%f", &temp.age, &temp.gnd, &temp.weight );
return temp;
}
void main(){
PERSON Jim, Mary, Sid;
:
Jim = get_details();
:
}
7
2007 Pearson Education, Inc. All rights reserved.
Write a function allow the user to input the details of a BOOK and return it back
typedef struct Book{
int edition;
int pages;
double weight;
char type;
} BOOK;
8
2007 Pearson Education, Inc. All rights reserved.
BOOK GetBook(){
BOOK tmp;
printf(“\nEnter the BOOK information:”);
printf(“ [edition, pages, weight, and type]”);
scanf(“%d%d%f%c”, &tmp.edition, &tmp.pages. &tmp.weight. &tmp.type);
retrun tmp;
}
void main(){
BOOK myBook;
:
myBook = GetBook();
:
}
9
2007 Pearson Education, Inc. All rights reserved.
ASS
Write a function allow the user to input the details of a STUDENTand return it back
Test the function
10
2007 Pearson Education, Inc. All rights reserved.
Passing a struct as a function argument
void show_details( PERSON who ){
printf( "Person's age was: %d\n", who.age );
printf( " Gender was: %c\n", who.gnd );
/* Kg -> lb */
who.weight = who.weight * 2.2;
printf( " weight (lb) was: %5.1f\n", who.weight );
}
void main(){
PERSON Jim, Mary, Sid;
:
Jim = get_details();
:
show_details(Jim);
}
11
2007 Pearson Education, Inc. All rights reserved.
Write a function tack a BOOK and print the content out
12
2007 Pearson Education, Inc. All rights reserved.
void PrintBook( const BOOK b){
printf(“The BOOK information:\n”);
printf(“\n\tedition: %d\n\tpages: %d”, b.edition, b.pages);
printf(“\n\tweight: %f \n\ttype: %c”, b.weight, b.type);
}
void main(){
BOOK myBook = {2, 120, 2.5, ‘A’};
:
PrintBook(myBook);
:
}
13
2007 Pearson Education, Inc. All rights reserved.
ASS
Write a function tack a STUDENT and print the content out
Test the function
14
2007 Pearson Education, Inc. All rights reserved.
Arrays of structs
to store the same package of information for a number of different entities
typedef struct Person{
int age;
char gnd;
float weight;
} PERSON;
15
2007 Pearson Education, Inc. All rights reserved.
Arrays of structs
PERSON employee[12];
We have an array of 12 elements each of which is a structure with 3 members. We can access any member of any element,
employee[9].age = 45;
Also we can treat each element as a whole structshow_details(employee[5]);
employee[3] = get_details();
16
2007 Pearson Education, Inc. All rights reserved.
Consider the following struct BOOK, Create an array of three BOOK s
typedef struct Book{
int edition;
double weight;
char type;
} BOOK;
17
2007 Pearson Education, Inc. All rights reserved.
BOOK academic[3];
BOOK academic[3] = {
{1,2.5,’a’},
{2,3.5,’n’},
{2,1.5,’a’}
};
Read in the information of the second
18
2007 Pearson Education, Inc. All rights reserved.
academic[1] = GetBook();
Printout the information of the first
19
2007 Pearson Education, Inc. All rights reserved.
PrintBook(academic[0]);
Printout the content of the array
20
2007 Pearson Education, Inc. All rights reserved.
int i;
for(i=0; i<3; i++)
PrintBook(academic[i]);
21
2007 Pearson Education, Inc. All rights reserved.
ASS
1. Create an array of four STUDNTs with initial values
2. – Create another array of five STUDNTs
– Read in the information of the whole student
– Printout the content
– Assign the second the information of the second of the array created at 1
– Printout the information of the second
22
2007 Pearson Education, Inc. All rights reserved.
Structs Containing Arrays
typedef struct{
int age;
char gnd;
float weight;
char name[20];
} HUMAN;
HUMAN ahm = { 45, ‘M’, 95.1, “Ahmad Ali”};HUMAN ahm = { 45, ‘M’, 95.1, {‘A’, ‘h’, ‘m’, ‘a’, ‘d’, ‘ ‘, ‘A’, ‘l’, ‘i’, ‘\0’}};
23
2007 Pearson Education, Inc. All rights reserved.
char initial = ahm.name[0];
putchar(initial);
Printout the 3rd char of ahm’s name
24
2007 Pearson Education, Inc. All rights reserved.
char third = ahm.name[2];
printf(“%c”, third); /*putchar(third)*/
allow the user to input the 6th char of ahm’s name
25
2007 Pearson Education, Inc. All rights reserved.
scanf(“%c”, &ahm.name[5]);
print the name char by char
26
2007 Pearson Education, Inc. All rights reserved.
int i;
for(i=0; i<20; i++)
putchar(ahm.name[i]);
i=0;
while( ahm.name[i] != ‘\0’)
putchar(ahm.name[i++]);
Print out the name at once
27
2007 Pearson Education, Inc. All rights reserved.
printf(“%s\n”, ahm.name);
puts(ahm.name);
allow the user to input the ahm’s name
28
2007 Pearson Education, Inc. All rights reserved.
scanf(“%s”, ahm.name);
gets(ahm.name);
Which is better?
29
2007 Pearson Education, Inc. All rights reserved.
typedef struct Book{
int edition;
double weight;
char type;
} BOOK;
Rewrite the BOOK with a new member title
30
2007 Pearson Education, Inc. All rights reserved.
typedef struct Book{
int edition;
double weight;
char type;
char title[30];
} BOOK;
Create a variable of book with initial values
31
2007 Pearson Education, Inc. All rights reserved.
BOOK myBook = {1,2.5,’a’, “C programming” }
change the title to “c how to program”
32
2007 Pearson Education, Inc. All rights reserved.
gets(myBook.title);
scanf(“%s”, myBook.title);
33
2007 Pearson Education, Inc. All rights reserved.
ASS
Create a Time struct with classification member (“PM”, “AM”)
Write a function to print out the content of the Time
Create a STUDENT struct with a name member up to 30 char
Write two functions to read the information of a student and the second to print out the information.
34
2007 Pearson Education, Inc. All rights reserved.
HUMAN client[2] = {
35, ‘M’, 95.1, “Ahmad Ali”,
25, ‘F’, 50.9, "Salma Zakarea”
};
printf( "%s\n", client[1].name );
printf( "%c\n", client[1].name[0] );
35
2007 Pearson Education, Inc. All rights reserved.
HUMAN client[2] = {
35, ‘M’, 95.1, “Ahmad Ali”,
25, ‘F’, 50.9, "Salma Zakarea”
};
HUMAN temp;
Assign the values of first client to temptypedef struct{
int age;
char gnd;
float weight;
char name[20];
} HUMAN;
36
2007 Pearson Education, Inc. All rights reserved.
temp = client[0];
temp.age = client[0].age;
temp.gnd = client[0].gnd;
Temp.weight = client[0].weight;
strcpy(temp.name, client[0].name);
37
Top Related