简单点,敲码的方式简单点,可惜他要捉弄我,敲代码不容易,但还是写了一篇。字母转换+逆序字符+矩阵的元素绕回

寄语:想起来我们十几岁的时候,逢人就说,爱和自由比什么都重要。老师问我要什么,我说我要肆意妄为,要志得意满,要遨游山川和湖海,要世界所有的烂漫。但是现在我们长大了,还不看看我们写的些啥。

目录

想起来我们十几岁的时候,逢人就说,爱和自由比什么都重要。老师问我要什么,我说我要肆意妄为,要志得意满,要遨游山川和湖海,要世界所有的烂漫。但是现在我们长大了,还不看看我们写的些啥。​编辑

将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。 

细节分析阶段

定义数组:

读取字符串:

冒泡排序:

输出排序结果:

编程实现,输入五个字符串,要求按由小到大顺序排列输出。

定义常量与数组:

获取用户输入:

排序:

输出结果:

返回0:

编程实现,先将字符数组s中的字符按逆序存放到t数组中,然后把s中的字符按正序连接到t串的后面(不能采用字符串处理函数),输出字符数组t。

计算字符串长度

逆序字符串

程序填空:从键盘输入由5个字符组成的单词,判断此单词是不是hello,并显示结果。请填空。填空时不得增行或删行,也不得更改程序的结构,一条横线上只能填写一条语句!

 ​编辑if判断啊,家人们;;;;;;;;;ok了:

编程实现:将N×N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。

找Ai来帮会忙:代码如下

头文件和宏定义

函数z

函数fun

主函数main

在main函数中:

​编辑友友们先吃。


只能借助Ai的实力了

第一个

将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。 

输入测试数据:abc4EFg

程序运行结果:aBc4EFg

#include <stdio.h>  
#include <string.h>  
#define MAX 5  
#define LENGTH 100
int main() {  
    char arr[MAX][LENGTH]; // 声明一个二维字符数组来存储字符串  
  
    // 读取五个字符串  
    for (int i = 0; i < MAX; i++) {  
        printf("Enter string %d: ", i + 1);  
        // 注意:gets是不安全的,但在题目要求下使用它  
        // 更好的做法是使用fgets并去除换行符  
        gets(arr[i]); // 注意这里只是演示,不推荐在实际程序中使用gets  
    }  
  
    // 冒泡排序  
    for (int i = 0; i < LENGTH - 1; i++) { // 外层循环  
        for (int j = 0; j < MAX - i - 1; j++) { // 内层循环  
            if (strcmp(arr[j], arr[j + 1]) > 0) { // 比较当前字符串和下一个字符串  
                char temp[LENGTH]; // 临时存储字符串  
                strcpy(temp, arr[j]); // 复制当前字符串到临时变量  
                strcpy(arr[j], arr[j + 1]); // 将下一个字符串复制到当前位置  
                strcpy(arr[j + 1], temp); // 将临时变量(原当前字符串)复制到下一个位置  
            }  
        }  
    }  
  
    // 输出排序后的结果  
    for (int i = 0; i < MAX; i++) {  
        puts(arr[i]);  
    }  
  
    return 0;  
}

写简单点。想复杂了。应该就是直接套个函数。 

这段代码的整体功能是读取用户输入的5个字符串,然后使用冒泡排序算法对它们进行字典序排序,最后输出排序后的结果。代码使用了C语言的stdio.hstring.h头文件,并定义了常量MAX_STRINGSMAX_STRING_LENGTH来分别指定字符串数组的最大大小和单个字符串的最大长度。

细节分析阶段

  1. 定义数组

    char arr[MAX_STRINGS][MAX_STRING_LENGTH];

    声明了一个二维字符数组arr,可以存储MAX_STRINGS个长度为MAX_STRING_LENGTH的字符串。

  2. 读取字符串

    for (int i = 0; i < MAX_STRINGS; i++) {
    printf("Enter string %d: ", i + 1);
    gets(arr[i]);
    }

    通过循环和gets函数读取用户输入的5个字符串,并存储到arr数组中。这里使用了gets函数,但需要注意gets是不安全的,因为它不检查缓冲区大小,可能导致缓冲区溢出。在实际开发中应使用fgets代替。

  3. 冒泡排序

    for (int i = 0; i < MAX_STRINGS - 1; i++) {
    for (int j = 0; j < MAX_STRINGS - i - 1; j++) {
    if (strcmp(arr[j], arr[j + 1]) > 0) {
    char temp[MAX_STRING_LENGTH];
    strcpy(temp, arr[j]);
    strcpy(arr[j], arr[j + 1]);
    strcpy(arr[j + 1], temp);
    }
    }
    }

    这里使用了冒泡排序算法对字符串数组进行排序。外层循环控制排序的轮数,内层循环控制每轮排序的比较次数。如果arr[j]大于arr[j + 1],则交换它们的位置。

  4. 输出排序结果

    for (int i = 0; i < MAX_STRINGS; i++) {
    puts(arr[i]);
    }

    通过循环和puts函数输出排序后的字符串数组。

