实验4

实验任务1

task1_1:

程序代码:

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

int main(){
    int a[N]={2,0,2,3};
    char b[N]={'2','0','2','3'};
    int i;

    printf("sizeof(int)=%d\n",sizeof(int));
    printf("sizeof(char)=%d\n",sizeof(char));
    printf("\n");

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

    for(i=0;i<N;++i)
        printf("%p:%c\n",&b[i],b[i]);

    printf("\n");

    printf("a=%p\n",a);
    printf("b=%p\n",b);

    system("pause");
    return 0;
}

运行结果:

回答:否,4;

           是,1;

           是,是;

task1_2:

程序代码:

#include <stdio.h>
#include <stdlib.h>
#define N 2
#define M 3

int main(){
    int a[N][M]={{1,2,3},{4,5,6}};
    char b[N][M]={{'1','2','3'},{'4','5','6'}};
    int i,j;

    for(i=0;i<N;++i)
        for(j=0;j<M;++j)
            printf("%p:%d\n",&a[i][j],a[i][j]);
    printf("\n");

    printf("a=%p\n",a);
    printf("a[0]=%p\n",a[0]);
    printf("a[1]=%p\n",a[1]);
    printf("\n");

    for(i=0;i<N;++i)
        for(j=0;j<M;++j)
            printf("%p:%c\n",&b[i][j],b[i][j]);
    printf("\n");

    printf("b=%p\n",b);
    printf("b[0]=%p\n",b[0]);
    printf("b[1]=%p\n",b[1]);
    printf("\n");

    system("pause");
    return 0;
}

运行结果:

回答:是,4;

           是;

           是,1;

            是;

            均为该行第一个数或者字符的地址;

实验任务2

程序代码:

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

#define N 80

void swap_str(char s1[N],char s2[N]);
void test1();
void test2();

int main(){
    printf("测试1:用两个一维数组,实现两个字符串交换\n");
    test1();

    printf("测试2:用二维数组,实现两个字符串交换\n");
    test2();
    
    system("pause");
    return 0;
}

void test1(){
    char views1[N]="hey,C,I hate u.";
    char views2[N]="hey,V,I love u.";

    printf("交换前:\n");
    puts(views1);
    puts(views2);

    swap_str(views1,views2);

    printf("交换后:\n");
    puts(views1);
    puts(views2);
}

void test2(){
    char views[2][N]={"hey,C,I hate u.","hey,C,I love u."};

    printf("交换前:\n");
    puts(views[0]);
    puts(views[1]);

    swap_str(views[0],views[1]);

    printf("交换后:\n");
    puts(views[0]);
    puts(views[1]);
}

void swap_str(char s1[N],char s2[N]){
    char tmp[N];

    strcpy(tmp,s1);
    strcpy(s1,s2);
    strcpy(s2,tmp);
}

运行结果:

回答:在二维数组中,每一行等效于一个一维数组。

实验任务3

task3_1

程序代码:

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

#define N 8

int count(char x[]);

int main(){
    char words[N+1];
    int n;

    while (gets(words)!=NULL){
        n=count(words);
        printf("单词数:%d\n\n",n);
    }

    system("pause");
    return 0;
}

int count(char x[]){
    int i;
    int word_flag=0;//用作单词标志,一个新单词的开始,值为1;单词结束,值为0
    int number=0;//统计单词个数

    for(i=0;x[i]!='\0';i++){
        if(x[i]==' '||x[i]==','||x[i]=='.'||x[i]=='?'||x[i]=='!'||x[i]==':')
            word_flag=0;
        else if(word_flag==0){
            word_flag=1;
            number++;
        }
    }
    
    return number;
}

运行结果:

 task3_2:

程序代码:

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

int main(){
    char line[N];
    int word_len;//记录当前单词长度
    int max_len;//记录最长单词长度
    int end;//记录最长单词结束位置
    int i;

    while(gets(line)!=NULL){
        word_len=0;
        max_len=0;
        end=0;
        i=0;

        while(1){
            //跳过连续空格
            while(line[i]==' '){
                word_len=0;//单词长度置0,为新单词统计做准备
                i++;
            }

            //在一个单词中,统计当前单词长度
            while(line[i]!='\0'&&line[i]!=' '){
                word_len++;
            i++;
            }

            //更新更长单词长度,并记录最长单词结束位置
            if(max_len<word_len){
                max_len=word_len;
                end=i;//end保存的是单词结束的下一个坐标位置
            }

            //遍历到文本结束时,终止循环
            if(line[i]=='\0')
                break;
        }

        //输出最长单词
        printf("最长单词:");
        for(i=end-max_len;i<end;++i)
            printf("%c",line[i]);
        printf("\n\n");
    }

    system("pause");
    return 0;
}

