飞道的博客

20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises13

332人阅读  评论(0)

20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises13

P239

/*
  编写一程序P239.C实现以下功能
  先从键盘读入若干个整数(读到-1或读满16个数均结束读入),然后倒序输出这些数。
    编程可用素材:
        printf("请输入若干个数: ");
        printf("\n这些数倒序为: ");
  程序的运行效果应类似地如图1所示,
    图1中的1 2 3 4 5 6 7 8 9 20 11 12 -1 13和图2中的1 31 3 4 5 6 7 8 21 10 11 12 13 14 15 16 17 18是从键盘输入的内容。

请输入若干个数: 1 2 3 4 5 6 7 8 9 20 11 12 -1 13

这些数倒序为: 12 11 20 9 8 7 6 5 4 3 2 1
图1 程序运行效果示例(读到-1时的情况)

请输入若干个数: 1 31 3 4 5 6 7 8 21 10 11 12 13 14 15 16 17 18

这些数倒序为: 16 15 14 13 12 11 10 21 8 7 6 5 4 3 31 1
图2 程序运行效果示例(读满16个数时的情况)
*/

#include <stdio.h>
#define N 16
int main(void)
{
    int data[N];
    int i;
    int count = 0; // 从0开始计数
    int realNumber;

    printf("请输入若干个数: ");
    for (i = 0; i < N; i++)
    {
        scanf("%d", &data[i]);
        if (data[i] == -1)
        {
            break;
        }
        count++; // 计数器,只拿-1之前的数来计数
    }

    // 是否满16个数,注意,数组的下标是从0开始的,到realNumber-1
    realNumber = count < N ? count : N;

    // 输出
    printf("\n这些数倒序为: ");
    for (i = realNumber - 1; i >= 0; i--)
    {
        printf(" %d", data[i]);
    }

    return 0;
}

P704

/*
  编写一程序P704.C实现以下功能
  一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3。
    从键盘输入一个正整数(约定该数≤32767、此时因子数≤100),找出该数以内的所有完数及其因子。
    编程可用素材:
        printf("Please input an integer: ");
        printf("… is a wanshu"…);
        printf(" %d"…);
  程序的运行效果应类似地如图1所示,图1中的1000是从键盘输入的内容。

Please input an integer: 1000
     6 is a wanshu 1 2 3
    28 is a wanshu 1 2 4 7 14
   496 is a wanshu 1 2 4 8 16 31 62 124 248
图1 程序运行效果示例
*/

#include <stdio.h>

/* 
    判断完数
 */
int isPerfectN(int n);

/* 
    输出完数及因子
 */
void printPerfectN(int n);

int main(void)
{
    int i;
    int data;

    printf("Please input an integer: ");
    scanf("%d", &data);

    for (i = 1; i <= data; i++)
    {
        if (isPerfectN(i))          // 判完数并打印
        {
            printPerfectN(i);
        }
        
    }

    return 0;
}

/* 
    判断完数
 */
