复习题

题目描述

有一个圆,圆心坐标是(0,0),半径r=4.5,任意输入一个点的坐标(x,y),判断这个点是在圆内,圆周上,还是在圆外。

输入要求

两个浮点数x,y

输出要求

如果在圆内,输出in

如果在圆外,输出out

如果在圆上,输出on

假如输入

1.0 1.0

应当输出

in

#include<stdio.h>

#include<stdio.h>

int cmp(const void*a,const void*b)

{

   return *(int*)a-*(int*)b;

}

int main(){

   int n,t,i,m=0,it[501];

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

      m=0;

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

         scanf("%d",it+i);

      qsort(it,n,sizeof(int),cmp);

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

         if(it[i]>t)t+=2;

         else m++;

         t+=m;

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

   return 0;

}
 

 

题目描述
用下面公式求π的近似值。π/41-1/3+1/5-1/7+…直到最后一项的绝对值小于10的-n次方为止(绝对值小于10的-n次方的这项不计算在内)。

输入要求

输入若干组精度要求n(3<=n<=8),n=0时退出,n超出范围输出“Error!”。

输出要求

输出各组不同精度要求的值。

假如输入

7

0

应当输出

3.141592

#include <stdio.h>

#include <math.h>

 

int main( )

{

   int k,s=1;

   double n,t,pi;

   scanf("%d",&k);

   while (k!=0)

   { 

      if (k>=3 && k<=8)

      {

         n=1,t=1,pi=0;

         while((fabs(t))>pow(10,-k))

         {

            pi=pi+t;

            n=n+2;

            s=-s;

            t=s/n;

         }

         pi=pi*4;

         printf("%lf\n",pi);

      }

      else

         printf("Error!\n");

      scanf("%d",&k);

   }

   return 0;

}
 

 

题目描述
 著名意大利数学家斐波那契(Fibonacci)1202年提出一个有趣的问题。

某人想知道一年内一对兔子可以生几对兔子。他筑了一道围墙,把一对大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生后第三个月即可成为“大兔”再生小兔。问一对小兔一年能繁殖几对小兔?

输入要求

多个正整数n(1<=n<=80),表示需要求第n个月新增的兔子对数。

输出要求

 对于输入的n,求第n个月新增的兔子对数。当n=0时输入结束,该数据不作处理。

假如输入

16

0

应当输出

987

#include <stdio.h>

 

int main(){

#ifndef ONLINE_JUDGE

   freopen("in", "r", stdin);

#endif

 

   // r[i][0] is the number of rabbits which born on current month

   // r[i][1] is the number of rabbits which are 2 months old

   // r[i][2] is the number of rabbits which are  months old (old rabbits can fertility bunny)

   long long r[81][3] = {{0,0,1}};

   for(int i=1; i<=80; i++){

      r[i][1] = r[i-1][0];

      r[i][2] = r[i-1][1] + r[i-1][2];

      r[i][0] = r[i][2];

   }

   int n;

   while(scanf("%d", &n), n){

      printf("%lld\n", r[n][0]);

   }

 

   return 0;

}
 

 

题目描述
  输入三个自然数N,i,j(l≤i≤N,1≤j≤N),输出在一个N×N格的棋盘中,与格子(i,j)同行、同列、同一对角线的所有格子的位置。例如,n=4,i=2,j=3表示棋盘中的第二行第三列的格子,如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子,如下图:

当n=4,i=2,j=3时,输出的结果是:
(2,1) (2,2) (2,3) (2,4) {同一行上格子的位置}
(1,3) (2,3) (3,3) (4,3) {同列列上格子的位置}
(1,2) (2,3) (3,4) {左上到右下对角线上的格子的位置}
(4,1) (3,2) (2,3) (1,4) {左下到右上对角线上的格子的位置}

输入要求

只有1行,共3个数,分别为N(1≤N≤10000),i,j的值。

输出要求

按照题目描述的格式输出。

假如输入

4 2 3

应当输出

(2,1)(2,2)(2,3)(2,4)

(1,3)(2,3)(3,3)(4,3)

(1,2)(2,3)(3,4)

(4,1)(3,2)(2,3)(1,4)

#include<stdio.h>

#include<string.h>

