播客 > 没文化  >  c语言程序设计竞赛(1)  | 登录  | RSS订阅地址  | Code平台

c语言程序设计竞赛(1)

第一场 程序设计竞赛
2003年6月26日

学号              姓名            学院            成绩           

注意事项:1. 请先用DOS的EDIT文本编辑器在考盘上建一个文件,文件名为: TEST.TXT
2. 上述TEST.TXT文件的内容应有2行:
第一行是:你的学号及姓名的汉语拼音码。如:
                01123456 zhangsan
             第二行是:场次-考场号-座机号-考卷类。如:
      2-D317-10-B    表示第二场,D317考场,10号机,B卷。
座机号末位是单数,考A卷; 座机号末位是双数,考B卷。
3. 源程序必须存入考盘。文件名为:场次-卷类-题号.C。如:
                   2-B-3.C   是第二场B卷第3题的源程序。
4. 必须严格按题目要求的输出格式来输出。
5. 阅卷时以程序的运行结果为准。

A 卷
1.    编一个程序,输入一个字符串,内容依次是学号(8位)和姓名的汉语拼音码。经处理后,输出一个字符串,内容依次为,姓名,一个空格,学号。(30分)
2.    求0~1000中能同时被7和13整除的那些数之和。打印输出这个和,不要有其它字符。(30分)
3.    用两分法解函数方程 x2-sinx=0 在(0, 3.1416) 中的一个根,精度高于10 -4,输入初始边界值用空格隔开。打印输出这根,不要有其它字符。(40分)

B 卷
1.    编一个程序,输入一个字符串,其内容依次是姓名的汉语拼音码和学号(8位)。输出一个字符串,内容依次为,学号,两个*号,姓名。(30分)
2.    编程序,输入10个正整数,输出其中的素数之和,不要有其它字符。(30分)
3.    用牛顿法解代数方程 x3-2x+1=0 在 0 附近的一个根,精度高于10 -4。打印输出这根,不要有其它字符。(40分)


附:两分法解方程  求一个实根
算法:
用两分法求方程 y=f(x) = 0 的近似根。
找两个近似根 x1和 x2,使有
y1和y2异号,如
 y1< 0,  y2> 0


求新的近似根,  x = (x1 + x2)/2
若 y=f(x)<0, 则 x1= x; y1= f(x);   
否则, x2= x; y2= f(x);
根所在的区间缩小一半。
重复计算新的近似根并估计偏差
直至 | x2 – x1|<1e-10。

牛顿法解方程  求一个实根
算法:方程y=f(x)=0 
求在x0 附近的一个实根。
   选一个近似根x0,求y0 =f(x0);
   过y0作f(x)的切线,交横轴于x1,
   以 x1为新的近似根,重复上述步骤
直至 | x2 – x1|<1e-10。递推公式如下:
  




 
第二场 程序设计竞赛
2003年6月26日

学号              姓名            学院            成绩           

注意事项:1. 请先用DOS的EDIT文本编辑器在考盘上建一个文件,文件名为: TEST.TXT
2. 上述TEST.TXT文件的内容应有2行:
第一行是:你的学号及姓名的汉语拼音码。如:
                01123456zhangsan
             第二行是:场次-考场号-座机号-考卷类。如:
      2-D317-10-B  表示第二场,D317考场,10号机,B卷。
座机号末位是单数,考A卷; 座机号末位是双数,考B卷。
3. 源程序必须存入考盘。文件名为:场次-卷类-题号.C。如:
                   2-B-3.C   是第二场B卷第3题的源程序。
4. 必须严格按题目要求的输出格式来输出。
5. 阅卷时以程序的运行结果为准。

A 卷
1.    编一个程序,输入两个字符串,第一个字符串的内容是英语短句,如 I am a boy, 第二个的内容依次为学号(8位)和姓名的汉语拼音码,将第二个字符串拼接在英语短句字符串后,成为一个字符串,并输出。(30分)
2.    编一个函数,计算x的n次方。调用此函数算7.01的5次方。打印输出结果,不要有其它字符。(30分)
3.    用两分法解代数方程 x3 - 2x + 1=0在[-2, 0] 中的一个根,精度高于10 –4,输入初始边界值用空格隔开。打印输出这根,不要有其它字符。(40分)

B 卷
1.编一个程序,输入两个字符串,第一个的内容是英语短句,如I am a girl, 第二个的内容依次为学号(8位)和姓名的汉语拼音码,把第一个字符串拼接到第二个字符串的后面并输出。(30分)
2.    有整型数组,长度为10,输入数组各元后,求数组各元的平均值,并找出最偏离平均值的那个元。打印输出上述两个结果,用逗号隔开,不要有其它字符。(30分)
3.    用牛顿法解函数方程 2x – e - x  = 0 在 1 附近的一个根,精度高于10 - 4。打印输出这根,不要有其它字符。(40分)

