河南理工大学c语言课后题答案,河南工程学院c语言的期末考试题

发布时间:2023-01-03

本文目录一览:

1、c语言程序设计能力教程答案
2、求C语言程序设计习题集与上机指导-第三版 (及答案)......
3、C语言程序设计课后答案(何钦铭)
4、c语言程序设计(何钦铭 颜晖 第三版)课后习题答案

c语言程序设计能力教程答案

1 【C语言】《C语言程序设计教程(第二版)》习题答案

说明

  1. 本文所指的《C语言程序设计教程(第二版)》是李凤霞主编、北京理工大学出版社出版的,绿皮。

第1章 程序设计基础知识

一、单项选择题(第23页)

1-4.CBBC 5-8.DACA

二、填空题(第24页)

  1. 判断条件
  2. 面向过程编程
  3. 结构化
  4. 程序
  5. 面向对象的程序设计语言
  6. 有穷性
  7. 直到型循环
  8. 算法
  9. 可读性
  10. 模块化
  11. 对问题的分析和模块的划分

三、应用题(第24页)

  1. 源程序:
main()
{
    int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */
    printf("cock hen chick\n");
    for(i=1;i<=20;i++)
        for(j=1;j<=33;j++)
            for(k=1;k<=33;k++)
                if (i+j+k*3==100 && i*5+j*3+k==100)
                    printf(" %d %d %d\n",i,j,k*3);
}

执行结果:

cock hen chick
4 18 78
8 11 81
12 4 84
  1. 现计算斐波那契数列的前20项。 递推法 源程序:
main()
{
    long a,b;
    int i;
    a=b=1;
    for(i=1;i<=10;i++) /*要计算前30项,把10改为15。*/
    {
        printf("%8ld%8ld",a,b);
        a=a+b;
        b=b+a;
    }
}

递归法 源程序:

main()
{
    int i;
    for(i=0;i<=19;i++)
        printf("%8d",fib(i));
}
fib(int i)
{
    return(i<=1?1:fib(i-1)+fib(i-2));
}

执行结果:

1 1 2 3 5 8 13 21 34 55
89 144 233 377 610 987 1597 2584 4181 6765
  1. 源程序:
#include "math.h"
main()
{
    double x,x0,deltax;
    x=1.5;
    do {
        x0=pow(x+1,1./3);
        deltax=fabs(x0-x);
        x=x0;
    } while(deltax>1e-12);
    printf("%.10f\n",x);
}

执行结果:

1.3247179572
  1. 源程序略。(分子、分母均构成斐波那契数列) 结果是32.66026079864
  2. 源程序:
main()
{
    int a,b,c,m;
    printf("Please input a,b and c:");
    scanf("%d %d %d",&a,&b,&c);
    if(a<b){m=a;a=b;b=m;}
    if(a<c){m=a;a=c;c=m;}
    if(b<c){m=b;b=c;c=m;}
    printf("%d %d %d\n",a,b,c);
}

执行结果:

Please input a,b and c:123 456 789
789 456 123
  1. 源程序:
main()
{
    int a;
    scanf("%d",&a);
    printf(a%21==0?"Yes":"No");
}

执行结果:

42
Yes

第2章 C语言概述

一、单项选择题(第34页)

1-4.BDCB 5-8.AABC

二、填空题(第35页)

  1. C编译系统
  2. 函数 函数
  3. 输入输出
  4. .OBJ
  5. 库函数
  6. 文本

三、应用题(第36页)

  1. sizeof 是关键字,stru_aotofilem_i_nhelloABCSIN90x1234untilcos2xs_3 是标识符。
  2. 源程序:
main()
{
    int a,b,c;
    scanf("%d %d",&a,&b);
    c=a;a=b;b=c;
    printf("%d %d",a,b);
}

执行结果:

12 34
34 12

第3章 数据类型与运算规则

一、单项选择题(第75页)

1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB

二、填空题(第77页)

  1. 补码
  2. ±(10^-308~10^308)
  3. int(整数)
  4. 单目 自右相左
  5. 函数调用
  6. a或b
  7. 1
  8. 65,89

三、应用题(第78页)

  1. 10 9
  2. 执行结果:
11
12
1

第4章 顺序结构程序设计

一、单项选择题(第90页)

1-5.DCDAD 6-10.BACBB

