Jump to content
Admin2

C- Camne Nak Return Character Dalam Function?

Recommended Posts

Soalan dia:

You are required to write a program to calculate the grade and print the result slip for each student. This program should have a main() function, average() function, grade() function , and a display() function. All functions must be called from the main() function. You are required to use if..else statements for this question. Use while loop to continue or stop the program.

In average() function, get marks from main() and calculate the average, return the average to main().

In grade() function, get average value from main() and specify the grade. Return a grade to main().

49 and below- Fail

50 to 69 - C

70 to 79 - B

80 to 89 - A

90 to 100 - A+

In display() function, display name, average, and grade of student.

***********************************

STUDENT INFORMATION

***********************************

Enter Student Name : Eric

Enter Subject Mark 1 :100

Enter Subject Mark 2 :100

Enter Subject Mark 3 :100

***********************************

RESULTS

***********************************

Student Name : Eric

Average Marks : 100.00

Grade : A+

-----------------------------------

Continue ? [ 0 - Exit] : 0

Ni yang aku wat tanpa FUNCTION. :

#include <stdio.h>

float average(float);

void grade();

void display();



main()
{
    char name[100], grd[2];

    float mark, avgmark, totalmark;

    int loop, i;

    totalmark = 0;
    loop = 1;

//printf("Continue ? [0-Exit]: ");
//scanf("%d", &loop);



while (loop != 0)
{
    //getchar(); // Clearkan char

    printf("***********************************\n");
    printf("STUDENT INFORMATION\n");
    printf("***********************************\n");


    
    printf("Enter Student Name: ");
    
    gets(name);
    for (i=1; i<=3; i++)
    
    {
        printf("Enter Subject Mark %d: ", i);
        
        scanf("%f",&mark);
        
        totalmark = totalmark + mark;
    
    }
    

    avgmark = average(totalmark);

    //avgmark = totalmark/3; // send to average function

    //printf("Total Mark = %.2f", totalmark);
    
    
printf("***********************************\n");
printf("RESULTS\n");
printf("***********************************\n");

printf("Student Name\t: %s\n", name);
printf("Average Marks\t: %.2f\n",avgmark);


if (avgmark >=90 && avgmark<=100)

puts("Grade\t: A+");

else if(avgmark >=80 && avgmark<=89)

puts("Grade\t: A");

else if(avgmark >=70 && avgmark<=79)

puts("Grade\t: B");

else if(avgmark >=50 && avgmark<=69)

puts("Grade\t: C");

else if(avgmark <49)

puts("Grade\t: Fail");


printf("Continue ? [0-Exit]: ");
scanf("%d", &loop);

getchar(); 

} // Whilee loop punya end
//printf("Grade\t: %s\n",grade);
    //printf("%s",name);


}




float average(float totalmark)

{
    float avg;

    avg = totalmark/3;

    return (avg);
    

}
NI pula aku try wat guna function (IKUT SOALAN TAPI TAK JADI)
#include <stdio.h>

float average(float);

char grade(float);

void display(char,float,char);



main()
{
    char name[100], grd; // grd[2];

    float mark, avgmark, totalmark;

    int loop, i;

    totalmark = 0;
    loop = 1;

//printf("Continue ? [0-Exit]: ");
//scanf("%d", &loop);



while (loop != 0)
{
    //getchar(); // Clearkan char

    printf("***********************************\n");
    printf("STUDENT INFORMATION\n");
    printf("***********************************\n");


    
    printf("Enter Student Name: ");
    
    gets(name);
    for (i=1; i<=3; i++)
    
    {
        printf("Enter Subject Mark %d: ", i);
        
        scanf("%f",&mark);
        
        totalmark = totalmark + mark;
    
    }
    





    //avgmark = totalmark/3; // send to average function

    //printf("Total Mark = %.2f", totalmark);
    
    
printf("***********************************\n");
printf("RESULTS\n");
printf("***********************************\n");


    avgmark = average(totalmark);

    grd = grade(avgmark);




    display(name,avgmark,grd);





printf("Continue ? [0-Exit]: ");
scanf("%d", &loop);

getchar(); 

} // Whilee loop punya end
//printf("Grade\t: %s\n",grade);
    //printf("%s",name);


}