附:两分法解方程  求一个实根
算法:
用两分法求方程 y=f(x) = 0 的近似根。
找两个近似根 x1和 x2,使有
y1和y2异号,如 y1< 0,  y2> 0
求新的近似根,  x = (x1 + x2)/2
若 y=f(x)<0, 则 x1= x; y1= f(x);   
否则, x2= x; y2= f(x);
根所在的区间缩小一半。
重复计算新的近似根并估计偏差
直至 | x2 – x1|<1e-10。

牛顿法解方程  求一个实根
算法:方程y=f(x)=0 
求在x0 附近的一个实根。
   选一个近似根x0,求y0 =f(x0);
   过y0作f(x)的切线,交横轴于x1,
   以 x1为新的近似根,重复上述步骤…

 


第三场 程序设计竞赛
2003年6月26日

学号              姓名            学院            成绩           

注意事项:1. 请先用DOS的EDIT文本编辑器在考盘上建一个文件,文件名为: TEST.TXT
2. 上述TEST.TXT文件的内容应有2行:
第一行是:你的学号及姓名的汉语拼音码。如:
                01123456 zhangsan
             第二行是:场次-考场号-座机号-考卷类。如:
      2-D317-10-B    表示第二场,D317考场,10号机,B卷。
座机号末位是单数,考A卷; 座机号末位是双数,考B卷。
3. 源程序必须存入考盘。文件名为:场次-卷类-题号.C。如:
                   2-B-3.C   是第二场B卷第3题的源程序。
4. 必须严格按题目要求的输出格式来输出。
5. 阅卷时以程序的运行结果为准。

A 卷
1.    编一个程序,输入一个字符串,其内容依次是学号(8位)和姓名的汉语拼音码,把姓名和学号交换位置后成为一个新字符串,并输出。(30分)
2.    读入20个整数,统计非负数个数,计算非负数之和。打印输出上述两个结果,用逗号隔开,不要有其它字符。(30分)
3.    用牛顿法解函数方程  x2-sin x=0在 1 附近的一个根,精度高于10 -4。打印
输出这根,不要有其它字符。(40分)

B 卷
1.    编一个程序,输入一个字符串,其内容依次是姓名的汉语拼音码和学号(8位),把姓名和学号交换位置后成为一个新字符串,并输出。(30分)
2.    整型数组,长度为10,输入数组各元后,求数组各元的平均值,并找出最接近平均值的那个元。打印输出上述两个结果,用逗号隔开,不要有其它字符。(30分)
3.    两分法解函数方程 2x - e –x = 0的根,精度高于10 –4,输入初始边界值用空格隔开。打印输出这根,不要有其它字符。(40分)

附:两分法解方程  求一个实根
算法:
用两分法求方程 y=f(x) = 0 的近似根。
找两个近似根 x1和 x2,使有
y1和y2异号,如
 y1< 0,  y2> 0




求新的近似根,  x = (x1 + x2)/2
若 y=f(x)<0, 则 x1= x; y1= f(x);   
否则, x2= x; y2= f(x);
根所在的区间缩小一半。
重复计算新的近似根并估计偏差
直至 | x2 – x1|<1e-10。

牛顿法解方程  求一个实根
算法:方程y=f(x)=0 
求在x0 附近的一个实根。
   选一个近似根x0,求y0 =f(x0);
   过y0作f(x)的切线,交横轴于x1,
   以 x1为新的近似根,重复上述步骤… 
 

点击浏览该文件
天气:大雨,ccdot发表于2005-11-29 20:53:43,阅读了3597次,共有个1回复.