二、填空题(第91页)

  1. 5.169000
  2. (1)-2002500 (2)I=-200,j=2500 (3)i=-200 j=2500
  3. a=98,b=765.000000,c=4321.000000
  4. 0,0,3
  5. 3
  6. scanf("%lf%lf%lf",&a,&b,&c);
  7. 13 13.000000,13.000000
  8. a=a^c;c=c^a;a=a^c;(这种算法不破坏b的值,也不用定义中间变量。)

三、编程题(第92页)

  1. 仿照教材第27页例2-1。
  2. 源程序:
main()
{
    int h,m;
    scanf("%d:%d",&h,&m);
    printf("%d\n",h*60+m);
}

执行结果:

9:23
563
  1. 源程序:
main()
{
    int a[]={-10,0,15,34},i;
    for(i=0;i<=3;i++)
        printf("%d\370C=%g\370F\t",a[i],a[i]*1.8+32);
}

执行结果:

-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F
  1. 源程序:
main()
{
    double pi=3.14159265358979,r=5;
    printf("r=%lg A=%.10lf S=%.10lf\n",r,2*pi*r,pi*pi*r);
}

执行结果:

r=5 A=31.4159265359 S=49.3480220054
  1. 源程序:
#include "math.h"
main()
{
    double a,b,c;
    scanf("%lf%lf%lf",&a,&b,&c);
    if (a+b>c && a+c>b && b+c>a)
    {
        double s=(a+b+c)/2;
        printf("SS=%.10lf\n",sqrt(s*(s-a)*(s-b)*(s-c)));
    }
    else
        printf("Data error!");
}

执行结果:

4 5 6
SS=9.9215674165
  1. 源程序:
main()
{
    int a=3,b=4,c=5;
    float d=1.2,e=2.23,f=-43.56;
    printf("a=%3d,b=%-4d,c=**%d\nd=%g\ne=%6.2f\nf=%-10.4f**\n",a,b,c,d,e,f);
}
  1. 源程序:
main()
{
    int a,b,c,m;
    scanf("%d %d %d",&a,&b,&c);
    m=a;a=b;b=c;c=m;
    printf("%d %d %d\n",a,b,c);
}

执行结果:

5 6 7
6 7 5
  1. 源程序:
main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    printf("average of %d,%d and %d is %.2f\n",a,b,c,(a+b+c)/3.);
}

执行结果:

6 7 9
average of 6,7 and 9 is 7.33
  1. 不能。修改后的源程序如下:
main()
{
    int a,b,c,x,y;
    scanf("%d %d %d",&a,&b,&c);
    x=a*b;
    y=x*c;
    printf("a=%d,b=%d,c=%d\n",a,b,c);
    printf("x=%d,y=%d\n",x,y);
}

第5章 选择结构程序设计

一、单项选择题(第113页)

1-4.DCBB 5-8.DABD

二、填空题(第115页)

  1. 非0 0
  2. k==0
  3. if (abs(x)<4) printf("%d",x);else printf("error!");
  4. if((x>=1 && x<=10)||(x>=200 && x<=210) && x%1==0)printf("%d",x);
  5. k=1 (原题最后一行漏了个d,如果认为原题正确,则输出k=%。)
  6. 8! Right!11
  7. $$$a=0
  8. a=2,b=1

三、编程题(第116页)

  1. 有错。正确的程序如下:
main()
{
    int a,b,c;
    scanf("%d,%d,%d",&a,&b,&c);
    printf("min=%d\n",a<b?(b<c?c:b):(a<c?c:a));
}
  1. 源程序:
main()
{
    unsigned long a;
    scanf("%ld",&a);
    for(;a;printf("%d",a%10),a/=10);
}

执行结果:

12345
54321
  1. (1)源程序:
main()
{
    int x,y;
    scanf("%d",&x);
    if (x>-5 && x<0)
        y=x;
    if (x>=0 && x<5)
        y=x-1;
    if (x>=5 && x<10)
        y=x+1;
    printf("%d\n",y);
}

(2)源程序:

main()
{
    int x,y;
    scanf("%d",&x);
    if(x<10)
        if(x>-5)
            if(x>=0)
                if(x>=5)
                    y=x+1;
                else
                    y=x-1;
            else
                y=x;
    printf("%d\n",y);
}

(3)源程序:

main()
{
    int x,y;
    scanf("%d",&x);
    if(x<10)
        if(x>=5)
            y=x+1;
        else
            if(x>=0)
                y=x-1;
            else
                if(x>-5)
                    y=x;
    printf("%d\n",y);
}

(4)源程序:

main()
{
    int x,y;
    scanf("%d",&x);
    switch(x/5)
    {
        case -1:
            if(x!=-5)
                y=x;
            break;
        case 0:
            y=x-1;
            break;
        case 1:
            y=x+1;
    }
    printf("%d\n",y);
}
  1. 本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。 现给出Delphi源程序和C++ Builder源程序。 Delphi源程序:
procedure TForm1.Button1Click(Sender: TObject);
begin
    edit3.Text:=format('%.0f天',[strtodate(edit2.text) -strtodate(edit1.text)]);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
    Edit2.Text:=datetostr(now);
    button1click(form1)
end;

C++ Builder源程序:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Edit3->Text=IntToStr(StrToDate(Edit2->Text)-StrToDate(Edit1->Text))+"天";
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    Edit2->Text=DateToStr(Now());
    Button1Click(Form1);
}

执行结果:(运行于Windows下) 5. 源程序:

main()
{
    unsigned a,b,c;
    printf("请输入三个整数:");
    scanf("%d %d %d",&a,&b,&c);
    if(a+b>c && a+c>b && b+c>a && a==b && a==c)
        printf("构成等边三角形\n");
    else
        if(a+b>c && a+c>b && b+c>a)
            if(a==b || a==c || b==c)
                printf("构成等腰三角形\n");
            else
                printf("构成一般三角形\n");
        else
            printf("不能构成三角形\n");
}

执行结果:

请输入三个整数:5 6 5
构成等腰三角形
  1. 源程序:
main()
{
    int x,y;
    scanf("%d",&x);
    if(x<20)
        y=1;
    else
        switch(x/60)
        {
            case 0:
                y=x/10;
                break;
            default:
                y=6;
        }
    printf("x=%d,y=%d\n",x,y);
}
  1. 源程序:
main()
{
    unsigned m;
    float n;
    scanf("%d",&m);
    if(m<100)
        n=0;
    else if(m<600)
        n=0.06;
    else
        n=(m/100+0.5)/100;
    printf("%d %.2f %.2f\n",m,m*(1-n),m*n);
}

执行结果:

450
450 429.75 20.25
  1. 2171天(起始日期和终止日期均算在内) 本题可利用第4小题编好的程序进行计算。把起始日期和终止日期分别打入“生日”和“今日”栏内,单击“实足年龄”按钮,将所得到的天数再加上1天即可。
  2. 源程序:
#include "math.h"
main()
{
    unsigned long i;
    scanf("%ld",&i);
    printf("%ld %d\n",i%10,(int)log10(i)+1);
}

执行结果:

99887
7 5
  1. 源程序:
main()
{
    unsigned long i;
    unsigned j[10],m=0;
    scanf("%ld",&i);
    for(;i;){
        j[m++]=(i+2)%10;
        i/=10;
    }
    for(;m;m--)
        i=i*10+j[m-1];
    printf("%ld\n",i);
}

执行结果:

6987
8109

(注:要加密的数值不能是0或以0开头。如果要以0开头需用字符串而不能是整数。)

第6章 循环结构程序设计

一、单项选择题(第142页)

1-4.BCCB 5-8.CBCA

二、填空题(第143页)

  1. 原题可能有误。如无误,是死循环
  2. 原题有误。如果把b=1后面的逗号改为分号,则结果是8。
  3. 20
  4. 11
  5. 2.400000
  6. ##*#$
  7. 8 5 2
  8. ①d=1.0 ②++k ③k<=n
  9. ①x=0 ②xamin

三、编程题(第145页)

  1. 源程序:
main()
{
    int i=1,sum=i;
    while(i<101){
        sum+=i=-i-2;
        sum+=i=-i+2;
    }
    printf("%d\n",sum);
}

执行结果:

51
  1. 源程序:
main()
{
    double p=0,n=0,f;
    int i;
    for(i=1;i<=10;i++)
    {
        scanf("%lf",&f);
        if (f>0)
            p+=f;
        else
            n+=f;
    }
    printf("%lf %lf %lf\n",p,n,p+n);
}
  1. 源程序:
main()
{
    unsigned a;
    scanf("%ld",&a);
    for (;a;printf("%d,",a%10),a/=10);
    printf("\b \n");
}

