C语言程序设计

时间:2021-06-03 23:37:54

1.

【问题描述】

输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)

要求

【数据输入】一个整数N。(N不大于30000)

数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。

解答:

#include <stdio.h>

void main(){

       int n,a,b,c,d,s,g,z;

       printf("请输入正整数z,7<=z<=30000\n");

       scanf_s("%d",&z);

       for(n=1;n<=z;n++)

       {

       a=n%7;

       b=n%10;

       c=(n-b)%10;

       d=(n-b-10*c)%100;

       s=(n-b-10*c-100*d)%1000;

       g=(n-b-10*c-100*d-1000*s)%1000;

       if(a==0 || b==7 || c==7 ||d==7 || s==7 || g==7)

       {

              printf("%d \n",n);

       }

       }

       getch();

}

运行结果:

C语言程序设计

2.

【问题描述】

数组排序:自主输入数组,找出第k大的数据,互换到位置k。

【样例输入】:1,54,6,23

【样例输出】:54,23,6,1

解答

#include <stdio.h>

#define N 80

void main()

{

       int i,j,k,n,tmp,imax,max,a[N];

       printf("请输入数组长度\n");

       scanf_s("%d",&k);

       for(i=0;i<k;i++)

       {

              printf("请输入数字\n");

              scanf_s("%d",&a[i]);

       }

       printf("原始数组为\n");

              for(n=0;n<k;n++)

              {

                     printf("%d",a[n]);

              }

              printf("\n");

       for(i=0;i<k;i++)

       {

              imax=i;max=a[i];

              for(j=i+1;j<=k;j++)

              {

                     if(a[i]<a[j])

                     {

                            imax=j;

                            max=a[j];

                     }

              }

              if(imax>i)

                     {

                            tmp=a[i];

                            a[i]=a[imax];

                            a[imax]=tmp;

                     }

       }

       printf("排序完成后\n");

       for(n=0;n<k;n++)

       {

              printf("%d ",a[n]);

       }

       getch();

}

运行结果:

C语言程序设计

3.

【问题描述】

对于给定的一个字符串,统计其中数字字符出现的次数。

数据输入】输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。

数据输出】对于每个测试实例,输出该串中数值的个数,每个输出占一行。

【样例输入】

2

asdfasdf123123asdfasdf

asdf111111111asdfasdfasdf

【样例输出】

6

9

解答:

#include<stdio.h>

 main()

 {

    intn,i,j,a;

    chars[1000];

    while(scanf("%d",&n)!=EOF)

    {

        getchar();

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

        {

            gets(s);

            a=0;

            for(j=0;s[j]!='\0';j++)

            {

                if((s[j]<='9')&&(s[j]>='0'))

                a=a+1;

            }

            printf("%d\n",a);

        }

    }

       getch();

 }

运行结果:

C语言程序设计

4.

【问题描述】

多项式的描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...
现在请求出该多项式的前n项的和。

数据输入】输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和。

数据输出】对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。

【样例输入】

2

1 2

【样例输出】

1.00

0.50

解答:

#include<stdio.h>

#include<math.h>

main()

{

    doublem,n,i,s,j,k,a;

    while(scanf("%lf",&m)!=EOF)

    {

        for(i=0;i<m;i++)

        {

            s=0;

            scanf("%lf",&n);

            for(j=1;j<=n;j++)

                s=s+1/j*pow(-1,j+1);

            printf("%.2lf\n",s);

        }

    }

       getch();

}

运行结果:

C语言程序设计

5.

【问题描述】

给定一个日期,输出这个日期是该年的第几天。

数据输入】输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input,另外,可以向你确保所有的输入数据是合法的。

数据输出】对于每组输入数据,输出一行,表示该日期是该年的第几天。

【样例输入】

1985/1/20

2006/3/12

【样例输出】

20

71

解答:

#include<stdio.h>

main()

{

    inta,b,c,d,e,f,g;

    while(scanf("%d/%d/%d",&a,&b,&c)!=EOF)

    {

        if(b==1)

        d=c;

        else if(b==2)

        d=31+c;

        else if(b==3)

        d=31+28+c;

        else if(b==4)

        d=31+28+31+c;

        else if(b==5)

        d=31+31+28+30+c;

        else if(b==6)

        d=31+28+31+30+31+c;

        else if(b==7)

        d=31+28+31+30+31+30+c;

        else if(b==8)

        d=31+28+31+30+31+30+31+c;

        else if(b==9)

        d=31+28+31+30+31+30+31+31+c;

        else if(b==10)

        d=31+28+31+30+31+30+31+31+30+c;

        else if(b==11)

        d=31+28+31+30+31+30+31+31+30+31+c;

        else if(b==12)

        d=31+28+31+30+31+30+31+31+30+31+c+30;

          e=a%100;

        f=a%400;

        g=a%4;

        if(e==0)

        {

            if(f==0)

            d=1+d;

            else

            d=d;

        }

        else if(g=0)

        d=d+1;

        else

        d=d;

        printf("%d\n",d);

    }

       getch();

}

运行结果:

C语言程序设计

6.

【问题描述】

定义5乘5的二维数组,所编程序的功能是将数组左下三角中的元素值全部变成0.

【样例输入】:

1 7 4 0 9

4 8 8 2 4

5 5 1 7 1

1 5 2 7 6

1 4 2 3 6

【样例输出】:

0 7 4 0 9

0 0 8 2 4

0 0 0 7 1

0 0 0 0 6

0 0 0 0 0

解答:

#include <stdio.h>

