切换到宽版
  • 8583阅读
  • 3回复

第十三届全国青少年信息学奥林匹克联赛普及组C语言(程序题目部分) [复制链接]

上一主题 下一主题
离线zhoukq
 
只看楼主 倒序阅读 0 发表于: 2007-10-21
第十三届全国青少年信息学奥林匹克联赛
    普及组  C语言


1、#include<stdio.h>
int main( )
{int i,p[5],a,b,c,x,y=20;
for(i=0;i<=4;i++)
  scanf("%d",&p);
a=(p[0]+ p[1])+ (p[2]+ p[3] + p[4])/7;
b=p[0]+ p[1]/ (p[2]+ p[3]/p[4]);
c= p[0]* p[1]/ p[2];
x=a+b-p[(p[3]+3)%4];
if(x>10)
  y+=(b*100-a)/(p[p[4]%3]*5);
else
  y+=20+(b*100-c)/ (p[p[4]%3]*5);
printf(“%d,%d\n”,x,y);
return 0;
}
/*注:本例中,给定的输入数据可以避免分母为0或数组元素下标越界。*/
输入:66553
输出:输出我得14,42,不知道算对没?

————————————————————————————————————————————————————————————————————————————————————————
2、
#include <stdio.h>
Void fun (int *a,int *b)
{int *k;
K=a;a=b;b=k;
}
Main( )
{int a=3,b=6,*x=&a,*y=&b;
Fun(x,y);
Printf(“%d,%d”,a,b);
}
输出:算得3,6
————————————————————————————————————————————————————————————————————————————————————————

3、
3、#include“math.h”
#include“math.h”
main( )
{int  al[51]={0};
int  i,j,t,t2,n=50;
for  (i=2;i<=sqrt(n);i++)
  if(al=0)
{t2=n/I;
for(j=2;j++)  al[i*j]=1;
}
t=0;
for  (i=2;i<=n;i++)
if(al==0)
{printf(“%4d”,i); t++;
if(t%10==0)  printf(“\n”);
}
printf(“\n”);
}

输出:2    3    4  5    6  7    8  9  10  11
        12 13 14 15 16 17 18 19 20  21
        22 23 24 25 26 27 28 29 30  31
        32 33 34 35 36 37 38 39 40  41
        42 43 44 45 46 47 48 49 50

————————————————————————————————————————————————————————————————————————————————————————
4、
#include “ctype.h”
#include “stdio.h”
void expand(char s1[ ],char s2[ ])
{ int i,j,a,b,c;
j=0
for(i=0;(c=sl)!=’\0’;i++)
if(c==’-’)
{ a=sl[i-1]; b=sl[i+1];
if ( isalpha(a)&&isalpha(b) || isdigit(a)&&isdigt(b))
/*函数 isalph(a)用于判断字符a是否为字母,isdigit(b) 用于判断字符b是否为数字,如果是,返回0*/
{j--;
do s2[j++]=a++;
while(tolower(a)<tolower(sl[i+1]));}
/*函数tolower(a)的功能是当字符a是大写字母,改为小写,其余情况不变*/
else s2[j++]=c;}
  else s2[j++]=c;
s2[j]=’\0’;
}
main( )
{ char sl[100],s2[300];
printf(“input s1:”);
gets(s1);
expand(s1,s2);
printf(“%s\n”,s2);
}

输入:wer2345d-h454-82qqq
输出:算得wer2345defgh45456782qqq
————————————————————————————————————————————————————————————————————————————————————————
四、程序完善题
1、
(求字符串的逆序)下面的程序的功能是输入若干行字符串,每输入一行,就按逆序输出该行,最后键入CTRL+Z终止程序(程序中EOF为输入终止的标记,相应的按键为CTRL+Z,机内码为-1)
程序补充:
#include”stdio.h”
#include”string.h”
int maxline=100;
int getline(char s[ ],int lim)
{int c,i;
for(i=0;i<lim-1 && (c=getchar( ))!=EOF && c!=’\n’;++i)
s=_________;
if(c==’\n’)
{s=c;++i;}
S=’\0’
return_________;
}
Int reverse(char s[ ])
{int i,j,t;
for(i=0,j=strlen(s)-2; i<j; _______ ) /*s[strlen(s)-1]为换行符*/
{t=s;s=s[j];s[j]=t;}
return 0
}
main( )
{ char line[100];
While((getline(line,maxline))>0)
{ printf(“%s”,line);
_______;
printf(“%s”,line);
}
}


————————————————————————————————————————————————————————————————————————————————————————

请高手指教!
有答案的说说!!!!!!!有答案的说说!!!!!!!有答案的说说!!!!!!!

       
离线amyhab
只看该作者 1 发表于: 2007-10-21
第一题14,46
第二题3,6
第三题50以内质数(一行十个)
第四题wer2345defgh45456782qqq
To Be,Or not to be.That's a Question!!!!!!!
离线wujie9451
只看该作者 2 发表于: 2007-10-21
三:
1. 15, 46
2.  3, 6 (你好厉害哦,我第二题做错了)
3.  2  3  5  7  11  13  17  19  23  29
  31  37  41  43  47
4.  wer2345defgh45456782qqq
四:1.c
        2我不清楚
   3.i++,j--
        4.reverse(line)
离线zhoukq
只看该作者 3 发表于: 2007-10-22
三大题的1小题,1楼得14,46,2楼得15,46,我得14,42,不知道,哪个是对的
快速回复
限100 字节
 
上一个 下一个