第九章 C语言程序设计

9.1

#include <stdio.h>

void selection_sort (int n, int a[]);

int main (void)
{
	int n,i;
	
	printf ("How many numbers do you want to resevse? ");
	scanf ("%d", &n);
	int a[n];
	
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	
	selection_sort(n,a);
	
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	return 0;	
}
void selection_sort(int n, int a[])
 {
 
	int max,i,j;
	max=a[0];
	for(i=0;i<n;i++){
		if(max<=a[i]){
			max=a[i];
			j=i;
		}
	}
	a[j]=a[n-1];
	a[n-1]=max;
	
	n--;
	if(n==0){
		return;
	}
	selection_sort(n,a);
	
}

9.2

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
double function(double n);

int main(void)
{
	double n,sum;

	printf("输入你的工资:");
	scanf("%lf", &n);
	
	printf("%.2lf \n",function(n));

	return 0;
}

double function(double n)
{
	double sum = 0;
	if (n < 750) { sum = 0.01 * n; }
	else if (n < 2250) { sum = 7.50 + 750 * 0, 02; }
	else if (n < 3750) { sum = 37.50 + (n - 2250) * 0.03; }
	else if (n < 5250) { sum = 82.50 + (n - 3750) * 0.04; }
	else if (n < 7000) { sum = 142.50 + (n - 5250) * 0, 05; }
	else { sum = 230.00 + (n - 7000) * 0.06; }

	return sum;
}

9.3

#define _CRT_SECURE_NO_WARNINGS
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 10
#define WAY 4

void print_array(char walk[N][N]);
void generate_random_walk(char walk[N][N]);

int main(void)
{
	char walk[N][N];

	generate_random_walk(walk);
	print_array(walk);
	return 0;
}

void generate_random_walk(char walk[N][N])
{
	int i, j;
	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			walk[i][j] = '.';
		}
	}
	bool a[N][N] = { false };
	srand((unsigned)time(NULL));
	int ways;
	i = 0; j = 0;
	walk[0][0] = 'A';
	a[0][0] = true;

	for (int m = 0; m < 25; ) {
		//余0表上, 1表下, 2表左, 3表右 
		ways = rand() % WAY;

		if (ways == 0) {
			//如果往上走有字母了或走出表格, 进行判断 
			if (a[i - 1][j] == true || i - 1 < 0) {
				//如果四面都是字母,退出 
				if ((a[i + 1][j] == true && a[i][j - 1] == true && a[i][j + 1] == true)
					// 考虑左边和左下角情况 
					|| j - 1 < 0 && a[i + 1][j] == true && a[i][j + 1] == true
					|| j - 1 < 0 && i + 1 > 9 && a[i][j + 1] == true
					// 右边和右下角
					|| j + 1 > 9 && a[i + 1][j] == true && a[i][j - 1] == true
					|| j - 1 < 0 && i + 1 > 9 && a[i][j + 1] == true
					//下边
					|| i + 1 > 9 && a[i][j + 1] == true && a[i][j - 1] == true) break;
				//如果都不是,重新选方向 
			}
			else {
				a[i - 1][j] = true;
				walk[i - 1][j] = 'B' + m;
				m++;
				i--;
				continue;
			}
		}

		if (ways == 1) {

			if (a[i + 1][j] == true || i + 1 > 9) {
				if (a[i - 1][j] == true && a[i][j - 1] == true && a[i][j + 1] == true
					//右边和右上角 
					|| j + 1 > 9 && a[i][j - 1] == true && a[i - 1][j] == true
					|| j + 1 > 9 && i - 1 < 0 && a[i][j - 1] == true
					//左边 
					|| j - 1 < 0 && a[i - 1][j] == true && a[i][j + 1] == true
					//上边 
					|| i - 1 < 0 && a[i][j + 1] == true && a[i][j - 1] == true) break;
			}
			else {
				a[i + 1][j] = true;
				walk[i + 1][j] = 'B' + m;
				m++;
				i++;
				continue;
			}
		}

		if (ways == 2) {
			if (j - 1 < 0 || a[i][j - 1] == true) {
				if (a[i + 1][j] == true && a[i - 1][j] == true && a[i][j + 1] == true
					// 考虑下边和右下角情况 
					|| i + 1 > 9 && a[i - 1][j] == true && a[i][j + 1] == true
					|| j + 1 > 9 && i + 1 > 9 && a[i - 1][j] == true
					// 上边和右上角
					|| i - 1 < 0 && a[i + 1][j] == true && a[i][j + 1] == true
					|| j + 1 > 9 && i - 1 < 0 && a[i][j + 1] == true
					// 右边
					|| j + 1 > 9 && a[i - 1][j] == true && a[i + 1][j] == true) break;
			}
			else {
				a[i][j - 1] = true;
				walk[i][j - 1] = 'B' + m;
				m++;
				j--;
				continue;
			}
		}

		if (ways == 3) {

			if (j + 1 > 9 || a[i][j + 1] == true) {
				if (a[i + 1][j] == true && a[i][j - 1] == true && a[i - 1][j] == true
					//左边和左下角 
					|| j - 1 < 0 && a[i - 1][j] == true && a[i + 1][j] == true
					|| j - 1 < 0 && i + 1 > 9 && a[i - 1][j] == true
					//下边 
					|| i + 1 > 9 && a[i - 1][j] == true && a[i][j - 1] == true
					//上边 
					|| i - 1 < 0 && a[i][j - 1] == true && a[i + 1][j] == true) break;
			}
			else {
				a[i][j + 1] = true;
				walk[i][j + 1] = 'B' + m;
				m++;
				j++;
				continue;
			}
		}
	}


}

