实验五

实验五

实验任务1

程序源码

#include<stdio.h>
#include<stdlib.h>
#define N 4

int main(){
    int x[N] = {1, 9, 8, 4};
    int i;
    int *p;

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

    system("pause");
    return 0;
}

 

#include<stdio.h>
#include<stdlib.h>
#define N 4

int main(){
    int x[N] = {1, 9, 8, 4};
    int i;
    int *p;

    for (p = x; p < x + N; ++p)
        printf("%d", *p);
    printf("\n");

    system("pause");
    return 0;
}

 

#include<stdio.h>
#include<stdlib.h>
#define N 4

int main(){
    int x[N] = {1, 9, 8, 4};
    int i;
    int *p;

    p = x;
    for (i = 0; i < N; ++i)
        printf("%d", *(p + i));
    printf("\n");

    system("pause");
    return 0;
}

 

#include<stdio.h>
#include<stdlib.h>
#define N 4

int main(){
    int x[N] = {1, 9, 8, 4};
    int i;
    int *p;

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

    system("pause");
    return 0;
}

 

程序运行截图

 

程序源码

#include<stdio.h>
#include<stdlib.h>

int main(){
    int x[2][4] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
    int i, j;
    int *p;
    int (*q)[4];

    //使用数组名、下标访问二元数组元素
    for(i = 0; i < 2; ++i){
        for(j = 0; j < 4; ++j)
            printf("%d", x[i][j]);
        printf("\n");
    }
    system("pause");
    return 0;
}
#include<stdio.h>
#include<stdlib.h>

int main(){
    int x[2][4] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
    int i, j;
    int *p;
    int (*q)[4];

    
    //使用指针变量p间接访问二维数组元素
    for(p = &x[0][0], i = 0; p < &x[0][0] + 8; ++p, ++i){
        printf("%d", *p);
        if((i + 1) % 4 == 0)
            printf("\n");
    }

    system("pause");
    return 0;
}
#include<stdio.h>
#include<stdlib.h>

int main(){
    int x[2][4] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
    int i, j;
    int *p;
    int (*q)[4];

    //使用指针变量q间接访问二维数组元素
    for(q = x;q < x + 2; ++q){
        for(j = 0; j < 4; ++j)
            printf("%d", *(*q + j));
        printf("\n");
    }

    system("pause");
    return 0;
}

 

程序运行截图

 

实验任务2

程序源码

#include<stdio.h>
#include<string.h>
#include<stdlib.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("s1:%s\n", s1);

    system("pause");
    return 0;
}

 

程序运行截图

讨论:1.数组s1的大小是24   sizeof(s1)计算的是数组所有的字符数   strlen(s1)计算的是字符串中有效字符数

           2.不可以  s1是数组名,也是s1[0]的地址,不能赋值

           3.s1 与 s2 中的内容更换

程序源码

#include<stdio.h>
#include<string.h>
#include<stdlib.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("s1:%s\n", s1);

    system("pause");
    return 0;
}

 

程序运行截图

 

讨论:

1.s1存放的是数组的地址,sizeof(s1)计算的是指针变量s1的大小,strlen(s1)统计的是除空字符外字符串的长度

2.能,task2_1中是定义一个数组名,task2_2中是定义一个指针变量

3.交换的是地址,字符串常量"Learning makes me happy"和字符串常量"Learning makes me sleepy"在内存存储单元内没有交换

实验任务3

程序源码

#include<stdio.h>
#include<stdlib.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);

    system("pause");
    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

程序源码

#include<stdio.h>
#include<stdlib.h>
int func(char*);

int main(){
    char str[80];

    while(gets(str) != NULL){
        if(func(str))
            printf("yes\n");
        else
            printf("no\n");
    }

    system("pausse");
    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

程序源码

#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--;
    while(*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

程序源码

#include<stdio.h>
#include<stdlib.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]);
    
    system("pause");
    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;
            }
}

 

程序运行截图

程序源码

#include<stdio.h>
#include<stdlib.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]);
    
    system("pause");
    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

程序源码

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

int check_id(char *str);

int main(){
    char *pid[N] = {"31010120000721656X",
                    "330106199609203301",
                    "53010220051126571",
                    "510104199211197977",
                    "53010220051126433Y"};
    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]);

    system("pause");
    return 0;
}

int check_id(char *str){
    char *p;
    if(strlen(str) != 18)
        return 0;
    else{
        p = str;
        while((*p >= '0' && *p <= '9') || *p == 'X')
            p++;
        if(*p == '\0')
            return 1;
        else
            return 0;
    }
}

 

程序运行截图

 

实验任务8

程序源码

#include <stdio.h>
#include<stdlib.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);

    system("pause");
    return 0;
}

void encoder(char *s)
{
    while(*s){
        if((*s>='a'&&*s<'z')||(*s>='A'&&*s<'Z')) 
            *s=*s+1;
        else if(*s=='z'||*s=='Z')
            *s=*s-25; 
        s++;
    }
}

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

 

程序运行截图

 

posted @ 2023-05-07 14:31  TE-AMO  阅读(19)  评论(0)    收藏  举报