The C programming language (second edition,K&R) exercise(CHAPTER 7)

发布于:2024-08-10 ⋅ 阅读:(94) ⋅ 点赞:(0)

      E x c e r c i s e 7 − 1 Excercise\quad 7-1 Excercise71

#include <stdio.h>
#include <string.h>
#include <ctype.h>



enum type {
    LOWER, UPPER };

int main(int argc, char *argv[])
{
   
    int c, mode = -1;
    if (stricmp(*argv, "lower.exe") == 0) 
	{
   
		printf("To lower\n");
        mode = LOWER;		
	}
    else if (stricmp(*argv, "upper.exe") == 0) 
	{
   
		printf("To upper\n");
        mode = UPPER;	
	}		
    if (mode == LOWER)
	{
   
        while ((c = getchar()) != EOF)
            putchar(tolower(c));		
	}
    else if (mode == UPPER)
	{
   
        while ((c = getchar()) != EOF)
            putchar(toupper(c));		
	}
    return 0;
}

      E x c e r c i s e 7 − 2 Excercise\quad 7-2 Excercise72

#include <stdio.h>
#include <ctype.h>

/* "%x" for hex, "%o" for octal */ 
#define FORMAT "%x" 
#define LINELEN 75

int main()
{
   
    int c, i = 0;
    while ((c = getchar()) != EOF)
    {
   
		/* reset line length counter */ 
        if (c == '\n') 
            i = 0;
		/* check if equal to line length. If so, print new line and reset counter */ 	
        else if (++i == LINELEN) 
        {
   
            i = 0;
            putchar('\n');
        }
		/* graphic characters and spaces */ 
        if (isgraph(c) || isspace(c)) 
		{
   
            putchar(c);			
		}
        else
		{
   
			/* non-graphic characters */
            printf(FORMAT, c);  			
		}

    }
    return 0;
}

      E x c e r c i s e 7 − 3 Excercise\quad 7-3 Excercise73

#include <stdio.h>
#include <stdarg.h>



void minprintf(char *fmt, ...);

int main()
{
   
    char *sval = "10";
    int ival = 11;
    double dval = 12.13;
    unsigned int uival = 14;
    char cval = 'F';
    void *pval = sval;
    minprintf("%%s=%s, %%d=%d, %%i=%i, %%f=%f, %%e=%e, %%E=%E, %%g=%g, %%G=%G, %%o=%o, %%x=%x\n", sval, ival, ival, dval, dval, dval, dval, dval, uival, uival);
       printf("%%s=%s, %%d=%d, %%i=%i, %%f=%f, %%e=%e, %%E=%E, %%g=%g, %%G=%G, %%o=%o, %%x=%x\n", sval, ival, ival, dval, dval, dval, dval, dval, uival, uival);
    minprintf("%%X=%X, %%u=%u, %%c=%c, %%p=%p, %%%%=%%\n", uival, uival, cval, pval);
       printf("%%X=%X, %%u=%u, %%c=%c, %%p=%p, %%%%=%%\n", uival, uival, cval, pval);
}

/* minimal printf with variable argument list */ 
void minprintf(char *fmt, ...)
{
   
	/* points to each unnamed arg in turn */ 
    va_list ap; 
    char *p, *sval, format[3] = {
    '%', '\0', '\0' };
    int ival;
    double dval;
    unsigned int uival;
    void *pval;
	
    /* make ap point to 1st unnamed arg */ 
    va_start(ap, fmt); 
    for (p = fmt; *p; p++)
    {
   
        if (*p != '%')
        {
   
            putchar(*p);
            continue;
        }
        switch (*++p)
        {
   
        case 'd': case 'i': case 'c': /* char is promoted to int when passed through '...' */ 
            ival = va_arg(ap, int);
            format[1] = *p;
            printf(format, ival);
            break;
        case 'f': case 'e': case 'E': case 'g': case 'G':
            dval = va_arg(ap, double);
            format[1] = *p;
            printf(format, dval);
            break;
        case 's':
            for (sval = va_arg(ap, char *); *sval; sval++)
                putchar(*sval);
            break;
        case 'x': case 'X': case 'o':  case 'u':
            uival = va_arg(ap,<

网站公告

今日签到

点亮在社区的每一天
去签到