程序设计语言基础 部分题

7-3 将x的平方赋值给y (5 分)

假设x的值为3,计算x的平方并赋值给y,分别以“y = x ∗ x”和“x ∗ x = y”的形式输出x和y的值。

输入格式:

本题无输入

输出格式:

按照下列格式输出代入x=3的结果:

作者 颜晖              单位 浙大城市学院

y = x * x
x * x = y

#include<stdio.h>
int main()
{
    int x=3,y=x*x;
    printf("%d = 3 * 3\n3 * 3 = %d",y,y);//空格
    return 0;
}

7-4 计算物体自由下落的距离 (5 分)

一个物体从100米的高空自由落下。编写程序,求它在前3秒内下落的垂直距离。设重力加速度为10米/秒2。

输入格式:

本题目没有输入。

输出格式:

按照下列格式输出

height = 垂直距离值

结果保留2位小数。

作者 C课程组                    单位 浙江大学

#include<stdio.h>
int main()
{
    int g=10,t=3; 
    double h=g*t*t/2;//int h=g*t*t/2,g=10,t=3;error: ‘g’ undeclared (first use in this 
                                                                       //  function)
    printf("height = %.2lf",h);
    return 0;
}

7-6 逆序的三位数 (15 分)

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:

123

结尾无空行

输出样例:

321

结尾无空行

作者 翁恺                               单位 浙江大学

#include<stdio.h>
int main()
{
    int n,a,b,c;
    scanf("%d",&n);//scanf没有&,段错误
    a=n/100;b=n/10%10,c=n%10;
    printf("%d",c*100+b*10+a);//0+0+7=7
    return 0;
}

7-7 后天 (5 分)

如果今天是星期三,后天就是星期五;如果今天是星期六,后天就是星期一。我们用数字1到7对应星期一到星期日。给定某一天,请你输出那天的“后天”是星期几。

输入格式:

输入第一行给出一个正整数D(1 ≤ D ≤ 7),代表星期里的某一天。

输出格式:

在一行中输出D天的后天是星期几。

输入样例:

3

结尾无空行

输出样例:

5

结尾无空行

作者  陈越                                单位  浙江大学

#include<stdio.h>
int main()
{
    int a[8]={0,3,4,5,6,7,1,2};//设置一个数组,下标所对应的数组元素即为后天
    int n;
    scanf("%d",&n);
    printf("%d",a[n]);
    return 0;
}

7-8 计算指数 (5 分)

真的没骗你,这道才是简单题 —— 对任意给定的不超过10的正整数n,要求你输出2n。不难吧?

输入格式:

输入在一行中给出一个不超过10的正整数n。

输出格式:

在一行中按照格式 2^n = 计算结果 输出2n的值。

输入样例:

5

结尾无空行

输出样例:

2^5 = 32

结尾无空行

作者 陈越 单位 浙江大学

#include<stdio.h>
int main()
{
    int n,c;
    scanf("%d",&n);
    c=pow(2,n);
    printf("2^%d = %d",n,c);//printf("2^%d = %d",n,pow(2,n)")是错的
    return 0;
}

7-15 输出菱形图案 (5 分)

本题要求编写程序,输出指定的由“A”组成的菱形图案。

输入格式:

本题无输入

输出格式:

按照下列格式输出由“A”组成的菱形图案。

  A
A   A
  A
#include<stdio.h>
int main ()
{
    printf("  A\nA   A\n  A");
    return 0;
}

7-18 计算分段函数[2] (10 分)

本题目要求计算下列分段函数f(x)的值:

f2-11

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

输入格式:

输入在一行中给出实数x。

输出格式:

在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。

输入样例1:

10

结尾无空行

输出样例1:

f(10.00) = 3.16

结尾无空行

输入样例2:

-0.5

输出样例2:

f(-0.50) = -2.75