执行结果:

23456
6,5,4,3,2
  1. 源程序:
main()
{
    unsigned long a,b,c,i;
    scanf("%ld%ld",&a,&b);
    c=a%1000;
    for(i=1;i<b;i++)
        c=c*a%1000;
    if(c<100)
        printf("0");
    if(c<10)
        printf("0");
    printf("%ld\n",c);
}

执行结果:

129 57
009
  1. 原题提供的计算e的公式有误(前面漏了一项1)。正确的公式是e= 1 + 1 + 1/2! + 1/3! + … + 1/n! + … (1)源程序:
main()
{
    double e=1,f=1;
    int n;
    for(n=1;n<=20;n++){
        f/=n;
        e+=f;
    }
    printf("e=%.14lf\n",e);
}

执行结果:

e=2.71828182845905

(2)源程序:

main()
{
    double e=1,f=1;
    int n;
    for(n=1;f>1e-4;n++){
        f/=n;
        e+=f;
    }
    printf("e=%.4f\n",e);
}

执行结果:

e=2.7183
  1. 源程序:
main()
{
    unsigned long a=0,b=1,c=0;
    int i,d;
    scanf("%d",&d);
    for (i=1;i<=(d+2)/3;i++)
        printf("%10ld%10ld%10ld",a,b,(a+=b+c,b+=c+a,c+=a+b));
}

本题还可以用递归算法(效率很低),源程序如下:

unsigned long fun(int i)
{
    return i<=3?i:fun(i-1)+fun(i-2)+fun(i-3);
}
main()
{
    int i,d;
    scanf("%d",&d);
    for(i=1;i<=d;i++)
        printf("%10ld",fun(i));
}

执行结果:

15
1 2 3 6 11 20 37 68
125 230 423 778 1431 2632 4841
  1. 源程序:
main()
{
    int i;
    for(i=1010;i<=9876;i+=2)
        if(i/100%11 && i%100%11 && i/10%100%11 && i/1000!=i%10 && i/1000!=i/10%10 && i/100%10!=i%10)
            printf(" %d",i);
}

执行结果:

1024 1026 1028 1032 1034 1036 …… …… 9874 9876
  1. 源程序:
main()
{
    int i,j,k;
    printf("apple watermelon pear\n");
    for(i=1;i<=100;i++)
        for(j=1;j<=10;j++)
            if((k=100-i-j)*2==400-i*4-j*40)
                printf("%4d%7d%9d\n",i,j,k);
}

执行结果:

apple watermelon pear
5 5 90
24 4 72
43 3 54
62 2 36
81 1 18
  1. 源程序:
#include "stdio.h"
#define N 4 /* N为阶数,可以改为其他正整数 */
main()
{
    int m=N*2,i,j;
    for(i=1;i<m;printf("\n"),i++)
        for(j=1;j<m;
            putchar(N-abs(i-N)>=abs(j++-N)?' ':'*'));
}

如果把N值改为5,则执行结果如下:

*
***
*****
*******
*********
*******
*****
***
*

求C语言程序设计习题集与上机指导-第三版 (及答案)......

C语言程序设计第三版谭浩强课后习题答案完整版

第一章

1.5 请参照本章例题,编写一个C程序,输出以下信息:

**************************
Very Good!
**************************

解:

mian()
{
    printf("**************************");
    printf("\n");
    printf("Very Good!\n");
    printf("\n");
    printf("**************************");
}

1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。

解:

mian()
{
    int a,b,c,max;
    printf("请输入三个数a,b,c:\n");
    scanf("%d,%d,%d",&a,&b,&c);
    max=a;
    if(max<b)
        max=b;
    if(max<c)
        max=c;
    printf("最大数为:%d",max);
}

第三章

3.6 写出以下程序运行的结果。

main()
{
    char c1='a',c2='b',c3='c',c4='\101',c5='\116';
    printf("a%cb%c\tc%c\tabc\n",c1,c2,c3);
    printf("\t\b%c %c",c4,c5);
}

解:

aaㄩbbㄩㄩㄩccㄩㄩㄩㄩㄩㄩabc
AㄩN

3.7 要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母。例如,字母"A"后面第4个字母是"E"。"E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,'C'、'h'、'i'、'n'、'a',经过运算,使c1、c2、c3、c4、c5分别变为'G'、'l'、'm'、'r'、'e',并输出。

