实验5

任务1
#include<stdio.h>
#define N 5

void input(int x[], int n);
void output(int x[], int n);
void find_min_max(int x[], int n, int* pmin, int* pmax);

int main() {
    int a[N];
    int min, max;

    printf("录入%d个数据:\n", N);
    input(a, N);

    printf("数据是: \n");
    output(a, N);

    printf("数据处理...\n");
    find_min_max(a, N, &min, &max);

    printf("输出结果是:\n");
    printf("min=%d,max=%d", min, max);

    return 0;
}

void input(int x[], int n) {
    int i;

    for (i = 0;i < n;++i)
        scanf_s("%d", &x[i]);

}

void output(int x[], int n) {
    int i;

    for (i = 0;i < n;++i)
        printf("%d", x[i]);
    printf("\n");
}

void find_min_max(int x[], int n, int* pmin, int* pmax) {
    int i;

    *pmin = *pmax = x[0];
    for (i = 0;i < n;++i)
        if (x[i] < *pmin)
            *pmin = x[i];
        else if (x[i] > *pmax)
            *pmax = x[i];
}

1 找出最大最小值

2 代表每个数组元素地址

#include <stdio.h>
#define N 5

void input(int x[], int n);
void output(int x[], int n);
int *find_max(int x[], int n);

int main() {
    int a[N];
    int *pmax;

    printf("录入%d个数据:\n", N);
    input(a, N);

    printf("数据是: \n");
    output(a, N);

    printf("数据处理...\n");
    pmax = find_max(a, N);

    printf("输出结果:\n");
    printf("max = %d\n", *pmax);

    return 0;
}

void input(int x[], int n) {
    int i;

    for(i = 0; i < n; ++i)
        scanf("%d", &x[i]);
}

void output(int x[], int n) {
    int i;
    
    for(i = 0; i < n; ++i)
        printf("%d ", x[i]);
    printf("\n");
}

int *find_max(int x[], int n) {
    int max_index = 0;
    int i;

    for(i = 0; i < n; ++i)
        if(x[i] > x[max_index])
            max_index = i;
    
    return &x[max_index];
}

找最大值,并取其地址

可以

任务2

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

int main() {
    char s1[N] = "Learning makes me happy";
    char s2[N] = "Learning makes me sleepy";
    char tmp[N];

    printf("sizeof(s1) vs. strlen(s1): \n");
    printf("sizeof(s1) = %d\n", sizeof(s1));
    printf("strlen(s1) = %d\n", strlen(s1));

    printf("\nbefore swap: \n");
    printf("s1: %s\n", s1);
    printf("s2: %s\n", s2);

    printf("\nswapping...\n");
    strcpy(tmp, s1);
    strcpy(s1, s2);
    strcpy(s2, tmp);

    printf("\nafter swap: \n");
    printf("s1: %s\n", s1);
    printf("s2: %s\n", s2);

    return 0;
}

80 ,sizeof计算的是定义数组时的长度,strlen统计的是数组的实际长度包括空格

s1是地址,不可赋值字符串

#include<stdio.h>
#include<string.h>
#define N 80
#define _CRT_SECURE_NO_WARNINGS

int main() {
    char *s1 = "Learning makes me happy";
    char *s2 = "Learning makes me sleepy";
    char* tmp;

    printf("sizeof(s1)vs.strlen(s1):\n");
    printf("sizeof(s1)=%d\n", sizeof(s1));
    printf("strlen(s1)=%d\n", strlen(s1));

    printf("\nbefore swap:\n");
    printf("s1:%s\n", s1);
    printf("s2:%s\n", s2);

    printf("\nswapping...\n");
    tmp = s1;
    s1 = s2;
    s2 = tmp;

    printf("\nafter swap:\n");
    printf("s1:%s\n", s1);
    printf("s2:%s\n", s2);


    return 0;
}

s1是字符串,sizeof是字符串长度,strlen计算的是字符串长度包括空格

可以,指针是变量可赋值

