C Primer Plus 第6版 第六章 编程练习参考答案

编译环境VS Code+WSL GCC 源码请到文末下载 。
注意:本章部分题目中用到了math.h 用gcc编译时加上-lm参数。

/*第1题*************************/
#include<stdio.h>
int main(void)
{
    int i;
    char char_arry[26]={0};
    for(i=0;i<26;i++)
    {
        char_arry[i]='a'+i;
    }
    for(i=0;i<26;i++)
    {
        printf("%c ",char_arry[i]);
    }
    putchar(10);
}
/*第2题*************************/
#include<stdio.h>
int main()
{
    int i,j;
    for (i = 0; i < 5; i++)
    {
        for(j = 0; j < i+1 ;j++)
        putchar('$');
    putchar('\n');    
    }
    
    return 0;
}
/*第3题*************************/
#include<stdio.h>
int main()
{
    int i,j;
    for (i = 0; i < 6; i++){
        for(j = 0;j <= i;j++)
            printf("%c",'F'-j);
        putchar(10);
    }
    return 0;
}
/*第4题*************************/
#include<stdio.h>
int main()
{
    char start = 'A';
    int i,j;
    for(i=0;i<6;i++){
        for(j=0;j<=i;j++){
            printf("%c",start);
            start++;
        }
        putchar(10);
    }
    return 0;
}
/*第5题*************************/
#include<stdio.h>
int main()
{
    char a,tmp;
    int i,j;
    printf("请输入一个大写字母:");
    tmp=a=getchar();
    for(i=5;i>0;i--){
        for(j=i-1;j>0;j--)
        putchar(' ');

        for(j=6-i;j>0;j--)
        printf("%c",a++);
        a--;

        for(j=5-i;j>0;j--)
        printf("%c",--a);

        putchar('\n');
        a=tmp;
    }
    return 0;
}
/*第6题*************************/
#include<stdio.h>
int main()
{
    int input;
    printf("请输入表格的行数:");
    scanf("%d",&input);
    printf("-------------------\n");
    for(;input>0;input--){
        printf("| %3d | %3d | %3d |\n",input,input*input,input*input*input);
        printf("-------------------\n");
    }
    return 0;
}
/*第7题*************************/
#include<stdio.h>
#include<string.h>
int main()
{
    char arry[100]={0};
    int lenth,i;
    printf("请输入一些字符:");
    scanf("%s",arry);
    lenth = strlen(arry);
    printf("逆序打印这些字符:");
    for(i= --lenth;i>=0;i--)
    {
        putchar(arry[i]);
    }
    putchar(10);
    return 0;
}
/*第8题*************************/
#include<stdio.h>
int main()
{
    float input_1,input_2,res;
    printf("请输入两个数(输入非数字退出):");
    while (scanf("%f %f",&input_1,&input_2)==2)
    {
        if(input_1>input_2){
            res = (input_1 - input_2) / (input_1 * input_2);
        }
        else if(input_1<input_2)
        {
            res = (input_2 - input_1) / (input_2 * input_1);
        }
        else
        {
            res = 0;
        }
        printf("%g %g %g\n",input_1,input_2,res);
    }
    
}
/*第9题*************************/
#include<stdio.h>

float func(double input_1,double input_2);

int main()
{
    float input_1,input_2,res;
    printf("请输入两个数(输入非数字退出):");
    while (scanf("%f %f",&input_1,&input_2)==2)
    {
        res = func(input_1,input_2);
        printf("%g %g %g\n",input_1,input_2,res);
    }
    
}

float func(double input_1,double input_2)
{
    double res;
    if(input_1>input_2){
        res = (input_1 - input_2) / (input_1 * input_2);
    }
    else if(input_1<input_2)
    {
        res = (input_2 - input_1) / (input_2 * input_1);
    }
    else
    {
        res = 0;
    }
    return res;
}
/*第10题*************************/
#include<stdio.h>
#include<string.h>
int main()
{
    int input_1,input_2,res,i;
    char tmp;
    printf("请输入一个下限整数和一个上限整数(输入相同的数退出程序):");
    while (1)
    {
        if(scanf("%d %d",&input_1,&input_2)!=2){
            
            do{tmp =getchar();}
            while(tmp != '\n');
            //while(tmp>='0'&&tmp<='9');//有个BUG,在输入N个非数字字符就会输出N个错误提示。
            printf("输入错误,请重新输入:");
            continue;
        }
        else if(input_1 > input_2){
            printf("输入错误,请重新输入:");
            continue;
        }
        else if(input_1 == input_2){
            printf("程序退出...\n");
            break;
        }
        for(i=input_1;i<=input_2;i++)
        res += i*i;

        printf("两个数的平方从%d到%d的和是%d\n",input_1*input_1,input_2*input_2,res);
        printf("请输入一个下限整数和一个上限整数(输入相同的数退出程序):");
    }
    
}
/*第11题*************************/
#include<stdio.h>
int main()
{
    int arry[]={1,2,3,4,5,6,7,8};
    int i;
    for(i=7;i>=0;i--){
        printf("%d",arry[i]);
    }
    putchar(10);
    return 0;
}
/*第12题*************************/
#include<stdio.h>

