C语言编程——字符数组某些题



title: C语言编程——字符数组某些题
categories:

  • 编程
  • C语言
    tags: C语言

简单第一题

编程实现找出字符串中最大字符元素并输出该元素及其对应的ASCII值.
**要求输入提示信息为:
"Input a string:n"
**输出格式要求为:
"The largest character of "%s" is '%c' ,The ASCII is %d."

#include <stdio.h>
int main()
{
    char str[30],max;
    int i;
    printf("Input a string:\n");
    gets(str);
    max=str[0];
    for(i=0;str[i]!='\0';i++)
    {
        if(max<str[i+1])
        {
            max=str[i+1];
        }
        else
        {
            max=max;
        }
    }
    printf("The largest character of \"%s\" is \'%c\' ,The ASCII is %d.",str,max,max);
    return 0;
}

输入5个国名

编程实现从键盘输入5个国名(每个国名最长80个字符),
找出并输出按字典顺序排在最前面的国名
要求:
(1)用gets输入字符串。
(2)
**输入提示信息为:"Input five countries' names:n"
**输出格式为:"The minimum is:%sn"

法1:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
    char* str[5];
    int i;
    printf("Input five countries' names:\n");
    for(i=0;i<5;i++)
    {
        str[i] = (char*)malloc(50);
        scanf("%s",str[i]);
    }
    for(i=0;i<5;i++)
    {
        if(strcmp(str[0],str[i])>0)
        {
            str[0]=str[i];
        }
    }
    printf("The minimum is:%s\n",str[0]);
    for(i=0;i<5;i++)
    {
        free(str[i]);
    }
    return 0;
}

法2:
    #include <stdio.h>
    #include <string.h>
    #define M 80
    int main()
    {
        char cou[5][M],min[M];
        int i;
        printf("Input five countries' names:\n");
        for(i=0;i<5;i++)
        {
            gets(cou[i]);
        }
        strcpy(min,cou[0]);
        for(i=0;i<5;i++)
        {
            if(strcmp(min,cou[i])>0)
            {
                strcpy(min,cou[i]);
            }
        }
        printf("The minimum is:%s\n",min);
        return 0;
    }

数字进行加密(改错题)

下面的程序将数字进行加密,其中的每一个数字转化为另一个不同的数字。请改正程序中的错误,使它能得出正确的结果。

include <stdio.h>

main()
{

char s[] = "24635", c, i;
for (i = 0; c = s[i]; i++)
{
    switch ((c - '0')
    {
    case 2:
    case 3:
        putchar(c + 4);
        continue;
    case 4:
        putchar(c + 4);
        break;
    case 5:
        putchar(c + 3);
    default:
        putchar(c + 2);
    }
    putchar('\n');
}

}

#include <stdio.h>
main()
{
    char s[] = "24635", c, i;
    for (i = 0; c = s[i]; i++)
    {
        switch (c)
        {
        case '2':
        case '3':
            putchar(c + 4);
            break;
        case '4':
            putchar(c + 4);
            break;
        case '5':
            putchar(c + 3);
            break;
        default:
            putchar(c + 2);
        }
        printf("\n");
    }
}

一道我忘了题目的题

#include <stdio.h>
#include <string.h>
#define ARRA_SIZE 80
#define N 5
int Min_string(char str[][ARRA_SIZE],int n);
void Sort_string(char str[][ARRA_SIZE],int n);
int main()
{
    char str[N][ARRA_SIZE];
    int i;
    for(i=0;i<N;i++)
    {
        printf("Input %d string:",i+1);
        gets(str[i]);
    }
    Sort_string(str,N);
    for(i=0;i<N;i++)
    {
        puts(str[i]);
    }
   return 0;
}
int Min_string(char str[][ARRA_SIZE],int n)
{
    int i,min;
    min=0;
    for(i=1;i<n;i++)
    {
        if(strcmp(str[i],str[min])<0)
        {
            min=i;
        }
    }
    return min;
}
void Sort_string(char str[][ARRA_SIZE],int n)
{
    int i,j;
    char temp[ARRA_SIZE];
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(strcmp(str[j],str[j+1])>0)
            {
                strcpy(temp,str[j]);
                strcpy(str[j],str[j+1]);
                strcpy(str[j+1],temp);
            }
        }
    }
}


统计字符

输入一行字符,统计其中的英文字符、数字字符、空格字符,以及其他字符的个数。请找出以下程序的错误,并改正之。

#include <stdio.h>
#include <string.h>
#define ARR_SIZE 80

