首页 > 其他分享 >实验5

实验5

时间:2023-05-11 10:35:16浏览次数:34  
标签:int s2 s1 char 实验 printf makes

1. 实验任务1

task1_1.c

#include <stdio.h>
#define N 4
int main()
{
int x[N] = {1, 9, 8, 4};
int i;
int *p;
// 方式1:通过数组名和下标遍历输出数组元素
for (i = 0; i < N; ++i)
printf("%d", x[i]);
printf("\n");
// 方式2:通过指针变量遍历输出数组元素 (写法1)
for (p = x; p < x + N; ++p)
printf("%d", *p);
printf("\n");
// 方式2:通过指针变量遍历输出数组元素(写法2)
p = x;
for (i = 0; i < N; ++i)
printf("%d", *(p + i));
printf("\n");
// 方式2:通过指针变量遍历输出数组元素(写法3)
p = x;
for (i = 0; i < N; ++i)
printf("%d", p[i]);
printf("\n");
return 0;
}

实验结果截图

task1_2.c

实验结果截图

 

2. 实验任务2

task2_1.c

#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("\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;
}

实验结果截图

问题1:数组s1的大小是多少?sizeof(s1)计算的是什么?strlen(s1)统计的是什么?

答:数组s1的大小为80sizeof(s1)计算的是数组s1的长度(包括字符串结尾的'\0'),是统计字符串s1的长度(不包括字符串结尾的'\0')。

问题2:line7代码,能否替换成以下写法?如果不能,写出原因。

答:不能。在定义数组的时候,需要同时给数组分配好存储空间,并初始化数组元素的值。而第二种写法中,只给s1定义了一个空数组,但并没有为它分配存储空间,也没有初始化数组元素的值,因此这种写法是非法的。

问题3:line20-22执行后,字符数组s1和s2中的内容是否交换?

答:是。字符数组s1中原本存储的字符串"Learining makes me happy"被复制到了临时数组tmp中,然后再从字符数组s2中复制字符串"Learining makes me sleepy"到s1中,最后从临时数组中复制"Learining makes me happy"到s2中,因此两个字符数组s1和s2中的内容被成功交换。

task2_2.c

#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)计算的是什么?strlen(s1)统计的是什么?

答:指针变量s1中存放的是字符串"Learning makes me happy"的地址。sizeof(s1)计算的是字符串"Learning makes me happy"的地址的大小。strlen(s1)统计的是字符串"Learning makes me happy"的长度(不包括字符串结尾的'\0')。

问题2:line7代码能否替换成下面的写法?对比task2_1.c中的line7, 描述二者的语义区别。

答:能。line7的含义是将常量字符串首地址赋值给字符指针,task2_1.c中的line7是用字符串对字符数组初始化。

问题3:line20-line22,交换的是什么?字符串常量"Learning makes me happy"和字符串常 量"Learning makes me sleepy"在内存存储单元中有没有交换?

答:line20-line22交换的是指向字符串常量"Learning makes me happy"和字符串常量"Learning makes me sleepy"的指针。字符串常量"Learning makes me happy"和字符串常 量"Learning makes me sleepy"在内存存储单元中没有交换。

3. 实验任务3

task3.c

#include<stdio.h>

void str_cpy(char *target,const char *source);
void str_cat(char *str1,char *str2);

int main()
{
    char s1[80],s2[20] = "1984";
    
    str_cpy(s1,s2);
    puts(s1);
    
    str_cat(s1,"Animal Farm");
    puts(s1);
    
    return 0;
}

void str_cpy(char *target,const char *source)
{
    while (*target++=*source++);
}

void str_cat(char *str1,char *str2)
{
    while (*str1)
        str1++;
        
    while (*str1++=*str2++);
}

实验结果截图

4. 实验任务4

task.c

#include<stdio.h>
#define N 80
int func(char *);

int main()
{
    char str[80];
    
    while(gets(str)!=NULL)
    {
        if(func(str))
            printf("yes\n");
        else
            printf("no\n");
    }
    return 0;
}

int func(char *str)
{
    char *begin,*end;
    begin = end = str;
    while(*end)
        end++;
        
    end--;
    
    while(begin<end)
    {
        if(*begin!=*end)
            return 0;
        else
        {
            begin++;
            end--;
        }
    }
    
    return 1;
}

 

实验结果截图

 

5. 实验任务5

task.c

#include<stdio.h>
#define N 80

void func(char *);

int main()
{
    char s[N];
    
    while(scanf("%s",s)!=EOF)
    {
        func(s);
        puts(s);
    }
    return 0;
}

void func(char *str)
{
    int i;
    char *p1,*p2,*p;
    
    p1 = str;
    while(*p1=='*')
        p1++;
    p2 = str;
    while(*p2)
        p2++;
    p2--;
    
    p = str;
    i=0;
    while(p<p1)
    {
        str[i] = *p;
        p++;
        i++;
    }
    while(p<=p2)
    {
        if(*p!='*')
        {
            str[i] = *p;
            i++;
        }
        p++;
    }
    while(*p!='\0')
    {
        str[i] = *p;
        p++;
        i++;
    }
    str[i] = '\0';
}

实验结果截图

 

6. 实验任务6

task6_1.c

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

答:交换的是指针。

实验结果截图

task6_2.c

 