void print_array(char walk[N][N])
{
	int i, j;
	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			printf("%c ", walk[i][j]);
		}
		printf("\n");
	}
}

9.4

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
#define N 26

void read_word(int counts[]);
bool equal_arry(int counts[26], int counts1[26]);

int main()
{
	char ch;
	int counts[N] = { 0 };
	int counts1[N] = { 0 };

	printf("Enter first word: ");
	read_word(counts);
	printf("Enter second word: ");
	read_word(counts1);

	equal_arry(counts, counts1) ? printf("The word are anagrams:") : printf\
		("the word are not anagrams: ");

	return 0;
}

void read_word(int counts[])
{
	char ch;
	for (; ((ch = toupper(getchar())) != '\n'); ) {
		if (!isalpha(ch)) {
			continue;
		}
		counts[ch % 65]++;
	}
}

bool equal_arry(int counts[26], int counts1[26])
{
	for (int i = 0; i < 26; i++) {
		if (counts[i] == counts1[i]) {
			;
		}
		else {
			return false;
		}
	}
	return true;
}
#include <ctype.h>
 #include <stdio.h> 
 #include <stdbool.h>
 #include <stdlib.h>
 
 void read_word(int counts[]);
 bool equal_array(int counts1[], int counts2[]);
 
 int main(void)
 {
 	int counts1[26] = {0};
 	int counts2[26] = {0};
 	
	read_word(counts1);
	read_word(counts2);

 	if (equal_array(counts1, counts2)) printf("The words are not anagrams.");
	else printf("The words are anagrams.");
 	
 	return 0;
 }
 
 void read_word(int counts[26])
 {
 	printf("Enter the word: ");
 	
 	char word[20];
 	for (int i = 0; i < 20; i++) {
 		word[i]  = getchar();
 		if (!isalpha(word[i]) && word[i] != '\n') {
 			contimue;
		 }
 		if (word[i] == '\n') break;
 		word[i] = tolower(word[i]);
 		counts[word[i] - 'a']++;
	 } 
 }
 
 bool equal_array(int counts1[26], int counts2[26])
{
	bool flag = false;
	
	for (int i = 0; i < 26; i++) {
		if (counts1[i] != counts2[i]) flag = true;
	}
	
	return flag;	
 } 

9.5

#include <stdio.h>

void create_magic_square(int n, int magic_square[n][n]);
void print_magic_square(int n, int magic_square[n][n]); 

int main()
{
	printf("This is program creates a magic square of a specified size.\n");
	printf("The size must be an odd number between 1 and 99.\n");
	printf("Enter size of magic square: ");
	int n;
	scanf("%d", &n);
	int square[n][n];
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			square[i][j] = 0;
		}
	}
	
	create_magic_square(n, square);
	print_magic_square(n, square); 
	
	return 0;
}

