Why this code works fine:

<?php if (**is_page**('4')) { ?> 
<style type="text/css"> 
body {background-image:url("<?php bloginfo('template_url'); ?>/images/bac4.jpg");} 
</style> 
<?php } else ?> 

which not:

<?php if (**is_category**()) { ?> 
<style type="text/css"> 
body {background-image:url("<?php bloginfo('template_url'); ?>/images/coaching.jpg");} 
</style> 
<?php } else ?> 

Works best for me during my template's header.php. Then add stuff for your template's archive.php, ideally within the is_category(), to ensure you are on the category page. Also, I've found the choice if syntax simpler to see and debug, but YMMV.

if( is_category() ):
    ?>
    <!-- some html -->
    <?php
else:
    ?>
    <!-- other -->
    <?php
endif;