int main(){

   int N,a,b,c,d;

   while(scanf("%d%d%d",&N,&a,&b)!=EOF){

      c=b-a;

      d=b+a;

      int i,j;

      for(i=1;i<=N;i++) printf("(%d,%d)",a,i);

      puts("");

      for(i=1;i<=N;i++) printf("(%d,%d)",i,b);

      puts("");

      for(i=1;i<=N;i++) if(i+c>=1&&i+c<=N) printf("(%d,%d)",i,i+c);

      puts("");

      for(i=N;i>=1;i--) if(d-i>=1&&d-i<=N) printf("(%d,%d)",i,d-i);

      puts("");}

   return 0;

}
 

 

题目描述
输入整数R,输出小于等于R的满足X2+Y2=Z2的所有正整数X,Y,Z。

输入要求

只有一个数:R(5≤R≤I000000)。

输出要求

只有一个数:表示共有多少组满足条件的勾股数。

假如输入

10

应当输出

2

#include<stdio.h>

#include<math.h>

int main()

{ 

   int r,i=0,x,y,z;

   scanf("%d",&r);

   for(x=1;x<=r;x++){

      for(y=1;y<=r;y++){

         for(z=1;z<=r;z++){

            if(x*x+y*y==z*z)

                i=i+1;

         }

      }

   }

   i=i*0.5;

   printf("%d",i);

   return 0;

}
 

 

题目描述
桐桐在研究素数时,发现有些素数很特别,例如131,它是素数,同时,它又是回文数:从左边读和从右边读都是同一个数。桐桐想把不大于n的所有既是回文数又是素数的数求出来,你能帮助她吗?

输入要求

输入数据有多组,每组只有一个整数n(2≤n≤10^6)。

输出要求

输出满足题设条件的数,每行输出5个数。

假如输入

100

应当输出

2 3 5 7 11

#include<stdio.h>

#include<math.h>

int prime(int m);

int isCircle(int m);

int reverse(int i);

 

int main( )

{

   int m,count;

   long n;

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

      count=0;

      for(m=2;m<=n;m++)

      {

         if(prime(m)!=0)

         {

            if(isCircle(m))

            {

                if (count==0) printf("%d",m);

                else printf(" %d",m);

                count++;

                if (count==5) {printf("\n",m);count=0;}

 

            }

         }

      }

      if (count!=0) printf("\n",m);

   }

   return 0;

}

 

int prime(int m)

{

   int i,n;

   if(m==1)  return 0;

   n=sqrt(m);

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

      if(m%i==0)

      {

         return 0;

      }

      return 1;

}

int isCircle(int m)

{

   int a;

   a=reverse(m);

   if(a==m)

      return 1;

   else

      return 0;

}

 

int reverse(int i)

{

   int a,j=0;

   a=i;

   while(a)

   {

      j=j*10+a%10;

      a=a/10;

   }

   return j;

}
 

 

题目描述
用泰勒展开式计算sin和cos值,当最后一项的绝对值小于0.00001时,累加结束

输入

输入两个正整数x和y,中间有一个空格

输出

sin(x)和cos(y),中间有一个空格

输入

30

30 

输出

0.500000

0.866025

提示:

const double PI=3.1415926;

弧度计算公式:x*PI/180, 其x代表你的输入;

代码

#include<stdio.h>

const double PI=3.1415926;  

double mysin(double);  

double mycos(double);  

double myabs(double);  

int main( )  

{

    double a,b;

    scanf_s("%lf%lf",&a,&b);

    printf("%.6lf\n",mysin(PI*a/180));

    printf("%.6lf\n",mycos(PI*b/180));

    return 0;  

}  

 

double mysin(double x)  

{  

    double sum=x,x_pow=x,item=x;  

    int n=1,s=1,a=1;        

    while(myabs(item)>0.00001)  

    {  

        s=s*(n+1)*(n+2);

        x_pow*=x*x;

        a=(-1)*a;

        item =x_pow/s*a;

        sum+=item;

        n+=2;  

    }  

    return sum;  

}  

 

double mycos(double x)  

{  

    double sum=1,x_pow=1,item;  

    int n=0,s=1,a=-1;  

    do  

    {  

        s=s*(n+1)*(n+2);  

        x_pow*=x*x;  

        item =x_pow/s*a;  

        sum+=item;  

        a=(-1)*a;  

        n+=2;  

    }while(myabs(item)>0.00001);  

    return sum;  

}  

 

double myabs(double x)  

{  

    return ((x>=0)?x:-x);  

}  
 

题目描述
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。

输入要求

输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)

输出要求

对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;

如果给定的范围内不存在水仙花数,则输出no;

每个测试实例的输出占一行。

假如输入

100 120

300 400

121 200

应当输出

no

370 371

153

提示

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

 
 
#include <stdio.h>

int main()

