2020年哈尔滨工业大学C语言程序设计精髓 第六周在线编程题练兵

C语言重学之路 专栏收录该内容
18 篇文章 1 订阅

/好久不见,今天也是秃头的一天,程序是肝出来的,但是我浏览了别人写的第一题确实比我简单,但是我还是把我自己的思路展示出来,作为一个错误的示范,大家要注意程序设计思路要简洁明了,不要多重嵌套绕来绕去的,有兴趣的同学可以试试只用三个循环不嵌套做出来第一题,还有最后一天怪我,程序就是套娃,强制叫我用switch写无法,新的一天大家加油!未来的天之骄子未来祖国栋梁,更好的明天在等着你们/

1

绘制金字塔(4分)

题目内容:

要求用户从键盘输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:

A

ABA

ABCBA

ABCDCBA

程序运行结果示例1:

Please input a capital:

D↙

____A

___ABA

__ABCBA

_ABCDCBA

程序运行结果示例2:

Please input a capital:

F↙

______A

_____ABA

____ABCBA

___ABCDCBA

__ABCDEDCBA

_ABCDEFEDCBA

(说明:上面运行结果示例中,每行字母前面的下划线"_"代表屏幕上实际输出的是空格,最后一行前面有一个空格,倒数第二行有两个空格,以此类推。)

输入提示信息:“Please input a
capital:\n”

输入格式: “%c”

输出格式:"%c"

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

#include<stdio.h>
void change(int n,int i)//控制输出回文串字符
{
 char char2='A';
    int j,k;
    if(i==0)
    {
     printf("%c\n",char2);
 }
 else
 {
  for (k = 1; k <=i; k++)//正序
        {
            printf("%c", char2);
            char2 = char2 + 1;
        }
        for ( k = i+1; k > 0; k--)//倒序
            {
                if(k==1)
                {
                    printf("%c\n", char2);
                }
                else
                {
                    printf("%c", char2);
                }
                char2 = char2 - 1;
            }
    }
}
int  main()
{
    int n,i,j;
    char char1;
    printf("Please input a capital:\n");
    scanf("%c",&char1);
    n = char1 - 64;
    for (i = 0; i < n; i++)//行
    {
        for (j = 1; j <n*2; j++)//列
        {
            if (j <= n - i)
            {
                printf(" ");//空格
            }
            else
            {
                change(n,i);
                break;
            }
        }
    }
    return 0;
}

2

循环嵌套的应用(4分)

题目内容:

编写程序产生如下输出:

F

FE

FED

FEDC

FEDCB

FEDCBA

输入格式: 无

输出格式:"%c"

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

#include<stdio.h>
int  main()
{
    int n,i,j;
    char char1;
    for(i=0;i<6;i++)
    {
      char1='F';
      for ( j = i+1; j > 0; j--)
            {
                if(j==1)
                {
                    printf("%c\n", char1);
                }
                else
                {
                    printf("%c", char1);
                }
                char1 = char1 - 1;
            }
     }
    return 0;
}

3

利用泰勒级数计算sinx的值(4分)

题目内容:

利用泰勒级数计算sinx的值,要求最后一项的绝对值小于在这里插入图片描述,并统计出此时累加了多少项。请用“利用前项来计算后项”的方法计算累加项,不要使用pow函数编写程序。程序中所有实数的数据类型都是double类型。

在这里插入图片描述

程序的运行结果示例1:

Input x:

3↙

sin(x)=0.141,count=9

程序的运行结果示例2:

Input x:

10↙

sin(x)=-0.544,count=18

输入提示信息:“Input x:\n”

输入格式: “%lf”

输出格式:“sin(x)=%.3f,count=%d\n”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

#include <stdio.h>
#include <math.h>
#define EPS 1e-5
double Ride(double a)
{
 double n = 1, j;
 for(j=1;j<=a;j++)
 {
  n = n * j;
 }
 return n;
}
int main()
{
 double x, sin = 0, Fz, num, i= 0,sign = 1, a = 1;
 printf("Input x:\n");
 scanf("%lf", &x);
 Fz = x;
 do{
  num = Fz/Ride(a);
  num *=sign;
  sin +=num;
  Fz = Fz * x * x;
  a +=2;
  sign = -sign;
  i++;
 }while (fabs(num) >= EPS);
 printf("sin(x)=%.3f,count=%d\n", (float)sin, (int)i);
 return 0;
}

4

计算100~200之间的所有素数之和(4分)

题目内容:

计算100~200之间的所有素数之和,判别一个数是否是素数请用给定的函数实现。

函数原型:int fun(int m);

说明:

参 数:m 是要进行判断的数;

返回值:若数 m 是素数,则返回值为1;否则返回值为0。

输入格式: 无

输出格式: “sum=%d\n”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

#include <stdio.h>
int main()
{
    int i,j,sum=0;
    for(i=101; i<200; i++)
    {
        for(j=2; j<i; j++)
        {
            if(i%j==0)
                break;
        }
        if (j==i)
        {
            sum=sum+i;
        }
    }
    printf("sum=%d\n",sum);
    return 0;
}

5

编程实现一个输入指定范围内的整数的函数(4分)

题目内容:

编程实现一个输入指定范围内的整数的函数getint,其完整的函数原型为:int getint(int min, int max);,它负责接收用户的输入进行验证,保证接收的一定是一个介于min和max之间([min, max]区间内)的一个整数并最后返回该整数。如果用户输入不合法,则会提示继续输入,直到输入合法时为止。要求编写完整的程序并测试你所写的getint函数。

程序的运行结果示例:

Please enter min,max:

3,100↙

Please enter an integer [3…100]:

-2↙

Please enter an integer [3…100]:

0↙

Please enter an integer [3…100]:

116↙

Please enter an integer [3…100]:

58↙

The integer you have entered is:58

输入提示信息:“Please enter min,max:\n”

           "Please enter an integer

输入格式:

输入数据区间的最小值和最大值:"%d,%d"

输入指定范围内的整数: “%d”

输出格式:“The integer you have entered
is:%d\n”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

#include <stdio.h>
void getint(int max,int min)
{
    int x,fot=0;
    do
    {
        printf("Please enter an integer [%d..%d]:\n",min,max);
        scanf("%d",&x);
        if(x>min&&x<max)
        {
            printf("The integer you have entered is:%d\n",x);
            fot=1;
        }
     }
    while(fot!=1);
}
int main()
{
    int max,min;
    printf("Please enter min,max:\n");
    scanf("%d,%d",&min,&max);
    getint(max,min);
    return 0;
}

6

程序改错v2.0(5分)

题目内容:

下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出 Input error!,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。目前程序存在错误,请将其修改正确。并按照下面给出的运行示例检查程序。

#include<stdio.h>
int main()
{       
	int score;       
	char grade;
 	printf("Please input score:");
        scanf("%d", &score);       
        if (score < 0 || score > 100)                printf("Input error!\n");        
        else if (score >= 90)              grade = 'A’;        
        else if (score >= 80)             grade = 'B';           
        else if (score >= 70)             grade = 'C';          
        else if (score >= 60)             grade = 'D';         
        else             grade = 'E';         printf("grade:%c\n", grade);        
        return 0;
        }

程序运行结果示例1:

Please input score:

a↙

Input error!

Please input score:

-12↙

Input error!

Please input score:

230↙

Input error!

Please input score:

92↙

grade: A

程序运行结果示例2:

Please input score:

88↙

grade: B

程序运行结果示例3:

Please input score:

73↙

grade: C

程序运行结果示例4:

Please input score:

65↙

grade: D

程序运行结果示例5:

Please input score:

27↙

grade: E

输入提示信息:“Please input score:\n”

输入格式: “%d”

输出格式:

输入错误时的提示信息:“Input error!\n”

输出格式:“grade: %c\n” (注意:%c前面有一个空格)

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

#include<stdio.h>
int sentence()
{
    int i=0,n;
    do
    {
        a:
        printf("Please input score:\n");
        scanf("%d", &n);
        if(n>0&&n<100)
        {
            break;
        }
        else
        {
            while(getchar()!='\n');
            printf("Input error!\n");
            goto a;
        }
    }
    while(i);
    return n;
}
int main()
{
    int score;
    char grade;
    score=sentence();
    if (score < 0 || score > 100)
        printf("Input error!\n");
    else if (score >= 90)
        grade = 'A';
    else if (score >= 80)
        grade = 'B';
    else if (score >= 70)
        grade = 'C';
    else if (score >= 60)
        grade = 'D';
    else
        grade = 'E';
    printf("grade: %c\n", grade);
    return 0;
}