float average(float totalmark)

{
    float avg;

    avg = totalmark/3;

    return (avg);
    

}




char grade(float avgmark)

{

char grade[5];

if (avgmark >=90 && avgmark<=100)
{
    grade[5] = "A+"

return grade;
}
else if(avgmark >=80 && avgmark<=89)
{
grade[5] = "A";

return grade;
}

else if(avgmark >=70 && avgmark<=79)
{
grade[5] = "B";

return grade;
}
else if(avgmark >=50 && avgmark<=69)

{
grade[5] = "C";
return grade;
}
else if(avgmark <49)
{
grade[5] = "Fail";

return grade;
}
}


void display(char name, float avgmark, char grd)

{

    printf("Student Name\t: %s\n", name);


printf("Average Marks\t: %.2f\n",avgmark);
    
printf("%s", grd);
}

ada sesiapa boleh tolong?? betik! i need ur help oso.. huhu

Edited by afat

Share this post


Link to post
Share on other sites

mmm. masalah code tu ialah bila tak pakai function ok. tapi bila pakai function nak returnkan value char tu macam error je. sebab dia dah masukkan 3 markah bg student tiba2 keluar error. rasa nya ada masalah dengan call function.

Share this post


Link to post
Share on other sites

string dlm C ni sebenarnya hanyalah character array...so kalu ko nk pass string yg mcm ko buat tu, ko pass mcm ko nk pass array...cth:

char name[100];
///
display(name);

void display(char name[]) //cam biasa ko nk pass array
c0de ko yg kat bwh ni illegal...
char grade[5];

