首页 > 其他分享 >实验5

实验5

时间:2024-05-26 22:33:34浏览次数:18  
标签:int s1 char 实验 str printf void

#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\n",min,max);

    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");
}
void find_min_max(int x[],int n,int *pmin,int *pmax)
{
    int i;

    *pmin=*pmax=x[0];

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

 

 1   函数 find_min_max 实现的功能是:找出数据中的最大值和最小值

 2  "指针变量在使用之前必须指向确定的地址"。执行到line45时,指针变量pmin、pmax都指向x[0]

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 = 1; i < n; ++i)
        if(x[i] > x[max_index])
            max_index = i;
    
    return &x[max_index];
}

1. 函数 find_max 的功能是 返回最大数据的地址

2. 把函数 find_max 的实现写成以下代码,可以通过返回指针变量的值,返回最大值地址

2.1

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

int main()
{
    char s1[]="Learning makes me happy";
    char s2[]="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("\nswaping...\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;
}

问题1:数组s1的大小是4, sizeof(s1) 计算的是字符串所占用的字节数, strlen(s1) 统计的是有效字符数,不包括'\0'

问题2:line6代码,不能替换成以下写法,s1 是字符串数组的起始地址常量

2.2

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

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

1  指针变量s1中存放的是字符串的初始地址 , sizeof(s1) 计算的是指针变量s1所占用的字节数, strlen(s1) 统计的是s1所指向字符串的实际长度

2  line6代码能替换成下面的写法,对比task2_1.c中的line7, task2_1中s1是地址常量,不能复制,task2_2中s1是指针变量,该语义是把字符串的初始地址赋值给s1

3  line19-line21,交换的是地址,s1 和s2所指向的字符串改变,字符串常量没有交换

task 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];//指向int型一维数组

    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:使用指向一维数组的指针变量ptr2间接访问二维数组元素\n");
    for(i=0,ptr2=x;i<2;++i,++ptr2)
    {
        for(j=0;j<4;++j)
                printf("%d",*(*ptr2+j));
        printf("\n");
    }

    return 0;
}

int (*ptr)[4]; 中,标识符ptr表示的语义是指针变量

int *ptr[4]; 中,标识符ptr表示的语义是一个数组

 task 4 .1

#include<stdio.h>
#define N 80

void replace(char *str,char old_char,char new_char);

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


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

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

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

    return 0;
}
void replace(char *str,char old_char,char new_char)
{
    while(*str)
    {
        if(*str==old_char)
            *str=new_char;
        *str++;
    }
}

1. 函数 replace 的功能是用新字符替换旧字符

2. line24, 圆括号里循环条件可以改写成 *str != '\0' 

task 4.2

#include<stdio.h>
#define N 80

void str_trunc(char *str,char x);

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

    printf("输入字符串:");
    gets(str);

    printf("输入一个字符:");
    ch=getchar();

    printf("截断处理...\n");
    str_trunc(str,ch);

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

    return 0;
}
void str_trunc(char *str,char x)
{
    while(*str)
    {
        if(*str==x)
            *str='\0';//blank 1
        str++;//blank 2
    }
}

task 5.1

#include<stdio.h>
#include<string.h>
void sort(char *name[],int n);

int main()
{
    char *course[4]={"C Program",
                    "C++ Object Oriented Program",
                    "Operating System",
                    "Data Structure and Algorithms"};
    int i;

    sort(course,4);

    for(i=0;i<4;++i)
        printf("%s\n",course[i]);

    return 0;
}
void sort(char *name[],int n)
{
    int i,j;
    char *tmp;

    for(i=0;i<n-1;++i)
        for(j=0;j<n-1-i;++j)
            if(strcmp(name[j],name[j+1])>0)
            {
                tmp=name[j];
                name[j]=name[j+1];
                name[j+1]=tmp;
            }
}

task5.2

#include<stdio.h>
#include<string.h>
void sort(char *name[],int n);

int main()
{
    char *course[4]={"C Program",
                    "C++ Object Oriented Program",
                    "Operating System",
                    "Data Structure and Algorithms"};
    int i;

    sort(course,4);

    for(i=0;i<4;++i)
        printf("%s\n",course[i]);

    return 0;
}
void sort(char *name[],int n)
{
    int i,j,k;
    char *tmp;

    for(i=0;i<n-1;++i)
        {
            for(j=i+1,k=i,tmp=name[k];j<n;++j)
                if(strcmp(name[j],name[k])<0)
                    k=j;

            if(k!=i)
                {
                    name[i]=name[k];
                    name[k]=tmp;
                }
        }
}

这两种算法实现中,内存中字符串的存储位置发生了交换

 task 6

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

int check_id(char *str);