二维数组arr被用于存储用户输入的MAX个字符串。然后,代码使用冒泡排序算法对这些字符串进行排序,最后输出排序后的结果。由于每个字符串都需要单独存储,并且需要能够访问和修改它们

 arr[i] 实际上是一个指向该行第一个字符的指针,gets 函数会读取输入的字符,直到遇到换行符(\n

  废弃的代码,该删了:

 

新的一个:)下一个

编程实现,输入五个字符串,要求按由小到大顺序排列输出。

输入测试数据:program

welcome

meet

chiness

patter

程序运行结果:chiness

meet

patter

program

welcome


#include <stdio.h>  
#include <string.h>  
#define MAX 5  
#define LENGTH 100
int main() {  
    char arr[MAX][LENGTH]; 

    for (int i = 0; i < MAX; i++) {  
        printf("输入第 %d字符: ", i + 1);    
        gets(arr[i]); 
    }  
  
    for (int i = 0; i < LENGTH - 1; i++) 
	{ 
        for (int j = 0; j < MAX - i - 1; j++) 
		{ 
            if (strcmp(arr[j], arr[j + 1]) > 0)
			{ 
                char temp[LENGTH];
                strcpy(temp, arr[j]); 
                strcpy(arr[j], arr[j + 1]); 
                strcpy(arr[j + 1], temp); 
            }  
        }  
    }  
    for (int i = 0; i < MAX; i++) {  
        puts(arr[i]);  
    }  
  
    return 0;  
}

  1. 定义常量与数组

    • MAX:定义为5,表示可以存储的最大字符串数量。
    • LENGTH:定义为100,表示每个字符串的最大长度。
    • char arr[MAX][LENGTH];:定义一个二维字符数组,用于存储用户输入的字符串。
  2. 获取用户输入

    • 使用for循环和gets()(或修正后的fgets())函数从用户那里获取5个字符串。
  3. 排序

    • 使用嵌套的for循环和strcmp()函数实现冒泡排序。
    • 如果arr[j]在字典顺序上大于arr[j + 1],则交换它们。
    • 注意:这里的交换操作使用了strcpy()函数,它可能会引入未定义的行为,因为我们在没有备份的情况下覆盖了arr[j]的内容。但是,由于我们紧接着就将arr[j + 1]的内容复制到了arr[j],所以在这个特定的例子中,它工作正常。但通常,建议使用一个临时变量来安全地交换两个字符串。
  4. 输出结果

    • 使用for循环和puts()函数打印排序后的字符串数组。
  5. 返回0

    • 表示程序成功执行完毕。

编程实现,先将字符数组s中的字符按逆序存放到t数组中,然后把s中的字符按正序连接到t串的后面(不能采用字符串处理函数),输出字符数组t

输入测试数据:ABCDE

程序运行结果:EDCBAABCDE

看我傻不拉几的代码;

运行出来很抽象

正当我高兴的时候。发现它还是运行不了。╥﹏╥╥﹏╥╥﹏╥╥

不行。这两天的脑袋有点不够用

靠,咋又卡主了

 今天可真的是多灾多难啊

看来还是给的内存空间太小了;,换了一下就成了,哈哈哈

#include<stdio.h>
#define max 20
int main()
{
	char s[max], t[max];
	int i, j=0, m;
	printf("输入字符串: ");
	scanf("%s", s);
	for (m = 0; s[m] != '\0'; m++);
	for (i = m - 1; i >= 0; i--, j++)
	{
		t[j] = s[i];
	}
	t[j] = '\0';
	for (i = 0; i < m; i++, j++)
	{
		t[j] = s[i];
	}
	t[j] = '\0';
	printf("结果是: %s\n", t);
	return 0;
}

计算字符串长度

for (m = 0; s[m] != '\0'; m++);

这个循环遍历字符串s,直到遇到空字符(字符串的结束符),并计算字符串的长度(存储在m中)。

逆序字符串

for (i = m - 1; i >= 0; i--, j++)
{
t[j] = s[i];
}
t[j] = '\0';

这个循环从字符串s的末尾开始,逐个字符地将其复制到数组t的开头,从而实现了字符串的逆序。循环结束后,j将指向t数组的下一个位置(即逆序字符串的末尾),并添加一个空字符以标记字符串的结束。

下一个,今天有点没耐心了:o(╥﹏╥)o

程序填空:从键盘输入由5个字符组成的单词,判断此单词是不是hello,并显示结果。请填空。填空时不得增行或删行,也不得更改程序的结构,一条横线上只能填写一条语句!

第一次运行程序

输入测试数据:hello

程序运行结果:this word is hello

第二次运行程序

输入测试数据:helop

程序运行结果:this word is not hello

#include<stdio.h>

void main()

