第16章 c预处理和c库

2018-12-16  本文已影响0人  小风xf

#include <stdio.h>

#define TWO 2

#define OW "Consistency is the last refuge of the unimagin\ tive. -Oscar Wilde"

#define FOUR TWO * TWO 

#define PX printf("X is %d.\n",x)

#define FMT "X is %d.\n"

int main(void )

{

    int x = TWO;

    PX;

    x =FOUR;

    printf(FMT ,x);

    printf("%s \n", OW);

    printf("TWO : OW\n");

    return 0;

}

#include <stdio.h>

#define SQUARE(X) X*X

#define PR(X) printf("the result is %d \n",X)

void main()

{

    int x = 4;

    int z ;

    printf("x = %d \n ",x );

    z =SQUARE(x);

    printf("evaluating square(2) : ");

    PR(z);

    z =SQUARE(2);

     printf("evaluating square(X+2) : ");

    PR(SQUARE(x+2));

    PR(z);

     printf("evaluating 100/square(2) : ");

    PR(100/SQUARE(x+2));

    printf("x is %d \n",x);

    printf("EValuating square(++x)");

    PR( SQUARE(++x));

    printf("%d\n",x);

}

##运算符

#include <stdio.h>

#define XNAME(n) x ## n

#define PRINT_XN(n) printf("x" #n " = %d \n " ,x ## n);

void main(void)

{

    int XNAME(1) = 14;

    int XNAME(2) = 20;

    PRINT_XN(1);

    PRINT_XN(2);

}

//

//  names.c

//  10以内的四则运算

//

//  Created by xiaofeng on 18/12/16.

//  Copyright © 2018年 xiaofeng. All rights reserved.

//

#define SLEN 32

struct names_st

{

    char first[SLEN];

    char last[SLEN];

};

#include <stdio.h>

#include "names.h"

 void get_name(names *pn)

{

    int i ;

    printf("please enter your first name");

    fgets(pn -> first, SLEN, stdin);

    i =0;

    while (pn -> first[i] != '\n' && pn -> first[i] != '\0') {

        i ++;

    }

    if (pn -> first[i] == '\n') {

        pn->first[i];

    }

    else

        while (getchar() != '\n') {

            continue;

        }

    printf("please enter your last name");

        fgets(pn -> last, SLEN, stdin);

    while (pn -> last[i] != '\n' && pn -> last[i] != '\0') {

            i++;

        }

    if (pn -> last[i] == '\n') {

        pn->last[i] = '\0';

    }

    else

        while (getchar()!= '\n') {

            continue;

        }

}

void show_names(const names *pn)

{

    printf("%s %s \n ",pn ->first,pn -> last);

}

 #include"names.h"

 #include"names.c"

#include <stdio.h>

void main()

{

    names candidat;

    get_names(&candidat);

    printf("Let 's welcome ");

    show_names(&candidat);

    printf("to this program !\n");

}

//

//  names.h

//  10以内的四则运算

//

//  Created by xiaofeng on 18/12/16.

//  Copyright © 2018年 xiaofeng. All rights reserved.

//

struct names_st;

typedef struct names_st names;

void get_names(names *);

void show_names(const names *);

//void get_name(names *pn);

使用条件编译

#include <stdio.h>

#define JUST_CHECKING 1

#define LIMIT 4

void main()

{

    int i ;

    int total = 0;

    for (i = 1 ; i <= LIMIT; i ++) {

        total +=2*i*i +1 ;

#if JUST_CHECKING 

        printf("i = %d ,running total = %d \n ", i, total);

#endif

    }

    printf("Grand total = %d \n ", total);

}

#include<stdio.h>

#include<stdlib.h>

void why_me();

void main()

{

printf( " THe file is %s \n",__FILE__);

printf( " THe date is %s \n",__DATE__);

printf( " THe file is %s \n",__FILE__);

printf( " THe file is %s \n",__FILE__);

printf( " THe TIME is %s \n",__TIME__);

//printf( " THe VERSION is %d \n",__STDC_VERSION__);

printf( " THe line is %d \n",__LINE__);

//printf( " THe funciton is %s \n",__func__);

why_me();

system("pause");

}

void why_me()

{

printf( " THe line is %d \n",__LINE__);

}

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#define RAD_TO_DEG (180/(4*atan(1)))

typedef struct polar_v

{

double magitude;

double angle;

}POLAR_V;

typedef struct rect_v

{

double x;

double y;

}RECT_V;

POLAR_V rect_to_polar(RECT_V rv);

void main()

{

RECT_V input;

POLAR_V result;

puts("enter x,y coordinates enter q to quit ");

while (scanf("%lf %lf",&input.x,&input.y)==2)

{

result = rect_to_polar( input);

printf("magnitude = %0.2f,angle = %0.2f\n",result.magitude,result.angle);

}

puts("bye");

}

