educoderC语言平台实训答案【添加结构体+文件部分】(仅供参考)

第6部分 数组

第1关

字符逆序

任务描述
题目描述:输入一个字符串,输出反序后的字符串。
输入
一行字符
输出
逆序后的字符串

测试说明
样例输入:
123456abcdef
样例输出:
fedcba654321

特别注意:样例输出没有进行换行操作

#include
int main(void)
{
    /*********Begin*********/
    char n[200];
    int i=0,temp;
    int len=0;
    gets(n);
    while(n[i]!=0)
    {
        len++;
        i++;
    }
    int left=0,right=len-1;
    while(left

第2关

字符统计

任务描述
题目描述:对于给定的一个字符串,统计其中数字字符出现的次数。
测试说明
样例输入:
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
样例输出:
6
9

#include
#include
 
int main(void)
{
    int n,count,i,k,j,w;
    char a[100];
    scanf("%d",&n);
    w = n;//先把n存起来  n是一个用户输入的常量 最好不要修改 就算修改也要知道原始值
    int b[100]={0};
     
    while(n > 0)
    { 
        count = 0;
        scanf("%s",a); 
        k = strlen(a);
         
        for(i=0; i='0')
            {
                count++;
            }
        } 
        b[n-1] = count;
        n--;
    }
    for(j=w-1; j>=0; j--)
    {
        printf("%d", b[j]);
        if(j>0)
        printf("\n");
    }
 
    return 0;
}

第3关

字符插入

任务描述
题目描述:输入两个字符串a和b,将b串中的最大字符插入到a串中最小字符后面。
测试说明
样例输入:
MynameisAmy
MynameisJane
样例输出:
MynameisAymy
提示:
字符串长度不超过100

注意:使用gets()函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。
推荐使用:fgets()函数。

#include
#include
int main()
{
 char a[101], b[100];
 int i = 0, j = 0, min, max, x, y;
 min = 0;//min在下面(if (a[i]b[max])
   max = j;
 }
  
 for (i = x; i >min; i--)//for循环注意其语句执行先后顺序,判断条件语句(i >min),
 {                       //满足之后先执行for循环体语句(a[i] = a[i-1];),再执行i--。
  a[i] = a[i-1];      
 } 
 if (min == x)
  a[i] = b[max];//这里原程序直接把整数max赋给了a[i]
 else
 {
  a[i +1] = b[max];
 }
 a[x + 1] = '\0';//在字符串最后添加字符串结束符
printf("%s",a);
}

第4关

字符串处理

任务描述
题目描述:编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入"BEIJING", “123”, 3,则输出:“BEI123JING”。
测试说明
样例输入:
BEIJING
123
3
样例输出:
BEI123JING

注意:使用gets()函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。
推荐使用:fgets()函数。

