C程序设计教程与实验 (吉顺如主编 曾祥绪、陶恂副主编)课后习题答案

(吉顺如主编 曾祥绪、陶恂副主编) C程序设计教程与实验 课后习题答案

欢迎大家提出答案不合理的地方哦!一起加油呀!

第一章 C语言程序设计概述

  1. 选择题
    1-5 ACDBC 6-10 CDCBA
  2. 填空题
    (1)1 函数体
    (2)main() mian()
    (3)编译 目标
    (4).c .obj .exe
    (5)缩进 无影响 /* */ //
    (6)(1111011)2 (173)8 (7D)16
    (7)53
    (8)110100101
  3. 编程题
    (1)
#include <stdio.h>
int main()
{
printf("班级\n姓名\n学号\n");
return 0;
}

(2)

#include <stdio.h>
int main(){
    int a,b,add,subtract,multiply;
    float divide;
    printf("请输入两个正整数:");
    scanf("%d%d",&a,&b);
    add = a+b;
    subtract = a-b;
    multiply = a*b;
    divide =(float) a/b;

    printf(" %d+%d=%d\n %d-%d=%d\n %d*%d=%d\n %d/%d=%.2f\n",a,b,add,a,b,subtract,a,b,multiply,a,b,divide);
    return 0;
}

第二章 顺序结构程序设计

  1. 选择题
    1-5 DDBCA 6-10BBBDD

  2. 填空题
    (1)5.5
    (2)14.2 20
    (3)x%1010+x/10
    (4)sin(sqrt(x
    x))/(a*b)
    (5)3
    (6)3
    (7)有穷、确定、可行
    (8)97,g
    (9)%f%f &x,&y
    (10)16.00

  3. 编程题
    (1)

#include <stdio.h>
# include <math.h>
int main(){
    float a ,b,x,j;
    printf("请输入两个数值:");
    scanf("%f%f",&a,&b);
    x = (a*a + b*b)/sqrt(3.00/(a+b));
    printf("%5.3f\n",x);
return 0;
}

(2)

#include <stdio.h>
 int main(){
     float a, b, h;
     float s = 0.00;
     printf("请输入三个数:");
     scanf("%f%f%f",&a,&b,&h);
    // s =(1/2)*(a+b)*h;//当写成1/2时算出来为0.5但是只写0
    s =0.5*(a+b)*h;
     printf("%5.2f\n",s);
     return 0;
 }

第三章 选择结构程序设计

  1. 选择题
    1-5 BBCAC 6-10 CDBCC
    解析:10、先计算关系运算符(==)再计算赋值运算符(=),关系运算符的运算结果均为(“真"或"假”),故a = 1,b = 0;
  2. 填空题
    (1)1
    (2)x%2== 0
    (3)1
    (4)(year%= = 0 && year %100 != 0) || (year%400 == 0)
    (5)A
    (6)x < 0 || (x > 10 && x < 50)
    (7)5 3 2
    (8)$
    (9)(1)2 (2)3 CC a = 2,b=2,c=4
    (10)a = 2,b = 3
  3. 编程题
    (1)
#include <stdio.h>
# include <math.h>
int main()
{
    float x,y;
    printf("请输入x的值:");
    scanf("%f",&x);
    if(x<4){
        y = (x+7)/(2*x-1);
        printf("y=%.2f\n",y);
    } else if(x>=4&&x<70){
        y = 3*x*x+5;
         printf("y=%.2f\n",y);
    }else if(x>=70){
        y = x-sqrt(4*x-1);
         printf("y=%.2f\n",y);
    }
    return 0;
}

(2)

#include <stdio.h>
#include <math.h>
int main()
{   
    float a,b,c,s,area;
    printf("请输入三角形的三条边:");
    scanf("%f%f%f",&a,&b,&c);
    s = (a+b+c)/2;
    
    if(a+b>c && a+c>b && b+c>a){
         
        
        if((a == c||a == b||b == c)){             printf("此三角形为等腰三角形\n");
            if(a == b == c){
                printf("此三角形为等边三角行\n");
            }
        }
        else if((a == c||a == b||b == c)&&(c*c == a*a + b*b)||(b*b == a*a + c*c)||(a*a == b*b + c*c)){
                printf("此三角形为等腰直角三角行\n");
        }
        else if((c*c == a*a + b*b)||(b*b == a*a + c*c)||(a*a == b*b + c*c)){
            printf("此三角形为直角三角行\n");
        }else{
            printf("此三角形为一般三角形");
        }
        

    area = sqrt(s*(s-a)*(s-b)*(s-c));             //使用海伦公式
    printf("三角形的面积为area:%.2f\n",area);
    }
    else{
        printf("这三条边不可构成三角形");
    }
    return 0;
}