{

   char str[ ]={'h','e','l','l','o'};

   char str1[5];

        1           ;

   for(i=0;i<5;i++)

           2      ;     

   flag=0;

   for(i=0;i<5;i++)

if    3    {flag=1;  break;}

if  ( 4)  printf("this word is not hello");  

   else  printf("this word is hello");

}

 
                  ,;,,;
                 ,;;'(    马
       __      ,;;' ' \   ┇
    /'  '\'~~'~' \ /'\.)  到 
 ,;(      )    /  |.      ┇
,;' \    /-.,,(   ) \     成
     ) /       ) / )|     ┇ 
     ||        ||  \)     功
     (_\       (_\

 今天可真的是多发异常

简直了;我快要,哈哈哈哈,搞起;

 if判断啊,家人们;;;;;;;;;ok了:

#include<stdio.h>
int main()
{
    int i,flag=0;
    char str[] = { 'h','e','l','l','o' };
    char str1[6];
    scanf("%5s", str1);// 【1】
    for (i = 0; i < 5; i++)

        if (str[i] == str1[i])// 【2】
        {
            flag = 0;
        }
    for (i = 0; i < 5; i++)
        if (str[i] != str1[i])// 【3】 
        { flag = 1;  break; }
    if (flag)//【4】
          printf("this word is not hello");
    else  printf("this word is hello");
    return 0;
}
if (str[i] == str1[i])// 【2】
{
flag = 0;
}

这里有一个问题。这个循环实际上是不必要的,并且其逻辑也是错误的。如果str[i]str1[i]相等,flag应该保持为0(或保持其之前的值,因为这里每次都设置为0,所以前面的比较没有意义)。但如果要保留这个循环,它应该检查不相等的情况,并在发现不相等时设置flag为1。

 最后一个:

编程实现:将N×N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。

程序运行结果:

The original array:

21   12   13   24

25   16   47   38

29   11   32   54

42   21   33   10

The result is:

24   21   12   13

38   25   16   47

54   29   11   32

10   42   21   33

马上就来:

找Ai来帮会忙:代码如下

#include <stdio.h>  
#define N 4  
  
// 函数z,将二维数组(矩阵)的每一行右移一列  
void z(int arr[N][N]) {  
    int temp[N], r, l;  
    for (r = 0; r < N; r++) {  
        // 将当前行的最后一个元素保存到临时数组temp中  
        temp[r] = arr[r][N - 1];  
        // 将当前行的其他元素向右移动一个位置  
        for (l = N - 1; l > 0; l--) {  
            arr[r][l] = arr[r][l - 1];  
        }  
        // 将temp中的元素(原最后一列的元素)放到当前行的第一个位置  
        arr[r][0] = temp[r];  
    }  
}  
  
// 函数fun,打印二维数组(矩阵)  
void fun(int arr[N][N]) {  
    int i, j;  
    for (i = 0; i < N; i++) {  
        for (j = 0; j < N; j++) {  
            printf("%d\t", arr[i][j]);  
        }  
        printf("\n");  
    }  
}  
  
int main() {  
    // 定义并初始化一个4x4的二维数组(矩阵)  
    int arr[N][N] = {  
        {21, 12, 13, 24},  
        {25, 16, 47, 38},  
        {29, 11, 32, 54},  
        {42, 21, 33, 10}  
    };  
  
    // 打印原始矩阵  
    printf("Original Matrix:\n");  
    fun(arr);  
  
    // 调用函数z进行列右移  
    z(arr);  
  
    // 打印移动后的矩阵  
    printf("\nMatrix after right shift by 1 column:\n");  
    fun(arr);  
  
    return 0;  
}

 讲解走起:

头文件和宏定义

#include <stdio.h>
#define N 4

这里,我们包含了stdio.h头文件以使用printf函数,并使用#define定义了一个常量N,用于指定矩阵的大小为4x4。

函数z

void z(int arr[N][N]) {
// ... 函数体 ...
}

这个函数接受一个4x4的整数矩阵作为参数,并对其进行操作,即将每一行的元素向右移动一列。

  • 使用了一个临时数组temp来保存每一行的最后一个元素。
  • 外部循环遍历矩阵的每一行。
  • 内部循环(从右到左)将当前行的每个元素向右移动一列,除了最后一个元素(因为最后一个元素已经保存在temp中了)。
  • 最后,将保存在temp中的元素(原最后一列的元素)放到当前行的第一个位置。
  • 函数fun

void fun(int arr[N][N]) {
// ... 函数体 ...
}

这个函数接受一个4x4的整数矩阵作为参数,并打印其内容。

主函数main

int main() {
// ... 定义并初始化一个4x4的二维数组 ...
// ... 打印原始矩阵 ...
// ... 调用函数z进行列右移 ...
// ... 打印移动后的矩阵 ...
return 0;
}

main函数中:

  • 定义并初始化了一个4x4的二维数组arr
  • 使用fun函数打印原始矩阵。
  • 调用z函数对矩阵进行列右移操作。
  • 使用fun函数再次打印矩阵,此时矩阵的每一行都已向右移动了一列。

 OK了,搞完了,饭都要吃不掉了

友友们先吃。

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值