main()
{
    char str[ARR_SIZE];
    int  len, i;
    int  letter=0,digit=0,space=0,other=0;

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

    len = strlen(str);

    for (i=0; i<len; i++)
    {
        if ('a'<=str[i]&&str[i]<='z' || 'A'<=str[i]&&str[i]<='Z')
        {
            letter ++;
        }
        else if ('0'<=str[i]&&str[i]<='9')
        {
            digit ++;
        }
        else if (str[i]==' ')
        {
            space ++;
        }
        else
            other ++;
    }

    printf("英文字符数:%d\n", letter);
    printf("数字字符数:%d\n", digit);
    printf("空格数:%d\n", space);
    printf("其他字符数:%d\n", other);
}
ISBN识别码判断
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。 
识别码的计算方法如下: 
   首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,...,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。 
   你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
程序运行结果示例1:
0-123-41562-4↙
Right
程序运行结果示例2:
0-123-41562-7↙
0-123-41562-4
输入格式: 用gets()输入字符串
输入只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN的格式要求)。
输出格式:
输入的ISBN号码的识别码正确,输出信息: "Right"
输入的ISBN号码的识别码错误,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”),输出格式:"%s"


#include <stdio.h>
#include <string.h>
#define M 14
int main()
{
    char cod[M];
    int sum=0;
    int i,j=1;
    gets(cod);
    for(i=0;i<M-3;i++)
    {
        if(cod[i]>='0'&&cod[i]<='9')
        {
            sum+=(cod[i]-48)*j;
            j++;
        }
    }

    if((sum%11)==(cod[12]-48))
    {
        printf("Right");
    }
    else
    {
        cod[12]=((sum%11)+48);
        puts(cod);
    }
    return 0;
}
指针和字符数组的应用,用五种方法输出字符串“China”。请改正程序中的错误,使它能得出正确的结果。  
#include <stdio.h>  
main()  
{  
    int i = 0;  
    char str[6] = {'C', 'h', 'i', 'n', 'a',   '\0'}, str1[6] , *ptr, *ptr1, *ptr2 ,   str2[5];  
    while (str[i] != '\0')  
    {  
        putchar(*str);  
        str++;  
    }  
    scanf("%s", ptr);  
    puts(ptr);  
    ptr1 = str;  
    puts(ptr1);  
    ptr2 = "China";  
    puts(ptr2);  
    str2 = "China";  
    printf("%s", str2);  
}


#include <stdio.h>
#include <string.h>
int main()
{
    int i = 0;
    char str[6] = {'C', 'h', 'i', 'n', 'a', '\0'}, str1[6] , *ptr, *ptr1, *ptr2 , str2[6];
    while (str[i] != '\0')
    {
        putchar(str[i]);
        i++;
    }
    ptr = str1;
    scanf("%s", ptr);
    puts(ptr);
    ptr1 = str;
    puts(ptr1);
    ptr2 = "China";
    puts(ptr2);
    strcpy(str2, "China");
    printf("%s", str2);
    return 0;
}

字符串逆序
用字符数组作函数参数编程,利用一个数组实现字符串(允许输入带空格的字符串)的逆序存放。要求如下:
(1)在主函数中从键盘输入字符串,字符串的最大长度为80个字符。 
     调用Inverse()函数将字符串逆序存放,然后在主函数中输出逆序后的字符串。
(2)在子函数Inverse()中实现字符串的逆序存放。函数原型为:
     void Inverse(char str[]);
程序运行结果示例1:
Input a string:
abcde↙
Inversed results:
edcba
程序运行结果示例2:
Input a string:
hello↙
Inversed results:
olleh
输入格式:  用gets()输入字符串
输出格式:
输入提示信息:"Input a string:\n"
输出提示信息:"Inversed results:\n"
用puts()输出字符串


#include <stdio.h>
#include <string.h>
#define M 80
void Inverse(char str[]);
int main()
{
    char str[M];
    printf("Input a string:\n");
    gets(str);
    Inverse(str);
    printf("Inversed results:\n");
    puts(str);
    return 0;
}
void Inverse(char str[])
{
    int len,i;
    char temp;
    len = strlen(str);
    if(len % 2 == 0)
    {
        for(i=0;i<len/2;i++)
        {
            temp=str[i];
            str[i]=str[len-1-i];
            str[len-1-i]=temp;
        }
    }
    else
    {
        for(i=0;i<(len-1)/2;i++)
        {
            temp=str[i];
            str[i]=str[len-1-i];
            str[len-1-i]=temp;
        }
    }
}

编程判断输入的一个字符串是否是“回文”。所谓“回文”字符串就是左读和右读都一样的字符串。例如: "abcba"就是一个回文字符串。