(3)

#include <stdio.h>
int main(){
    float n = 0,m = 0;//n:奖金值  m:奖金税率
    int r;//r:n取模
    printf("请输入奖金值:");
    scanf("%f",&n);
    r = (int)n/1000;
    if(n >0){
           if(n>=10000){
                 m = n * (10.0/100);
                n -= m;
                printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
            }else{
                        switch(r){
                        case 9:case 8:case 7:case 6:case 5:
                        m = n * (7.0/100);
                        n -= m;
                        printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
                        break;

                        case 4:case 3:
                        m = n * (5.0/100);
                        n -= m;
                        printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
                        break;

                        case 2:case 1:
                        m = n * (3.0/100);
                        n -= m;
                        printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
                        break;

                        default:
                        printf("税率为:%.2f,应得奖金为:%.2f\n",m,n);
                        break;

                    }

                 }
    }
    else{
        printf("输入的奖金值小于0,请重新输入");
    }
    return 0;
}

(4)

int main(){
    int i;
    printf("请输入一个正整数:");
    scanf("%d",&i);
    if(i % 5 == 0 &&i % 7 == 0){
        printf("YES\n");
    }else{
        printf("NO\n");
    }
    return 0;
}

(5)

#include <stdio.h>
#include <math.h>
int main(void)
{   
    int num;
    do
    {
        printf("请输入一个不大于四位的数据:\n");
        scanf("%d", &num);
        while(getchar()!='\n') //防止意外输入无效字符
        continue;

    }while(!(num>0 && num<10000));

    int i=1, sum=0;
    for(i = 1; num / i > 0; i *= 10)   sum++;

    printf("输入的数据是%d位数据\n", sum);

    int num1 = num;

    for(i = pow(10, sum-1); i>=1; i/=10)
    {
    printf("%d\t", num1/i);
    num1 = num1%i;
    }

    printf("\n");
    num1 = num;

    for(i=10; i<=pow(10, sum); i*=10)
    {
    printf("%d\t", num1%10);
    num1 = num1/10; 
    }
    printf("\n");

return 0;
}

第四章 循环结构程序设计

一、选择题
1-5 ACBDA 6-10 BDBDB

二、填空题
1、循环 switch
2、4
3、sjhiu
4、x =1,y = 20
5、0 2
6、18
7、1
8、7
9、c = getchar() n:m
10、i%13 == 0 break

三、编程题
(1)

#include <stdio.h>
 int main()
{
    int numA = 0;
    int numa = 0;
    char c ;
    printf("请输入一串字母:\n");
    while((c = getchar())!= '\n'){ //因为getchar()一次只能获取一个字符,所以要放在循环里面
        if(c == 'A'){
            numA++;
        }
        if(c == 'a') {
            numa++;
        }
        
    }
    printf("A的个数为:%d,a的个数为:%d\n",numA,numa);

    return 0;
}

(2)

#include <stdio.h>
 int main()
{
    int i = 0;
    double a = 0.0;
    double a1 = 0.0;
    double a2 = 0.0;
    double π = 0.0;
    double sum = 1.0;
    for (i = 1; i <= 50; i++)
    {
        a = 2 * i;
        a1 = a/(a-1);
        a2 = a/(a+1);
        sum =sum * (a1*a2);
    }
     π = 2*sum;
     printf("π = %lf\n",π);

    return 0;
} 

(3)

#include <stdio.h>
int main()
{
    int five = 0;
    int two = 0;
    int one = 0;
    int count = 0;//计算有几种方案
    //five + two + one  == 100;
    //5 * five + 2 * two + 1 * one =150
    for (five = 1; five <= 30; five++)//五分的不会超过30枚
    {
        for (two = 1; two <= 75; two++)//两分的不会超过75枚
        { 
            one = 100 - five - two;
           if(5 * five + 2 * two + one == 150){
               ++count;
               printf("方案%d,5分的%d枚,2分的%d枚,1分的%d枚\n",count,five,two,one);
           }
        }
    
    }

    return 0;
}

