K & R C Exercise Solutions.

We have already provided solutions to all the exercises in the bookC Programming Language (2nd Edition) popularly known as K & R C book.

In this blog post I will give links to all the chapters of the “C Programming Language (2nd Edition)” popularly known as K & R C book for easy reference.

1. Chapter 1: A Tutorial Introduction
2. Chapter 2: Types, Operators and Expressions
3. Chapter 3: Control Flow
4. Chapter 4: Functions and Program Structure
5. Chapter 5: Pointers and Arrays
6. Chapter 6: Structures
7. Chapter 7: Input and Output
You can purchase the book from here or here.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

To browse more C Programs visit this link
(c) www.c-program-example.com

K & R C Chapter 7 Exercise Solutions.

We have already provided solutions to all the exercises in the bookC Programming Language (2nd Edition) popularly known as K & R C book.

In this blog post I will give links to all the exercises from Chapter 7 of the book for easy reference.

Chapter 7: Input and Output

1. Exercise 7-1. Write a program that converts upper case to lower or lower case to upper, depending on the name it is invoked with, as found in argv[0].
Solution to Exercise 7-1.
2. Exercise 7-2.Write a program that will print arbitrary input in a sensible way. As a minimum, it should print non-graphic characters in octal or hexadecimal according to local custom, and break long text lines.
Solution to Exercise 7-2.
3. Exercise 7-3.Revise minprintf to handle more of the facilities of printf .
Solution to Exercise 7-3.
4. Exercise 7-4. Write a private version of scanf analogous to minprintf from the previous section.
Solution to Exercise 7-4.
5. Exercise 7-5. Rewrite the postfix calculator of Chapter 4 to use scanf and/or sscanf to do the input and number conversion.
Solution to Exercise 7-5.
6. Exercise 7-6. Write a program to compare two files, printing the first line where they differ.
Solution to Exercise 7-6.
7. Exercise 7-7. Modify the pattern finding program of Chapter 5 to take its input from a set of named files or, if no files are named as arguments, from the standard input. Should the file name be printed when a matching line is found?
Solution to Exercise 7-7.
8. Exercise 7-8. Write a program to print a set of files, starting each new one on a new page, with a title and a running page count for each file.
Solution to Exercise 7-8.
9. Exercise 7-9. Functions like isupper can be implemented to save space or to save time. Explore both possibilities.
Solution to Exercise 7-9.
You can purchase the book from here or here.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

To browse more C Programs visit this link
(c) www.c-program-example.com

K & R C Chapter 6 Exercise Solutions.

We have already provided solutions to all the exercises in the bookC Programming Language (2nd Edition) popularly known as K & R C book.

In this blog post I will give links to all the exercises from Chapter 6 of the book for easy reference.

Chapter 6: Structures

1. Exercise 6-1. Our version of getword does not properly handle underscores, string constants, comments, or preprocessor control lines. Write a better version.
Solution to Exercise 6-1.
2. Exercise 6-2.Write a program that reads a C program and prints in alphabetical order each group of variable names that are identical in the first 6 characters but different somewhere thereafter. Don’t count words within strings and comments. Make 6 a parameter that can be set from the command line.
Solution to Exercise 6-2.
3. Exercise 6-3.Write a cross-referencer that prints a list of all words in a document, and, for each word, a list of the line numbers on which it occurs. Remove noise words like “the,” “and,” and so on.
Solution to Exercise 6-3.
4. Exercise 6-4. Write a program that prints the distinct words in its input sorted into decreasing order of frequency of occurrence. Precede each word by its count.
Solution to Exercise 6-4.
5. Exercise 6-5. Write a function undef that will remove a name and definition from the table maintained by lookup and install .
Solution to Exercise 6-5.
6. Exercise 6-6. Implement a simple version of the #define processor (i.e., no arguments) suitable for use with C programs, based on the routines of this section. You may also find getch and ungetch helpful.
Solution to Exercise 6-6.
You can purchase the book from here or here.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

To browse more C Programs visit this link
(c) www.c-program-example.com

K & R C Chapter 3 Exercise Solutions

We have already provided solutions to all the exercises in the bookC Programming Language (2nd Edition) popularly known as K & R C book.

In this blog post I will give links to all the exercises from Chapter 3 of the book for easy reference.

Chapter 3: Control Flow

