C primer plus(第五版)编程练习第六章

第一题:编写一个程序。创建一个具有26个元素的数组;并在其中存储26个小写字母。并让程序现实该数组的内容。
解:
代码如下:
#include
int main(void)
{
    char i,letters[26];
    int j;
    
    for(i = 'a',j = 0;i <= 'z';i++,j++)
        letters[j] = i;
    for(j = 0;j<26;j++)
        printf("%c",letters[j]);
    printf("\n");
    return 0;
}
———————————————分割线—————————————————
第二题:使用嵌套循环,产生下图案:
$
$$
$$$
$$$$
$$$$$
解:
代码如下:
#include
int main(void)
{
    int i,j;
    
    for(i = 1;i <=5;i++)
    {
        for(j = 1;j<=i;j++)
            printf("$");
        printf("\n");
    }
    return 0;
}
———————————————分割线—————————————————
第三题:使用嵌套循环产生下列图案:
F
FE
FED
FEDC
FEDCB
FEDCBA
请注意:如果您的系统不使用ASCII或其他以数字顺序编码的码,您可以把一个字符数字初始化为字母表中的字母:
char lets[26] = "ACBDEFGHIJKLMNOPQRSTUVWXYZ";
然后就可以使用数组索引来选用单个的字母,例如lets[0]的值时'A'。
解:
代码如下:
#include
int main(void)
{
    int i,j;
    char ch;
    
    for(i = 1;i <=6;i++)
    {
        for(j = 1,ch = 'F';j<=i;j++,ch -= 1)
            printf("%c",ch);
        printf("\n");
    }
    return 0;
}
———————————————分割线—————————————————
第四题:编写一个程序,运行程序时,用户输入一个大写字母例如'E',产生如下的金字塔:
         A
       ABA
     ABCBA
   ABCDCBA