double arr_add_fun(int len);
double arr_add_fun_(int len);

int main()
{
    int arr_len;
    double res;
    while (1)
    {
        printf("请输入次数(输入负数或0退出):");
        scanf("%d",&arr_len);
        if (arr_len > 0)
        {
            res = arr_add_fun(arr_len)+arr_add_fun_(arr_len);
            printf("%d项的和是%g\n",arr_len,res);
        }
        else
        {
            printf("程序退出...\n");
            break;
        }
    }
    
    return 0;
}

double arr_add_fun(int len)
{
    double res = 0,cnt = 1.0;
    int i;
    for(i=1;i<=len;i++)
    {
        res += 1.0 / cnt++;
    }
    return res;
}
double arr_add_fun_(int len)
{
    double res = 0,cnt = 1.0;
    int i;
    for(i=1;i<=len;i++)
    {
        if(i%2 == 0){
            res -= 1.0 / cnt++;
        }
        else
        {
            res += 1.0 / cnt++;
        }
    }
    return res;
}
/*第13题*************************/
#include<stdio.h>
#include<math.h>
/************************************/
/* 请添加-lm参数,例如:gcc 13.c -lm */
/************************************/
int main()
{
    int i,res;
    int arry[8],*p=arry;
    for(i=0;i<8;i++){
        arry[i]=pow(2,i);
    }
    i=0;
    do{
        printf("%d ",arry[i++]);
    }
    while (i<8);
    putchar(10);
    return 0;
}

/*第14题*************************/
#include<stdio.h>
int main()
{
    double num_arr[8],num_arr_[8];
    int i;
     printf("请输入8个数(按Enter键入)\n");
    for(i=0;i<8;i++){
        printf("请输入第%d个数:",i+1);
        scanf("%lf",&num_arr[i]);
    }
    num_arr_[0]=num_arr[0];
    for(i=1;i<8;i++)
        num_arr_[i]=num_arr[i]+num_arr_[i-1];
    for(i=0;i<8;i++)
        printf("%-3g ",num_arr[i]);
    putchar(10);
    for(i=0;i<8;i++)
        printf("%-3g ",num_arr_[i]);
    putchar(10);
    return 0;
}
/*第15题*************************/
#include<stdio.h>
int main()
{
    char arry[255]={0};
    char rec,i=0;
    printf("请输入一些字符:");
    do{
        scanf("%c",&rec);
        arry[i]=rec;
        i++;
    }
    while (rec != '\n');
    arry[i]='\0';
    for(i--;i>=0;i--)
    {
        printf("%c",arry[i]);
    }
    putchar(10);
    return 0;
}
/*第16题*************************/
#include<stdio.h>
int main()
{
    int year=0;
    double daphne=100,deirdre=100;
    do{
        year++;
        daphne  += 100 * 0.1;
        deirdre *= 1.05;
    }
    while (deirdre <= daphne);
    printf("需要%d年deirdre会超过daphne。\n",year);
    printf("deirdre能拿到%g dollars\ndaphne能拿到%g dollars\n",deirdre,daphne);
    return 0;
}
/*第17题*************************/
#include<stdio.h>
int main()
{
    int year = 1;
    double dollar=1000000;
    do{
        year++;
        dollar += dollar * 0.08;
        dollar -= 100000;
    }
    while (dollar > 100000);
    printf("需要%d年。\n",year);
    return 0;
}
/*第18题*************************/
#include<stdio.h>
int main()
{
    int frieds = 5,week = 1;
     while (frieds <= 150){
        frieds -= week;
        frieds *= 2;
        if(frieds > 150)
            break;
        printf("第%d周有%d个朋友。\n",week,frieds);    
        week++;
    }
    
    return 0;
}