int isPerfectN(int n)
{
    int i;
    int sum = 0;
    // 所有真因子累加
    for (i = 1; i < n; i++)
    {
        if (n % i == 0)
        {
            sum += i;
        }
    }
    // 判断是否完数
    if (sum == n)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

/* 
    输出完数及因子
 */
void printPerfectN(int n)
{
    int i;
    printf("%6d is a wanshu", n);
    for (i = 1; i < n; i++)
    {
        if (n % i == 0)
        {
            printf(" %d", i);
        }
    }
    printf("\n");               // 一个完数输出一行
}

P717

/*
  编写一程序P717.C实现以下功能
  输入10个整型数存入一维数组,输出值和下标都为奇数(数组第1个元素的下标为0)的元素及其个数,要求先输出个数。
    编程可用素材:
        printf("Input 10 integers: ");
        printf("\ncount=…\n"…);
        printf("a[…]=…\n"…);
  程序的运行效果应类似地如图1所示,图1中的2 45 34 56 78 12 41 55 86 37是从键盘输入的内容。

Input 10 integers: 2 45 34 56 78 12 41 55 86 37

count=3
a[1]=45
a[7]=55
a[9]=37
图1 程序运行效果示例
*/

#include <stdio.h>
#define N 10

int isOdd(int i);

int main(void)
{
    int arr[N];     // 数据数组
    int arrb[N] = {0};    // 影子数组
    int i;
    int count = 0;  // 计数器

    printf("Input 10 integers: ");
    for ( i = 0; i < N; i++)
    {
        // arrb[i] = 0;
        scanf("%d", &arr[i]);
    }

    for ( i = 0; i < N; i++)
    {
        if (isOdd(i) && isOdd(arr[i]))
        {
            count++;        // 计数
            arrb[i] = 1;    // 标记相应的位置
        }
    }

    printf("\ncount=%d\n", count);
    for ( i = 0; i < N; i++)
    {
        if (arrb[i])    // 使用标记进行判断输出
        {
            printf("a[%d]=%d\n", i, arr[i]);
        }
    }    
    
    return 0;
}

int isOdd(int i)
{
    if(i%2)
        return 1;
    else
        return 0;
}

P747

/*
  编写一程序P747.C实现以下功能
  先从键盘上读入15个数放在一个数组a[15]中,然后再输入一个数,要求找出该数是数组中
    第几个(从0开始计数,若有相同的数,则计首次出现的数)元素a[i]的值。
    如果该数不在数组中,则输出相应的提示信息。
  编程可用素材:
        printf("please input 15 integer numbers:\n");
        printf("please input the integer you want to find: ");
        printf("\n%d has been found,it is a[%d]\n"…);
        printf("\n%d has not been found\n"…);
  程序的运行效果应类似地如图1和图2所示,图1中的30 28 25 24 23 26 22 21 15 13 10 8 6 4 19和13、图2中的30 28 25 24 23 26 22 21 15 13 10 8 6 4 19和90是从键盘输入的内容。

please input 15 integer numbers:
30 28 25 24 23 26 22 21 15 13 10 8 6 4 19
please input the integer you want to find: 13

13 has been found,it is a[9]
图1 程序运行效果示例

please input 15 integer numbers:
30 28 25 24 23 26 22 21 15 13 10 8 6 4 19
please input the integer you want to find: 90

90 has not been found
图2 程序运行效果示例
*/

#include <stdio.h>
#define N 15

int main(void)
{
    int arr[N];
    int data;
    int i;

    printf("please input 15 integer numbers:\n");
    for (i = 0; i < N; i++)
    {
        scanf("%d", &arr[i]);
    }

    printf("please input the integer you want to find: ");
    scanf("%d", &data);
    for (i = 0; i < N; i++)
    {
        if (arr[i] == data)
        {
            printf("\n%d has been found,it is a[%d]\n", data, i);
            break;      // 第一次找到,即可退出循环
        }
    }
    if (i == N)         // 如果循环走完,则肯定没有找到
    {
        printf("\n%d has not been found\n", data);
    }

    return 0;
}

P742

/*
  编写一程序P742.C实现以下功能
  现有两个一维数组(各含5个整型元素)设为A、B,从键盘分别输入数据给这两个数组。
    计算A数组正序位置与B数组逆序对应位置积的和。
    编程可用素材:
        printf("Input A: ");
        printf("Input B: ");
        printf("\nsum=…\n"…);
  程序的运行效果应类似地如图1所示,图1中的1 2 3 4 5和5 4 3 2 1是从键盘输入的内容。

Input A: 1 2 3 4 5
Input B: 5 4 3 2 1

sum=55
图1 程序运行效果示例
*/

#include <stdio.h>
#define N 5

int main(void)
{
    int arr1[N];
    int arr2[N];
    int i;
    double sum = 0;

    printf("Input A: ");
    for (i = 0; i < N; i++)
    {
        scanf("%d", &arr1[i]);
    }
    printf("Input B: ");
    for (i = 0; i < N; i++)
    {
        scanf("%d", &arr2[i]);
    }

    // 处理: 计算A数组正序位置与B数组逆序对应位置积的和
    /* 
        要特别注意,下标的范围是:   【0】  ---   【N-1】
     */
    for (i = 0; i < N; i++)
    {
        sum += (double)arr1[i] * (double)arr2[N - 1 - i];
    }

    printf("\nsum=%.0lf\n", sum);
    return 0;
}

P714

/*
  编写一程序P714.C实现以下功能
  用scanf输入10个整数(采用int数据类型),计算所有正数的和、负数的和以及10个数的和。
    编程可用素材:
        printf("Input 10 integers: ");
        printf("\nzhengshu=…,fushu=…,all=");
  程序的运行效果应类似地如图1所示,图1中的4 6 20 -45 35 56 -23 -4 9 70是从键盘输入的内容。

Input 10 integers: 4 6 20 -45 35 56 -23 -4 9 70

zhengshu=200,fushu=-72,all=128
图1 程序运行效果示例
*/

#include <stdio.h>
#define N 10



int main(void)
{
    int data[N];
    int i;
    double positiveSum = 0;
    double negativeSum = 0;
    double allSum = 0;

    printf("Input 10 integers: ");
    for (i = 0; i < N; i++)
    {
        scanf("%d", &data[i]);
    }

    // 一维数组与一重循环配合,处理完成求和
    for (i = 0; i < N; i++)
    {
        allSum += (double)data[i];                  // 全部和
        if (data[i]>0)
        {
            positiveSum += (double)data[i];         // 正数和
        }
        
        if (data[i]<0)
        {
            negativeSum += (double)data[i];         // 负数和
        }

    }

    printf("\nzhengshu=%0.lf,fushu=%.0lf,all=%.0lf", positiveSum, negativeSum, allSum);

    return 0;
}



转载:https://blog.csdn.net/matrixbbs/article/details/109514638
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场