输入提示信息:"Input a string:\n"
输入格式:gets()
判断是回文的输出提示信息:"This string is a plalindrome." 
判断不是回文的输出提示信息:"This string is not a plalindrome."

程序运行示例1:
Input a string:
abcba↙
This string is a plalindrome.

程序运行示例2:
Input a string:
friend↙
This string is not a plalindrome.



#include <stdio.h>
#include <string.h>
#define M 80
int function(char str[]);
int main()
{
    int flag;
    char str[M];
    printf("Input a string:\n");
    gets(str);
    flag=function(str);
    if(flag==0)
    {
        printf("This string is not a plalindrome.");
    }
    else
    {
        printf("This string is a plalindrome.");
    }
    return 0;
}
int function(char str[])
{
    int len,i;
    len = strlen(str);
    if(len % 2 ==0)
    {
        for(i=0;i<len/2;i++)
        {
            if(str[i]!=str[len-1-i])
            {
                return 0;
            }
        }
        return 1;
    }
    else
    {
        for(i=0;i<(len-1)/2;i++)
        {
            if(str[i]!=str[len-1-i])
            {
                return 0;
            }
        }
        return 1;
    }
}

编程实现找出字符串中最大字符元素并输出该元素及其对应的ASCII值.
****要求输入提示信息为:
"Input a string:\n"
****输出格式要求为:
"The largest character of \"%s\" is \'%c\' ,The ASCII is %d."


#include <stdio.h>
#include <string.h>
#define M 80
int main()
{
    char str[M];
    char max = '0';
    int len,i;
    printf("Input a string:\n");
    gets(str);
    len = strlen(str);
    for(i=0;i<len;i++)
    {
        if(max<str[i])
        {
            max=str[i];
        }
    }
    printf("The largest character of \"%s\" is \'%c\' ,The ASCII is %d.",str,max,(int)max);
    return 0;
}


有一个字符串,包含n个字符。写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
程序的运行示例如下:
请输入一个字符串:
1234567890
从第几个字符开始复制?3
复制结果为:34567890



#include <stdio.h>
#include <string.h>
#define M 80
int main()
{
    char str[M],str1[M];
    int n,len;
    int i,j;
    printf("请输入一个字符串:\n");
    scanf("%s",str);
    printf("从第几个字符开始复制?");
    scanf("%d",&n);
    len = strlen(str);
    for(i=n-1,j=0;j<len-n+1&&str[i]!='\0';j++,i++)
    {
        str1[j]=str[i];

    }
    str1[len-n+1]='\0';
    printf("复制结果为:");
    puts(str1);
    return 0;
}


简单的口令检查程序
按下述要求编写口令检查程序(假设正确的口令为8888,正确口令"8888"为字符串)。
(1)若输入口令正确,则提示“You are welcome!”,程序结束。
(2)若输入口令不正确,则提示“Wrong password!”,同时检查口令是否已输入3次,若未输入3次,则提示“Enter again:”,且允许用户再次输入口令;若已输入3次,则提示“You have entered three times! You are not welcome!”,且不允许用户再输入口令,程序结束。


#include <stdio.h>
#include <string.h>
#define M 20
int main()
{
    char pass[M] = "8888";
    int count = 0;
    char in_pass[M];
    printf("Please enter password:");
    scanf("%s",in_pass);
    if(strcmp(pass,in_pass)==0)
    {
        printf("You are welcome!");
        count ++ ;
    }
    else
    {
        printf("Wrong password!\n");
        for(;count<2;count++)
        {
            printf("Please enter again:");
            scanf("%s",in_pass);
            if(strcmp(pass,in_pass)==0)
            {
                printf("You are welcome!");
                return 0;
            }
            else
            {
                printf("Wrong password!\n");
            }
        }
        printf("You have entered three times!\nYou are not welcome!");
    }
    return 0;
}


编程实现找出字符串中最大字符元素并输出该元素及其对应的ASCII值.
****要求输入提示信息为:
"Input a string:\n"
****输出格式要求为:
"The largest character of \"%s\" is \'%c\' ,The ASCII is %d."


#include <stdio.h>
#include <string.h>
#define M 30
int main()
{
    char str[M],max='0';
    int len;
    int i;
    printf("Input a string:\n");
    gets(str);
    len = strlen(str);
    for(i=0;i<len;i++)
    {
        if(str[i]>max)
        {
            max=str[i];
        }
    }
    printf("The largest character of \"%s\" is \'%c\' ,The ASCII is %d.",str,max,(int)max);
    return 0;
}

声明:ITanger|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - C语言编程——字符数组某些题


Carpe Diem and Do what I like