if (avgmark >=90 && avgmark<=100)
{
    grade[5] = "A+" //mana bole assign camni...
return grade; //array x bole di return...huhu
so, utk menyetelkan probelm ko, guna la pointer...huhu cth:
char* grade4(float avgmark){

if (avgmark >=90 && avgmark<=100)
{
    return "A+";
}
///////etc

Edited by betik

Share this post


Link to post
Share on other sites

bETIK2! hehe punya la terel programming. ni aku dah wat dah pakai pointer. tapi masalahnya program aku loop kali kedua dia error. untuk kali pertama je dia leh tulis A+ tu

#include <stdio.h>

float average(float);

char *grade(float);

void display(char[],float,char);



main()
{
    char name[100], grd; // grd[2];

    float mark, avgmark, totalmark;

    int loop, i;

    totalmark = 0;
    loop = 1;

//printf("Continue ? [0-Exit]: ");
//scanf("%d", &loop);



while (loop != 0)
{
    //getchar(); // Clearkan char

    printf("***********************************\n");
    printf("STUDENT INFORMATION\n");
    printf("***********************************\n");


    
    printf("Enter Student Name: ");
    
    gets(name);
    for (i=1; i<=3; i++)
    
    {
        printf("Enter Subject Mark %d: ", i);
        
        scanf("%f",&mark);
        
        totalmark = totalmark + mark;
    
    }
    





    //avgmark = totalmark/3; // send to average function

    //printf("Total Mark = %.2f", totalmark);
    
    
printf("***********************************\n");
printf("RESULTS\n");
printf("***********************************\n");


    avgmark = average(totalmark);

    grd = grade(avgmark);




    display(name,avgmark,grd);





printf("Continue ? [0-Exit]: ");
scanf("%d", &loop);

getchar(); 

} // Whilee loop punya end
//printf("Grade\t: %s\n",grade);
    //printf("%s",name);


}




float average(float totalmark)

{
    float avg;

    avg = totalmark/3;

    return (avg);
    

}




char *grade(float avgmark)

{


if (avgmark >=90 && avgmark<=100)
{
    return "A+";


}
else if(avgmark >=80 && avgmark<=89)
{
  return "A";

}

else if(avgmark >=70 && avgmark<=79)
{

 return "B";

}
else if(avgmark >=50 && avgmark<=69)

{
    return "C";

}
else if(avgmark <49)
{
 return "Fail";


}
}


void display(char name[], float avgmark, char grd[])

{

    printf("Student Name\t: %s\n", name);


printf("Average Marks\t: %.2f\n",avgmark);
    
printf("%s", grd);
}

ada salah kat mana2 ke?

Edited by afat

Share this post


Link to post
Share on other sites

tapi masalahnya program aku loop kali kedua dia error. untuk kali pertama je dia leh tulis A+ tu
huhuh..akupon heran camna c0de ko bole compile :D...

sbb:

char name[100], grd;  //grd hanyalah character sedangkan ko perlukan  string...

grd = grade(avgmark); //ko return pointer, bknnya string...walaopon string, still x bole camni...
skang ni ko bole guna 2 cara...samada char array atau char pointer... kalu guna char array (guna strcpy dari string.h):
#include <string.h>
int main(){
char grd[7];
////anotehr c0de
strcpy(grd,grade(avgmark)); 
/////enother c0de
}
ataupon guna pointer:
int main(){
char *grd

grd = grade(avgmark);
}

Share this post


Link to post
Share on other sites

dia memang boleh tapi nape ada error untuk kali kedua loop? aku guna pointer:

int main(){
char *grd

grd = grade(avgmark);
}

nape eh? hmmmm

Share this post


Link to post
Share on other sites

huhu takleh nak tolong baiki le..ak bukan terer sgt guna pointer...

ak pernah wat program camni tp guna class & object la

Share this post


Link to post
Share on other sites

dia memang boleh tapi nape ada error untuk kali kedua loop? aku guna pointer:
aku rasa sbb ko punya variable totalmark...sbb while loop ko, bila masuk ke iteration yg ke-2, totalmark ko still hold value yg lama...so, bila ko masuk for loop ni, totalmark ko akan bertambah dgn value yg lama dgn yg baru :

for (i=1; i<=3; i++)    
    {
        printf("Enter Subject Mark %d: ", i);        
        scanf("%f",&mark);        
        totalmark = totalmark + mark;    
    }
so, bila ko panggil function float average(float totalmark), ko mungkin akan return value yg melebihi 100...dan, bencana akan menimpa (:D) bila ko panggil funtion char *grade(float avgmark)...sbb dlm funtion ni, ia perlu return sesuatu, tp dlm function tu, tiada satu pon yg memenuhi syarat2 if-else ko dan function tu tergantung disitu(dlm bahsa mudahnya)... so, ko kena wat samaada: 1) initialize totalmark ko dlm scope while loop, bkn kat luar:
while (loop != 0){
    float totalmark = 0; //initialize kat sini
    /////etc
2) function utk bg grade tu kena returnkan sesuatu...walaopon tidak memenuhi syarat2 if-else ko:
char *grade(float avgmark){

    if (avgmark >=90 && avgmark<=100)
        return "A+";
    else if(avgmark >=80 && avgmark<=89)
        return "A";
    else if(avgmark >=70 && avgmark<=79)
        return "B";
    else if(avgmark >=50 && avgmark<=69)
        return "C";
    else if(avgmark <49)
       return "Fail";
    else
       printf("%f/n", avgmark); //try tengok apakah value dr totalmark..utk testing shj
       return "NA";  //return sesuatu, Not Applicable misalnya
}

aku still x sure sbb kat pc aku skang ni cuma ada VB6 je, xde compiler C/C++...tp, aku rasa sbb2 tu la...huhu...kalu xleh gak, elok ko try run in step...tengok kat mana yg sangkut...huhu

Share this post


Link to post
Share on other sites

betik2. camni.. katakan soalan tu diubah nak displaykan grade kat bawah ni

49 and below- Fail
50 to 69 - C
70 to 79 - B
80 to 89 - A
90 to 100 - A
kira semua satu char je tak ada A+. aku dah wat dah program tu tak perlu pakai pointer. ni code dia.
#include <stdio.h>

float average(float);

char grade(float);

void display(char[],float,char);



main()
{
    char name[100], grd; // grd[2];

    float mark, avgmark, totalmark;

    int loop, i;

    totalmark = 0;
    loop = 1;

//printf("Continue ? [0-Exit]: ");
//scanf("%d", &loop);



while (loop != 0)
{
    //getchar(); // Clearkan char

    printf("***********************************\n");
    printf("STUDENT INFORMATION\n");
    printf("***********************************\n");


    
    printf("Enter Student Name: ");
    
    gets(name);
    for (i=1; i<=3; i++)
    
    {
        printf("Enter Subject Mark %d: ", i);
        
        scanf("%f",&mark);
        
        totalmark = totalmark + mark;
    
    }
    





    //avgmark = totalmark/3; // send to average function

    //printf("Total Mark = %.2f", totalmark);
    
    
printf("***********************************\n");
printf("RESULTS\n");
printf("***********************************\n");


    avgmark = average(totalmark);

    grd = grade(avgmark);




    display(name,avgmark,grd);




printf("\n");
printf("Continue ? [0-Exit]: ");
scanf("%d", &loop);

getchar(); 

} // Whilee loop punya end
//printf("Grade\t: %s\n",grade);
    //printf("%s",name);


}




float average(float totalmark)

{
    float avg;

    avg = totalmark/3;

    return (avg);
    

}




char grade(float avgmark)

{


if (avgmark >=90 && avgmark<=100)
{
    return 'A';


}
else if(avgmark >=80 && avgmark<=89)
{
  return 'A';

}

else if(avgmark >=70 && avgmark<=79)
{

return 'B';

}
else if(avgmark >=50 && avgmark<=69)

{
    return 'C';

}
else if(avgmark <49)
{
return 'F';


}
}


void display(char name[], float avgmark, char grd)

{

    printf("Student Name\t: %s\n", name);


    printf("Average Marks\t: %.2f\n",avgmark);
    
    printf("Grade\t: %c", grd);



}
Masalahnya.. kali KEDUA loop dia tak keluar la char lain. contoh output cam kat bawah
STUDENT INFORMATION

Enter student Name: Putera
Enter subject mark 1: 100
Enter subject mark 2: 100
Enter subject mark 3: 100

RESULT
Student Name: Putera
Average marks : 100
Grade: A

Continue ? [0-Exit]: 1
Tapi untuk kali kedua bila continue
STUDENT INFORMATION

Enter student Name: Putera
Enter subject mark 1: 100
Enter subject mark 2: 100
Enter subject mark 3: 100

RESULT
Student Name: Putera
Average marks : 100
Grade:         <- tak keluar apa2!

Camne?

Share this post


Link to post
Share on other sites

ops aku dah dapat

huhuhuhuhu... aku kena setkan totalmark = 0;

Betik wrote:

1) initialize totalmark ko dlm scope while loop, bkn kat luar:

while (loop != 0){
    float totalmark = 0; //initialize kat sini
    /////etc
#include <stdio.h>

float average(float);

char grade(float);

void display(char[],float,char[]);



main()
{
    char name[100], grd;

    float mark, avgmark, totalmark;

    int loop, i;

  
    loop = 1;

while (loop != 0)
{
    totalmark = 0;
    printf("***********************************\n");
    printf("STUDENT INFORMATION\n");
    printf("***********************************\n");


    
    printf("Enter Student Name: ");
    
    gets(name);

    for (i=1; i<=3; i++)
    
    {
        printf("Enter Subject Mark %d: ", i);
        
        scanf("%f",&mark);

        totalmark = totalmark + mark;

    }
    
    
printf("***********************************\n");
printf("RESULTS\n");
printf("***********************************\n");


    avgmark = average(totalmark);
    grd = grade(avgmark);
    display(name,avgmark,grd);
    printf("\n");
    printf("Continue ? [0-Exit]: ");
    scanf("%d", &loop);

    fflush(stdin); 
    
}

}


float average(float totalmark)

{
    float avg;
    avg = 0;

    avg = totalmark/3;

    return (avg);
    

}



char grade(float avgmark)

{


if (avgmark >=90 && avgmark<=100)

    return 'A';

else if(avgmark >=80 && avgmark<=89)

    return 'A';

else if(avgmark >=70 && avgmark<=79)

    return 'B';

else if(avgmark >=50 && avgmark<=69)

    return 'C';

else if(avgmark <49)

    return 'F';

}


void display(char name[], float avgmark, char grd)

{

    printf("Student Name\t: %s\n", name);

    printf("Average Marks\t: %.2f\n",avgmark);
    
    printf("Grade\t: %c", grd);

}


thanx semua thanx all thanx betik thanx putera, huhuhu

thanx semua thanx all thanx betik thanx putera, huhuhu

Edited by afat

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...