程序设计竞赛(初赛)(参考答案)
2003年6月26日
/*1-A-1*/
void my_strcat(char *str1,char *str2)
{  char *p=str1;
   while(*p) p++;
   while(*p++=*str2++);
}
main()
{  char a[80],b[80],*p=a;
   int i=0;
   gets(a);
   while(*p) p++;
   *p=' ';
   *(p+1)='\0';
   p=a;
   /*while(*p>='0'&&*p<='9') */
   while(i<8)
   {  b[i]=*p;
      p++; i++;
   }
   b[i]='\0';
   my_strcat(p,b);
   puts(p);
}
/*1-A-1*/
main()
{  char a[80],b[80];
int i,j=0;
   gets(a);
   for(i=8;a[i];i++)
b[j++]=a[i];
   b[j++]=’ ’;
   for(i=0;i<8;i++)
b[j++]=a[i];
   b[j]=’\0’;
   puts(b);
}
/*1-A-2*/
main()
{   int a,s=0;
    for(a=0;a<=1000;a++)
    if(a%7==0&&a%13==0)
       s=s+a;
    printf("%d\n",s);
}
/*1-A-3*/
#include <math.h>
double fun(double x)
{  return x*x-sin(x); }
main()
{ double x,x1,x2,y,y1,y2;  int i=0;
  printf("input x1, x2:");
  scanf("%lf%lf", &x1, &x2);
  y1=fun(x1); y2=fun(x2);
  printf("y1=%lf, y2=%lf\n", y1, y2);
  do{  x=(x1+x2)/2;  y=fun(x);
       if(y*y1>0) x1=x;
       else x2=x;
       i++;
       if(!i)
       {  printf("no result. i>32767.\n"); break;  }
    }  while(fabs(x1-x2)>1.e-4);
  if(i)
     printf("%lf\n", x2);
}
/*1-B-1*/
void my_strcat(char *str1,char *str2)
{  char *p=str1;
   while(*p) p++;
   while(*p++=*str2++);
}
main()
{  char a[80],b[80],*p=a;
   int i=0;
   gets(a);
   while(*p) p++;
   *p='*';
   *(p+1)='*';
   *(p+2)='\0';
   p=a;
   while(!(*p>='0'&&*p<='9'))
   {  b[i]=*p;
      p++; i++;
   }
   b[i]='\0';
   my_strcat(p,b);
   puts(p);
}
/*1-B-1*/
#include “string.h”
main()
{  char a[80],b[80];
int i,j=0;
   gets(a);
   for(i=strlen(a)-8;a[i];i++)
b[j++]=a[i];
   b[j++]=’*’;
b[j++]=’*’;
   for(i=0;i< strlen(a)-8;i++)
b[j++]=a[i];
   b[j]=’\0’;
   puts(b);
}
/*1-B-2*/
int prime(int m)
{  int i;
   if(m<1) { printf("input error.\n"); return 0; }
   if(m==1) return 0;
   for(i=2;i<=m/2;i++)
      if(m%i==0) break;
   if(i>m/2) return 1;
   else return 0;
}
main()
{  int a[10],i,s=0;
   for(i=0;i<10;i++) scanf("%d",a+i);
   for(i=0;i<10;i++)
      if(prime(a[i])) s+=a[i];
   printf("%d\n",s);
}
/*1-B-3*/
#include <math.h>
double fun(double x)
{   return x*x*x-2*x+1;  }
double der(double x)
{   return 3*x*x-2;  }
main()
{  double x1,x2,y1,y2;
   int i=0;
   printf("input a approximate root.\n");
   scanf("%lf",&x2);
   do{  x1=x2;
        y1=fun(x1);
        x2=x1-y1/der(x1);
        ++i;
     } while(fabs(x1-x2)>1.e-4);
   printf("%lf\n",x2);
}
/*2-A-1*/
void my_strcat(char *str1,char *str2)
{  char *p=str1;
   while(*p) p++;
   while(*p++=*str2++);
}
main()
{  char a[80],b[80];
   gets(a);
   gets(b);
   my_strcat(a,b);
   puts(a);
}
/*2-A-1*/
#include “string.h”
main()
{  char a[80],b[80];
   gets(a);
   gets(b);
   strcat(a,b);
   puts(a);
}
/*2-A-2*/
double my_pow(double x,int n)
{   double p=1;
    int i;
    for(i=1;i<=n;i++)
       p=p*x;
    return p;
}
main()
{  int n=5;
   double x=7.01;
   printf("%lf\n",my_pow(x,n));
}
/*2-A-3*/
#include <math.h>
double fun(double x)
{  return x*x*x-2*x+1; }
main()
{ double x,x1,x2,y,y1,y2;  int i=0;
  printf("input x1, x2:");
  scanf("%lf%lf", &x1, &x2);
  y1=fun(x1); y2=fun(x2);
  printf("y1=%lf, y2=%lf\n", y1, y2);
  do{  x=(x1+x2)/2;  y=fun(x);
       if(y*y1>0) x1=x;
       else x2=x;
       i++;
       if(!i)
       {  printf("no result. i>32767.\n"); break;  }
    }  while(fabs(x1-x2)>1.e-4);
  if(i)
  printf("%lf\n", x2);
}
/*2-B-1*/
void my_strcat(char *str1,char *str2)
{  char *p=str1;
   while(*p) p++;
   while(*p++=*str2++);
}
main()
{  char a[80],b[80];
   gets(a);
   gets(b);
   my_strcat(b,a);
   puts(b);
}
/*2-B-1*/
#include “string.h”
main()
{  char a[80],b[80];
   gets(a);
   gets(b);
   strcat(b,a);
   puts(b);
}