#include<stdio.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++)
    {
        k=i;
        for(j=i+1;j<n;j++)
            if(strcmp(name[j],name[k])<0)
            k=j;
            
        if(k!=i)
        {
            tmp = name[i];
            name[i] = name[k];
            name[k] = tmp;
        }
    }
}

实验结果截图

交换的是内存中字符串的存储位置。

7. 实验任务7

task.c

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

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

int main()
{
    char *pid[N] = {"31010120000721656X","330106199609203301","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;
}
 int check_id(char *str)
{
     char *p;
     p = str;
     
     while((*p >= '0' && *p <= '9')||*p=='X')
            p++;
 
    if(*p == '\0' && strlen(str) == 18)
        return 1;
    else
        return 0;
}

实验结果截图

 

8. 实验任务8

task.c

#include<stdio.h>
#define N 80
void encoder(char *s);    //函数声明
void decoder(char *s);    //函数声明
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 *s)
{
    while(*s!='\0') 
        {
        if(*s >= 65 && *s <= 90|| *s >= 97&& *s <= 122)
        {
            *s = *s + 1;
            s++; 
            continue;
        }
        else if(*s == 'z'|| *s == 'Z')
        {
            *s = *s - 25;
            s++; 
            continue;
        }
        s++;
    }
}

void decoder(char *s)
{
     while(*s) 
        {
        if(*s >= 66 && *s <= 90 || *s >= 98 && *s <= 122)
        {
            *s = *s - 1;
            s++;
            continue;
        }
        else if(*s == 'A'|| *s == 'a')
        {
            *s = *s + 25;
            s++;
            continue;
        }
        s++;
    }
}

实验结果截图

 

标签:int,s2,s1,char,实验,printf,makes
From: https://www.cnblogs.com/xsq1201/p/17372647.html

相关文章

  • 学校的数据结构实验_二叉树c语言实现
    二叉树的实现包括二叉树的构建,和二叉树的前中后序便利,二叉树的层序非递归遍历,求二叉树的总结点,求二叉树的最大深度和求二叉树的最大宽度,因为实验主要是对二叉树的各个属性数据测量,所以这里手动链接了一颗二叉树.随后用调用函数接口传参二叉树的根节点测量二叉树的属性.递......
  • 学校数据结构实验_线性表:纯C语言版
    首先分别声明链表和顺序表的结构单位,  1:插入实现:顺序表插入比较简单,直接访问下表找到插入位置,然后移动所有后面的数据将插入的位置空出来,然后将需要插入的数据插入,链表的插入:因为一般链表都是调用头插或者尾插,但是为了和顺序表相比较,再插入的时候增加了随机位置......
  • 实验四 Web综合应用程序设计
    实验项目名称:实验四Web综合应用程序设计一、实验目的通过使用JavaMVC模式设计简单的数据库管理系统,巩固使用JDBC技术访问数据库的方法,学习使用Java语言对服务器端进行编程,深入理解MVC网站设计模式的基本概念和框架结构。二、实验内容和基本要求从以下列举的四个数据库中,任......
  • 实验五
    实验一#include<stdio.h>#defineN4intmain(){intx[N]={1,9,8,4};inti;int*p;for(i=0;i<N;++i)printf("%d",x[i]);printf("\n");for(p=x;p<x+N;++p)print......
  • 实验5yuan
    task1.1源代码#include<stdio.h>#defineN4intmain(){intx[N]={1,9,8,4};inti;int*p;//方式1:通过数组名和下标遍历输出数组元素for(i=0;i<N;++i)printf("%d",x[i]);printf("\n");//方式2:通过指针变量遍历输出数组元素(写法1)for(p=x;p<......
  • 2 实验 检验你的理论
    一个好实验,既能解决问题又能揭示事物的真正运行规律;一个好实验往往能让你摆脱对观察数据的无限依赖,能帮助你理清因果联系;可靠的实证数据将让你的分析判断更有说服力务必使用比较法统计与分析最基本的原理之一就是比较法,它指出,数据只有通过相互比较才会有意义。比较是破解......
  • 搭建空地异构多机器人协同系统实验平台
    ♪搭建空地异构多机器人协同系统实验平台,2022年4月-2022年6月: 参与内容:[1]设计动捕摄像头的安装布线等配置方案;[2]通过多智能体行为控制理论对空地协同运动学行为进行深度建模;[3] 基于ROS系统对空地协同行为控制算法进行开发与验证;[4] 实现包括集群编队、协同避障与动......
  • 实验三
    include<stdio.h>include<stdlib.h>include<gmp.h>defineMAX_PRIME10000intmain(){mpz_tprime,n;inti;//初始化大数库mpz_init(prime);mpz_init(n);mpz_set_ui(prime,2);//计算10000以内素数for(i=2;i<=MAX_PRIME;i++){intis_pr......
  • 实验4
    include<stdio.h>include<stdlib.h>include<gmp.h>intmain(){mpz_tproduct,num;inti;//初始化大数库mpz_init(product);mpz_init(num);mpz_set_ui(product,1);//计算20201211到20201226的乘积for(i=20201211;i<=20201226;i++){mpz_s......
  • 实验五 通用接口数据库编程
    实验五通用接口数据库编程第1关:JDBC查询数据packagestep1;importjava.sql.\*;publicclassQuery{publicstaticvoidqueryDB(){//声明变量Connectionconn=null;Statementstat=null;ResultSetrs=null;/\*\*\*\*\*\*\*\*\*查询出的数据保存在这......