{

    int m,n;

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

    {

        int i,j,count=0,b[3],a[5],t;

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

            b[0] = i/100;

            b[1] = i/10%10;

            b[2] = i%10;

            t = b[0]*b[0]*b[0]+b[1]*b[1]*b[1]+b[2]*b[2]*b[2];

            if (i==t) a[count++] = i;

        }

        for (j=0; j<count-1; j++)

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

        if (count) printf("%d\n",a[count-1]);

        else printf("no\n");

    }

    return 0;

}
 

 

题目描述

有4个互不相同的数字,输出由其中三个不重复数字组成的排列。

输入要求

4个整数。

输出要求

所有排列。

假如输入

1 2 3 4

应当输出

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

1 2 4

1 4 2

2 1 4

2 4 1

4 1 2

4 2 1

1 3 4

1 4 3

3 1 4

3 4 1

4 1 3

4 3 1

2 3 4

2 4 3

3 2 4

3 4 2

4 2 3

 

复制代码
#include<stdio.h>

main()

{

   int i,j,k,t,n,a[5];

   scanf("%d%d%d%d",&a[1],&a[2],&a[3],&a[4]);

   for(i=4;i>0;i--)

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

         if(i!=j)for(k=1;k<=4;k++)

            if(k!=i&&k!=j)for(t=1;t<=4;t++)

                if(t!=k&&t!=i&&t!=j)

                   printf("%d %d %d\n",a[j],a[k],a[t]);

}
复制代码

 

题目描述

输入N*N的矩阵,输出它的转置矩阵。

输入要求

第一行为整数N(1<=N<=10)。接着是一个N*N的矩阵。

输出要求

转置矩阵。

假如输入

2

1 2

1 2

应当输出

1 1

2 2

提示

 

复制代码
 1 #include <string.h>
 2 #include <stdio.h>
 3 main()
 4 {
 5     int i,j,n,a[100][100];
 6     scanf("%d",&n);
 7     for(i=0;i<n;i++)
 8         for(j=0;j<n;j++)
 9             scanf("%d",&a[i][j]);
10     for(i=0;i<n;i++)
11         for(j=0;j<n;j++)
12         {
13             printf("%d",a[j][i]);
14             // 格式输出
15             if(j==n-1)         // 如果j==n-1代表是数组最后一个元素
16                 printf("\n"); // 如果是最后一个元素换行
17             else
18                 printf(" ");  // 如果不是最后一个元素, 输出空格
19 
20         }
21 }
复制代码

 

 

 

题目描述

编制程序,输入m,n(M>=n>=0)后,计算下列表达式的值并输出:

         m!         

n! (m-n)!

要求将计算阶乘运算的函数写为fact(n),函数返回值的类型为float

输入要求

m n

输出要求

对应表达式的值

假如输入

2 1

应当输出

2

提示

#include <stdio.h>

float fact(int n)

{

   if(n<=1)

      return 1.0;

   return n*fact(n-1);

}

int main()

{

   int m,n;

   scanf("%d%d",&m,&n);

   printf("%.0lf\n",fact(m)/fact(n)/fact(m-n));

   return 0;

}

 

题目描述

编制程序,统计文本stdin中字符$出现的次数,并将结果写入文件stdout

输入要求

字符文本

输出要求

$次数

假如输入

as$dfkjhkjkjdhf

asdfkj$lskdfj

werijweirjo$wie

应当输出

3

#include <stdio.h>

int main()

{

   char tmp[1000];

   int sum = 0, i;

   while(gets_s(tmp)) // Ctrl+Z

   {

      i = 0;

      while(tmp[i])

      {

         sum += tmp[i++]=='$';

      }

   }

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

   return 0;

}

 

题目描述

编制程序,输入n个整数(n从键盘输入,n>0),输出它们的偶数和。

输入要求

n

n个整数

输出要求

其中偶数的和

假如输入

10

1 2 3 4 5 6 7 8 9 10

应当输出

30

#include<stdio.h>

int main()

{

   int n,x;

   int sum = 0;

   scanf("%d",&n);

   while(n--)

   {

      scanf("%d",&x);

      if(!(x&1))

         sum += x;

   }

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

   return 0;

}

 

题目描述

编制函数del_char

函数原型为 void del_char(char *,char),函数的功能是删除a指向的字符串中值为ch的字符,例如从字符串"AscADef"中删除'A'后,字符串为"scDef"。

输入要求

需要删除的字符ch

需要处理的字符串

输出要求

处理后的字符串

假如输入

A

AscADef

应当输出

scDef

#include <stdio.h>

