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;
}