#include <stdlib.h>

#define  N  5

int main ( )

{

    int  a[N][N], i, j;

    printf("初始值\n");

    for ( i=0;  i<N; i++ )

    {

        for ( j=0; j<N; j++ )

        {

            a[i][j] = rand()%10;

            printf( "%4d",a[i][j] );

        }

        printf("\n");

    }

    fun ( a );

    printf ("转换之后\n");

    for ( i=0;  i<N; i++ )

    {

        for ( j=0; j<N; j++ )

            printf( "%4d",a[i][j] );

        printf("\n");

    }

       getch();

}

int  fun ( int a[][N] )

{

    int i,j;

    for(i=0;i<N;i++)

    {

        for(j=0;j<=i;j++)

            a[i][j]=0;

    }

    return 1;

}

运行结果:

C语言程序设计

7.

【问题描述】

请编写程序,移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p<=n-1)的数组平移到数组的最后。

【样例输入】:数组为{1,2,3,4,5,6,7,8,9,10},p=3;

【样例输出】:5,6,7,8,9,10,1,2,3,4.

解答:

#include <stdio.h>

#define    N    80

void  fun(int  *w,int  p, int  n)

{

    int a[N];

    int i,j=0;

    for(i=0;i<p;i++)

        a[i]=w[i];

    for(i=p;i<n;i++)

        w[i-p]=w[i];

    for(i=n-p;i<n;i++)

        w[i]=a[j],j++;

}

void main()

{

    int  a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

    int  i,p,n=15;

    printf("Theoriginal data:\n");

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

        printf("%3d",a[i]);

    printf("\n\nEnter  p: ");

    scanf("%d",&p);

    fun(a,p,n);

    printf("\nThedata after moving:\n");

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

        printf("%3d",a[i]);

    printf("\n\n");

       getch();

}

运行结果:

C语言程序设计

8.

【问题描述】:由键盘输入字符串s,把字符s中所有的字母改写成该字母的下一个字母,如字母“z”改成“a”,其余不变。

【样例输入】:ME123asd

【样例输出】:NF123bte

解答:

#include   <string.h>

#include   <stdio.h>

#include   <ctype.h>

#define   N   81

void fun ( char  *s )

{

    int i;

    for(i=0;s[i]!='\0';i++)

    {

        if((s[i]>'a'-1&&s[i]<'z'+1)||(s[i]>'A'-1&&s[i]<'Z'+1))

        {

            if(s[i]=='z') s[i]='a';

            elseif(s[i]=='Z')s[i]='A';

            elses[i]++;

        }

    }

}

void main( )

{   char   a[N];

    printf ( "Entera string :\n" );

    gets ( a );

    printf ( "Theoriginal string is :\n" );

    puts( a );

    fun ( a );

    printf ( "Thestring after modified :\n");

    puts ( a );

    getch();

运行结果:

C语言程序设计

9.

【问题描述】:自主输入字符串s,并将其中的内容逆置后前后对比输出。

【样例输入】:asdqwe

【样例输出】:ewqdsa

解答:

#include   <stdio.h>

#include   <string.h>

#define   N   81

void fun ( char  *s )

{

    chartmp[N];

    inti,j,len;

    for(len=0;s[len]!='\0';len++);

    j=len-1;

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

    {

        tmp[i]=s[j];

        j--;

    }

    tmp[len]='\0';

    strcpy(s,tmp);

}

void main( )

char   a[N];

    printf ( "Enter  a string :\n" );

    gets ( a );

    printf ( "Theoriginal string is :\n" );

    puts( a );

    fun ( a );

    printf("\n");

    printf ( "Thestring after modified :\n");

    puts ( a );

     getch();

}

运行结果:

C语言程序设计

10.

【问题描述】

自主输入字符串s,统计其中“a”到“z”26个字母各自出现的次数,并依次放在sd所指数组中并输出。

【样例输入】:qwavxeertyasdzxc

【样例输出】:2 0 1 1 2 0 0 0 0 0 0 0 0 0 0 0 1 01 1 0 1 1 1 1 1

解答:

#include <stdio.h>

void fun(char *s,int sd[])

{

    int i,tmp;

       for(i=0;i<26;i++)

       {

              sd[i]=0;

       }

    for(i=0;s[i]!='\0';i++)

    {

        tmp=s[i]-'a';

        if(tmp>=0&& tmp<27)

        {

            sd[tmp]++;

        }

    }

}

void main( )

       char aa[1000];

       int  bb[26],k,n;

    printf("\nPleaseenter a char string:\n") ;

    scanf("%s",aa);

    fun(aa,bb);

    for(k=0;k<26;k++)

        printf("%d",bb[k]);

    printf("\n");

       getch();

运行结果:

C语言程序设计

11.

【问题描述】:输入只包含字母和*号的字符串s,并将字符串中的前导*号全部移到字符串的尾部。

【样例输入】:*****awe**rt

【样例输出】:awe**rt*****

解答:

#include <stdio.h>

void  fun( char *a )

{

    inti,len,j;

    for(len=0;a[len]!='\0';len++);

    for(i=0;a[i]=='*';i++);

    for(j=i;j<len;j++)

    {

        a[j-i]=a[j];

    }

    for(j=len-i;j<len;j++)

    {

        a[j]='*';

    }

}

int main()

char  s[81],*p;

    int  n=0;

    printf("Entera string:\n");

    gets(s);

    fun( s );

    printf("Thestring after moveing:\n");

    puts(s);

       getch();

}

运行结果:

C语言程序设计