8.2
#include <stdio.h>
#include <stdlib.h>
#include <float.h>
static double income_limits[] =
{
0,23350,56550,117950,256500,DBL_MAX
};
static double tax[] =
{
0,3502.50,12789.50,31832.50,81710.50
};
static double p[] =
{
0.15,0.28,0.31,0.36,0.396
};
double single_tax(double income)
{
int category;
for(category = 1;income>=income_limits[category];category++)
;
category -= 1;
return tax[category]+p[category]*(income-income_limits[category]);
}
int main()
{
double income;
printf("please input a number:\n");
scanf("%lf",&income);
printf("the tax shoude be %lf\n",single_tax(income));
return 0;
}
8.3
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <errno.h>
#define TRUE 1
#define FALSE 0
#define Number 3
int identity_matrix(int **a)
{
int i,j;
for(i=0;i<Number;i++)
{
if(*(a[i]+i)==1)
{
for(j=0;j<Number;j++)
{
if(j!=i && *(a[i]+j)!=0)
return FALSE;
else
continue;
}
}
}
if(i==Number)
return TRUE;
else
return FALSE;
}
int main()
{
int i,j,**a;
if((a=(int **)malloc(sizeof(int *)*Number))==NULL)
{
perror("You goofed!");
printf("error = %d\n",errno);
printf("%s\n",strerror(errno));
}
for(j=0;j<Number;j++)
{
if((a[j]=(int *)malloc(sizeof(int)*Number))==NULL)
{
perror("You goofed!");
printf("error = %d\n",errno);
printf("%s\n",strerror(errno));
}
}
printf("please input array number:\n");
for(i=0;i<Number;i++)
for(j=0;j<Number;j++)
scanf("%d",&a[i][j]);
printf("the array number is :\n");
for(i=0;i<Number;i++)
{
for(j=0;j<Number;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
printf("result is %d\n",identity_matrix(a));
return 0;
}
8.4
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <errno.h>
#define TRUE 1
#define FALSE 0
//#define Number 3
int identity_matrix(int **a,int Number)
{
int i,j;
for(i=0;i<Number;i++)
{
if(*(a[i]+i)==1)
{
for(j=0;j<Number;j++)
{
if(j!=i && *(a[i]+j)!=0)
return FALSE;
else
continue;
}
}
}
if(i==Number)
return TRUE;
else
return FALSE;
}
int main()
{
int i,j,**a;
int Number;
printf("please input a number:\n");
scanf("%d",&Number);
if((a=(int **)malloc(sizeof(int *)*Number))==NULL)
{
perror("You goofed!");
printf("error = %d\n",errno);
printf("%s\n",strerror(errno));
}
for(j=0;j<Number;j++)
{
if((a[j]=(int *)malloc(sizeof(int)*Number))==NULL)
{
perror("You goofed!");
printf("error = %d\n",errno);
printf("%s\n",strerror(errno));
}
}
printf("please input array number:\n");
for(i=0;i<Number;i++)
for(j=0;j<Number;j++)
scanf("%d",&a[i][j]);
printf("the array number is :\n");
for(i=0;i<Number;i++)
{
for(j=0;j<Number;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
printf("result is %d\n",identity_matrix(a,Number));
return 0;
}
8.5
/*
this program about function that to multiply
two matrices
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <malloc.h>
//#define NDEBUG
#include <assert.h>
void matrix_multiply(int *m1,int *m2,register int *r,int x,int y,int z)
{
register int *m1p;
register int *m2p;
register int k;
int row;
int column;
#if 0
int i,j;
printf("the matrix m1 is: \n");
for(i=0;i<x*y;i++)
{
printf("%d\t",m1[i]);
if((i+1)%y==0)
printf("\n");
}
printf("the matrix m2 is: \n");
for(i=0;i<y*z;i++)
{
printf("%d\t",m2[i]);
if((i+1)%z==0)
printf("\n");
}
#endif
for(row=0;row<x;row++)
{
for(column=0;column<z;column++)
{
m1p = m1 + row*y;
m2p = m2 + column;
*r = 0;
for(k=0;k<y;k++)
{
*r += (*m1p)*(*m2p);
m1p += 1;
m2p += z;
//printf("%d\n",*r);
}
printf("%d\t",*r);
r++;
//printf("%d\n",*r);
}
printf("\n");
// printf("%d\n",*(r+row));
}
#if 0
printf("the multiply matrix is :\n");
for(row=0;row<x*z;row++)
{
printf("%d\t",r[row]);
if((row+1)%z==0)
printf("\n");
}
#endif
}
int main()
{
int x,y,z,*m1,*m2;
register int *r;
int i,j;
printf("please input x,y and z:\n");
scanf("%d%d%d",&x,&y,&z);
assert(x>0 && y>0 && z>0);
if((m1 = (int *)malloc(sizeof(int)*(x*y)))==NULL)
{
perror("You goofed!\n");
printf("errno = %d\n",errno);
printf("%s\n",strerror(errno));
}
if((m2 = (int *)malloc(sizeof(int)*(y*z)))==NULL)
{
perror("You goofed!\n");
printf("errno = %d\n",errno);
printf("%s\n",strerror(errno));
}
if((r = (int *)malloc(sizeof(int)*(x*z)))==NULL)
{
perror("You goofed!\n");
printf("errno = %d\n",errno);
printf("%s\n",strerror(errno));
}
for(i=0;i<x*z;i++)
r[i] = 0;
printf("please input matrix m1:\n");
for(i=0;i<(x*y);i++)
{
scanf("%d",&m1[i]);
}
printf("please input matrix m2:\n");
for(j=0;j<(y*z);j++)
{
scanf("%d",&m2[j]);
}
printf("the matrix m1 is: \n");
for(i=0;i<x*y;i++)
{
printf("%d\t",m1[i]);
if((i+1)%y==0)
printf("\n");
}
printf("the matrix m2 is: \n");
for(i=0;i<y*z;i++)
{
printf("%d\t",m2[i]);
if((i+1)%z==0)
printf("\n");
}
printf("the result of multiply matrix is :\n");
matrix_multiply(m1,m2,r,x,y,z);
return 0;
}
8.8
摘自别人的博客
//八皇后
#include <stdio.h>
#include <memory.h>
#define ROW 8
#define COLUMN ROW
int success = 0; /*successful times*/
void show(int* p)
{
int i = 0;
printf("%2d>>> ", success);
for (i=0;i<COLUMN ; i++ )
{
printf("%d, ", p[i]);
}
printf("\n");
}
int main(int argc, char *argv[])
{
int pieces[COLUMN];
int row = 0; /*row in the first column*/
int column = 0; /*the current column*/
int flag = 0; /*is matched in current column*/
int i = 0; /*row int current column*/
int j = 0; /*column from 0 to the one before the current column*/
int count = 0; /*steps need*/
/*set the pieces all as -1, [0,COLUMN) represents row in the n-th column*/
memset(pieces, -1, sizeof(pieces));
//init (0,0) as 0, and the current column add to the next column
pieces[column] = 0;
column++;
while (row < ROW)
{
while (column < COLUMN)
{
count++;
flag = 0;
i = pieces[column] + 1;
// if (i>=ROW && column==1)
// break;
// else if (column==0 && i>5)
// break;
for (i=i; i<ROW ;i++ )
{
for (j=0 ;j<column ;j++ )
{
if (i==pieces[j] || abs(j-column)==abs(pieces[j]-i))
{
flag = 0;
break;
}
flag = 1;
}
if (flag)
break;
}
if (flag)
{
pieces[column] = i;
column++;
}
else
{
pieces[column] = -1;
column--;
if (column == 0) /*nowhere to go back*/
break;
}
}/*internal while end*/
if (flag)
{
success++;
show(pieces);
flag = 0;
pieces[column-1] = -1;
column -= 2;
}
else
{
memset(pieces, -1, sizeof(pieces));
column = 0;
row++;
pieces[column] = row;
column++;
}
}/*external while end*/
printf("总共步数:%d/nPress Any Key to Continue...\n", count);
fflush(stdin);
//getch();
return 0;
}