解:

#include stdio.h
main()
{
    char c1='C',c2='h',c3='i',c4='n',c5='a';
    c1+=4;
    c2+=4;
    c3+=4;
    c4+=4;
    c5+=4;
    printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5);
}

运行结果:

密码是Glmre

3.9 求下面算术表达式的值。

(1)x+a%3*(int)(x+y)%2/4
设x=2.5,a=7,y=4.7
(2)(float)(a+b)/2+(int)x%(int)y
设a=2,b=3,x=3.5,y=2.5
(1)2.5
(2)3.5

3.10 写出程序运行的结果。

main()
{
    int i,j,m,n;
    i=8;
    j=10;
    m=++i;
    n=j++;
    printf("%d,%d,%d,%d",i,j,m,n);
}

解:

9,11,9,10

3.12 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。

(1)a+=a
(2)a-=2
(3)a*=2+3
(4)a/=a+a
(5)a%=(n%=2),n的值等于5
(6)a+=a-=a*=a
解: (1) 24
(2) 10
(3) 60
(4) 0
(5) 0
(6) 0

第四章

4.4 若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b'。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。

a=_3_ _b=_4_ _c=_5
x=1.200000,y=2.400000,z=-3.600000
x+y=_3.600_ _y+z=-1.20_ _z+x=-2.40
c1=ˊaˊ_or_97(ASCII)
c2=ˊbˊ_or_98(ASCII)
main()
{
    int a=3,b=4,c=5;
    long int u=51274,n=128765;
    float x=1.2,y=2.4,z=3.6;
    char c1='a',c2='b';
    printf("a=%2d b=%2d c=%2d\n",a,b,c);
    printf("x=%f,y=%f,z=%f\n",x,y,z);
    printf("x+y=%5.2f y+z=%5.2f z+x=%5.2f\n",x+y,y+z,z+x);
    printf("u=%6ld n=%9ld\n",u,n);
    printf("%s %s %d%s\n","c1='a'","or",c1,"(ASCII)");
    printf("%s %s %d%s\n","c2='a'","or",c2,"(ASCII)");
}

4.7 用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入?

main()
{
    int a,b;
    float x,y;
    char c1,c2;
    scanf("a=%d_b=%d",&a,&b);
    scanf("_x=%f_y=%e",&x,&y);
    scanf("_c1=%c_c2=%c",&c1,&c2);
}

输入:

a=3_b=7
_x=8.5_y=71.82
_c1=A_c2=a

4.8 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。

main()
{
    float r,h,C1,Sa,Sb,Va,Vb;
    scanf("%f,%f",&r,&h);
    C1=2*3.14*r;
    Sa=3.14*r*r;
    Sb=4*Sa;
    Va=4*3.14*r*r*r/3;
    Vb=Sa*h;
    printf("C1=%.2f\n",C1);
    printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);
}

4.9 输入一个华氏温度,要求输出摄氏温度。公式为

c=5(F-32)/9 输出要求有文字说明,取位2小数。

main()
{
    float F,c;
    scanf("%f",&F);
    c=5*(F-32)/9;
    printf("c=%.2f",c);
}

4.10 编程序,用getchar函数读入两个字符给c1、c2,然后分别用函数和函数输出这两个字符。并思考以下问题:(1)变量c1、c2应定义为字符型或整形?抑二者皆可?(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整形变量与字符变量是否在任何情况下都可以互相代替?如:

char c1,c2;

int c1,c2;
是否无条件的等价?

#include"stdio.h"
main()
{
    char c1,c2;
    c1=getchar();
    c2=getchar();
    putchar(c1);
    putchar('\n');
    putchar(c2);
    putchar('\n');
}

C语言程序设计课后答案(何钦铭)

C语言版:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    int i, j, k, n, m;
    for (i=1; i<10; i++)
        for (j=0; j<10; j++)
            for (k=0; k<10; k++){
                n = i*i*i + j*j*j + k*k*k;
                m = i*100 + j*10 + k;
                if (n == m) printf("%d\n", m);
            }
    system("PAUSE");
    return 0;
}

Python 版:

for i in range(1, 10):
    for j in range(10):
        for k in range(10):
            if i**3+j**3+k**3 == i*100+j*10+k:
                print(i*100+j*10+k)

输出结果:

153
370
371
407

c语言程序设计(何钦铭 颜晖 第三版)课后习题答案