第六章 数组课后练习 8And13-15

//
// Created by 86184 on 2024/8/13.
//
//8.找出一个二维数组的鞍点
//  行最大 列最小
//  这里默认只有一个鞍点
#include <stdio.h>

#define M 3
#define N 4

int main() {
    int array[M][N] = {0};
    int pos = 0, j = 0, i = 0, max = 0,flag = 0;
    printf("请输入%d行%d列二维数组:\n", M, N);
    fflush(stdout);
    for (int i = 0; i < M; ++i) {
        for (int j = 0; j < N; ++j) {
            scanf("%d", &array[i][j]);
        }
    }
    for (i = 0; i < M; ++i) {
        //找改行上最大元素并记录他的列号
        max = array[i][0];
        for (j = 0; j < N; ++j) {
            if (array[i][j] > max) {
                max = array[i][j];
                pos = j;
            }
        }
        //确定元素是否为该列上的最小元素
        for (j = 0; j < M; ++j) {
            if (array[j][pos] < max) {
                break;
            }
        }
        //如果在pos列未发现比max小的元素,说明max是pos列最小的元素
        if (j == M) {
            printf("鞍点为%d,在第%d行,第%d列 ", max, i, pos);
            flag = 1;
            break;
        }
    }

    if(flag == 0){
        printf("没有鞍点");
    }
    return 0;
}

//
// Created by 86184 on 2024/8/14.
//
//13.编写程序,将两个字符串连接起来
#include <stdio.h>
#include <string.h>

int main() {
    char s1[] = "abcd", s2[] = {"hijk"};
    int len1 = strlen(s1), len2 = strlen(s2);
    int len3 = len1 + len2, k = 0;
    char s3[100] = {'\0'};
    printf("%d%d", len1, len2);
    for (int i = 0; i < len1; ++i) s3[k++] = s1[i];
    for (int i = 0; i < len1; ++i) s3[k++] = s2[i];
    for (int i = 0; i < len3; ++i) printf("%c", s3[i]);
    return 0;
}
//在这段代码中,你使用了 sizeof(s1) 和 sizeof(s2) 来计算字符串 s1 和 s2 的长度。
//然而,这种方式并不适用于计算字符串的实际长度。
//sizeof(s1) 和 sizeof(s2) 返回的是数组的大小(以字节为单位),
//而不是字符串的长度。
//字符串的长度应该使用 strlen() 函数来获取,
//它会计算字符串中的实际字符数,不包括结尾的空字符 \0。
//此外,你在循环中使用了 i++ 来迭代 i,但这会导致循环条件不按预期工作。
//你应该只使用一个循环来连接两个字符串。

//
// Created by 86184 on 2024/8/14.
//
//
//14.编写一个程序比较字符串s1和s2,使用gets读入
// 若s1>s2 输出一个正数
// 若s1=s2 输出一个0
// 若s1<s2 输出一个负数
// 这里默认为等长字符串

#include <stdio.h>

int main() {
    char s1[100] = {'\0'}, s2[100] = {'\0'};
    printf("输入字符串1:");
    fflush(stdout);
    gets(s1);
    printf("输入字符串2:");
    fflush(stdout);
    gets(s2);
    char *q = s2;
    char *p = s1;
    int num1 = 0, num2 = 0, flag = 0;
    while (*p != '\0' && *q != '\0') {
        num1 = *p + 0;
        num2 = *q + 0;
        if (*p == *q) {
            p++;
            q++;
        } else {
            printf("%d", num1 - num2);
            flag = 1;
            break;
        }
    }
    if (flag == 0) {
        printf("0");
    }

    return 0;
}

//
// Created by 86184 on 2024/8/14.
//
//15.将字符数组s2中的全部字符复制到字符数组s1中 '\0'也要赋值 '\0'后面内容不需要赋值
#include <stdio.h>
#include <string.h>

#define MAX_SIZE 100

int main() {
    char s2[MAX_SIZE] = {"abcde"}, s1[MAX_SIZE] = {'\0'};
    int i = 0, j = 0;
    while (s2[i] != '\0') {
        s1[j++] = s2[i++];
    }
    s1[j] = s2[i];
    //验证是不是以\0结尾
    for (int k = 0; s1[k] != '\0'; ++k) {
        printf("%c ", s1[k]);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值