实验5

任务1

task1 1功能是将数组最小值的地址赋值给pmin,最大值的地址赋值给pmax.

    2 都指向的是数组第一个数

task2 1功能是寻找数组中最大的数,返回的是输入的数据里面最大的数字

    2不可以,return的是一个指针变量,这里应该返回的是指针变量所指的地址中的数字

任务2

 task1 1s1大小为80,sizeof计算的是数组s1提前申请的总内存为80,strlen计算的是数组s1实际所占用的内存为23

   2不能替换,因为数组不可以赋值

   3交换

task2 1字符串,预计占用的内存空间,实际占有的内存空间

   2可以,原式用的数组,这里用的指针代替

     3交换的指针变量,字符串不交换

任务3

 屏幕截图 2025-12-11 104206

 

任务4

 1将text中所有的i转换成*

2可以

任务5

 

#include <stdio.h>
#define N 80

char *str_trunc(char *str, char x);

int main() {
    char str[N];
    char ch;

    while(printf("输入字符串: "), gets(str) != NULL) {
        printf("输入一个字符: ");
        ch = getchar();

        printf("截断处理...\n");
        str_trunc(str, ch);         // 函数调用

        printf("截断处理后的字符串: %s\n\n", str);
        getchar();
    }

    return 0;
}

// 函数str_trunc定义
// 功能: 对字符串作截断处理,把指定字符自第一次出现及其后的字符全部删除, 并返回字符串地址
// 待补足...
// xxx
char *str_trunc(char *str, char x){
    int i;
    
    for(i=0;str[i]!='\0';i++)
    {if(str[i]==x)
    str[i]='\0';
    }
    
    return str; 
}

屏幕截图 2025-12-11 105230

输出完成后跳过第二次循环的字符串输入过程,直接开始输入字符。防止代码错乱导致直接开始字符输入

任务6

 

#include <stdio.h>
#include <string.h>
#define N 5

int check_id(char *str); // 函数声明

int main()
{
    char *pid[N] = {"31010120000721656X",
                    "3301061996X0203301",
                    "53010220051126571",
                    "510104199211197977",
                    "53010220051126133Y"};
    int i;

    for (i = 0; i < N; ++i)
        if (check_id(pid[i])) // 函数调用
            printf("%s\tTrue\n", pid[i]);
        else
            printf("%s\tFalse\n", pid[i]);

    return 0;
}

// 函数定义
// 功能: 检查指针str指向的身份证号码串形式上是否合法
// 形式合法,返回1,否则,返回0
int check_id(char *str) {
    // 补足函数实现
 {   // ...
    int i;
    if(strlen(str)!=18)
        return 0;
    for(i=0;i<17;i++){
        if(str[i]<'0'||str[i]>'9')
            return 0;
    }
    if(!(str[17]=='X'||(str[17]>='0'&&str[17]<='9')))
    return 0;
}
    return 1;
    
    
    
}

屏幕截图 2025-12-11 111435

 

任务7

 

#include <stdio.h>
#define N 80
void encoder(char *str, int n); // 函数声明
void decoder(char *str, int n); // 函数声明

int main() {
    char words[N];
    int n;

    printf("输入英文文本: ");
    gets(words);

    printf("输入n: ");
    scanf("%d", &n);

    printf("编码后的英文文本: ");
    encoder(words, n);      // 函数调用
    printf("%s\n", words);

    printf("对编码后的英文文本解码: ");
    decoder(words, n); // 函数调用
    printf("%s\n", words);

    return 0;
}

/*函数定义
功能:对str指向的字符串进行编码处理
编码规则:
对于a~z或A~Z之间的字母字符,用其后第n个字符替换; 其它非字母字符,保持不变
*/
void encoder(char *str, int n) {
    // 补足函数实现
    // ×××
    int i;
     while(str[i]!='\0')
        {
            if(str[i]>='a'&&str[i]<='z')
                str[i]='a'+(str[i]-'a'+n)%26;
            else if(str[i]>='A'&&str[i]<='Z')
                {
                str[i]='A'+(str[i]-'A'+n)%26;
            }
            i++;
        }
}

/*函数定义
功能:对str指向的字符串进行解码处理
解码规则:
对于a~z或A~Z之间的字母字符,用其前面第n个字符替换; 其它非字母字符,保持不变
*/
void decoder(char *str, int n) {
    // 补足函数实现
    
    // ×××
    int i;
     while(str[i]!='\0')
        {
            if(str[i]>='a'&&str[i]<='z')
                str[i]='a'+(str[i]-'a'-n)%26;
            else if(str[i]>='A'&&str[i]<='Z')
                {
                str[i]='A'+(str[i]-'A'-n)%26;
            }
            i++;
        }
}

屏幕截图 2025-12-11 120545

 (这个为什么编码的时候可以从y得到a,解码的时候解不回去啊?)

任务8

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int i,j;
    char *temp;

    for(i=0;i<argc-1;i++)
        for(j=1;j<argc-1-i;j++)
            if(strcmp(argv[j],argv[j+1]) > 0){
            
                temp=argv[j];
                argv[j]=argv[j+1];
                argv[j+1]=temp;
        }
    for(i = 1; i < argc; ++i)
        printf("hello, %s\n", argv[i]);

    return 0;
}

 

posted @ 2025-12-11 12:06  邹秉祥  阅读(5)  评论(0)    收藏  举报