2021-12-06 自动化专业C语言上机作业参考答案10
2021-12-06 自动化专业C语言上机作业参考答案10
·
上机练习10
p704.c
/*
编写一程序P704.C实现以下功能
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3。
从键盘输入一个正整数(约定该数≤32767、此时因子数≤100),找出该数以内的所有完数及其因子。
编程可用素材:printf("Please input an integer: ")、printf("… is a wanshu"…、printf(" %d"…。
思考:
1 因子如何判定
1,2,3这些数,但肯定不会超过data/2
2 有可能有多因子,肯定用数组来存放,输出这些因子,肯定要跑循环,未知个数,事先要统计计数
3 判断完数,肯定有求和过程,要有累加求和
4 很多个数都要判断,肯定要跑循环,起点和终点是什么?如果每一个数都要判断,步长肯定是1
*/
#include <stdio.h>
#define N 100
int main(void)
{
int data;
int i, j;
int fact[N];
int sum, count;
printf("Please input an integer: ");
scanf("%d", &data);
// 从2开始,该数以内
for (i = 2; i < data; i++)
{
// 找所有因子,因子从1开始,暴力,一个个试
// 每一次都要重新初始化和值和计数器
sum = 0;
count = 0;
for (j = 1; j <= i / 2; j++)
{
// 是因子,即可整除
if (i % j == 0)
{
// 完成计数,求和,存储
fact[count++] = j;
sum += j;
}
}
// 做判断和输出
if (i == sum)
{
printf("%6d is a wanshu", i);
// 所有因子输出
for (j = 0; j < count; j++)
{
printf(" %d", fact[j]);
}
printf("\n");
}
}
return 0;
}
p706.c
/*
编写一程序P706.C实现以下功能
输入任意10个整数,对这10个整数从小到大排序并输出。
编程可用素材:printf("Please input 10 number:\n")、printf("%5d"...。
*/
#include <stdio.h>
#define N 10
int main(void)
{
int data[N], tmp;
int i, j;
printf("Please input 10 number:\n");
for (i = 0; i < N; i++)
{
scanf("%d", &data[i]);
}
// sort bubble,使用冒泡排序
for (i = 0; i < N - 1; i++) // n-1轮
{
for (j = 0; j < N - 1; j++) // 因为要用到j+1,所以j最多取到n-2,即<n-1
{
if (data[j] > data[j + 1])
{
tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
}
}
}
// output
for (i = 0; i < N; i++)
{
printf("%6d", data[i]);
}
return 0;
}
p713.c
/*
编写一程序P713.C实现以下功能
用scanf输入某年某月某日,判断这一天是这一年的第几天?以3月5日为例,
应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份≥3时需考虑多加一天。
注:判断年份是否为闰年的方法——为400的倍数为闰年,如2000年;若非100的倍数,而是4的倍数,为闰年,如1996年。
编程可用素材:
printf("Please input year-month-day: ")...、
printf("\nIt is the ...th day.\n"...。
*/
#include <stdio.h>
int main(void)
{
int day, month, year, sum;
printf("Please input year-month-day: ");
scanf("%d-%d-%d", &year, &month, &day);
switch (month)
{
case 1:
sum = 0;
break;
case 2:
sum = 31;
break;
case 3:
sum = 59;
break;
case 4:
sum = 90;
break;
case 5:
sum = 120;
break;
case 6:
sum = 151;
break;
case 7:
sum = 181;
break;
case 8:
sum = 212;
break;
case 9:
sum = 243;
break;
case 10:
sum = 273;
break;
case 11:
sum = 304;
break;
case 12:
sum = 334;
break;
default:
printf("data error");
}
sum += day;
if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month > 2)
sum++;
printf("\nIt is the %dth day.\n", sum);
return 0;
}
p714.c
/*
编写一程序P714.C实现以下功能
用scanf输入10个整数(采用int数据类型),计算所有正数的和、负数的和以及10个数的和。
编程可用素材:
printf("Input 10 integers: ")、
printf("\nzhengshu=…,fushu=…,all=…。
*/
#include <stdio.h>
#define N 10
int main(void)
{
int a[N];
int zhengshu = 0, fushu = 0, all = 0;
int i;
printf("Input 10 integers: ");
for (i = 0; i < N; i++)
{
scanf("%d", &a[i]);
if (a[i] > 0)
{
zhengshu += a[i];
all += a[i];
}
else if (a[i] < 0)
{
fushu += a[i];
all += a[i];
}
else
{
all += a[i];
}
}
printf("\nzhengshu=%d,fushu=%d,all=%d", zhengshu, fushu, all);
return 0;
}
p717.c
/*
编写一程序P717.C实现以下功能
输入10个整型数存入一维数组,输出值和下标都为奇数(数组第1个元素的下标为0)的元素及其个数,要求先输出个数。
编程可用素材:printf("Input 10 integers: ")、printf("\ncount=…\n"…、printf("a[…]=…\n"…。
*/
#include <stdio.h>
#define N 10
int main(void)
{
int a[N], zhi[N], xb[N];
int i;
int count = 0;
printf("Input 10 integers: ");
for (i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
// record it
for (i = 0; i < N; i++)
{
if (a[i] % 2 != 0 && i % 2 != 0)
{
zhi[count] = a[i];
xb[count] = i;
count++;
}
}
printf("\ncount=%d\n", count);
for (i = 0; i < count; i++)
{
printf("a[%d]=%d\n", xb[i], zhi[i]);
}
return 0;
}
p718.c
/*
编写一程序P718.C实现以下功能
有一递推数列,满足f(0)=0,f(1)=1,f(2)=2, f(n+1)=2f(n)+f(n-1)f(n-2) (n>=2), 编写程序求f(n)的值(n由键盘输入,13>=n>=2)。
编程可用素材:printf("Input n (13>=n>=2): ")、printf("\nf(…)=…\n"…。
*/
#include <stdio.h>
#define N 15
int main(void)
{
int i, n;
double fn[N] = {0, 1, 2};
printf("Input n (13>=n>=2): ");
scanf("%d", &n);
for (i = 2; i < n; i++)
{
// 迭代求值
fn[i + 1] = 2 * fn[i] + fn[i - 1] * fn[i - 2];
}
printf("\nf(%d)=%.0lf\n", n, fn[n]);
return 0;
}
p725.c
/*
编写一程序P725.C实现以下功能
利用数组,求斐波拉契数列的前n(约定3≤n≤20)项并输出到屏幕上(数和数之间用水平制表符'\t'隔开),
斐波拉契公式为:f(1)=1, f(2)=1, f(n) = f(n-1) + f(n-2) (n≥3)。
编程可用素材:printf("input a data(3--20): ")。
*/
#include <stdio.h>
#define N 21
int main(void)
{
int i, n;
double fn[N] = {1, 1};
printf("input a data(3--20): ");
scanf("%d", &n);
for (i = 2; i < n; i++)
{
// 迭代求值
fn[i] = fn[i - 1] + fn[i - 2];
}
for (i = 0; i < n; i++)
{
printf("%.0lf\t", fn[i]);
}
return 0;
}
p739.c
/*
编写一程序P739.C实现以下功能
从键盘输入年月日日期,计算出该日期是公元纪年以来的第几天。
注:判断年份是否为闰年的方法——为400的倍数为闰年,如2000年;若非100的倍数,而是4的倍数,为闰年,如1996年。
编程可用素材:printf("input a data(year-month-day):")...、printf("\nThe result is ....\n"...。
*/
#include <stdio.h>
int main(void)
{
int year, month, day;
int i;
int sum = 0;
int monthday[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
printf("input a data(year-month-day):");
// year
scanf("%d-%d-%d", &year, &month, &day);
for (i = 1; i < year; i++)
{
sum += 365;
if (i % 400 == 0 || i % 4 == 0 && i % 100 != 0)
{
sum++;
}
}
//month
for (i = 1; i < month; i++)
{
sum += monthday[i];
}
// add leap year
if ((year % 400 == 0 || year % 4 == 0 && year % 100 != 0) && month > 2)
{
sum++;
}
// day
sum += day;
printf("\nThe result is %d\n", sum);
return 0;
}
p742.c
/*
编写一程序P742.C实现以下功能
现有两个一维数组(各含5个整型元素)设为A、B,从键盘分别输入数据给这两个数组。
计算A数组正序位置与B数组逆序对应位置积的和。
编程可用素材:
printf("Input A: ")、printf("Input B: ")、printf("\nsum=…\n"…。
*/
#include <stdio.h>
#define N 5
int main(void)
{
int a[N], b[N];
int i;
int sum = 0;
printf("Input A: ");
for (i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
printf("Input B: ");
for (i = 0; i < N; i++)
{
scanf("%d", &b[i]);
}
// get sum
for (i = 0; i < N; i++)
{
sum += a[i] * b[N - i - 1];
}
printf("\nsum=%d\n", sum);
return 0;
}
p746.c
/*
编写一程序P746.C实现以下功能
从键盘读入10个整数,对其按由小到大的顺序进行排序,然后输出。编程可用素材:
printf("please input 10 integer numbers: ");
printf("\nthe array before sorted: ");
printf("\nthe array after sorted: ");
*/
#include <stdio.h>
#define N 10
int main(void)
{
int a[N];
int i, j, min, tmp;
printf("please input 10 integer numbers: ");
for (i = 0; i < N; i++)
{
scanf("%d", &a[i]);
}
printf("\nthe array before sorted: ");
for (i = 0; i < N; i++)
{
printf("%d ", a[i]);
}
// sort data min->max
for (i = 0; i < N - 1; i++)
{
min = i;
for (j = i + 1; j < N; j++)
{
if (a[j] < a[min])
{
min = j;
}
}
// 最小值归位,有可能没动
tmp = a[i];
a[i] = a[min];
a[min] = tmp;
}
printf("\nthe array after sorted: ");
for (i = 0; i < N; i++)
{
printf("%d ", a[i]);
}
return 0;
}
更多推荐
所有评论(0)