PTA-练习7

目录

实验8-2-1 找最小的字符串

实验8-2-2 找最长的字符串

实验8-2-8 字符串排序

实验8-2-10 IP地址转换

结构体

实验9-1 计算职工工资

实验9-2 时间换算

实验9-3 计算平均成绩

实验9-5 查找书籍

实验9-8 通讯录排序 

实验9-9 有理数比较

实验11-1-1 英文单词排序

实验11-1-7 藏头诗

实验11-1-9 藏尾诗


实验8-2-1 找最小的字符串

1.gets();输入字符串的时候必须是,int a[10],而不能是指针int *a;

2.无敌字符串三个必会函数:

  1. strlen(str),求长度
  2. strcpy(str1,str2),将str2赋值给str1,不能用str1=str2,这不就是直接修改的指针,以后两个指向的同一个地方。
  3. strcmp(str1,str2),比较字符串的大小,str1>str2返回正数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){

    int N;
    scanf("%d\n",&N);
    char str[81]="";
    char minstr[90]="zzzzzzzzzzzzzzzzzzzzzzzzzz";
    for(int i=0;i<N;i++){
        gets(str);
        if(strcmp(minstr,str)>0){
            strcpy(minstr,str);
        }
    }
    printf("Min is: %s",minstr);

    return 0;
}

实验8-2-2 找最长的字符串

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){

    int N;
    scanf("%d\n",&N);//输入数字后换行,输入字符,必须加上换行符,否则换行符会被当成字符读入
    char str[81]="";//定义空字符,81是最大长度
    int maxlen=0;
    char maxstr[81];
    
    for(int i=0;i<N;i++){
        scanf("%s",str);//字符串本身就是数组指针(地址),不需要加上&
        int len=strlen(str);
        if(len>maxlen){
            maxlen=len;
            strcpy(maxstr,str);//字符串赋值函数,不能直接使用“=”
        }
    }

    printf("The longest is: %s",maxstr);

    return 0;
}

实验8-2-8 字符串排序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){

    char str[5][81];

    for(int i=0;i<5;i++){
        scanf("%s ",str[i]);
        
    }//得到了二维字符串数组str

    //接下来比较大小
    printf("After sorted:\n");
    for(int i=0;i<5;i++){//简单选择排序
        char min[81];
        strcpy(min,str[i]);
        for(int j=i+1;j<5;j++){//找出最小的放到i处
            if(strcmp(min,str[j])>0){
                char temp[81];
                strcpy(temp,min);
                strcpy(min,str[j]);
                strcpy(str[j],temp);
            }
        }
        strcpy(str[i],min);
    }

    for(int i=0;i<5;i++){
        printf("%s\n",str[i]);
    }

    return 0;
}

 实验8-2-10 IP地址转换

//输入32个字符串,每八位输出一个十进制数字=

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){

    char str[33]="";//使用gets函数的时候字符串数组要比预期的大一个,用来存放换行符
    gets(str);
    int flag=7;
    int sum=0;
    for(int i=0;i<32;i++){
        int num;
        if(str[i]=='1'){
            num=1;
        }else{
            num=0;
        }
        if(flag>=0){
            sum=sum+num*pow(2,flag);
            flag--;
        }
        if(flag==-1){
            printf("%d",sum);
            flag=7;
            sum=0;
            if(i!=31){
                printf(".");
            }
        }
    }

    return 0;
}

结构体

实验9-1 计算职工工资

//

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
    char str[10];
    float jiben;
    float fudong;
    float zhichu;
}worker;
int main(){

    int N;
    scanf("%d\n",&N);
    for(int i=0;i<N;i++){
        worker a;
        scanf("%s %f %f %f",a.str,&a.jiben,&a.fudong,&a.zhichu);
        printf("%s %.2f\n",a.str,a.jiben+a.fudong-a.zhichu);
    }

    return 0;
}

实验9-2 时间换算

//使用结构体:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
    int hh;
    int mm;
    int ss;
}time;
int main(){

    time start;
    scanf("%d:%d:%d",&start.hh,&start.mm,&start.ss);

    int n;
    scanf("%d",&n);
    start.ss=start.ss+n;
    if(start.ss>=60){
        start.ss=start.ss-60;
        start.mm=start.mm+1;
        if(start.mm>=60){
            start.mm=start.mm-60;
            start.hh=start.hh+1;
        }
        if(start.hh==24){
            start.hh=0;
        }
    }
    printf("%d%d:%d%d:%d%d",start.hh/10,start.hh%10,start.mm/10,start.mm%10,start.ss/10,start.ss%10);
    输出要补零, 2代表占两个位置, 0代表若两个位置有空缺, 用0填补
    //printf("%02d:%02d:%02d", start.hh, start.mm, start.ss);
    return 0;
}