#include
#include
#include
int main(void)
{
    /*********Begin*********/
    char t[100],s[100];
    int i,j,pos;
    gets(t);
    gets(s);
    scanf("%d",&pos);
    for(i=0;i

第5关

字符串统计

任务描述
题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。
测试说明
样例输入:
My name is Amy
My name is Jane
stop
样例输出:
11 name
12 name
提示:
字符串长度不超过100。

注意:使用gets()函数会引起警告,但正确使用不影响测评结果。
推荐使用:fgets()函数。

#include
#include 
int main(void)
{
    /*********Begin*********/
    char a[100];
    int i, j, pos = 0;
    int str_len, word_len, max_word_len;
 
    while(1) {
        str_len = word_len = max_word_len = 0;
 
         fgets(a, 100, stdin);//fgets函数的用法
 
        if (strlen(a) <= 1)//输入的字符只有一个的情况
            continue;
        if (strlen(a) < 99)   //remove '\n'
            a[strlen(a)-1] = 0;
 
        if(strncmp(a,"stop", strlen("stop"))==0)
            break;
        for(i = 0; a[i] !='\0'; i++) {
            if(a[i] != ' ') {
                word_len++;
                str_len++;
                continue;
            }
            if (word_len  > max_word_len) {
                max_word_len = word_len;
                pos = i - word_len;
            }
            word_len = 0;
        }
        if (word_len  > max_word_len) {
            max_word_len = word_len;
            pos = i - word_len;
        }
 
        printf("%d ", str_len);
        for (i = pos; i < pos + max_word_len; i++)
            printf("%c", a[i]);
        putchar(10);
    }
 
    /*********End**********/
    return 0;
}

第6关

字符串排序

任务描述
题目描述:输入3行,每行n个字符串,按由小到大的顺序输出
测试说明
样例输入:
cde
afg
abc
样例输出:
abc
afg
cde

#include
#include
int main(void)
{
    /*********Begin*********/
    char a[30],b[30],c[30],max[30];
    scanf("%s %s %s",&a,&b,&c);
    if(strcmp(a,b)>0)
    {
        strcpy(max,a);
        strcpy(a,b);
        strcpy(b,max);
    }
    if(strcmp(a,c)>0)
    {
        strcpy(max,a);
        strcpy(a,c);
        strcpy(c,max);
    }
    if(strcmp(b,c)>0)
    {
        strcpy(max,b);
        strcpy(b,c);
        strcpy(c,max);
    }
    printf("%s\n%s\n%s",a,b,c);
    /*********End**********/
    return 0;
}

第7关

排序问题

任务描述
本关任务:将十个数进行从大到小的顺序进行排列。
测试说明
样例输入:
1 2 3 4 5 6 7 8 9 10

样例输出:
10 9 8 7 6 5 4 3 2 1

#include
int main()
{
    int i,j,a[10],t;
    for (i = 0; i < 10; i++)
        scanf("%d",&a[i]);
    for (i = 0; i < 10; i++)
    {
        for (j = i + 1; j < 10;j++) 
        if (a[i] < a[j])
        {
            t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }
    for (i = 0; i < 10; i++)
    {
        printf("%d", a[i]);
        if(i!=9)
            putchar(' ');}
        return 0;
    }

第8关

查找整数

任务描述
题目描述:给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
测试说明
样例输入:
6
1 9 4 8 3 9
9
样例输出:
2
提示:
数据规模与约定。
1 <= n <= 1000

#include
int Find(int n,int a[],int key)
{
	int index=-1;
	int i;
	for(i=0;i

第9关

计算数组中元素的最大值及其所在的行列下标值

任务描述
题目描述:按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中m和n的值由用户键盘输入。已知m和n的值都不超过10。
输入
输入数组大小:"%d,%d"
下面输入数组中元素。

输出
输出格式:
数组大小输入提示信息:“Input m, n:”
数组元素输入提示信息:"Input %d*%d array:
"
输出格式:“max=%d, row=%d, col=%d”

样例输入
5,5
1 2 3 4 5
4 5 6 100 2
3 2 1 5 6
1 2 3 5 4
3 5 6 4 8

样例输出
Input m, n:Input 5*5 array:
max=100, row=2, col=4

#include
int main()
{
    int a[5][5],max,i,j,p,q,m,n;
	printf("Input m, n:");
	scanf("%d,%d",&m,&n); 
	printf("Input %d*%d array:\n",m,n);
    for(i=0;imax){
            max=a[i][j];
            p=i;
            q=j;
        }  
    printf("max=%d, row=%d, col=%d",max,p+1,q+1);
     return 0;
}

第10关

二分查找

任务描述
题目描述:将n个从小到大排序的整数(n<1000000)从1~n进行编号,并一个待查找的整数m,请使用二分法进行查找。
测试说明
样例输入:
10
1 2 4 5 6 7 8 9 10 11
10
样例输出:
9

#include 
int a[1000005],n,t;
int BS(){
    int l=0,r=n-1;
    while(l<=r){
        int m=(l+r)>>1;
        if(ta[m])
        l=m+1;
        else if(a[m-1]

第11关

鞍点

任务描述
题目描述:找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。

样例输入:

3 3
1 2 3
4 5 6
7 8 9

样例输出:

Array[0][2]=3

#define N 10
#include 
int Maxcol(int a[][N],int n,int row){
    int i,maxcol=0;
    for(i=1;ia[row][maxcol]) maxcol=i;
    return maxcol;
}
int Minrow(int a[][N],int m,int col){
    int i,minrow=0;
    for(i=1;i=m) printf("None");
}

第12关

删除最大值

任务描述
题目描述:输入10个互不相同的整数并保存在数组中,找到该最大元素并删除它,输出删除后的数组
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。

样例输入:

1 2 3 4 5 6 7 8 9 0

样例输出:

1 2 3 4 5 6 7 8 0

#include"stdio.h" 
#define N 10
void del(int d[],int i,int n)
{
	for(;ia[max])
	max=i; 
	} 
	del(a,max,10);
	for(i=0;i

第13关

杨辉三角

任务描述
题目描述:还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

#include
int main()
{
    int i,j,b,a[10][10];
    for(i=0;i<=9;i++)
    for(j=0;j<=i;j++)
    {
        a[i][0]=1;
        a[i][i]=1;
    }
    for(i=2;i<=9;i++)
    for(j=1;j<=i-1;j++)
	    a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    for (i= 0; i < 10; ++i)
    {
        for ( j = 0; j <= i; ++j)
        {
	        printf("%d", a[i][j]);
	        if (j != i)
	            printf(" ");
        }
        if(i<=8)
        printf("\n");
    }
}

你可能感兴趣的:(Educoder,c语言)