c语言大一期中考试复盘

该套试题一共八题,时间为两小时

菜鸡就是我呜呜呜,继续加油吧

一、第一题

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;

}

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值