1. Exercise 3-1. Our binary search makes two tests inside the loop, when one would suffice (at the price of more tests outside). Write a version with only one test inside the loop and measure the difference in run-time.
Solution to Exercise 3-1.
2. Exercise 3-2.Write a function escape(s,t) that converts characters like newline and tab into visible escape sequences like n and t as it copies the string t to s . Use a switch . Write a function for the other direction as well, converting escape sequences into the real characters.
Solution to Exercise 3-2.
3. Exercise 3-3.Write a function expand(s1,s2) that expands shorthand notations like a-z in the string s1 into the equivalent complete list abc…xyz in s2 . Allow for letters of either case and digits, and be prepared to handle cases like a-b-c and a-z0-9 and -a-z . Arrange that a leading or trailing – is taken literally.
Solution to Exercise 3-3.
4. Exercise 3-4.In a two’s complement number representation, our version of itoa does not handle the largest negative number, that is, the value of n equal to -(2 to the power (wordsize – 1)) . Explain why not. Modify it to print that value correctly regardless of the machine on which it runs.
Solution to Exercise 3-4.
5. Exercise 3-5. Write the function itob(n,s,b) that converts the integer n into a base b character representation in the string s . In particular, itob(n,s,16) formats n as a hexadecimal integer in s
Solution to Exercise 3-5.
6. Exercise 3-6. Write a version of itoa that accepts three arguments instead of two. The third argument is a minimum field width; the converted number must be padded with blanks on the left if necessary to make it wide enough.
Solution to Exercise 3-6.
You can purchase the book from here or here.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

To browse more C Programs visit this link
(c) www.c-program-example.com

K & R C Programs Exercise 7-9.

K and R C, Solution to Exercise 7-9:
K and R C Programs Exercises provides the solution to all the exercises in the C Programming Language (2nd Edition). You can learn and solve K&R C Programs Exercise.
Write a C Functions like isupper() can be implemented to save space or to save time. Explore both possibilities. Read more about C Programming Language .
isupper: return 1 (true) if c is an upper case letter
Normal C function:

int  isupper(char c)
{
if (c >= 'A' && c <= 'Z')
return 1;
else
return 0;
}

This simple code tests the character is upper or lower , If the character within the range of ASCII upper case letters it returns 1, otherwise 0.
To save space or to save time using the macros is the best possibility
C Code:

#define isupper(c)  ((c) > = 'A' && (c) <= 'Z') ? 1:0

Macro version of isupper is more efficient because, there is no overhead of the function call and it uses more space because the macro is expanded in line every time it is invoked.

C Basic
C Strings
K and R C Programs Exercise

You can easily select the code by double clicking on the code area above.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

(you can send this program to your friend using this button)

To browse more C Programs visit this link
(c) www.c-program-example.com

K & R C Programs Exercise 7-8.

K and R C, Solution to Exercise 7-8:
K and R C Programs Exercises provides the solution to all the exercises in the C Programming Language (2nd Edition). You can learn and solve K&R C Programs Exercise.
C Program to print a set of files, starting each new one on a new page, with a title and running page for each file Read more about C Programming Language .

/***********************************************************
* You can use all the programs on www.c-program-example.com
* for personal and learning purposes. For permissions to use the
* programs for commercial purposes,
* contact info@c-program-example.com
* To find more C programs, do visit www.c-program-example.com
* and browse!
*
* Happy Coding
***********************************************************/

#include<stdio.h>
#include<stdlib.h>

#define MAXBOT 3
#define MAXHDR 5
#define MAXLINE 100
#define MAXPAGE 66

/*print: print files - each new one on a new page */
main(int argc, char *argv[])
{

FILE *fp;
void fileprint(FILE *fp, char *fname);

if(argc == 1)
fileprint(stdin," ");
else
if((fp = fopen(*++argv,"r")) == NULL) {
fprintf(stderr,"find:can't open %sn",*argv);
exit(1);
} else {

fileprint(fp, *argv);
fclose(fp);
}
return 0;
}

//fileprint: print file name
void fileprint(FILE *fp, char *fname)
{
int lineno, pageno = 1;
char line[MAXLINE];
while(fgets(line, MAXLINE, fp) != NULL) {
if(lineno == 1) {
fprintf(stdout,"f");
}
fputs(line, stdout);
if(++lineno > MAXPAGE - MAXBOT)
lineno = 1;
}
fprintf(stdout,"f");
}

{
int ln = 3;
fprintf(stdout,"nn");
fprintf(stdout,"%s page %dn", fname, pageno);
while(ln++ < MAXHDR)
fprintf(stdout,"n");
return ln;
}

C Basic
C Strings
K and R C Programs Exercise

You can easily select the code by double clicking on the code area above.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

(you can send this program to your friend using this button)

To browse more C Programs visit this link
(c) www.c-program-example.com

K & R C Programs Exercise 7-7.

K and R C, Solution to Exercise 7-7:
K and R C Programs Exercises provides the solution to all the exercises in the C Programming Language (2nd Edition). You can learn and solve K&R C Programs Exercise.
C program to modify the pattern-finding program of chapter 5(C Programming Language  2nd Edition, page no 117.) to take its input from a set of named files or, if no files are named as arguments, from the standard input. Should the file name be printed when a matching line is found.Read more about C Programming Language .

