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
查看评论