第十三届全国青少年信息学奥林匹克联赛
普及组 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);
}
}
————————————————————————————————————————————————————————————————————————————————————————
请高手指教!
有答案的说说!!!!!!!有答案的说说!!!!!!!有答案的说说!!!!!!!