交换两个地址,内存没

任务3

#include<stdio.h>
int main(){
    int x[2][4]={{1,9,8,4},{2,0,4,9}};
    int i,j;
    int *ptr1;
    int (*ptr2)[4];
    printf("输出1:使用数组名、下标直接访问二维数组元素\n");
    for(i=0;i<2;++i){
        for(j=0;j<4;++j)
            printf("%d",x[i][j]);
        printf("\n");
    }

    printf("\n输出2:使用指针变量ptr1(指向元素)间接访问\n");
    for(ptr1=&x[0][0],i=0;ptr1<&x[0][0]+8;++ptr1,++i){
        printf("%d",*ptr1);

        if((i+1)%4==0)
            printf("\n");
    }

    printf("\n输出3:使用指针变量莆田人(指向一维数组)间接访问\n");
    for(ptr2=x;ptr2<x+2;++ptr2){
        for(j=0;j<4;++j)
            printf("%d",*(*ptr2+j));
        printf("\n");
    }
    return 0;
}

数组指针 行指针

四个元素的指针数组 存放地址

任务4

#include <stdio.h>
#define N 80

void replace(char *str, char old_char, char new_char); // 函数声明

int main() {
    char text[N] = "Programming is difficult or not, it is a question.";

    printf("原始文本: \n");
    printf("%s\n", text);

    replace(text, 'i', '*'); // 函数调用 注意字符形参写法,单引号不能少

    printf("处理后文本: \n");
    printf("%s\n", text);

    return 0;
}

// 函数定义
void replace(char *str, char old_char, char new_char) {
    int i;

    while(*str) {
        if(*str == old_char)
            *str = new_char;
        str++;
    }
}

字符串中old_char的部分改为new_char

可以

任务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;
}
char *str_trunc(char *str,char x){
    char *copy=str;
    while(*str){
        if(*str!=x){
            *copy=*str;
            str++;copy++;
        }
        else{
        *str='\0';
        break;
        }
    }
    return copy;
}

读取“\n”防止影响后面的多组输入

避免回车被当作有效字符

任务6

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

int check_id(char *str);

int main(){
    char *pid[N]={"31010120000721656x",
                  "3301061996x0203301",
                  "53010220021126571",
                  "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;
}

int check_id(char *str){
    int j,i;
    if(strlen(str)!=18)
            return 0;
    for(i=0;i<18;i++){
        if(i==17&&str[i]=='x'){
            continue;
            }
        if(str[i]<'0'||str[i]>'9')
            return 0;
        }
        return 1;
}

 

任务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;
}

void encoder(char *str, int n)
{
    while (*str)
    {
        if (*str >= 'a' && *str <= 'z')
        {
            *str = (*str - 'a' + n + 26) % 26 + 'a';
        }
        if (*str >= 'A' && *str <= 'Z')
        {
            *str = (*str - 'A' + n + 26) % 26 + 'A';
        }
        str++;
    }
}

void decoder(char *str, int n)
{
    while (*str)
    {
        if (*str >= 'a' && *str <= 'z')
        {
            *str = (*str - 'a' - n + 26) % 26 + 'a';
        }
        if (*str >= 'A' && *str <= 'Z')
        {
            *str = (*str - 'A' - n + 26) % 26 + 'A';
        }
        str++;
    }
}

 

任务8

#include<stdio.h>
#include<string.h>
int main(int argc,char *argv[]){
    int i,k,j;
    char *t;
    for(i=1;i<argc;i++){
        k=i;
        for(j=i+1;j<argc;j++){
            if(strcmp(argv[j],argv[k])<0)
                k=j;
        }
        if(k!=i){
                t=argv[i];
                argv[i]=argv[k];
                argv[k]=t;
            }
    }
    for(i=1;i<argc;i++){
        printf("hello,%s\n",argv[i]);
    }

    return 0;
}

 

posted @ 2024-12-09 02:15  搞传销  阅读(2)  评论(0编辑  收藏  举报