/*2-B-2*/
#include <math.h>
main()
{   int a[10],i,jmax,b,c;
    float error;
    float av=0.,max;
    for(i=0;i<10;i++)
    {  scanf("%d",a+i);
       av+=a[i];
    }
    av/=10;
    max=fabs(a[0]-av); jmax=0;
    for(i=1;i<10;i++)
    {   error=fabs(a[i]-av);
        if(error>max)  {  max=error; jmax=i; }
    }
    printf("%f,%d ",av+1,a[jmax]);
}
/*2-B-3*/
#include <math.h>
double fun(double x)
{   return 2*x-exp(-x);  }
double der(double x)
{   return 2+exp(-x);  }
main()
{  double x1,x2,y1,y2;
   int i=0;
   printf("input a approximate root.\n");
   scanf("%lf",&x2);
   do{  x1=x2;
        y1=fun(x1);
        x2=x1-y1/der(x1);
        ++i;
     } while(fabs(x1-x2)>1.e-4);
   printf("%lf\n",x2);
}
/*3-A-1*/
void my_strcat(char *str1,char *str2)
{   char *p=str1,*q;
    while(*p)
      p++;
    while(*p++=*str2++);
}
main()
{   char s1[80],s2[80],*p,*q=s2;
    gets(s1);
    p=s1+8;
    while(*q++=*p++);
    s1[8]='\0';
    my_strcat(s2,s1);
    puts(s2);
}
/*3-A-1*/
main()
{  char s1[80],s2[80];
int i,j=0;
   gets(s1);
   for(i=8;a[i];i++)
s2[j++]=s1[i];
   for(i=0;i<8;i++)
s2[j++]=s1[i];
   s2[j]=’\0’;
   puts(s2);
}
/*3-A-2*/
main()
{  int a[20],i,count=0,sum=0;
   for(i=0;i<20;i++)
   {   scanf("%d",a+i);
       if(a[i]>=0)
       {  count++;
          sum+=a[i];
       }
   }
   printf("%d,%d\n",count,sum);
}
/*3-A-3*/
#include <math.h>
double fun(double x)
{   return x*x-sin(x);  }
double der(double x)
{   return 2*x-cos(x);  }
main()
{  double x1,x2,y1,y2;
   int i=0;
   printf("input a approximate root.\n");
   scanf("%lf",&x2);
   do{  x1=x2;
        y1=fun(x1);
        x2=x1-y1/der(x1);
        ++i;
     } while(fabs(x1-x2)>1.e-4);
   printf("%lf\n",x2);
}
/*3-B-1*/
void my_strcat(char *str1,char *str2)
{   char *p=str1,*q;
    while(*p)
      p++;
    while(*p++=*str2++);
}
main()
{   char s1[80],s2[80],*p=s1,*q=s2,*r;
    gets(s1);
    while(!(*p>='0'&&*p<='9')) p++;
    r=p;
    while(*q++=*p++);
    *r='\0';
    my_strcat(s2,s1);
    puts(s2);
}
/*3-B-1*/
#include “string.h”
main()
{  char s1[80],s2[80];
int i,j=0;
   gets(s1);
   for(i=strlen(s1)-8;s1[i];i++)
s2[j++]=s1[i];
   for(i=0;i< strlen(a)-8;i++)
s2[j++]=s1[i];
   s2[j]=’\0’;
   puts(s2);
}
/*3-B-2*/
#include <math.h>
main()
{  int a[10],i,imin;
   float av=0,error,min;
   for(i=0;i<10;i++)
   {   scanf("%d",a+i);
          av+=a[i];
   }
   av=av/10;
   imin=0;
   min=fabs(av-a[0]);
   for(i=1;i<10;i++)
   if(fabs(av-a[i])<min)
   {   min=fabs(av-a[i]);
       imin=i;
   }
   printf("%f,%d\n",av,a[imin]);
}
/*3-B-3*/
#include <math.h>
double fun(double x)
{  return 2*x-exp(-x); }
main()
{ double x,x1,x2,y,y1,y2;  int i=0;
  /*printf("input x1, x2:");*/
  scanf("%lf%lf", &x1, &x2);
  y1=fun(x1); y2=fun(x2);
  /*printf("y1=%lf, y2=%lf\n", y1, y2);*/
  do{  x=(x1+x2)/2;  y=fun(x);
       if(y*y1>0) x1=x;
       else x2=x;
       i++;
       if(!i)
       {  /*printf("no result. i>32767.\n");*/ break;  }
    }  while(fabs(x1-x2)>1.e-4);
  if(i)
  printf("%lf\n", x2);
}

ccdot post in 2005-11-29 20:54:29 #1  
  1. 想要转载我文章的人滚远远的,能想多远,就滚多远。
  2. 不要提交任何带有网址URL信息的评论.
  3. 需要更多信息?请使用站内搜索,郁闷了?听听我在听什么吧!
用户名:*验证:看不清楚请点击刷新验证码*
内容: