1. 程式人生 > 其它 >第四章程式設計題

第四章程式設計題

4.16

4.17

4.18

4.19

4.20

4.21

4.22

4.16

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
int max_num;
int min_num;
int avg_num;
int num_count;

void *avg_calc(void *ptr)
{
        int sum = 0;
        for(int i = 0 ; i < num_count ; i++)
        {
                sum 
+= ((int*)ptr)[i]; } avg_num = sum/num_count; pthread_exit(0); } void *max_calc(void * ptr) { int max = 0x80000000; for(int i=0;i<num_count;i++) { if(((int*)ptr)[i] > max) { max = ((int*)ptr)[i]; } } max_num
= max; pthread_exit(0); } void *min_calc(void * ptr) { int min = 0x7fffffff; for(int i=0;i<num_count;i++) { if(((int*)ptr)[i] < min) { min = ((int*)ptr)[i]; } } min_num = min; pthread_exit(
0); } int main(int argc,char *argv[]) { void *ptr = malloc(100); memset(ptr,0,100); num_count = argc-1; for(int i=0;i<num_count;i++) { ((int *)ptr)[i] = atoi(argv[i+1]); } pthread_t tid[3]; pthread_attr_t attr[3]; void *(* func[3])(void *ptr) = {avg_calc,max_calc,min_calc}; for(int i = 0;i<3;i++) { pthread_attr_init(&attr[i]); pthread_create(&tid[i],&attr[i],func[i],ptr); pthread_join(tid[i],NULL); } free(ptr); printf("avg_num=%d\nmax_num=%d\nmin_num=%d\n",avg_num,max_num,min_num); return 0; }