POLAR_V rect_to_polar(RECT_V rv)

{

POLAR_V pv;

pv.magitude = sqrt(rv.x * rv.x + rv.y*rv.y);

if(pv.magitude == 0)

pv.angle = 0.0;

else

{

pv.angle = RAD_TO_DEG * atan2(rv.y, rv.x);

}

return pv;

}

#include <stdio.h>

#include <stdlib.h>

void sign_off (void );

void too_bad (void );

void main()

{

int n ;

atexit (sign_off);

puts("enter an integer");

if (scanf ("%d",&n) != 1)

{

puts("THAT NO integer");

atexit(too_bad);

exit(EXIT_FAILURE);

}

printf("%d is %s \n" ,n ,( n % 2 == 0) ? "even" : "odd");

system("pause");

}

void sign_off()

{

puts (" thus terminates another agnificetnt program from");

puts ("seesaw software ");

}

void too_bad()

{

puts (" seesaw software extends its heartfelt condolences ");

puts ("  to you upon the failure of your program ");

}

#include <stdio.h>

#include <stdlib.h>

#define NUM 40

void fillarray (double ar[],int n);

void showarray (const double ar[],int n);

int mycomp (const void *p1 ,const void *p2);

void main()

{

double vals[NUM];

fillarray (vals,NUM);

puts("random list ");

showarray(vals,NUM);

qsort(vals,NUM,sizeof(double),mycomp);

puts("\n SOrted list" );

showarray(vals,NUM);

system("pause");

}

void fillarray (double ar[],int n)

{

int index;

for (  index = 0; index < n; index++)

{

ar[index] = (double)rand()/((double)rand()+0.1);

}

}

void showarray (const double ar[],int n)

{

int index;

for (  index = 0; index < n; index++)

{

printf("%9.4f",ar[index]);

if (index % 6 ==5)

{

putchar('\n');

}

}

if (index %6 != 0)

{

putchar('\n');

}

}

int mycomp(const void *p1,const void * p2)

{

const double *a1 = (const double *) p1;

const double *a2 = (const double *) p2;

if(*a1 < *a2)

{

return -1;

}

else if (*a1 == *a2)

{

return 0;

}

else

{

return 1;

}

}

使用 assert()

#include <stdio.h>

#include <math.h>

#include <assert.h>

void main()

{

    double x, y,z;

    puts("enter a pair of numbers (0 0 to quit)");

    while (scanf("%lf%lf",&x,&y)== 2 && (x != 0 || y != 0)) {

        z = x * x -y *y ;

        assert(z >= 0);

        printf("answer is %f \n",sqrt(z));

        puts("Next pair of numbers ");

    }

    puts("Done");

}

使用memcpy 和 memove 函数

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define SIZE 10

void show_array(const int ar[] ,int n);

void main()

{

    int values[SIZE] = { 1,2,3,4,5,6,7,8,9,10};

    int target[SIZE];

    double curious[SIZE/2] = {1.0,2.0,3.0,4.0,5.0};

    puts("memcpy() used: ");

    puts("values( original data ) ");

    show_array(values, SIZE);

    memcpy(target, values, SIZE * sizeof(int));

    puts("target (copy of values ");

    show_array(target, SIZE);

    puts("\n using memmove () with verlapping ranges :");

    memmove(values +2 , values, 5*sizeof(int));

    puts("alues elements 0-5 copied to 2-7 ");

    show_array(values, SIZE);

    puts(" U sing memcpy () to copy double to int :");

    memcpy(target, curious  , (SIZE/2) * sizeof(double));

    show_array(target, SIZE);

}

void show_array(const int ar[] ,int n)

{

    int i;

    for (i = 0; i  < n ; i ++) {

        printf("%d",ar[i]);

    }

    putchar('\n');

}

#include <stdio.h>

#include <stdarg.h>

double sum (int , ...);

int main(void)

{

    double s, t;

    s =sum (3,1.1,2.5,13.3);

    t =sum(6,1.1,2.1,13.1,4.1,5.1,6.1);

    printf("return value for " "sum (3,1.1,2.5 ,13.3)\n %g\n",s);

    printf("return value for " "sum (6,1.1,2.1,13.1,4.1,5.1,6.1)\n%g\n",t);

}

double sum(int lim,...)

{

    va_list ap;

    double tot = 0;

    int i;

    va_start(ap, lim);

    for (i = 0 ; i < lim; i ++) {

        tot +=va_arg(ap, double);

    }

    va_end(ap);

    return tot;

}

上一篇下一篇

猜你喜欢

热点阅读