void del_char(char *str,char ch)

{

   int i=0, j=0;

   while(str[i])

   {

      if(str[i]!=ch)

         str[j++] = str[i];

      i++;

   }

   str[j] = 0;

}

 

int main()

{

   char ch, str[1000];

   scanf("%c\n",&ch);

   gets(str);

   del_char(str,ch);

   puts(str);

 

   return 0;

}

 

题目描述

编程,输入n后:输入n个数,根据下式计算并输出y值。

     / x2-sinx    x<-2

y={  2x+x       -2<=x<=2

     |    ___________

     \ √  X2+X+1                  x>2

* 输出保留两位小数  

输入要求

n

n个数

输出要求

y

假如输入

1

1

应当输出

3.00

#include<stdio.h>

#include <math.h>

 

int main()

{

   double x,y;

   int n;

   scanf("%d",&n);

   while(n--)

   {

      scanf("%lf",&x);

      if(x < -2) {

         y = pow(x,2.0)-sin(x);

      }

      else if(x <= 2) {

         y = pow(2.0,x)+x;

      }

      else {

         y = sqrt(pow(x,2.0)+x+1);

      }

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

   }

   return 0;

}

 

题目描述

编制函数,其功能是在float类型一维数组中查找最大值、最小值,并将它们返回到调用程序。

* 输出保留两位小数

输入要求

n

n个浮点数

输出要求

最大值 最小值

假如输入

10

1.0

2.0

3.0

4.0

5.0

6.0

7.0

8.0

9.0

10.0

应当输出

10.00 1.00

#include <stdio.h>

float Min(float * a,int n)

{

   int i;

   float fMin = a[0];

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

   {

      if(fMin > a[i])

         fMin = a[i];

   }

 

   return fMin;

}

 

float Max(float * a,int n)

{

   int i;

   float fMax = a[0];

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

   {

      if(fMax < a[i])

         fMax = a[i];

   }

 

   return fMax;

}

 

int main()

{

   int i,n;

   float a[1000];

   scanf("%d",&n);

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

   {

      scanf("%f",&a[i]);

   }

   printf("%.2f %.2f\n",Max(a,n),Min(a,n));

 

   return 0;

}

 

题目描述

输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。

输入要求

一行字符

输出要求

统计值

假如输入

aklsjflj123 sadf918u324 asdf91u32oasdf/.';123

应当输出

23 16 2 4

#include <stdio.h>

int main()

{

    int nEnglish=0,nSpace=0,nNumber=0,nOther=0;

    int i=0;

    char chString[1000];

    gets(chString);

    while('\0' != chString[i])

    {

        if(chString[i]>='A'&&chString[i]<='Z' || chString[i]>='a'&&chString[i]<='z')

        {

            nEnglish ++;

        }

        else if(chString[i] == ' ')

        {

            nSpace ++;

        }

        else if(chString[i]>='0' && chString[i]<='9')

        {

            nNumber ++;

        }

        else

        {

            nOther ++;

        }     

        i++;

    }

    printf("%d %d %d %d\n",nEnglish,nNumber,nSpace,nOther);

 

    return 0;

}

 

题目描述

输入一个正整数n.求1+1/2!+1/3!+....+1/n!

要求定义并调用函数fact(n)计算n的阶乘,函数返回值的类型是点单精度浮点型。

* 输出保留4位小数

输入要求

正整数n

输出要求

数列之和

假如输入

2

应当输出

1.5000

#include <stdio.h>

 

float fact(int n)

{

   static float res = 1.0;

   res *= n;

 

   return res;

}

 

int main()

{

   int i,n;

   float res = 0;

   scanf("%d",&n);

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

   {

      res += 1.0/fact(i);

   }

   printf("%.4f\n",res);

 

   return 0;

}

 

 1 #include<stdio.h>
 2 int main(void)
 3 {
 4     int digit,other,letter,figur;
 5     char ch;
 6     int i;
 7     digit=letter=other=figur=0;
 8     printf("enter 10 characters:");
 9     for(i=1;i<=10;i++){
10         ch=getchar();
11         if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
12             letter++;
13         else if(ch>='0'&&ch<='9')
14             digit++;
15         else if((ch==' ')||(ch=='\n'))
16             figur++;
17         else
18             other++;
19     }
20     printf("letter=%d,digit=%d,other=%d,figur=%d\n",letter,digit,other,figur);
21     return 0;
22 }

 

 

posted @ 2013-12-19 09:11  zhaoyang16  阅读(1524)  评论(0编辑  收藏  举报