【Pointers On C】C和指针部分编程题 solution

第6章 指针

6.18.3   编写函数reverse_string,  函数原型为 void reverse_string(char *string);

#define NUL '\0'

void reverse_string(char *str)
{
	char *tail = str;
	char *head = str;
	int len = 0;
	for (; *tail++ != NUL;) len ++;
	cout << len << endl;
	for(int i = 0; i < len/2; i ++)
	{
		char tmp = *(str+i) ;
		*(str+i) = *(str+len-i-1);
		*(str+len-i-1) = tmp;
	}

}

第7章 函数

7.11.1  递归编写Hermite Polynomials, 函数原型为 int hermite(int n, int x);

int hermite(int n, int x)
{
	if(n <= 0) return 1;
	if(n == 1) return 2*x;
	return  2*x * hermite(n-1, x) - 2*(n-1) * hermite(n-2, x);
}

7.11.1  函数原型 int ascii_to_integer(char *string)

int ascii_to_integer(char *string)
{
	int ans = 0;
	while(*string != '\0')
		ans = ans * 10 + (*string ++) - '0';
	return ans;
}

第8章 数组

8.8.5  矩阵乘法, 函数原型 void matrix_multiply(int *m1, int *m2, int *r, int x, int y, int z);

void matrix_multiplication(int *m1, int *m2, int *r, int x, int y, int z)
{
	for(int i = 0; i < x; i ++)
		for(int j = 0; j < z; j ++)
			for(int k = 0; k < y; k ++)
				*(r+(i*z+j)) += (*(m1+(i*y+k))) * (*(m2+(k*z+j)));
	for(int i = 0; i < x; i ++)
	{
		for(int j = 0; j < z; j ++)
			cout << *(r+i*x+j) << " ";
		cout << endl;
	}

}

int main()
{

	int a[][2] = {2, -6, 3, 5, 1, -1};
	int b[][4] = {4, -2, -4, -5, -7, -3, 6, 7};
	int c[3][4] = {0};
	memset(c, 0, sizeof(c));
	matrix_multiplication(&a[0][0], &b[0][0], &c[0][0], 3, 2, 4);

	return 0;
}

8.8.8 八皇后

const int N = 10;
bool mark[N][N];
int q[N][N];
int dir[8][2] = {1, 0, -1, 0, 0, 1, 0, -1, 1, 1, 1, -1, -1, -1, -1, 1};

bool safe(int row, int col)
{
	memset(mark, false, sizeof(mark));
	for(int i = 0; i < 8; i ++)
		for(int j = 0; j < 8; j ++)
		{
			if(q[i][j]){
				for(int k = 0; k < 8; k ++)
				{
					int tx = i + dir[k][0];
					int ty = j + dir[k][1];
					while(tx < 8 && ty < 8 && tx >= 0 && ty >= 0)
					{
						mark[tx][ty] = true;
						tx += dir[k][0];
						ty += dir[k][1];
					}
				}
			}
		}
	return (!mark[row][col]);
}

void queen(int row, int col)
{
	if(row == 7)
	{
		for(int i = 0; i < 8; i ++){
			for(int j = 0; j < 8; j ++) cout << q[i][j];
			cout << endl;
		}
		cout << "--------" << endl;
		return ;
	}
	for(int i = 0; i < 8; i ++)
	{
		if(safe(row+1, i)){
			q[row+1][i] = 1;
			queen(row+1, i);
			q[row+1][i] = 0;
		}
	}
}

int main()
{
	for(int i = 0; i < 8; i ++)
	{
		q[0][i] = 1;
		queen(0, i);
		q[0][i] = 0;
	}
	return 0;
}
时间: 2024-10-12 07:33:02

【Pointers On C】C和指针部分编程题 solution的相关文章

编程题:使用指向指针的指针

#include<stdio.h> void main() { static char *str[]={"How","are","you"}; char **p; p=str+1; printf("%s\n",*p); printf("%c\n",**p); } 编程题:使用指向指针的指针,布布扣,bubuko.com

编程题:返回指针值的函数,求两个数中较大的数。

#include<stdio.h> int *max(int *x,int *y) { int *q; if(*x>*y)  q=x; else  q=y; return q; } void main() { int a,b,*p; scanf("%d,%d",&a,&b); p=max(&a,&b); printf("%d,%d,max is %d\n",a,b,*p); } 编程题:返回指针值的函数,求两个数中较

编程题:指向变量的指针变量

#include<stdio.h> void main() { int a,b; int *p,*q; a=3;b=5; p=&a;q=&b; printf("%d,%d\n",*p,*q); } 编程题:指向变量的指针变量,布布扣,bubuko.com

编程题:指针变量,直接引用和间接引用的区别。

#include<stdio.h> void main() { int a,b; int *p;   /*定义指针变量p*/ p=&b;     /*将变量b的地址放在变量p中*/ a=3;      /*直接引用变量a*/ *p=5;     /* 间接引用变量b*/ printf("a=%d,b=%d\n",a,b); } 编程题:指针变量,直接引用和间接引用的区别.,布布扣,bubuko.com

编程题:指针变量指向结构体数组。

编程题:指针变量指向结构体数组. #include<stdio.h> void main() { struct person {char name[20]; char sex; int age; float height; }per[3]={{"Li Ping",'M',20,175},{"Wang Ling",'F',19,162.5}, {"Zhao Hui",'M',20,178}}; struct person *p; for

编程题:比较指向数组元素的指针变量和指向数组的指针变量的不同。

#include<stdio.h> void main() {int a[2][3]={1,2,3,4,5,6}; int *p1,(*p2)[3]; /*p1指向数组元素,p2指向包含3个元素的一维数组*/ p1=a[0];p2=a; /*用指向数组元素的指针变量输出二维数组元素*/ for(;p1<a[0]+6;p1++) printf("%4d",*p1); printf("\n"); /*用指向以为数组的指针变量输出二维数组元素*/ for

编程题:指向二维数组元素的指针变量。功能:已知二维数组a[2][3],输入输出全部元素。

#include<stdio.h> void main() { int a[2][3],i,j; int *p; /*用坐标法输入二维数组元素*/ for(i=0;i<2;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); /*用指针法输出二维数组元素*/ p=a[0];         /*等价于p&a[0][0];*/ for(;p<a[0]+6;p++)   printf("%4d&quo

编程题:指针数组实现,将多个字符串按字母顺序输出。

#include<stdio.h> void sort(char *str[],int n) { char *temp;int i,j,k; for(i=0;i<n-1;i++) {k=1; for(j=i+1;j<n;j++) if(strcmp(str[k],str[j])>0) k=j; if(k!=i) {temp=str[i];str[i]=str[k];str[k]=temp;} } } void main() { int i,n=4; char *string[

编程题:指向函数的指针,求两个数中较大的数。

#include<stdio.h> int max(x,y) { int z; if(x>y)  z=x; else  z=y; return z; } void main() { int a,b,c; int (*p)(); p=max; scanf("%d,%d",&a,&b); c=(*p)(a,b); printf("%d,%d,max is %d\n",a,b,c); } 编程题:指向函数的指针,求两个数中较大的数.,布布