运行结果:

回答:应该提前把标点符号转化为空格,计算单词长度时将其与空格一并处理。

实验任务4

程序代码:

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

void input(int x[],int n);
void output(int x[],int n);
double average(int x[],int n);
void bubble_sort(int x[],int n);

int main(){
    int scores[N];
    double ave;

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

    printf("\n输出课程分数:\n");
    output(scores,N);

    printf("\n课程分数处理:计算均分、排序…\n");
    ave=average(scores,N);
    bubble_sort(scores,N);

    printf("\n输出课程均分:%.2f",ave);
    printf("\n输出课程分数(高-->低):\n");
    output(scores,N);

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

double average(int x[],int n){
    int i,sum=0;
    double t;

    for(i=0;i<n;i++)
        sum=sum+x[i];
    t=(sum*1.0)/(n*1.0);

    return t;
}

void bubble_sort(int x[],int n){
    int t,i,m;
    for(m=n;m>0;m--){
    for(i=0;i<m;i++){
        if(x[i]<x[i+1]){
            t=x[i];
            x[i]=x[i+1];
            x[i+1]=t;
        }
    }
    }
}

运行结果:

实验任务5

程序代码:

 

#include <stdio.h>
#include <stdlib.h>
void dec2n(int x,int n);
#define N 100

int main(){
    int x;

    printf("输入一个十进制整数:");
    while(scanf("%d",&x)!=EOF){
        dec2n(x,2);
        dec2n(x,8);
        dec2n(x,16);
    }

    system("pause");
    return 0;
}

void dec2n(int x,int n){
    char m[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'},t[N];
    int i,ys,ss;
    for(i=0,ys=0,ss=x;ss>0;i++){
        ys=ss%n;
        ss=ss/n;
        t[i]=m[ys];
    }
    t[i]=0;
    for(;i>=0;i--)
        printf("%c",t[i]);
    printf("\n");
}

运行结果:

实验任务6

程序代码:

 

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

void output(int x[][N],int n);
void rotate_to_right(int x[][N],int n);

int main(){
    int t[][N]={{21,12,13,24},
    {25,16,47,38},
    {29,11,32,54},
    {42,21,33,10}};

    printf("原始矩阵:\n");
    output(t,M);

    printf("变换后矩阵:\n");
    rotate_to_right(t,M);

    system("pause");
    return 0;
}

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

    for(i=0;i<n;++i){
        for(j=0;j<n;++j)
            printf("%4d",x[i][j]);

        printf("\n");
    }
}

void rotate_to_right(int x[][N],int n){
    int i,j;

    for(i=0;i<n;++i){
        for(j=0;j<n;++j){
            if(j==0)
                printf("%4d",x[i][n-1-j]);
            else
                printf("%4d",x[i][j-1]);
        }
        printf("\n");
    }
}

运行结果:

 实验任务7

task7_1:

程序代码:

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

void replace(char x[],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\n",text);

    replace(text,'i','*');

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

    system("pause");
    return 0;
}

void replace(char x[],char old_char,char new_char){
    int i;
    for(i=0;x[i]!='\0';++i)
        if(x[i]==old_char)
            x[i]=new_char;
}

运行结果:

回答:

将文本中的所有“i”替换为“*”;

是一个字符串的结束标志。

task7_2:

程序代码:

 

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

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

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

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

    printf("截断处理……");

    i=0;
    while(str[i]!='\0'){
        if(str[i]==ch)
            break;
        ++i;
    }
    str[i]='\0';

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

    system("pause");
    return 0;
}

运行结果:

实验任务8

程序代码:

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

#define N 5
#define M 20

void bubble_sort(char str[][M],int n);

int main(){
    char name[][M]={"Bob","Bill","Joseph","Taylor","George"};
    int i;

    printf("输出初始名单:\n");
    for(i=0;i<N;i++)
        printf("%s\n",name[i]);

    printf("排序中……\n");
    bubble_sort(name,N);

    printf("\n按字典序输出名单:\n");
    for(i=0;i<N;i++)
        printf("%s\n",name[i]);

    system("pause");

    return 0;
    }

    void bubble_sort(char str[][M],int n){
        int m,i;
        char t[100];
        for(m=N;m>1;m--){
        for(i=0;i<m;i++)
            if(strcmp(str[i],str[i+1])>0){
                strcpy(t,str[i]);
                strcpy(str[i],str[i+1]);
                strcpy(str[i+1],t);
            }
        }
    }
                

运行结果:

 

posted @ 2023-04-18 11:01  moreless-xu  阅读(6)  评论(1编辑  收藏  举报