int main()
{
    char *pid[N]={"31010120000721656X",
                    "330106199609203301",
                    "53010220051126571",
                    "510104199X11197977",
                    "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 k=0;

    while(*str)
        {
            str++;
            k++;
    }

    if(k!=18)
        return 0;

    str=str-k;

    for(k=0;k<18;k++)
    {
        if(k==17)
        {
            if(*(str+k)!='X'&&(*(str+k)<'0'||*(str+k)>'9'))
                 return 0;
        }
        else if(*(str+k)<'0'||*(str+k)>'9')
                return 0;
    }

}

task 7

#include<stdio.h>
#define N 80
void encoder(char *str);
void decoder(char *str);

int main()
{
    char words[N];

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

    printf("编译后的英文文本:");
    encoder(words);
    printf("%s\n",words);

    printf("对编译后的英文文本解码:");
    decoder(words);
    printf("%s\n",words);

    return 0;
}
void encoder(char *str)
{
    while(*str)
    {
        if((*str>='a'&&*str<'z')||(*str>='A'&&*str<'Z'))
            (*str)++;

        else if(*str=='z')
            *str='a';
        else if(*str=='Z')
            *str='A';

        str++;
    }
}
void decoder(char *str)
{
    while(*str)
    {
        if((*str>'a'&&*str<='z')||(*str>'A'&&*str<='Z'))
            (*str)--;

        else if(*str=='a')
            *str='z';
        else if(*str=='A')
            *str='Z';

        str++;
    }
}

 

标签:int,s1,char,实验,str,printf,void
From: https://www.cnblogs.com/xxtt778725/p/18214425

相关文章

  • 实验五
    1.1#include<stdio.h>#defineN5voidinput(intx[],intn);voidoutput(intx[],intn);voidfind_min_max(intx[],intn,int*pmin,int*pmax);intmain(){inta[N];intmin,max;printf("录入%d个数据:\n",N);input(a,......
  • 山东大学软件学院数据库实验1-9(全部)
    目录前言实验代码实验一1-11-2 1-3 1-4 1-5 1-6 实验二2-1 2-22-3 2-42-5 2-62-72-82-92-10实验三 3-13-23-33-43-53-63-73-83-93-10实验四 4-14-24-34-44-54-64-74-84-94-10实验五 5-15-25-35-45-55-65-75-8......
  • 实验五
    `#include<stdio.h>include<stdlib.h>defineN5voidinput(intx[],intn);voidoutput(intx[],intn);voidfind_min_max(intx[],intn,int*pmin,int*pmax);intmain(){inta[N];intmin,max;printf("录入%d个数据:\n",N);input(a......
  • 实验五
    TASK1.1#include<stdio.h>#defineN5voidinput(intx[],intn);voidoutput(intx[],intn);voidfind_min_max(intx[],intn,int*pmin,int*pmax);intmain(){inta[N];intmin,max;printf("录入%d个数据:\n",N);inpu......
  • 简单版基本电路与电子学实验备考(有待补充)
    基本电路与电子学实验备考戴维南定理Step1测等效电阻12元件箱12V电压源(实验台最右侧)与电压表相接测实际输出保证电压源1210mA的电流源(粗调转钮量程20)测电流电压时注意量程短路电流(开关打向左侧)开路电压(右侧两位小数)据此算出等效电阻R0记录数据UocIscR0Step2构建......
  • 实验5
    task1-1:点击查看代码#include<stdio.h>#defineN5voidinput(intx[],intn);voidoutput(intx[],intn);voidfind_min_max(intx[],intn,int*pmin,int*pmax);intmain(){inta[N];intmin,max;printf("录入%d个数据:\n",N);......
  • 实验三 电子公文传输系统安全-进展2
    实验三电子公文传输系统安全-进展2本次作业分值10分|老师评分 任务详情-上周任务完成情况(代码链接,所写文档等)-本周计划上周任务完成情况采用sm4对存储的公文进行加密处理,密钥随机生成,乱序存储在数据库中。其中sm4采用cbc模式,iv固定,跟随密文一起存储。解密的......
  • 实验二 电子传输系统安全-进展1
    实验二电子公文传输系统安全-进展2任务详情上周任务完成情况(代码链接,所写文档等)本周计划上周任务完成情况sm3加盐packagecn.edu.nuc.article.util;importorg.bouncycastle.crypto.digests.SM3Digest;importorg.bouncycastle.jce.provider.BouncyCastleProvider;......
  • 微服务实践k8s&dapr开发部署实验(2)状态管理
    新建webapi项目建项目时取消https支持,勾选docker支持,Program.cs中注释下面语句,这样部署后才能访问Swagger//ConfiguretheHTTPrequestpipeline.//if(app.Environment.IsDevelopment()){app.UseSwagger();app.UseSwaggerUI();}添加Dapr.Client与Dapr.A......
  • 实验二 电子公文传输系统安全-进展2
    实验二电子公文传输系统安全-进展2任务详情上周任务完成情况(代码链接,所写文档等)本周计划上周任务完成情况sm3加盐packagecn.edu.nuc.article.util;importorg.bouncycastle.crypto.digests.SM3Digest;importorg.bouncycastle.jce.provider.BouncyCastleProvider;......