7

编程计算a+aa+aaa+…+aa…a(n个a)的值(4分)

题目内容:

编程计算 a+aa+aaa+…+aa…a(n个a)的值,n和a的值由键盘输入。例如,当n=4,a=2,表示计算2+22+222+2222的值。

程序运行结果示例:

Input a,n:

2,4↙

sum=2468

输入提示信息:“Input a,n:\n”

输入格式:
“%d,%d”(先输入a,后输入n)

输出格式:
“sum=%ld\n”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

#include<stdio.h>
int main(void)
{
int a,n,i,sum;
printf("Input a,n:\n");
scanf("%d,%d",&a,&n);
for(i=1,sum=0;i<=n;i++)
{
sum*=10;
sum+=i*a;
}
printf("sum=%ld\n",sum);
return 0;
}

8

搬砖问题(4分)

题目内容:

n块砖( 27<n<=77
),36人搬,男搬4,女搬3,两个小孩抬一块砖,要求一次搬完,问男人、女人和小孩各需多少人?请用穷举法编程求解,n的值要求从键盘输入。输出结果按照男人数量升序给出(见下面示例3)。

程序的运行结果示例1:

Input n(27<n<=77):

28↙

men=0,women=4,children=32

程序的运行结果示例2:

Input n(27<n<=77):

36↙

men=3,women=3,children=30

程序的运行结果示例3:

Input n(27<n<=77):

60↙

men=2,women=14,children=20

men=7,women=7,children=22

men=12,women=0,children=24

输入提示: “Input
n(27<n<=77):\n”

输入格式: “%d”

输出格式:“men=%d,women=%d,children=%d\n”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

#include <stdio.h>
int main()
{
    int n ;
    int i, j, k;
    printf("Input n(27<n<=77):\n");
    scanf("%d",&n);
    for(i=0; i<20; i++)
    {
        for(j=0; j<26; j++)
        {
            k=2*(n-i*4-j*3);
            if(i*4+j*3+k/2.0==n && k>0 && i+j+k==36)
            {
                printf("men=%d,women=%d,children=%d\n",i,j,k);
            }
        }
    }
    return 0;
}

9

编程输出某年某月有多少天(考虑到闰年)(5分)

题目内容:

从键盘输入一个年份和月份,输出该月有多少天(考虑闰年),用switch语句编程。

程序运行结果示例1:

Input year,month:

2015,3↙

31 days

程序运行结果示例2:

Input year,month:

2015,4↙

30 days

程序运行结果示例3:

Input year,month:

2016,2↙

29 days

程序运行结果示例4:

Input year,month:

2014,2↙

28 days

程序运行结果示例5:

Input year,month:

2015,13↙

Input error!

输入提示信息:“Input year,month:\n”

输入格式:
“%d,%d”

输出格式:

输入错误时的提示信息:“Input error!\n”

输出格式:

“31 days\n”

“30 days\n”

“29 days\n”

“28 days\n”

为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。

时间限制:500ms内存限制:32000kb

#include<stdio.h>
int main()
{
    int year,month,days;
    do
    {
    printf("Input year,month:\n");
    scanf("%d,%d",&year,&month);
    if(month<1||month>12)
    {
        printf("Input error!\n");
        return 0;
    }
    }while(month<1||month>12);
    if(((year%4==0)&&(year%100 !=0))||(year%400==0))
        {
            switch(month)
            {
                case 1:days=31;break;
                case 2:days=29;break;
                case 3:days=31;break;
                case 4:days=30;break;
                case 5:days=31;break;
                case 6:days=30;break;
                case 7:days=31;break;
                case 8:days=31;break;
                case 9:days=30;break;
                case 10:days=31;break;
                case 11:days=30;break;
                case 12:days=31;break;
            }
        }
    else
       {
           switch(month)
            {
                case 1:days=31;break;
                case 2:days=28;break;
                case 3:days=31;break;
                case 4:days=30;break;
                case 5:days=31;break;
                case 6:days=30;break;
                case 7:days=31;break;
                case 8:days=31;break;
                case 9:days=30;break;
                case 10:days=31;break;
                case 11:days=30;break;
                case 12:days=31;break;
            }
       }
       printf("%d days\n",days);
    return 0;
}
  • 3
    点赞
  • 0
    评论
  • 22
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值