山东理工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]=’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

#include

int main()

{

    char str[88];

    gets(str);

    int len=strlen(str);

    for(int i=0;i<len;i++){

        if((str[i]>=’a’&&str[i]=’A’&&str[i]<='Z')){

            printf(“%c”,str[i]);

        }

    }

    printf(“\n”);

    return 0;

}

 

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

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

输入格式:

输入有多组。

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

输出格式:

输出转换后的字符串

输入样例:

A*
B+

输出样例:

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

a*
b+

 

#include

#include

#include

   int main()

   {

       char a[81];

       int n,i;

       while(gets(a)!=NULL){

           n=strlen(a);

           for(i=0;i<n;i++){

               if(a[i]=’a’)a[i]=a[i]-32;

               else if(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

#include

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

#include

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

#include

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

#include

#include

   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]=’a’)||(a[i]=’A’))

                a1++;

               else if(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

#include

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]=’a’)||(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

#include

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 

 #include

#include

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

#include

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

#include

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

#include

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

#include

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

#include

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]);

    }

}

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/e07eea9b99.html