void create_magic_square(int n, int magic_square[n][n])
{
	int size = n;
	int (*square)[n];
	square = magic_square;
	
	for (int i = 0; i < size; i++) {
		for (int j = 0; j < size; j++) {
			square[i][j] = 0;
		}
	}
	int i = 0, j = size / 2, num = 1;
	
	for (; ; ) {
		if (square[i][j] == 0) {
			square[i][j] = num;
			i = i + size - 1; j++;
			i = i % size;
			j = j % size;		
		} else {
			i++; i++; j = j + size - 1;
			i = i % size;
			j = j % size;		  
			square[i][j] = num;
			i = i + size - 1; j++;	
			i = i % size;
			j = j % size;
		}
		num++;
		
		if (num > size * size) break;
	}
 } 

void print_magic_square(int n, int magic_square[n][n])
{
	int i, j;
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			printf("%3d", magic_square[i][j]);
		}
		printf("\n");
	}
}

9.6

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

double pow(double x, double n);
int main(void)
{
	int i;
	int a[6] = { 3,2,-5,-1,7,-6 };
	double x, n, p = 0;

	printf("输入X和最高次幂n的值:");
	scanf("%lf %lf", &x, &n);

	for (i = 0; i <6; i++) {
		p += (a[i] * pow(x, n));
		n -= 1;

	}
	printf("%lf\n", p);
	return 0;
}

