山东理工sdut PTA实验九答案1~15

7-1 sdut-C语言实验-字符编码

请将一串长度最长为5的纯字母文本译成一个密码,密码规律如下:用原来的字母后面的第4个字母代替原来的字母。如C用G代替(如果该字母没后面没有第4个字母可代替,则需从26字母表中的首字母开始代替,比如:W用A代替,Z用D代替),最后得到的文本即为密码。

输入格式:

输入一串文本,长度固定为5。

输出格式:

输出对应的密码。格式为:
password is 密码

输入样例:

China

输出样例:

在这里给出相应的输出。例如:

password is Glmre

 int main()
{
    int i,len;
    char ch[50];
    gets(ch);
    len=strlen(ch);
    for(i=0;i<len;i++){
        if(ch[i]>='a'&&ch[i]<'w'||ch[i]>='A'&&ch[i]<'W')
            ch[i]=ch[i]+4;
        else
            ch[i]=ch[i]-22;
    }
    printf("password is %s",ch);
    return 0;
}

7-2 sdut - C语言实验-保留字母

编一个程序,输入一个允许带空格的字符串,将组成字符串的所有非英文字母的字符删除后输出。

输入格式:

一个字符串,长度不超过80个字符。

输出格式:

删掉非英文字母后的字符串。

输入样例:

abc123+xyz.5

输出样例:

在这里给出相应的输出。例如:

abcxyz

 #include <stdio.h>
#include <string.h>
int main()
{
    char str[88];
    gets(str);
    int len=strlen(str);
    for(int i=0;i<len;i++){
        if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')){
            printf("%c",str[i]);
        }
    }
    printf("\n");
    return 0;
}

 

7-3 sdut-C语言实验- 大小写转换

输入一字符串,请把一串字符中的小写字母变成大写字符,大写字母变成小写字母,其他的保持不变。

输入格式:

输入有多组。
每组输入一个字符串,长度不大于80,不包含空格。

输出格式:

输出转换后的字符串

输入样例:

A*
B+

输出样例:

在这里给出相应的输出。例如:

a*
b+

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
   int main()
   {
       char a[81];
       int n,i;
       while(gets(a)!=NULL){
           n=strlen(a);
           for(i=0;i<n;i++){
               if(a[i]<='z'&&a[i]>='a')a[i]=a[i]-32;
               else if(a[i]<='Z'&&a[i]>='A')a[i]=a[i]+32;
           }
           puts(a);
       }
       return 0;
   }


 

 

7-4 sdut-C语言实验- 字符串分割

输入一个字符串,要求把这个字符串按照某个分隔符来分割成若干个字符串输出。

输入格式:

输入数据有多组(数据组数不超过 100),到 EOF 结束。

每组数据输入一行,格式为 "s c",其中 s 为一个不含空格且长度不超过 1000 的字符串,表示待分割的字符串;c 为一个不是空格的字符,表示分隔符。

输入数据保证在待分割的字符串中,分隔符至少出现一次且不会出现在字符串开头或末尾,并且不会出现连续多个分隔符的情况。

输出格式:

对于每组数据,输出分割后的字符串,每个字符串占一行。

输入样例:

123,DE ,
0123.a,/45/6.8 /

输出样例:

123
DE
0123.a,
45
6.8

 #include<stdio.h>
#include<string.h>
int main()
{
    char str[1001],c;
    while(scanf("%s %c\n",str,&c)!=EOF){
        int t;t=strlen(str);
        for(int i=0;i<t;i++){
            if(str[i]!=c)printf("%c",str[i]);
            else printf("\n");
        }
        printf("\n");
    }
    return 0;
}

7-5 sdut- C语言实验——删除指定字符

从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。

输入格式:

第一行是一个字符串,不超过100个字符;
第二行是一个字符。

输出格式:

删除指定字符后的字符串。

输入样例:

在这里给出一组输入。例如:

sdf$$$sdf$$
$

输出样例:

在这里给出相应的输出。例如:

sdfsdf

 #include<stdio.h>
#include<string.h>
int main()
{
    char str[101],c;
    gets(str);
    scanf("%c",&c);
    int len;len=strlen(str);
    for(int i=0;i<len;i++){
        if(str[i]!=c)printf("%c",str[i]);
    }
    return 0;
}

7-6 sdut-C语言实验- 全字母句

全字母句 (pangram) 指包含字母表中全部 26 种英文字母(不区分大小写)的句子,其常被用于展示英文字体的显示效果。

输入多个句子,判断哪些句子是全字母句。

输入格式:

输入数据有多组(数据组数不超过 100),到 EOF 结束。

每组数据包含一行长度不超过 100 的字符串。

输出格式:

对于每组数据,输出一行。

如果是全字母句则输出 "Yes",否则输出 "No"(不包括引号)。

输入样例:

The quick brown fox jumps over the lazy dog.
The 6th ACM Funny Programming For/While Contest

输出样例:

Yes
No

 #include<stdio.h>
#include<string.h>
int main()
{
    char a[101];int i,n;
    while(gets(a)!=NULL){
        int b[26]={0},count=0;
        n=strlen(a);
        for(i=0;i<n;i++){
            if(a[i]>='A'&&a[i]<='Z')a[i]=a[i]+32;
            b[a[i]-'a']++;
        }
        for(int i=0;i<26;i++){
            if(b[i]!=0)count++;
        }
        if(count==26)printf("Yes\n");
        else printf("No\n");
    }
    return 0;

7-7 sdut-C语言实验- 字符统计1

给出一串字符,要求统计出里面的字母、数字、空格以及其他字符的个数。
字母:A, B, ..., Z、a, b, ..., z组成
数字:0, 1, ..., 9
空格:" "(不包括引号)
剩下的可打印字符全为其他字符。

输入格式:

测试数据有多组。
每组数据为一行(长度不超过100000)。
数据至文件结束(EOF)为止。

输出格式:

每组输入对应一行输出。
包括四个整数a b c d,分别代表字母、数字、空格和其他字符的个数。

输入样例:

A0 ,

输出样例:

在这里给出相应的输出。例如:

1 1 1 1

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
   int main()
   {
       int n,i;
       char a[100003];
       while(gets(a)!=NULL)
       {
           int a1 = 0,a2 = 0,a3 = 0,a4 = 0; 
           n = strlen(a);
           for(i=0;i<n;i++)
           {
               if((a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A'))
                a1++;
               else if(a[i]<='9'&&a[i]>='0')
                    a2++;
               else if(a[i]==' ')
                    a3++;
                else a4++;
           }
           printf("%d %d %d %d\n",a1,a2,a3,a4);
       }

       return 0;
   }

7-8 sdut-C语言实验- 字符统计2

输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。

输入格式:

输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。

输出格式:

逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字符)。

输入样例:

I am a student
a good programming problem
ABCD abcd ABCD abcd

输出样例:

在这里给出相应的输出。例如:

a 2
o 4
A 2

 #include<stdio.h>
#include<string.h>
int main()
{
    char a[101];int i,n,k,max=0;
    while(gets(a)!=NULL){
        int b[58]={0};
        max=0;
        n=strlen(a);
        for(i=0;i<n;i++){
            if((a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A')){
                int k=a[i]-'A';b[k]++;
            }
        }
        for(i=0;i<58;i++){
            if(b[i]>max){
                max=b[i];k=i;
            }
        }
        printf("%c %d\n",'A'+k,max);
    }
    return 0;
}

7-9 sdut-C语言实验-虎子查找指定字符 

山东理工大学与爱尔兰利莫瑞克大学是中外合作院校,许多优秀的学长学姐通过自己努力获得了留学爱尔兰的机会。

虎子作为优秀的学长已经在爱村求学半年了,也认识了很多国外的同学,他们为了更加熟悉,会玩一个从从某个同学的名字中查找某指定的字符的游戏。

现在请你帮助虎子编写一个程序,从输入的英文名字中查找指定的字符。

输入格式:

输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过30个字符)。

输出格式:

如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最小下标(下标从0开始);否则输出"Not Found"。

输入样例1:

M
Maggie Ma

输出样例1:

在这里给出相应的输出。例如:

index = 0

输入样例2:

a
Ken Thompson

输出样例2:

在这里给出相应的输出。例如:

Not Found

 #include<stdio.h>
#include<string.h>
int main()
{
   char c,ch[30];
   c=getchar();
   getchar();
   gets(ch);
   int i,len,f=0;
   len=strlen(ch);
   for(i=0;i<len;i++)
    if(c==ch[i]){
       f=1;
       printf("index = %d",i);
       break;
   }
    if(f==0)
    printf("Not Found");
    return 0;
}

7-10 sdut-C语言实验- 简单字符串比较

请使用字符串比较函数,比较两个字符串的大小,并按要求输出比较后的结果。字符串最长不超过15个字符。
输入两个字符串str1和str2,如果第一个字符串与第二个字符串相等,输出str1=str2,如果第一个字符串大于第二个字符串,输出str1>str2,如果第一个字符串小于第二个字符串,输出str1 < str2。

输入格式:

第1行为第一个字符串。
第2行为第二个字符串。

输出格式:

在一行输出比较后的结果。例如"abc"与"abc"相等,输出为abc=abc,如果"ab"小于"abc”,输出ab < abc。

输入样例:

ab
abc

输出样例:

ab<abc

 #include<stdio.h>
#include<string.h>
int main()
{
    char str1[16],str2[16];
    scanf("%s %s",str1,str2);
    char i;
    i=strcmp(str1,str2);
    if(i<0)printf("%s<%s",str1,str2);
    if(i==0)printf("%s=%s",str1,str2);
    if(i>0)printf("%s>%s",str1,str2);
    return 0;
}

7-11 sdut-C语言实验- 找老乡

新的学年开始了,学校又迎来了一批朝气蓬勃的大一新生。虎子很想认识新来的老乡,于是他拿到了计算机学院大一新生的名单,上面有n个人的信息(姓名和地址),虎子想知道有多少人是他的老乡以及老乡的名字。

输入格式:

多组输入,每组的第一行是一个整数n(1<=n<=100),表示名单上人的数量。

接下来一行有一个字符串表示LeiQ的地址(1<=len<=20)

接下来n行,每行两个字符串,第一个是姓名,第二个是地址。

输出格式:

先输出老乡的名字(按照输入的顺序),最后输出老乡的人数。
如果没有找到老乡,输出:Sorry.

输入样例:

4
Laiyang
Xiaoming Laiyang
Xiaohong Heze
Xiaohuang Laiwu
Xiaoguang Laiyang

输出样例:

Xiaoming
Xiaoguang
2

 #include<stdio.h>
#include<string.h>
int main()
{
    int n,i;
    char ch[20];
    int number;
    while(~scanf("%d\n",&n)){
        char xh[41];
        gets(ch);
        number=0;
        for(i=0;i<n;i++){
            gets(xh);
            if(strstr(xh,ch)!=NULL){
                strtok(xh," ");
                printf("%s\n",xh);
              number++;
            }
            
        }
         if(number==0)printf("Sorry.\n");
    else printf("%d\n",number);
    }
   
    return 0;
}

7-12 sdut-C语言实验- 虎子认识新朋友之字符串排序

虎子寒假加入了一个实验室,认识了3个新同学,他决定将同学的名字按字母顺序存储到自己的电子通讯录上。

你知道如何编程实现吗?

请编程实现:输入3个字符串,按字典序从小到大进行排序。

输入格式:

输入数据有一行,分别为3个字符串,用空格分隔,每个字符串长度不超过100。

输出格式:

输出排序后的三个字符串,用空格分隔。

输入样例:

abcd cdef bcde

输出样例:

abcd bcde cdef

 #include <stdio.h>
#include<string.h>
int main()
{
 char a[100],b[100],c[100],t[100];  //a b c为输入数组 c为临时数组
 scanf("%s %s %s",a,b,c);  
 if(strcmp(a,b)>0)     {
   strcpy(t,a);
   strcpy(a,b);
   strcpy(b,t);
  }
  if(strcmp(b,c)>0) {
    strcpy(t,b);
    strcpy(b,c);
    strcpy(c,t);
   }
  if(strcmp(a,b)>0) {
    strcpy(t,a);
    strcpy(a,b);
    strcpy(b,t);
   }
   printf("%s %s %s",a,b,c);
   return 0;
}

7-13 sdut-C语言实验- 简单字符串排序

从键盘输入10个学生的姓名和成绩,请按字典序排列学生的姓名并输出(姓名和成绩对应关系保持不变)。

输入格式:

输入共11行,前10行每行是一个学生的姓名,最后一行是10个用空格分开的整数表示对应的10个学生成绩。(姓名大小不超过20个字符)

输出格式:

输出姓名按字典序排列后的学生姓名和成绩,共10行,每个学生的姓名和成绩占一行,姓名和成绩间用逗号分开。

输入样例:

在这里给出一组输入。例如:

Bush
White
Mark
Jean
Black
Wood
Jenny
Frank
Bill
Smith
78 85 96 65 46 83 77 88 54 98

输出样例:

在这里给出相应的输出。例如:

Bill,54
Black,46
Bush,78
Frank,88
Jean,65
Jenny,77
Mark,96
Smith,98
White,85
Wood,83

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

    int i,j,b[10],t;//十个成绩;成绩
 
    char a[10][20],c[20];//十个名字,十行;名字
 
    memset(a,0,sizeof(a));
 
    memset(b,0,sizeof(b));

    memset(c,0,sizeof(c));
    for(i=0;i<10;i++)
    {
        scanf("%s",a[i]);//输入十个名字
    }
    for(i=0;i<10;i++)  {
     scanf("%d",&b[i]);//输入十个成绩
   }
     for(j=0;j<9;j++)   {
        for(i=0;i<9;i++) {
            if(strcmp(a[i],a[i+1])>0) {
                strcpy(c,a[i]);
                strcpy(a[i],a[i+1]);
                strcpy(a[i+1],c);
                t=b[i];
                b[i]=b[i+1];
                b[i+1]=t;
            }
        }
    }
    for(i=0;i<10;i++) {
        printf("%s,%d\n",a[i],b[i]);
    }
    return 0;
}
 

7-14 英文单词排序

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:

输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:

输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:

blue
red
yellow
green
purple
#

输出样例:

red blue green yellow purple 

 #include<stdio.h>
#include<string.h>
int main()
{
    int len,i,j,k=0;
    char s[26][15],t[15]={'0'};
    while(1){
        scanf("%s",s[k]);
        if(s[k][0]=='#'){
            break;
        }
        k++;
    }
    s[k][0]='\0';
    for(i=0;i<k;i++)
        for(j=0;j<k-i;j++){
            if(strlen(s[j])>strlen(s[j+1]))
                {
                    strcpy(t,s[j]);
                    strcpy(s[j],s[j+1]);
                    strcpy(s[j+1],t);
                }
        }
    for(i=1;i<=k;i++)
    {
        printf("%s ",s[i]);
    }
    return 0;
}

 7-15 倒数第N个字符串

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。

输入格式:

输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。

输出格式:

在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。

输入样例:

3 7417

输出样例:

pat

 #include <stdio.h>
#include<math.h>
int main(){
    int a, m = 26,i,n;
    scanf("%d %d",&n,&a);
    char s[n];
    m = pow(m,n);
    a=m-a;
    for(i=0;i<n;i++){
        s[i] = 'a'+a%26;
        a/=26;
    } 
    for(i=n-1;i>=0;i--){
        printf("%c",s[i]);
    }
}

  • 14
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值