实验5

实验任务1

task1_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");

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

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

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

    system("pause");
    return 0;
}

运行结果:

task1_2

程序代码:

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

    for(p=&x[0][0],i=0;p<&x[0][0]+8;++p,++i){
        printf("%d",*p);
        if((i+1)%4==0)
            printf("\n");
    }

    for(q=x;q<x+2;++q){
        for(j=0;j<4;++j)
            printf("%d",*(*q+j));
        printf("\n");
    }

    system("pause");
    return 0;
}

运行结果:

实验任务2

task2_1

程序代码:

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

    system("pause");
    return 0;
}

运行结果:

回答:

24;文本占用空间的大小;文本长度;

不能,s1表示的是s1[0]的地址,是一个常量,不能被赋值;

是;

task2_2

程序代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 80
int main(){
    char *s1="Learing makes me happy";
    char *s2="Learing 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);

    system("pause");
    return 0;
}

运行结果:

回答:

地址码;该地址码内容占据大小;文本的大小;

能;

交换的是地址码;

实验任务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>
#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");
    }

    system("pause");
    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>
#include <stdlib.h>
#define N 80

void func(char *);

int  main(){
    char s[N];

    while(scanf("%s",s)!=EOF){
        func(s);
        puts(s);
    }

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

task6_1

程序代码:

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

运行结果:

task6_2

程序代码:

#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",
                  "53010220051126133Y"};

    int i;

    for(i=0;i<N;++i)
        if(check_id(pid[i]))
            printf("%s\tTure\n",pid[i]);
        else
            printf("%s\tFalse\n",pid[i]);

    system("pause");
    return 0;

}
        

int check_id(char *str){
int n,j,k;
char bj[]="1234567890X";
for(n=0;(str[n])!='\0';n++)
    ;
j=0;
for(k=0;k<=10;k++){
if(str[n-1]==bj[k])
    j=1;
}
if((j==1)&&(n==18))
    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("输入英文文本:");
    while(gets(words)!=NULL){

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

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

    printf("输入英文文本:");
    }

    system("pause");
    return 0;
}

void encoder(char *s){
    int i,j;
    for(i=0;s[i]!='\0';i++)
        ;
    i--;
    for(j=0;j<=i;j++){
        if(((s[j]>=65)&&(s[j]<=89))||((s[j]>=97)&&(s[j]<=121)))
            s[j]=s[j]+1;
        else{
            if(s[j]==90)
                s[j]=65;
            else{
                if(s[j]==122)
                    s[j]=97;
                else
                    ;
        }
    }
}
}

void decoder(char *s){
    int i,j;
    for(i=0;s[i]!='\0';i++)
        ;
    i--;
    for(j=0;j<=i;j++){
        if(((s[j]>=66)&&(s[j]<=90))||((s[j]>=98)&&(s[j]<=122)))
            s[j]=s[j]-1;
        else{
            if(s[j]==65)
                s[j]=90;
            else{
                if(s[j]==97)
                    s[j]=122;
                else
                    ;
        }
        }
    }
    }

运行结果:

 

posted @ 2023-05-10 20:12  moreless-xu  阅读(10)  评论(1编辑  收藏  举报