• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

zyyjl

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

实验四

task1_1

#include<stdio.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]);
    printf("\n");
    
    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);
    
    return 0;
}

1.int型数组a是连续存放的,占用4个字节。

2.char型数组b是连续存放的,占用1个字节。

3.数组a对应的值和&a[0]一样,数组b对应的值和&b[0]一样。

 

task1_2

#include<stdio.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:%d\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");
    
    return 0;
}

1.int型二维数组a在内存中是连续存放的,每个元素占用4个字节。

2.int型二维数组a中数组名a与&a[0][0]在数字字面值上是一样的。

3.char型二维数组b在内存中是连续存放的,每个元素占用1个字节。

4.char型二维数组b中数组名b与&b[0][0]在数字字面值上是一样的。

5.a[0]的值与a[0][0]相同,a[1]的值与a[1][0]相同,b[0]的值与b[0][0]相同,b[1]的值与b[1][0]相同,即在二维数组中如果只有一维的表示就是表示该行第一列的地址。

(&b[0]与&b[0]+1的区别是转移到下一行所对应的地址)

 

task2

#include<stdio.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("\n测试1:用二维数组,实现两个字符串交换\n");
    test2() ;
    
    return 0;    
}

void test1(){
    char views1[N]="hey,C,I hate u.";
    char views2[N]="hey,C,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);
}
 

因为在函数定义时,形参已经是数组形式了,所以在函数调用的时候,加上代表数组的中括号或者不加都不影响它本身的形式,所以实参既可以加中括号也可以不加中括号。

 

task3_1

#include<stdio.h>

#define N 80

int count(char x[]);
int main(){
    char words[N+1];
    int n;
    
    while(gets(words)!=NULL) {
        n=count(words);
        printf("单词数:%d\n\n",n);
    }
    return 0;
}

int count(char x[]){
    int i;
    int word_flag=0;
    int number=0;
    
    for(i=0;x[i]!='\0';i++){
        if(x[i]==' ')
        word_flag=0;
        else if(word_flag==0){
            word_flag=1;
            number++;
        }
    }
    return number;
}

 

应当将if(x[i]==' ')换为if(x[i]==' '||x[i]==','||x[i]=='.')以便计算单词数更长的情况。

task3_2

#include<stdio.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;
                i++;
            }
            while(line[i]!='\0'&&line[i]!=' '){
                word_len++;
                i++;
            }
            if(max_len<word_len){
                max_len=word_len;
                end=i;
            }
            if(line[i]=='\0')
            break;
        }
    printf("最长单词:");
    for(i=end-max_len;i<end;++i)
    printf("%c",line[i]);
    printf("\n\n");
    }
return 0;
}

应当将while(line[i]==' ')换为while(line[i]==' '||line[i]==', '||line[i]=='. ')

并且将while(line[i]!='\0'&&line[i]!=' ')换成while(line[i]!='\0'&&line[i]!=' '&&line[i]!=', '&&line[i]!='. ')

以便计算单词数更长的情况。

 

task4

#include<stdio.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\n",ave);
    printf("\n输出课程分数(高->低:\n");
    output(scores,N);
    
    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;
    double sum=0.0,ave=0.0;
    for(i=0;i<n;++i)
    sum+=x[i];
    ave=sum/N;
    return ave;
}

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

 

task5

 

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

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

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

    
}

 

task6

#include<stdio.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);
    
    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]);
       else
       printf("%4d",x[i][j-1]);

    printf("\n");
}
}

 

task7_1

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

1.将字符串中某一特定字符替换成新字符(本题中将i换成*)。
2.是字符串的终止标记,如果其出现代表一个字符串结束了,因此可以作为循环结束条件。

 

 

task7_2

#include<stdio.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);
    
    return 0;
}

 

task8

#include<stdio.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排序中......\n");
    bubble_sort(name,N);
    
    printf("\n按字典序输出名单:\n");
    for(i=0;i<N;i++)
    printf("%s\n",name[i]);
    
    return 0;
}

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

 

posted on 2023-04-20 07:41  邹雨憬  阅读(13)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3