ABCDEDBCA
这种图案需要扩展到用户输入的字符。提示:使用嵌套循环处理,并且拥有3个内部循环,一个处理空白,一个处理升序,一个处理降序。
解:
代码如下:
#include
int main(void)
{
    int row,space,up,down;
    char ch,up_c,down_c;
    
    printf("Input a capital:");
    scanf("%c",&ch);
    for(row = 0;row <= ch - 'A';row++)
    {
        for(space = ch -'A';space >= row;space-- )
            printf(" ");
        for(up = 0,up_c = 'A';up <= row;up++,up_c++)
            printf("%c",up_c);
        for(down = 0,down_c = 'A' + row -1;down < row;down++,down_c--)
            printf("%c",down_c);
        printf("\n");
    }
    return 0;
}
———————————————分割线—————————————————
第五题:编写一个程序,打印一个表,表的每一行都给出一个整数,它的平方和它的立方。要求用户输入表的上限与下限,使用一个for循环。
解:
代码如下:
#include
int main(void)
{
    int i,low,up;
    
    printf("please Input the lower and upper:");
    scanf("%d %d",&low,&up);
    for(i = 0;i <= up - low;i++)
        printf("%d\t%d\t%d\n",low + i,(low + i) * (low + i),(low + i) * (low + i)* (low + i));
    return 0;
}
———————————————分割线—————————————————
第六题:编写一个程序,把一个单词读入一个字符数组,然后反向打印这个词。提示,用strlen()计算数组中最后一个字符的索引。
解:
代码如下:
#include
#include
int main(void)
{
    char word[40];
    int i;
    
    printf("Input a word:");
    scanf("%s",word);
    for(i = strlen(word) - 1;i >= 0;i--)
        printf("%c",word[i]);
    printf("\n");
    return 0;
}
———————————————分割线—————————————————
第七题: 编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得的结果。在用户键入非数字的输入之前程序循环处理每对输入值。
解:
代码如下:
#include
int main(void)
{
    float a,b;
    
    printf("Input two float number:");
    while(scanf("%f %f",&a,&b) == 2)
        printf("result is %f\nInput two float number:",(a - b) / (a * b));
    return 0;
}
———————————————分割线—————————————————
第八题:对第七题进行更改,让它使用一个函数来返回计算值。
解:
代码如下:
#include
float test(float a,float b);
int main(void)
{
    float a,b;
    
    printf("Input two float number:");
    while(scanf("%f %f",&a,&b) == 2)
        printf("result is %f\nInput two float number:",test(a,b));
    return 0;
}
float test(float a,float b)
{
    return (a - b) / (a * b);
}
———————————————分割线—————————————————
第九题:编写一个程序,要求用户输入下限整数和上限整数,然后,依次计算从下限到上限的每一个整数的平方的加和,最后显示结果,并可以循环输入和显示,直到下限等于或小于上限时终止程序。
解:计算较为繁琐,建议将其作为自定义函数。
代码如下:
#include
int test(int a,int b);
int main(void)
{
    int a,b;
    
    printf("Input lower and upper number:");
    scanf("%d %d",&a,&b);
    while(b - a > 0)
    {
        printf("the sum of the squares from %d to %d is %d\nInput lower and upper number:",a,b,test(a,b));
        scanf("%d %d",&a,&b);
    }
    printf("Done\n");
    return 0;
}
int test(int a,int b)
{
    int sum = 0;
    int i;
    
    for(i = 0;i <= b -a;i++)
        sum += (a + i)*(a + i);
    return sum;
}
———————————————分割线—————————————————
第十题:编写一个程序把8个整数读入一个数组中,然后以相反的顺序打印它们。
解:
代码如下:
#include
int main(void)
{
    int number[8];
    int i;
    
    printf("Input 8 numbers:");
    for(i =0;i < 8;i++)
        scanf("%d",&number[i]);
    for(i = 7;i >= 0;i--)
        printf(" %d",number[i]);
    printf("\n");
    return 0;
}
———————————————分割线—————————————————
第十一题:考虑这两个无限序列:
1.0 + 1.0/2.0 + 1.0/3.0 +1.0/4.0 + ...
1.0 - 1.0/2.0 + 1.0/3.0 -1.0/4.0 + ...
编写一个程序来计算这两个无限序列不断变化的总和,直到达到某个次数。用户交互式输入这个次数。看看在20次、100次和500次之后的总和。是否每个序列都看上去要收敛于某个值?提示:奇数个-1相乘的值为-1,偶数个为1。
解:这里使用两个自定义函数,分别计算各序列N个数字的和之后,再让两个序列的和相加,得到总和。
代码如下:
#include
double list1(int n);
double list2(int n);
double pow_i(int n);
int main(void)
{
    int n;
    
    printf("how many times do you want to compute:");
    scanf("%d",&n);
    printf("the sum of two lists by %d times is %f\n",n,list1(n) + list2(n));
    return 0;
}
double list1(int n)
{
    double sum1 = 0.0;
    int i;

    for(i = 1;i <= n;i++ )
        sum1 += 1.0 / (double)i;
        printf("sum1:%f\n",sum1);
    return sum1;
}
double list2(int n)
{
    double sum2 = 0.0;
    int i;

    for(i = 1;i <= n;i++ )
        sum2 += 1.0 / (double)i * pow_i(i);
        printf("sum2:%f\n",sum2);
    return sum2;
}
double pow_i(int n)
{
    int i;
    double result = -1;
    for(i = 1;i <= n;i++)
        result *= -1.0;
    return result;
}
———————————————分割线—————————————————
第十二题:编写一个程序,创建一个8个元素的int数组,并且把元素分别设置为2的前8次冥,然后打印出他们的值,要求for循环设置值,do while循环显示值。
解:
代码如下:
#include
int main(void)
{
    int num[8];
    int i;
    int j = 0;
    int n =1;
    
    for(i = 0;i < 8;i++)
    {
         n *= 2;
        num[i] = n;
    }
    do
    {
        printf("%d\t%d\n",j + 1,num[j]);
        j++;
    }while(j<8);
    return 0;
}
———————————————分割线—————————————————
第十三题:编写一个程序,创建两个8元素的double数组,使用一个循环来让用户键入第一个数组的8个元素的值。程序把第二个数组的元素设置为第一个数组元素的累积和。例如,第二个数组的第4个元素应该等于第一个数组的前4个元素的和,第二个数组的第5个元素应该等于第一个数组的前5个元素之和(可选使用嵌套循环可以实现这一点)。最后,使用一个循环来显示两个数组中的内容。第一个数字在一行中显示,第二个数组中的每个元素在第一个数组的对应元素之下进行显示。
解:
代码如下:
#include
int main(void)
{
    double n1[8],n2[8],n;
    int i,sum;
 
    printf("Input 8 numbers:");
    for(i = 0,sum = 0;i < 8;i++)
    {
        scanf("%lf",&n);
        n1[i] = n;
        sum += n;
        n2[i] = sum;
    }
    for(i = 0;i < 8;i++)
    {
        printf("\t%lf",n1[i]);
    }
    printf("\n");
    for(i = 0;i < 8;i++)
    {
        printf("\t%lf",n2[i]);
    }
    printf("\n");
    return 0;
}
———————————————分割线—————————————————
第十四题:编写一个程序读入一行输入,然后反向打印该行。您可以把输入存储在一个char数组中;假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()在输入中一次读入一个字符,而且当你按下回车键时会产生换行符(\n)。
解:
代码如下:
#include
int main(void)
{
    char words[255];
    int i;
  
    printf("Input words:\n");
    for(i = 0;i < 255;i++)
        scanf("%c",&words[i]);
    printf("output:\n");
    for(i = 254;i >= 0;i--)
        printf("%c",words[i]);
    printf("\n");
    return 0;
}
———————————————分割线—————————————————
第十五题:Daphne 以10%的单利息投资了100美元(也就是说,每年投资赢得的利息等于原始投资的10%)。Deirdre则以每年5%的复合利息投资了100美元(也就是说,利息是当前结余的5%,其中包括以前的利息)。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并且显示出到那时两个人的投资额。
解:
代码如下:
#include
#define CAPITAL 100.0
#define RATE1 10.0/100.0
#define RATE2 5.0/100.0
int main(void)
{
    float t1,t2;
    int n = 0;
    t1 = t2 = CAPITAL;
    while(t2 <= t1)
    {
        t1 += CAPITAL * RATE1;
        t2 += t2 * RATE2;
        n++;
    }
    printf("%d years later,Daphne: %f Deirdre: %f\n",n,t1,t2 );
    return 0;
}
———————————————分割线—————————————————
第十六题:Chuckie Lucky赢了100万美元,他把钱存入一个每年赢得%8的账户。在每年的最后一天,Chuckie取出10万美元。编写一个程序,计算需要多少年Chuckie就会清空他的账户。
解:
代码如下:
#include
#define MONEY 1000000.0
#define TAKE 100000.0
#define RATE 8.0/100.0
int main(void)
{
    float total;
    total = MONEY;
    int n = 0;

    while(total > 0.0)
    {
        total += total * RATE;
        total -= TAKE;
        n++;
    }
    printf("%d years later Chuckie will clear his account.\n",n);
    return 0;
}









你可能感兴趣的:(C,Primer,Plus编程练习)