咸鱼做题实录

咸鱼做题实录1

参考书是《C语言程序设计现代方法第二版》
会穿插PAT的一些题目
因为是初学者所以写的很烂,然后一点一点慢慢进步吧,记录一下成长过程

第八章 数组

1.随机步法

8-9 编写程序,生成一种贯穿10×10字符数组(初始时全为字符’.’)的"随机步法"。程序必须随机地从一个元素"走到"另一个元素,每次都向上、向下、向左或向右移动一个元素位置。已访问过的元素按访问顺序用字母A到Z进行标记。下面是一个输出示例∶

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10

	int main(void)
	{//定义一个10*10的二维数组
		char a[N][N];
		int row, col;
		for (row = 0; row < N; row++) {
			for (col = 0; col < N; col++) {
				a[row][col] = '.';
			}
		}
		//定义一个字母数组
		char letter[26]; char c;
		for (int i = 0, c = 'A'; i < 26; i++, c++) {
			letter[i] = c;
			
		}
		//初始化
		a[0][0] = letter[0];
		srand((unsigned)time(NULL));
		//循环开始
		int j = 0, k = 0, n = 1, randint,count=0; 
		int j1 = 0, k1 = 0,flag;
		while (n < 26) {
			
			randint = rand() % 4;//0向上j-1,1向下j+1,2向左k-1,3向右k+1
            //不要做出格的事情
			if (j < 1 && randint == 0||j>8&&randint==1||k<1&&randint==2||k>8&&randint==3) {
				continue;
			}
			else {
				switch (randint)
				{
				case 0:j1 = j - 1; flag = 0; break;
				case 1:j1 = j + 1; flag = 0; break;
				case 2:k1 = k - 1; flag = 1; break;
				case 3:k1 = k + 1; flag = 1; break;
				default:break;
				}
				if ((a[j1][k1] == '.')&&(flag==0)) {
					j = j1;
					k1 = k;
					a[j][k] = letter[n];
					count = 0;
			}
				else if ((a[j1][k1] == '.')&&(flag == 1))
				{
					k = k1;
					j1 = j;
					a[j][k] = letter[n];
					count = 0;
				}
                //连续四次都不是.说明被包围,可以提前结束
				else {
					count++;
					if (count == 4) {
						break;
					}
					continue;
				}
			
				n++;
			}		
		}
		for (row = 0; row < N; row++) {
			for (col = 0; col < N; col++) {
				printf("%4c",	a[row][col]);
			}
			printf("\n");
		}
		system("pause");
		return 0;
	}



2.整句颠倒

8-14 编写程序颠倒句子中单词的顺序∶
Enter a sentence: you can cage a swallow can‘t you?

Reversal of sentence: you can’t swallow a cage can you?

//别人的
#include<stdio.h>
int main()
{
    int i = 0;
    char word[80][80];
    while (scanf("%s", word[i++]) && (getchar()) != '\n');
    while (--i)
    {
        printf("%s ", word[i]);
    }
    printf("%s", word[0]);
    return 0;
}
// 我的 哈哈哈
#include <stdio.h>
#define Max 80

int main(void)
{	//定义一个超长的字符数组用于存储字符串
	char a[80];
	int end, k, m;
	a[0] = ' ';
	int i = 1;
	//输入的字符串循环存入字符数组a中 终止符为问号
	while ((a[i++] = getchar()) != '?');
	end = i-1;
	//printf("%c\n", end);
	for (k = i -1; k >= 0; k--) {
		if (a[k] == ' '&&(k!=0)) {
			for (m = k+1; m < end; m++) {
			putchar(a[m]);
			}
			printf(" ");
			end = k;
		}
		else if (a[k] == ' ' && (k == 0)) {
			for (m = k+1; m < end; m++) {
				putchar(a[m]);
			}
		}
	}

	putchar(a[i-1]);
	system("pause");
	return 0;
}

3.打印幻方

8.17 编写程序打印n×n的幻方(1.2.··,n²的方阵排列,且每行、每列和每条对角线上的和都相等)。由用户指定n的值∶

奇数阶幻方(罗伯法)

  • 把1(或最小的数)放在第一行正中;

  • 从2开始直到n×n止各数依次按下列规则存放:   
    按 45°方向行走,如向右上,每一个数存放的行比前一个数的行数减1,列数加1

  • 如果行列范围超出矩阵范围,则回绕。   
    例如1在第1行,则2应放在最下一行,列数同样加1;

  • 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

#include <stdio.h>
#define MAX 100

int main(void)
{
	int n;
	printf("打印幻方的阶数:");
	scanf("%d", &n);
	int a[MAX][MAX] = { 0 };
	int row, col, x, y, temp ;
	while (n) {
		//第一步,把1放第一行中间
		int a[MAX][MAX] = { 0 };
		row = 0;
		col = n / 2;
		a[row][col] = 1;
		temp = 2;
		for (; temp <= n*n; temp++) {
			//保存row和col的值
			x=row ; y=col;
			//向右上出发
			row--; col++;
			if (row < 0) {
				row = n - 1;
			}
			if (col >= n) {
				col = 0;
			}
			if (a[row][col] != 0) {
				row = x + 1;
				col = y;
			}
				a[row][col] = temp;
			}
		for (int i = 0; i<n; i++)
		{
			for (int j = 0; j<n; j++)
				printf("%4d", a[i][j]);
			printf("\n");
		}
		printf("打印幻方的阶数: ");
		scanf("%d", &n);

		}
	system("pause");
	return 0;
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值