实验9-3 计算平均成绩

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
    char num[50];
    char name[10];
    int grade;

}student;
int main(){


    int N;
    scanf("%d",&N);
    student a[N];//结构体数组
    int sum=0;
    for(int i=0;i<N;i++){
        scanf("%s %s %d",a[i].num,a[i].name,&a[i].grade);
        sum=sum+a[i].grade;
    }

    double average=sum*1.0/N;
    printf("%.2lf\n",average);
    for(int i=0;i<N;i++){
        if(a[i].grade<average){
            printf("%s %s\n",a[i].name,a[i].num);
        }
    }

    return 0;
}

实验9-5 查找书籍

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
    
    char name[300];
    float money;

}Books;
int main(){

    int N;
    scanf("%d\n",&N);
    Books a[20];//结构体数组
    for(int i=0;i<N;i++){
        scanf("%[^\n]",a[i].name);
        //gets(a[i].name);//都表示遇见换行符时停止
        scanf("%f\n",&a[i].money);
    }
    char maxbook[100]="";
    float max=0;
    char minbook[100]="";
    float min=1000;
    for(int i=0;i<N;i++){
        if(a[i].money>max){
            max=a[i].money;
            strcpy(maxbook,a[i].name);
        }
        if(a[i].money<min){
            min=a[i].money;
            strcpy(minbook,a[i].name);
        }
    }
    
    printf("%.2f, %s\n",max,maxbook);
    printf("%.2f, %s\n",min,minbook);
    
    return 0;
}

实验9-8 通讯录排序 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
    
    char name[300];
    int date;
    char num[300];

}Friends;
int main(){

    int N;
    scanf("%d\n",&N);
    Friends a[20];//结构体数组
    for(int i=0;i<N;i++){
        scanf("%s %d %s\n",a[i].name,&a[i].date,a[i].num);
   
    }
    for(int i=0;i<N;i++){
        for(int j=i+1;j<N;j++){
            if(a[j].date<a[i].date){
                a[N]=a[j];
                a[j]=a[i];
                a[i]=a[N];
            }
        }
    }
    for(int i=0;i<N;i++){
        printf("%s %d %s\n",a[i].name,a[i].date,a[i].num);
    }
    return 0;
}

实验9-9 有理数比较

//什么玩意,结构体好麻烦
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
typedef struct{
    int zi;
    int mu;
    double much;

}fenshu;
int main(){

    fenshu a,b;
    scanf("%d/%d %d/%d",&a.zi,&a.mu,&b.zi,&b.mu);
    a.much=1.0*a.zi/a.mu;
    b.much=1.0*b.zi/b.mu;
    char c;
    if(a.much>b.much){
        c='>';
    }else if(a.much<b.much){
        c='<';
    }else{
        c='=';
    }
    printf("%d/%d %c %d/%d",a.zi,a.mu,c,b.zi,b.mu);
    return 0;
}

实验11-1-1 英文单词排序

//把这些单词存放在一个二维数组里面

//输入不是1,2,3为程序截止
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
    
    char str[100][100];
    int i=0;
    gets(str[i]);
    while(strcmp(str[i],"#")!=0){//字符串的比较一定不能用=
        i++;
        gets(str[i]);
    }
    for(int j=0;j<i;j++){
        for(int k=j+1;k<i;k++){
            if(strlen(str[j])>strlen(str[k])){
                char temp[100];
                strcpy(temp,str[j]);
                strcpy(str[j],str[k]);
                strcpy(str[k],temp);
            }
        }
    }
    for(int j=0;j<i;j++){
        printf("%s ",str[j]);
    }
    return 0;
}

实验11-1-7 藏头诗

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
    //一个字符char是一个字节,汉字是三个字节
    char str[4][1000000];

    for(int i=0;i<4;i++){
        gets(str[i]);
        printf("%c%c%c",str[i][0],str[i][1],str[i][2]);
    }
    
    return 0;
}


实验11-1-9 藏尾诗

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main(){
    //一个字符char是一个字节,汉字是三个字节
    char str[4][1000000];

    for(int i=0;i<4;i++){
        gets(str[i]);
        int n=strlen(str[i]);
    
        printf("%c%c%c",str[i][n-3],str[i][n-2],str[i][n-1]);
    }
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西柚小萌新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值