寄语:想起来我们十几岁的时候,逢人就说,爱和自由比什么都重要。老师问我要什么,我说我要肆意妄为,要志得意满,要遨游山川和湖海,要世界所有的烂漫。但是现在我们长大了,还不看看我们写的些啥。
目录
想起来我们十几岁的时候,逢人就说,爱和自由比什么都重要。老师问我要什么,我说我要肆意妄为,要志得意满,要遨游山川和湖海,要世界所有的烂漫。但是现在我们长大了,还不看看我们写的些啥。编辑
将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
编程实现,先将字符数组s中的字符按逆序存放到t数组中,然后把s中的字符按正序连接到t串的后面(不能采用字符串处理函数),输出字符数组t。
程序填空:从键盘输入由5个字符组成的单词,判断此单词是不是hello,并显示结果。请填空。填空时不得增行或删行,也不得更改程序的结构,一条横线上只能填写一条语句!
编程实现:将N×N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。
只能借助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.h
和string.h
头文件,并定义了常量MAX_STRINGS
和MAX_STRING_LENGTH
来分别指定字符串数组的最大大小和单个字符串的最大长度。细节分析阶段
定义数组:
char arr[MAX_STRINGS][MAX_STRING_LENGTH];
声明了一个二维字符数组
arr
,可以存储MAX_STRINGS
个长度为MAX_STRING_LENGTH
的字符串。读取字符串:
for (int i = 0; i < MAX_STRINGS; i++) {
printf("Enter string %d: ", i + 1);
gets(arr[i]);
}
通过循环和
gets
函数读取用户输入的5个字符串,并存储到arr
数组中。这里使用了gets
函数,但需要注意gets
是不安全的,因为它不检查缓冲区大小,可能导致缓冲区溢出。在实际开发中应使用fgets
代替。冒泡排序:
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]
,则交换它们的位置。输出排序结果:
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;
}
定义常量与数组:
MAX
:定义为5,表示可以存储的最大字符串数量。LENGTH
:定义为100,表示每个字符串的最大长度。char arr[MAX][LENGTH];
:定义一个二维字符数组,用于存储用户输入的字符串。获取用户输入:
- 使用for循环和
gets()
(或修正后的fgets()
)函数从用户那里获取5个字符串。排序:
- 使用嵌套的for循环和
strcmp()
函数实现冒泡排序。- 如果
arr[j]
在字典顺序上大于arr[j + 1]
,则交换它们。- 注意:这里的交换操作使用了
strcpy()
函数,它可能会引入未定义的行为,因为我们在没有备份的情况下覆盖了arr[j]
的内容。但是,由于我们紧接着就将arr[j + 1]
的内容复制到了arr[j]
,所以在这个特定的例子中,它工作正常。但通常,建议使用一个临时变量来安全地交换两个字符串。输出结果:
- 使用for循环和
puts()
函数打印排序后的字符串数组。返回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了,搞完了,饭都要吃不掉了