/***********************************************************
* You can use all the programs on www.c-program-example.com
* for personal and learning purposes. For permissions to use the
* programs for commercial purposes,
* contact info@c-program-example.com
* To find more C programs, do visit www.c-program-example.com
* and browse!
*
* Happy Coding
***********************************************************/

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

#define MAXLINE 1000

/*print lines that match pattern from 1st argument */
main(int argc, char *argv[])
{
char pattern[MAXLINE];
int c, excpet = 0,number = 0;
FILE *fp;
void fpat(FILE *fp, char *fname, char *pattern, int except, int number);

while(--argc > 0 && (*++argv)[0] == '-')
while(c = *++argv[0])
switch(c) {
case 'x':
except = 1;
break;
case 'n':
number = 1;
break;
default:
printf("find:illigal option %cn",c);
argc = 0;
break;
}
if(argc >= 1)
strcpy(pattern, *argv);
else{
printf("Usage:find[-x] [-n] pattern [file....]n");
exit(1);
}
if(argc == 1)
fpat(stdin,"",pattern,except,number);
else
while(--argc > 0)
if((fp = fopen(*++argv,"r")) == NULL) {
fprintf(stderr,"find:can't open %sn",*argv);
exit(1);
} else {
fpat(fp, *argv, pattern,except,number);
fclose(fp);}
return 0;
}

/*fpat: find pattern*/
void fpat(FILE *fp, char *fname, char *pattern, int except, int number)
{
char line[MAXLINE];
long loneno = 0;

while(fgets(line, MAXLINE, fp) != NULL){
++lineno;
if((strstr(line,pattern) != NULL) !=except) {
if(*fname)
printf("%s -",fname);
if(number)
printf("%ld: ",lineno);
printf("%s",line);
}
}
}

C Basic
C Strings
K and R C Programs Exercise

You can easily select the code by double clicking on the code area above.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

(you can send this program to your friend using this button)

To browse more C Programs visit this link
(c) www.c-program-example.com

K & R C Programs Exercise 7-6.

K and R C, Solution to Exercise 7-6:
K and R C Programs Exercises provides the solution to all the exercises in the C Programming Language (2nd Edition). You can learn and solve K&R C Programs Exercise.
Write a C Program to compare two files, printing the first line where they differ.

/***********************************************************
* You can use all the programs on www.c-program-example.com
* for personal and learning purposes. For permissions to use the
* programs for commercial purposes,
* contact info@c-program-example.com
* To find more C programs, do visit www.c-program-example.com
* and browse!
*
* Happy Coding
***********************************************************/

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

#define MAXLINE 100
/*comp: compare two file, printing the first line where they differ*/
main(int argc, char *argv[])
{
FILE *fp1, *fp2;
void filecomp(FILE *fp1, FILE *fp2);
if(argc != 3){
fprintf(stderr,"comp:need two file namesn");
exit(1);
} else {
if((fp1 = fopen(*++argv, "r")) == NULL) {
fprintf(stderr, "comp:can't open %sn",*argv);
exit(1);
} else if((fp2 = fopen(*++argv, "r")) == NULL) {
fprintf(stderr, "comp:can't open %sn",*argv);
exit(1);
}else {
filecomp(fp1,fp2);
fclose(fp1);
fclose(fp2);
exit(0);

}
}
}

//filecomp: compare two files -a line at a time
void filecomp (FILE *fp1, FILE *fp2)
{
char line1[MAXLINE], line2[MAXLINE];
char *lp1 = *lp2;
do{
lp1 = fgets(line1, MAXLINE, fp1);
lp2 = fgets(line2, MAXLINE, fp2);
if(lp1 == line1 && lp2 == line2){

if(strcmp(line1,line2) !=0) {
printf("First difference in linen%sn",line1);
lp1 = lp2 = NULL;
}
} else if(lp1 != line1 && lp2 == line2)
printf("end of first file at linen%sn",line2);
else if(lp1 == line1 && lp2 == line2)
printf("end of second file at line n%sn",line1);

}while(lp1 == line1 && lp2 == line2);
}

C Basic
C File i/o
K and R C Programs Exercise

You can easily select the code by double clicking on the code area above.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

(you can send this program to your friend using this button)

To browse more C Programs visit this link
(c) www.c-program-example.com

K & R C Programs Exercise 7-5.

K and R C, Solution to Exercise 7-5:
K and R C Programs Exercises provides the solution to all the exercises in the C Programming Language (2nd Edition). You can learn and solve K&R C Programs Exercise.
Rewrite the postfix calculator of chapter 4 to use scanf and/or sscanf to do the input number conversion.

/***********************************************************
* You can use all the programs on www.c-program-example.com
* for personal and learning purposes. For permissions to use the
* programs for commercial purposes,
* contact info@c-program-example.com
* To find more C programs, do visit www.c-program-example.com
* and browse!
*
* Happy Coding
***********************************************************/

