该套试题一共八题,时间为两小时
菜鸡就是我呜呜呜,继续加油吧
一、第一题
1、我的程序:
printf("n=");//这里应该用do while循环
scanf("%d",&n);
while(n<=0)
{
printf("n=");
scanf("%d",&n);
}
老师程序:
// 应该用do while 循环更加简洁
// do
// {
// printf("n=");
// scanf("%d,&n);
// }while(n<=0);
如何倒序输出一个数?(经典!!!)
void print(int n,int num)
{
num=0;
while(n!=0)
{
printf("%d",n%10);
n/=10;
num++;
}
printf(",%d\n",num);
}
答案:
#include<stdio.h>
void print(int n,int num)
{
num=0;
while(n!=0)
{
printf("%d",n%10);
n/=10;
num++;
}
printf(",%d\n",num);
}
int main()
{
int n,num=0;
// 应该用do while 循环更加简洁
// do
// {
// printf("n=");
// scanf("%d,&n);
// }while(n<=0);
printf("n=");
scanf("%d",&n);
while(n<=0)
{
printf("n=");
scanf("%d",&n);
}
print(n,num);
return 0;
}
二、第二题
1、我的程序:
printf("YYYYMM:");
scanf("%d",&YYYYMM);
YYYY=YYYYMM/100;
MM=YYYYMM%100;
老师程序:
//printf("YYYYMM:");
//scanf("%4d%2d",&YYYY,&MM);
这样更加简洁
2、再次回顾判断闰年的简洁写法:
if((YYYY%4==0&&YYYY%100!=0)||YYYY%400==0)
leap=1;
else leap=0;
3、不用开两次switch来判断是否是闰年从而判断2月的天数
switch(YYYY)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days=31;break;
case 4:
case 6:
case 9:
case 11:days=30;break;
case 2:if(leap==1)days=29;
else days=28;
}
答案:
#include<stdio.h>
int main()
{
int YYYYMM,YYYY,MM,days,season,leap;
printf("YYYYMM:");
scanf("%d",&YYYYMM);
YYYY=YYYYMM/100;
MM=YYYYMM%100;
//这里可以直接
//printf("YYYYMM:");
//scanf("%4d%2d",&y,&m);
if((YYYY%4==0&&YYYY%100!=0)||YYYY%400==0)
leap=1;
else leap=0;
switch(YYYY)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days=31;break;
case 4:
case 6:
case 9:
case 11:days=30;break;
case 2:if(leap==1)days=29;
else days=28;
}
printf("days:%d,",days);
//先对season进行赋值,后续再对其进行判断
if(MM>=3&&MM<=5)
season=1;
else if(MM>=6&&MM<=8)
season=2;
else if(MM>=9&&MM<=11)
season=3;
else season=4;
switch(season)
{
case 1:printf("spring\n");break;
case 2:printf("summer\n");break;
case 3:printf("autumn\n");break;
case 4:printf("winter\n");break;
}
return 0;
}
三、第三题
#include<stdio.h>
int main()
{
float s,first=0.00f,second;//对first进行赋初值,但second不赋初值
int count=0;
printf("score=");
scanf("%f",&s);
//以下程序需要实现“s小于0则直接结束,s如果大于100则不处理”
while(s>=0.00)//s小于0直接结束
{
if(s<=100)//s小于等于100才进入if语句,否则则“不处理”
{
count++;//引入count来到最后进行检验是否需要输出second
//以下的if和else if用于对first和second进行赋值运算
if(s>first)//输入的数大于first,则first等于该值,second则顶替first的位置
{
second=first;
first=s;
}
else if(s>second)//否则,即second<s<first,则不处理first,而将其值赋给second
second=s;
}
printf("score=");
scanf("%f",&s);
}
if(count>=2)printf("first=%.2f,second=%.2f\n",first,second);//count大于等于2,即至少输入了两个数,有first和second
else if(count==1)printf("first=%.2f\n",first);
else printf("no scores\n");//这时count=0,无有效分数
return 0;
}
该程序很多细节适合细细考究
答案:
#include<stdio.h>
int main()
{
float s,first=0.00f,second;//对first进行赋初值,但second不赋初值
int count=0;
printf("score=");
scanf("%f",&s);
//以下程序需要实现“s小于0则直接结束,s如果大于100则不处理”
while(s>=0.00)//s小于0直接结束
{
if(s<=100)//s小于等于100才进入if语句,否则则“不处理”
{
count++;//引入count来到最后进行检验是否需要输出second
//以下的if和else if用于对first和second进行赋值运算
if(s>first)//输入的数大于first,则first等于该值,second则顶替first的位置
{
second=first;
first=s;
}
else if(s>second)//否则,即second<s<first,则不处理first,而将其值赋给second
second=s;
}
printf("score=");
scanf("%f",&s);
}
if(count>=2)printf("first=%.2f,second=%.2f\n",first,second);//count大于等于2,即至少输入了两个数,有first和second
else if(count==1)printf("first=%.2f\n",first);
else printf("no scores\n");//这时count=0,无有效分数
return 0;
}
四、第四题
1、if(i%7==0&&i%10==3||i%7==0&&i%10==-3)
写题时太粗心,遗忘了没有将i%10==-3考虑到,从而输入第二组数的时候,-100和100只能运行出63而没有-63
2、 for(i=m;i<=n;i++)
{f(i%7==0&&i%10==3||i%7==0&&i%10==-3)
{
printf("%d ",i);
count++;
x=1;
}
}
if(x=1)
{
printf("\n");
printf("count=%d\n",count);
}
if(x=0)printf("\n");
在这边我又脑子不清醒了,将小小的细节复杂化,想着for循环里怎么输出\n让输出完满足条件的数后直接换行,而忽略了可以在输出count的那个printf语句中前置一个\n:
printf("\ncount=%d\n",count);
(这样就可以了!!!)
答案:
#include<stdio.h>
int main()
{
int m,n,count=0,x=0,t,i;
printf("m,n=");
scanf("%d%d",&m,&n);
if(m>n)
{
t=m;
m=n;
n=t;
}
for(i=m;i<=n;i++)
{
if(i%7==0&&i%10==3||i%7==0&&i%10==-3)
{
printf("%d ",i);
count++;
x=1;
}
}
if(x=1)
{
printf("\n");
printf("count=%d\n",count);
}
if(x=0)printf("\n");
//printf("\ncount=%d\n",count);
return 0;
}
五、第五题(斐波那契)
我的程序:
f1=f2=1;
for(i=1;i<=n;i++)
{
f1=f1+f2;
if(f1>n)break;
printf("%d ",f1);
f2=f1+f2;
if(f2>n)break;
printf("%d ",f2);
}
老师程序:
f1=f2=1;
f3=f1+f2;
while(f3<=n)
{
f1=f2;
f2=f3;
f3=f1+f2;
printf("%d",f3);
}
答案:
#include<stdio.h>
int main()
{
int n,f1,f2,f3,i;
do
{
printf("n=");
scanf("%d",&n);
}while(n<=0);
f1=1;
f2=1;
printf("%d %d ",f1,f2);
for(i=1;i<=n;i++)
{
f1=f1+f2;
if(f1>n)break;
printf("%d ",f1);
f2=f1+f2;
if(f2>n)break;
printf("%d ",f2);
}
// f1=f2=1;
// f3=f1+f2;
// while(f3<=n)
// {
// f1=f2;
// f2=f3;
// f3=f1+f2;
// printf("%d",f3);
// }
printf("\n");
return 0;
}
六、第六题(输出特殊图案)
#include<stdio.h>
void star(int n)
{
int i,j;
for(i=0;i<=n-1;i++)
{
for(j=1;j<=i;j++)
{
printf(" ");
}
for(j=1;j<=n-i;j++)
{
printf("*");
}
printf("\n");
}
for(i=2;i<=n;i++)
{
for(j=1;j<=n-1;j++)
{
printf(" ");
}
for(j=1;j<=i;j++)
{
printf("*");
}
printf("\n");
}
}
int main()
{
int n;
printf("n=");
scanf("%d",&n);
while(n<=0)
{
printf("n=");
scanf("%d",&n);
}
star(n);
return 0;
}
七、第七题
#include<stdio.h>
#include<math.h>
double factorial(int n)
{
double f=1;
for(;n>=1;n--)
f*=n;
return f;
}
double power(double x,int n)
{
int i;
double p=1.0;
for(i=1;i<=n;i++)
{
p*=x;
}
return p;
}
int main()
{
int i=2,sign=-1,item=1;
double x,myc=1.0;
printf("x=");
scanf("%lf",&x);
while(fabs(power(x,i)/factorial(i))>=1E-9)
{
myc+=sign*power(x,i)/factorial(i);
item++;
i=i+2;
sign=-sign;
}
printf("cos=%lf,item=%d\n",myc,item);
return 0;
}
定义power函数?
答案:
#include<stdio.h>
#include<math.h>
double factorial(int n)
{
double f=1;
for(;n>=1;n--)
f*=n;
return f;
}
double power(double x,int n)
{
int i;
double p=1.0;
for(i=1;i<=n;i++)
{
p*=x;
}
return p;
}
int main()
{
int i=2,sign=-1,item=1;
double x,myc=1.0;
printf("x=");
scanf("%lf",&x);
while(fabs(power(x,i)/factorial(i))>=1E-9)
{
myc+=sign*power(x,i)/factorial(i);
item++;
i=i+2;
sign=-sign;
}
printf("cos=%lf,item=%d\n",myc,item);
return 0;
}
八、第八题
#include<stdio.h>
int main()
{
int a[5];
int i,j,t;
printf("a,b,c,d,e=");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
printf("%d",a[i]);
if(i<4)printf(",");
else printf("\n");
}
for(i=0;i<5;i++)
{
for(j=0;j<5-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
for(i=0;i<5;i++)
{
printf("%d",a[i]);
if(i<4)printf(",");
else printf("\n");
// printf("%c",i=4?'\n':',');
}
return 0;
}