#include<stdio.h>
#include<math.h>//调用数学函数
int main()
{
    double x,result;
    scanf("%lf",&x);
    if(x>=0)
    {
        result=sqrt(x);
    }
    else
    {
        result=pow(x+1,2)+2*x+1/x;
    }
    printf("f(%.2f) = %.2f",x,result);
    return 0;
}

7-19 比较大小 (10 分)

本题要求将输入的任意3个整数从小到大输出。

输入格式:

输入在一行中给出3个整数,其间以空格分隔。

输出格式:

在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:

4 2 8

结尾无空行

输出样例:

2->4->8

结尾无空行

#include<stdio.h>//三个if语句
int main ()
{
    int a,b,c,t;//比较a,b与a,c与b,c的大小,让a最小,c最大
    scanf("%d %d %d",&a,&b,&c);
    if(a>b)//a,b交换,a是较小的那个
    {
        t=a;
        a=b;
        b=t;
    }
    if(a>c)//a,c交换,a仍为较小的那个
    {
        t=a;
        a=c;
        c=t;
    }
    if(b>c)//b,c比较
    {
        t=b;
        b=c;
        c=t;
    }
    printf("%d->%d->%d",a,b,c);//输出时仍按a,b,c这种顺序输出,只不过将最小的数赋给a,将最大的数赋给c
    return 0;
}

7-21 计算油费 (15 分)

现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。

输入格式:

输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。

输出格式:

在一行中输出应付款额,保留小数点后2位。

输入样例:

40 97 m

结尾无空行

输出样例:

301.34

结尾无空行

#include<stdio.h>
int main ()
{
    int a,b;char c;double d,z;
    scanf("%d %d %c",&a,&b,&c);
    switch(b)//汽油品种
    {
        case 90:d=a*6.95;break;
        case 93:d=a*7.44;break;
        case 97:d=a*7.93;break;
    }
    switch(c)//switch语句的使用,别忘了break
    {
        case 'm':z=d*(1-0.05);break;
        case 'e':z=d*(1-0.03);break;//一开一关
    }
    //if(c=='m') z=d*(1-0.05);
    //if(c=='e') z=d*(1-0.03);
    printf("%.2f",z);
    return 0;
}

7-22 计算火车运行时间 (15 分)

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

输入格式:

输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。

输出格式:

在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

输入样例:

1201 1530

结尾无空行

输出样例:

03:29

结尾无空行

#include<stdio.h>
int main()
{
    int h1,h2,m1,m2,h3,m3;
    scanf("%02d%02d %02d%02d",&h1,&m1,&h2,&m2);//% 2d是将数字按宽度为2,采用右对齐方式输出,如果数据位数不到2位,则左边补零。
    if(m1>m2)
    {
        m3=m2-m1+60;//末态减初态+进位60min
        h3=h2-h1-1;//末态减初态-1h
    }
    else 
    {
        m3=m2-m1;
        h3=h2-h1;
    }
    printf("%02d:%02d",h3,m3);//%02d:默认情况下,数据数据宽度不够2位是用空格填补的,但是因为2d前面有0,表示,数据宽度不足时用0填补
    return 0;
}

7-27 求给定精度的简单交错序列部分和 (15 分)

本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。

输入格式:

输入在一行中给出一个正实数eps。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例1:

4E-2

结尾无空行

输出样例1:

sum = 0.854457

结尾无空行

输入样例2:

0.02

输出样例2:

sum = 0.826310
#include<stdio.h>//while循环或者for循环皆可
int main ()
{
    int f=1,i=1;
    double eps;
    double sum=0;
    double term=1.0;//term是第一项的绝对值
    scanf("%lf",&eps);//double  %lf
    /*while(term>eps)//最后一项的绝对值不大于<=eps,则其他都是>eps的
    {
        i=i+3;//分母
        sum=sum+term*f;//此时f=1,term=1,sum=0,加上第一项
        f=-f;//f是正负号,一正一负,一正一负
        term=1.0/i;//i是int型的,term是double型的,进行强制类型转换
    }
    sum=sum+term*f;*/
    sum=sum+term*f;//先加上第一项的和
    for(int i=1;term>eps;)
    {
        f=-f;
        i=i+3;
        term=1.0/i;
        sum=sum+term*f;
    }
    printf("sum = %.6f",sum);
    return 0;
}