double pow(double x, double n)
{
	double p;
	if (n == 0) {
		return 1;
	}
	else {
		return x * pow(x, n - 1);
	}
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int gcd(int x, int n);

int main(void)
{
	int x = 0, n = 0;

	printf("Enter x: ");
	scanf("%d", &x);
	
	printf("%d\n", 3*gcd(x, 5)+2* gcd(x, 4)-5* gcd(x, 3)- gcd(x, 2)\
			+7*x-6);

	return 0;
}

int gcd(int x,int n)
{
	if (n = 0) {
		return 1;
	}

	return x * gcd(x, n-1);

}

9.7

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

double pow(double x, int n);
int main(void)
{
	int  n;
	double x;

	printf("输入X和最高次幂n的值:");
	scanf("%lf%d", &x, &n);

	printf("%.2f",pow(x, n));


	return 0;
}

double pow(double x, int n)
{
	double p;
	if (n == 0) {
		return 1;
	}
	else {
		if (n % 2 == 0 && n != 0) {
			return pow(x, n / 2) * pow(x, n / 2);
		}
		else {
			n = n - 1;
			return x*(pow(x, n / 2)* pow(x, n / 2));
		}
	}
}

9.8
仅供参考,还有问题没解决

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include <stdlib.h>
#include<windows.h>


int roll_dice(void);
bool play_game(void);

int main(void)
{
	int i = 0;
	int count1 = 0, count2 = 0;
	char command;
	
	do {
		if (play_game()) {
			printf("Here1\n");
			count1++;
		}
		else {
			printf("Here2\n");
			count2++;
		}
		
		printf("Play again?(Y/N): ");
		printf("Here3\n");
		scanf("%c", &command);
	} while (command == 'y' || command == 'Y');
	printf("Wins: %d  Losses: %d", count1,count2);
	
	return 0;
}

int roll_dice(void)
{
	printf("Here4\n");
	srand(time(NULL));
	int i = rand() % 6 + 1;
	int i2= rand() % 6 + 1;
	return i + i2;
}

bool play_game(void)
{
	int i = 0;
	int i1 = 0; 
	int i2 = 0;
	//int point = 0;
	//point++;
	i = roll_dice();
	//printf("point==%d\n", point);

	printf("Here5\n");
	
	if (i == 7 || i == 11) {
		printf("Here6\n");
		printf("You win"); return 1;
	}
	else  if (i == 2 || i== 3 || i == 12) {
		printf("Here7\n");
		printf("You loss!"); return 0;
	} 
	/*else {
			printf("Here8\n");
			i2 = i;
			printf("You rolled: %d\n", i);
			printf("You point is %d\n", i);
		}*/
	
		
	else {
		for (;;) {
			printf("Here9\n");
			i2 = i;
			printf("You rolled: %d\n", i);
			//printf("i1== %d\n");
			Sleep(100);

			i1 = roll_dice();
			printf("i1== %d\n",i1);
			printf("You point is %d\n", i);
			if (i1 == 7) {
				printf("Here10\n");
				printf("You Loss!\n");
				return 0;
			}
			else if (i1 == i2) {
				printf("Here11\n");
				printf("You win!\n");
				return 1;
			}
			else {
				printf("Here12\n");
				continue;
			}
		}
		}
}
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h> //sleep()函数头文件 

int rool_dice(void);
bool play_game(void); 

int main(void)
{	
	char a;
	int count1 = 0, count2 = 0;
	
	do {
		if (play_game()) {
			printf("You lose!\n\n");
			count1++;
		} else {
			printf("You win!\n\n");
			count2++;
		}
		
		printf("Play again? ");
		a = getchar();
		getchar();
		printf("\n");
		if (a == 'y') {
			continue;
		} else if(a == 'n') {
			break;
		} else {
			printf("Illegal input!");
			break;
		}
				
	} while(1);
	
	printf("Wins: %d  Losses: %d ", count2, count1);

	return 0;
}

int rool_dice(void)
{
	//两个变量记录两个骰子的数值 
	int count1, count2;
	
	srand((unsigned) time(NULL));
	count1 = rand() % 6 + 1;
	count2 = rand() % 6 + 1;
	
	return count1 + count2;
	
}


bool play_game(void)
{
	int flag = false;
	int point;	//期待的值 
	int r;	//骰子的值 
	
	r = rool_dice();
	printf("You rolled: %d\n", r);
	if (r == 7 || r == 11) {
		flag = true;
		return flag;
	} else if (r == 2 || r == 3 || r == 12) {
		flag = true;
		return flag;	
	} else {
		point = r;
		printf("You point is %d\n", point);
		
		for( ; ;) {
			sleep(2);                           //可能是运行的时间太快了, 产生的随机数都是一样的,百度说延时一下 
			r = rool_dice();
			printf("You rolled: %d\n", r);
			if (r == point) {
				break;
			} else if (r == 7) {
				flag = true;
				break;
			} else {
			}
		}
		
		return flag;
	}

}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include <ctype.h>
#include <stdlib.h>

bool play_game(void);
int roll_dice(void);
int main(void)
{
	int i = 0, j = 0;
	char ch;

	srand((unsigned)time(0));


	for (;;) {

		if (play_game()) {
			i++;
			printf("You win!\n");
			printf("Play again?");
			ch = toupper(getchar());
			if ('Y' == ch && ch != '\n') { continue; }
			else if (ch == 'N' && ch != '\n') { break; }

		}
		else {
			j++;
			printf("You Lose!\n");
			printf("Play again?");
			ch = toupper(getchar());
			if ('Y' == ch ) { continue; }
			else if (ch == 'N' ) { break; }

		}

		//ch = toupper(getchar());
		//if ('Y' == ch&&ch!='\n') { continue; }
		//else if (ch == 'N' && ch != '\n') { break; }

	} 

	printf("\nWins: %d		Losses: %d\n", i, j);

	return 0;
}

bool play_game(void)
{
	int n = 1, m = 0;
	for (;;) {

		int a = roll_dice();
		if (n == 1) {
			if (a == 7 || a == 11) {
				printf("You rolled: %d\n", a);
				return true;
			}
			else if (a == 2 || a == 3 || a == 12) {
				printf("You rolled: %d\n", a);
				return false;
			}
			else {
				printf("You rolled: %d\n", a);
				printf("Your point is %d\n", a);
				m = a;
			}
			n++;
		}
		else {
;
			if (7 == a) {

				printf("You rolled: %d\n", a);
				return false;
			}
			else if (m == a) {
				printf("You rolled: %d\n", a);
				return true;
			}
			else {
				printf("You rolled: %d\n", a);
				continue;
			}
		}
	}

}

int roll_dice(void)
{
	int a = rand() % 6 + 1;
	int b = rand() % 6 + 1;

	return a + b;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值