17级信管、物联网、计算机专业高级语言程序设计期末测试

A蓝瘦香菇

思路:

01对于输出字符串类的题目,可以寻找它们的首字符(当然也不仅限于首字符,只要不同即可),利用首字符的不同,判定输出指定字符串。

02也可以根据指定字符串的长度来进行区别输出

03当然也可以比较字符串是否相同,可以利用字符串比较函数,返回值是否为零来进行判定

01

#include"stdio.h"

int main()

{

char a[1024];

gets(a);

printf("%s\n",a[0]=='l'?"xianggu":"lansou");

return 0;

}

02

#include"stdio.h"

#include"string.h"

int main()

{

char a[1024];

int len;

gets(a);

len=strlen(a);

printf("%s\n",len==6?"xianggu":"lansou");

return 0;

}

03

#include"stdio.h"

#include"string.h"

int main()

{

char a[1024];

gets(a);

printf("%s\n",strcmp(a,"xianggu")?"xianggu":"lansou");

return 0;

}

B 这么近,那么远

思路:

01本质就是计算两个坐标间的距离,可以利用两点间的距离公式,需要注意的是,单位长度为0.6米。

02计算距离,可以利用函数hypot

hypot

功能:计算直角三角形的斜边长

头文件:、

用 法: double hypot(double x, double y);

01

#include"stdio.h"

#include"math.h"

int main()

{

int x0,y0,x1,y1;

scanf("%d%d%d%d",&x0,&y0,&x1,&y1);

double result;

result=0.6*sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));

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

return 0;

}

02

#include"stdio.h"

#include"math.h"

int main()

{

int x0,y0,x1,y1;

scanf("%d%d%d%d",&x0,&y0,&x1,&y1);

double result;

result=0.6*hypot(x1-x0,y1-y0);

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

return 0;

}

C 三只小熊

思路:

利用数学公式,计算出各个图形的面积,利用自定义的函数求出最大面积,判定最大面积,然后输出相应字符串。

#include"stdio.h"

#include"math.h"

double max(double a,double b)

{

return a>b?a:b;

}

int main()

{

int a,b,c;

double pi,s_san,s_yuan,s_zheng,s_max;

scanf("%d%d%d",&a,&b,&c);

pi=acos(-1.0);

s_san=sqrt(3)/4*a*a;

s_yuan=pi*b*b;

s_zheng=c*c;

s_max=max(s_san,max(s_yuan,s_zheng));

if(s_max==s_san)puts("triangle");

else if(s_max==s_yuan)puts("circle");

else puts("square");

return 0;

}

D 流星雨

思路:

对于周期问题,一般都有陷阱,即边缘数据的处理,此题以20天为一个周期,当输入19、20天时,应输出第1天;当输入20、1天时,应输出第2天。所以这里采用增长数组的方法,即20—>22。

#include"stdio.h"

int main()

{

int aa[22]=,a,b;

scanf("%d%d",&a,&b);

for(int i=0;;i++)

{

if(aa[i]==a&&aa[i+1]==b)

{

printf("%d\n",aa[i+2]);

return 0;

}

}

}

E 排队列

思路:

排序之后,进行比较即可,边缘数据,单独考虑。

#include"stdio.h"

int main()

{

int n,num,a[1024];

scanf("%d",&n);

for(int i=0;i

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

scanf("%d",&num);

for(int i=0;i

for(int j=0;j

if(a[j]>a[j+1])

a[j]^=a[j+1]^=a[j]^=a[j+1];

if(num

if(num>a[n-2])

for(int i=0;i

{

if(num>a[i]&&num

{

printf("%d\n",i+2);return 0;

}

}

}

F Twins

思路:

这道题需要做三件事,判断素数,逆序转换,判定输出。充分体现了模块化设计原则。判断素数模块,整数逆序转换模块。

#include"stdio.h"

int prime(int n)

{

for(int i=2;i*i

if(n%i==0)return 0;

return 1;

}

int f(int n)

{

int ret=0,di;

while(n)

{

di=n%10;

ret=ret*10+di;

n/=10;

}

return ret;

}

int main()

{

int n;

scanf("%d",&n);

if(prime(n)&&prime(f(n)))puts("Yes");

else puts("No");

return 0;

}

G 一封情书

思路:

根据题意加减字符即可,需要注意的是,依旧是边缘数据,即A,B,C,a,b,c的转换。需要指出的是,实践证明,这道题(不仅仅是这道题,有兴趣的同学,可以试试把边缘数据去掉),不考虑边缘数据,提交到学校oj上也是可以通过的,这就比较坑!!!但是去掉边缘数据是不正确的。

#include"stdio.h"

int main()

{

char a[1024];

gets(a);

for(int i=0;a[i];i++)

{

if(a[i]>='D'&&a[i]='d'&&a[i]

a[i]-=3;

else

if(a[i]>='A'&&a[i]='a'&&a[i]

a[i]+=23;

}

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

}

H 琅琊榜

思路:

采用结构体,冒泡法排序,打擂台,即可。

#include"stdio.h"

struct player

{

char a[10];

int num;

double time;

}play[20],temp,min;

int main()

{

int n,max;

scanf("%d",&n);

for(int i=0;i

{

scanf("%s%d%lf",play[i].a,&play[i].num,&play[i].time);

}

for(int i=0;i

for(int j=0;j

if(play[j].num

{

temp=play[j];

play[j]=play[j+1];

play[j+1]=temp;

}

max=play[0].num;

min=play[0];

for(int i=1;i

if(play[i].num==max)

if(min.time>play[i].time)

min=play[i];

else;

else

{

printf("%s %d %.2lf\n",min.a,min.num,min.time);

return 0;

}

}

*指针*版本,正在写。。。

不着急。。。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180130G1BE9T00?refer=cp_1026

相关快讯

扫码关注云+社区