#include<stdio.h>
#include<math.h> /*for atof()*/
#define MAXTOP 100 /* max size of operand or operator */
#define NUMBER '0' /* SIGNAL THAT A NUMBER WAS FOUND */
#define MAXVAL 100
int gettop(char []);
void push(double);
double pop(void);
int sp = 0; /* Next free stack position. */
double val[MAXVAL];

//reverse Polish calulator
int main(void)
{
int type;
double op2;
char s[MAXOP];

while((type = getop(s)) != EOF)
{
switch(type)
{
case NUMBER:
push(atof(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;

case '-':
op2=pop();
push(pop() - op2);
break;
case '-':
op2=pop();
if(op2 != 0.0)
push(pop() / op2);
else printf("nError: Zero divissorn");
break;
case '%':
op2 = pop();
if(op2)
push(fmod(pop(), op2));
else
printf("nError: Division by zero!");
break;
case 'n':
printf("t%.8gn",pop());
break;
default:
printf("error: unknown command %sn", s);
break;

}
}
return 0;
}

/* Getop: get next operator or numeric operand. */
int getop(char s[])
{

int i = 0;
int c;
int rc;
static char lastc[] = " ";
sscanf(lastc,"%c", &c);
lastc[0] = ' ';

/* Skip whitespace */
while((s[0] = c ) == ' ' || c == 't')
if(scanf("%",&c) == EOF)
c = EOF;
s[1] = '';

/* Not a number but may contain a unary minus. */
if(!isdigit(c) && c != '.' )
return c;

if(isdigit(c))
do{
rc = scanf("%c",&c);
if(!isdigit(s[++i] = c))
break;
}while(rc != EOF)

if(c == '.')
do{
rc = scanf("%c",&c);
if(!isdigit(s[++i] = c))
break;
}while(rc != EOF)

s[i] = '';
if(rc != EOF)
lastc[0] = c;
return NUMBER;

}

/* push: push f onto stack. */
void push(double f)
{
if(sp < MAXVAL)
val[sp++] = f;
else
printf("nError: stack full can't push %gn", f);
}

double pop(void)
{
if(sp > 0)
return val[--sp];
else
{
printf("nError: stack emptyn");
return 0.0;
}
}

C Basic
C Strings
K and R C Programs Exercise

You can easily select the code by double clicking on the code area above.

You can discuss these programs on our Facebook Page. Start a discussion right now,

our page!

(you can send this program to your friend using this button)

To browse more C Programs visit this link
(c) www.c-program-example.com

K & R C Programs Exercise 7-4.

K and R C, Solution to Exercise 7-4:
K and R C Programs Exercises provides the solution to all the exercises in the C Programming Language (2nd Edition). You can learn and solve K&R C Programs Exercise.
Write a private version of scanf analogous to minprintf from the previous section.
minscanf is similar to minprintf. This function collects characters from the format string until it finds an alphabetic character after a %. That is the localfmt passsed to scanf along with the appropriate pointer.
The arguments to scanf are pointers: a pointer to a format string and a pointer to the variable that receives the value from scanf.Read more about C Programming Language .

/***********************************************************
* You can use all the programs on www.c-program-example.com
* for personal and learning purposes. For permissions to use the
* programs for commercial purposes,
* contact info@c-program-example.com
* To find more C programs, do visit www.c-program-example.com
* and browse!
*
* Happy Coding
***********************************************************/

#include <stdarg.h>
#include <stdio.h>
#include <ctype.h>
#define LOCALFMT 100

/* minscanf: minimal scanf with variable argument list */
void minscanf(char *fmt, ...)
{
va_list ap;
char *p, *sval;
char localfmt[LOCALFMT];
int i,c;
int *ival;
double *dval;
unsigned *uval;

va_start(ap, fmt); /* make ap point to the first unnamed arg */
for (p = fmt; *p; p++) {
if (*p != '%') {
localfmt[i++] = *p;
continue;
}
i = 0;
localfmt[i++] = '%';
while(*p(p+1) && !isalpha(*(p+1)))
localfmt[i++] = *++p;
localfmt[i++] = *(p+1);
localfmt[i] = '/0';
switch (*++p) {
case 'd':
case 'i':
ival = va_arg(ap, int *);
scanf(localfmt, ival);
break;

case 'u':

case 'o':

case 'x':

case 'X':

case 'f':
dval = va_arg(ap, double);
scanf(localfmt, dval);
break;

case 's':
sval = va_arg(ap, char *);
scanf(localfmt, sval);
break;
default:
scanf(localfmt);
break;
}
i = 0;
}
va_end(ap);
}

C Basic
C Strings
K and R C Programs Exercise

You can easily select the code by double clicking on the code area above.