(4)

int main()
{
    int j = 0;
    int t = 0;
    for(t = 1;t<=96;t++){
         j = 98 - t;
        if(2*j + 4*t == 386){
        printf("鸡的数量为:%d,兔的数量为:%d\n",j,t);
    }
    }
    
    return 0;
} 

(5)

//将一个正数分解质因数,例如:输入90:,打印出2*3*3*5
//请求有大佬帮忙,只写了一半
#include <stdio.h>
# include <math.h>
int main()
{
    int i = 0;
    printf("请输入一个数:");
    scanf("%d",&i);
    int j = 2;
    for(j = 2;j <= sqrt(i);j++){
        if(i % j == 0){
            printf("%d\t",i);
            while (i%j)
            {
                int r = i%j;
                i = j;
                j = r;
            }
            
            
            break;
        }
    }
        if(j > sqrt(i))
        {
            //printf("%d",i);
            printf("%d = 1 * %d\n",i,i);
        }
    
    return 0;
} 

(6)

 int static sum = 0;
 void  print(int n)
{
    if(n>9){     //条件很重要:不会栈溢出 重要
         print(n/10);
    }
    sum += (n%10);//重要:每次递归之后,越来越接近限制条件  

}

int main()
{
    int num = 0;
    printf("请输入一个四位数字:");
    scanf("%d",&num);
    print(num);
    printf("sum = %d\n",sum); 
    return 0;
}

(7)

int main()
{
    int i = 0;
    int bai ;
    int shi = 0;
    int ge = 0;
   // int count ;
    for(i = 100;i<=999;i++){
        bai = i/100;
        shi = i/10%10;
        ge = i%10;
        if(i == bai*bai*bai + shi*shi*shi + ge*ge*ge ){
            // count++;
            // if(count%10==0){
            //     printf("\n");
            // }
            printf("%d\t",i);
        }
    }
    
    return 0;
}

(8)

//利用泰勒级数sin(x)≈x-x^3/3!+x^5/5!-x^7/7!+x^9/9!-……计算sin(x)的值,要求:最后一项的绝对值,小于10^-5,
//并统计出此时累加了多少项(x由键盘键入)
//这题我不会啊😰😰😰!!!求大佬帮忙

(9)

#include <math.h>
#include <stdlib.h>
#include <time.h>
void menu(){
    printf("*************************\n");
    printf("*** 1、play   0、exit ***\n");
    printf("*************************\n");

}

void play(){
    int j ;
    int a = rand()%100;
    int b;
     while (j<=10)
      {
          printf("请输入您猜的数字:");
           scanf("%d",&b);
           if(b>a)printf("您猜大了!");
           else if(b<a)printf("您猜小了!");
           else if(a == b)printf("恭喜您猜对啦!");
           j++;
           if(j == 10){
           printf("您猜十次均错误,游戏失败,数字是:%d\n",a);
           break;
       }
      }
      
}

void game()
{
    menu();
    int input;
    printf("请输入您的选项:\n");
    scanf("%d",&input);
    do
    {
       switch (input)
       {
        case 1:
            play();
           break;
       
        case 0 :
           printf("退出游戏!");
           break;
        default:
            printf("输入错误,请重新输入:\n");
           break;
       }
    } while (input);
    
}
int main()
{
    srand((unsigned) time(NULL));
    game();

    return 0;
}

(10)

int main()
{
    int i = 0; //控制行数变量
    int j = 0; //控制光标定位变量
    int k = 0; //控制输出字符变量
    for (i = 1; i <= 4; i++)
    { //上半部分:外循环控制行数
        printf("\n");
        //内循环用空格光标定位
        for (j = 1; j <= 4 - i; j++)
        {
            printf("   ");
        }
        for (k = 1; k <= i; k++)
        { //控制前半段*输出
            printf(" * ");
        }
        for (k = i - 1; k >= 1; k--)
        { //控制后半段输出
            printf(" * ");
        }
    }
    for (i = 1; i<= 3; i++)//下半部分:外循环控制行数
    {
        printf("\n");
        for(j = 1;j <= i;j++){//控制光标定位
            printf("   ");
        }
        for(k = 4-i;k >= 1;k-- ){//前半段字符输出
            printf(" * "); 
        }
        for(k = 3-i;k>=1;k--)
        {
            printf(" * ");
        }
    }
    printf("\n");
    return 0;
}

999

  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值