7-30 特殊a串数列求和 (20 分)

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:

输入在一行中给出不超过9的正整数a和n。

输出格式:

在一行中按照“s = 对应的和”的格式输出。

输入样例:

2 3

结尾无空行

输出样例:

s = 246

结尾无空行

#include<stdio.h>
int main()
{
    int a,n,t=0,sum=0;
    scanf("%d %d",&a,&n);
    for(int i=1;i<=n;i++)
    {
        t=t*10+a;//错误的理解 t=t*a;2,22,222,
        sum=sum+t;
    }
    printf("s = %d",sum);
    return 0;
}

7-43 将数组中的数逆序存放 (20 分)

本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。

输入格式:

输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。

输入样例:

4
10 8 1 2

结尾无空行

输出样例:

2 1 8 10

结尾无空行

#include<stdio.h>
int main()
{
    int a[10],n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=n-1;i>=0;i--)//倒序输出,别忘了i=0
    {
        printf("%d",a[i]);
        if(i!=0)
            printf(" ");
        else //若i=0,说明是最后一个结果
            printf("\n");
    }
    return 0;
}

7-46 求一批整数中出现最多的个位数字 (20 分)

给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。

输入格式:

输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。

输出格式:

在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n1、n2、……为出现次数最多的个位数字,按从小到大的顺序排列。数字间以空格分隔,但末尾不得有多余空格。

输入样例:

3
1234 2345 3456

结尾无空行

输出样例:

3: 3 4

结尾无空行

#include<stdio.h>
void cnt(int a[],int num);
int main()
{
    int digit[10],n,a[1000];
    scanf("%d\n",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        int num=a[i];
        cnt(digit,num);
    }
    int max=0;
    for(int i=0;i<10;i++)
    {
        if(digit[max]<digit[i]) max=i;
    }
    printf("%d:",digit[max]);
    for(int i=0;i<10;i++)
    {
        if(digit[i]==digit[max]) printf(" %d",i);//空格的位置
    }
    return 0;
}
void cnt(int digit[],int num)//让形参与实参的名一致
{
    if(num==0) digit[0]++;
    else
    {
        while(num!=0)
        {
             int t=num%10;
             digit[t]++;
             num=num/10;
        }

    }
    
}

7-47 求整数序列中出现次数最多的数 (15 分)

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入格式:

输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。

输出格式:

在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。

输入样例:

10 3 2 -1 5 3 4 3 0 3 2

结尾无空行

输出样例:

3 4
#include<stdio.h>
int main()
{
    int n,a[1000];
    scanf("%d ",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    count(a,n);
    return 0;
}
void count(int a[],int n)
{
    int max=a[0],count=0;//将max看做出现最多的整数的次数
    for(int i=0;i<n;i++)
    {
        int c=0;
        for(int j=0;j<n;j++)
        {
            if(a[i]==a[j]) c++;
        }
        if(c>count)
        {
            count=c;max=a[i];
        }
    }
    printf("%d %d",max,count);
}

7-50 判断上三角矩阵 (15 分)

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。

本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

输入格式:

输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。

输入样例:

3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6

输出样例:

YES
NO
NO
#include<stdio.h>
int judge();
int main()
{
    int count;
    scanf("%d\n",&count);
    for(int i=0;i<count;i++)//矩阵的个数
    {
        int f=judge();//注意实参是空参
    
    if(f==1) printf("YES\n");
    else  printf("NO\n");
     }
    return 0;
}
int judge()
{
    int n,a[10][10];
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<i;j++)
        {
            if(a[i][j]!=0) return 0;
        }
    }
    return 1;
    
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值