南师大复试编程训练二

11.冒泡法排序

#include <stdio.h>

int main()
{
    int i,j,temp;
    int a[10]= {1,3,5,7,2,4,6,8,9,10};
    for(i=0; i<9; i++)
        for(j=0; j<i; j++)
        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    for(i=0; i<10; i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

运行结果:

12.3*4矩阵,编程求出其中值最大的那个元素的值,以及其所在的行号和列号

#include <stdio.h>

int main()
{
    int i,j,max,maxi=0,maxj=0;
    int a[3][4]= {{1,2,3},{6,5,4},{9,7,8}};
    max=a[0][0];
    for(i=0; i<3; i++)
        for(j=0; j<4; j++)
        {
            if(a[i][j]>max)
            {
                max=a[i][j];
                maxi=i;
                maxj=j;
            }
        }
    printf("max=%d,maxi=%d,maxj=%d\n",max,maxi,maxj);
    return 0;
}

运行结果:

13.输入一行字符,统计其中有多少个单词,单词之间用空格分开

#include <stdio.h>

int main()
{
    char string[81];
    int i,num=0,word=0;   //一开始word=0,相当于加上第一个词
    char c;
    gets(string);
    for(i=0; (c=string[i])!='\0'; i++)
    {
        if(c==' ')    //遇到空格时,相当于一个单词的开始
            word=0;
        else if(word==0)  //空格的下一个字符,即本单词的第一个字符,进行num++
        {
            word=1;
            num++;
        }
    }
    printf("%d words",num);   //num为单词个数

    printf("\n");
    return 0;
}

运行结果:

14.有3个字符串,要求找出其中的最大者

#include <stdio.h>
#include <string.h>
int main()
{
    char str[3][10],temp[10];
    for(int i=0; i<3; i++)
        gets(str[i]);
    if(strcmp(str[0],str[1])>0)
        strcpy(temp,str[0]);
    else
        strcpy(temp,str[1]);
    if(strcmp(str[1],temp)>0)
        strcpy(temp,str[1]);
    printf("the largest string is:%s\n",temp);

    return 0;
}

运行结果:

15.输入4个整数,找出其中最大的数

#include <stdio.h>

int max1(int a,int b)
{
    if(a>b)
        return a;
    else
        return b;
}
int main()
{
    int a,b,c,d,m;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    m=max1(a,b);
    m=max1(m,c);
    m=max1(m,d);
    printf("max=%d\n",m);
    return 0;
}

运行结果:

16.5个学生,第5个比第四个大2岁,第四个比第三个大2岁,...,第一个为10岁。问第五个多大。递归实现。

#include <stdio.h>

int f(int n)
{
    if(n==1)
        return 10;
    else
        return f(n-1)+2;
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("第%d个学生:%d岁\n",n,f(n));

    printf("\n");
    return 0;
}

运行结果:

17.用递归求n!

#include <stdio.h>

int main()
{
    int i,n,sum=1;
    scanf("%d",&n);
    for(i=1; i<=n; i++)
        sum=sum*i;
    printf("%d!=%d\n",n,sum);
    return 0;
}
#include <stdio.h>

int f(int n)
{
    if(n==0||n==1)
        return 1;
    else
        return f(n-1)*n;
}
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d!=%d\n",n,f(n));

    printf("\n");
    return 0;
}

运行结果:

18.汉诺塔问题

#include <stdio.h>

void hanoi(int n,char one,char two,char three)
{
    if(n==1)
        printf("%c-->%c\n",one,three);
    else
    {
        hanoi(n-1,one,three,two);
        printf("%c-->%c\n",one,three);
        hanoi(n-1,two,one,three);
    }
}
int main()
{
    int m;
    scanf("%d",&m);
    hanoi(m,'A','B','C');

    printf("\n");
    return 0;
}

运行结果:

19.选择排序

#include <stdio.h>

int main()
{
    int a[10]= {2,3,4,7,6,5,1,8,10,9};
    int i,j,k,temp;
    for(i=0; i<9; i++)
    {
        k=i;
        for(j=i+1; j<10; j++)
        {
            if(a[j]<a[k])
                k=j;
        }
        if(k!=i)
        {
            temp=a[i];
            a[i]=a[k];
            a[k]=temp;
        }
    }
    for(i=0; i<10; i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}

运行结果:

20.有一个字符串,内有若干字符,现输入一个字符,要求程序将字符串中的该字符删去。

#include <stdio.h>

void delete_string(char str[],char ch)
{
    int i,j;
    for(i=0,j=0; str[i]!='\0'; i++)
    {
        if(str[i]!=ch)
            str[j++]=str[i];
    }
    str[j]='\0';
}
int main()
{
    char str[20],ch;
    gets(str);
    ch=getchar();
    delete_string(str,ch);
    printf("%s",str);

    printf("\n");
    return 0;
}

运行结果:

发布了462 篇原创文章 · 获赞 55 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/LY_624/article/details/104953402