2021-12-06 自动化专业C语言上机作业参考答案15
2021-12-06 自动化专业C语言上机作业参考答案15
·
上机练习15
p765.c
根据要求编写程序P765.C的指定部分:
程序P765.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,计算每个学生的平均成绩并按平均成绩由高到低排序,并将排序结果显示。要求用结构体编程,变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。编程可用素材:printf("Please input info of students:No Name Math English Computer\n")...。
程序的运行效果应类似地如图1所示,图1中的:
2001 wanghai 78 83 90
2003 zhangzhong 82 80 98
2005 liumei 95 81 90
2006 sunqian 70 77 90
2009 jiansansa 63 87 90
是从键盘输入的内容。
#include <stdio.h>
#include <stdlib.h>
/* User Code Begin(考生可在本行后添加代码,行数不限) */
typedef struct
{
int num;
char name[20];
int math;
int english;
int computer;
float average;
} STUDENT;
void input(STUDENT *pStu, int n);
void sort(STUDENT *pStu, int n);
/* User Code End(考生添加代码结束) */
int main(void)
{
STUDENT myclass[5], *pStu = myclass;
int i;
const int N = 5;
/* User Code Begin(考生可在本行后添加代码,行数不限) */
input(myclass, N);
sort(myclass, N);
/* User Code End(考生添加代码结束) */
printf("\nResult of sort:\n");
printf("Num Name Math English Computer Average\n");
for (i = 0; i < N; i++)
{
printf("%-5d %-20s %-8d %-8d %-8d %-.2f\n", (pStu + i)->num, (pStu + i)->name,
(pStu + i)->math, (pStu + i)->english, (pStu + i)->computer, (pStu + i)->average);
}
return 0;
}
/* User Code Begin(考生在此后根据设计需要完成程序的其它部分,行数不限) */
void input(STUDENT *pStu, int n)
{
int i;
printf("Please input info of students:No Name Math English Computer\n");
for (i = 0; i < n; i++)
{
printf("%d:", i + 1);
scanf("%d %s %d %d %d", &pStu[i].num, pStu[i].name, &pStu[i].math, &pStu[i].english, &pStu[i].computer);
pStu[i].average = 1.0 / 3.0 * (pStu[i].math + pStu[i].english + pStu[i].computer);
}
}
void sort(STUDENT *pStu, int n)
{
int i, j;
STUDENT tmp;
for (i = 0; i < n - 1; i++) // 只需n-1轮
{
for (j = i + 1; j < n; j++) // 从i的身后开始比较,比到最一个元素
{
if (pStu[i].average < pStu[j].average)
{
tmp = pStu[i];
pStu[i] = pStu[j];
pStu[j] = tmp;
}
}
}
}
p801.c
根据要求编写程序P801.C的指定部分:
程序P801.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,并计算每个学生的平均成绩,最后显示最高平均分的学生的信息(包括学号,姓名,三门课的成绩,平均分数)。
程序的运行效果应类似地如图1所示,图1中的:
2001 wanghai 78 83.5 90
2003 zhangzhong 82 80 98.5
2005 liumei 95.2 81 90
2006 sunqian 70 77.2 90
2009 jiansansa 63 87 90.3
是从键盘输入的内容。
#include <stdio.h>
struct student
{
int num;
char name[20];
float score1, score2, score3;
float aver;
};
void Input(struct student *pStu, int n);
int Highest(struct student *pStu, int n);
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
struct student myClass[5];
/* 本部分代码功能建议:调用相应的函数完成数据输入和统计 */
/* User Code Begin(Limit: lines<=2, lineLen<=50, 考生可在本行后添加代码、最多2行、行长<=50字符) */
Input(myClass, 5);
high = Highest(myClass, 5);
/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver);
return 0;
}
/* 输入N个学生的信息并计算平均分 */
void Input(struct student *pStu, int n)
{
int i;
struct student tmpStu;
printf("Please input students info:Num Name score1 score2 score3\n");
for (i = 0; i < n; i++)
{
printf("%d:", i + 1);
scanf("%d%s%f%f%f", &tmpStu.num, tmpStu.name,
&tmpStu.score1, &tmpStu.score2, &tmpStu.score3);
pStu[i] = tmpStu;
pStu[i].aver = (pStu[i].score1 + pStu[i].score2 + pStu[i].score3) / 3.0f;
}
}
/* 找出并通过函数值返回最高平均分学生的序号 */
int Highest(struct student *pStu, int n)
{
int i, pos = 0;
/* User Code Begin(考生可在本行后添加代码,行数不限) */
float tmpAver = pStu[0].aver;
for (i = 1; i < n; i++)
{
if (tmpAver < pStu[i].aver)
{
pos = i;
}
}
/* User Code End(考生添加代码结束) */
return pos;
}
p807.c
根据要求编写程序P807.C的指定部分:
程序P807.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:有五个学生,每个学生的数据包括学号、姓名(最长19字节)、三门课的成绩,从键盘输入五个学生的数据,并计算每个学生的平均成绩,最后显示最高平均分的学生的信息(包括学号,姓名,三门课的成绩,平均分数)。
程序的运行效果应类似地如图1所示,图1中的:
2001 wanghai 78 83.5 90
2003 zhangzhong 82 80 98.5
2005 liumei 95.2 81 90
2006 sunqian 70 77.2 90
2009 jiansansa 63 87 90.3
是从键盘输入的内容。
#include <stdio.h>
/* User Code Begin(考生可在本行后添加代码,定义程序中使用的数据类型SCORE,行数不限) */
typedef struct
{
int num;
char name[20];
float score1;
float score2;
float score3;
float aver;
} SCORE;
/* User Code End(考生添加代码结束) */
void Input(SCORE *pStu, int n);
int Highest(SCORE *pStu, int n);
int main(void)
{
int high; /* high记录平均分最高的学生的序号,具体使用参考后面的代码 */
SCORE myClass[5];
/* 本部分代码功能建议:调用相应的函数完成数据输入和统计 */
/* User Code Begin(Limit: lines<=2, lineLen<=50, 考生可在本行后添加代码、最多2行、行长<=50字符) */
Input(myClass, 5);
high = Highest(myClass, 5);
/* User Code End(考生添加代码结束。注意:空行和单独为一行的{与}均不计行数、行长不计行首tab缩进) */
printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver);
return 0;
}
/* 输入N个学生的信息并计算平均分 */
void Input(SCORE *pStu, int n)
{
int i;
SCORE tmpStu;
printf("Please input students info:Num Name score1 score2 score3\n");
for (i = 0; i < n; i++)
{
printf("%d:", i + 1);
scanf("%d%s%f%f%f", &tmpStu.num, tmpStu.name,
&tmpStu.score1, &tmpStu.score2, &tmpStu.score3);
pStu[i] = tmpStu;
pStu[i].aver = (pStu[i].score1 + pStu[i].score2 + pStu[i].score3) / 3.0f;
}
}
/* 找出并通过函数值返回最高平均分学生的序号 */
int Highest(SCORE *pStu, int n)
{
int i, pos = 0;
/* User Code Begin(考生可在本行后添加代码,行数不限) */
float tmpAver = pStu[0].aver;
for (i = 1; i < n; i++)
{
if (tmpAver < pStu[i].aver)
{
pos = i;
}
}
/* User Code End(考生添加代码结束) */
return pos;
}
p814.c
根据要求编写程序P814.C的指定部分:
程序P814.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:输入3行3列的矩阵,输出所有元素的累加和。
#include <stdio.h>
/* userCode(<50字符): 自定义函数之原型声明 */
int getSum(int num[3][3]);
int main(void)
{
int num[3][3], i, j, sum;
printf("Please input the 3x3 Matrix:\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
scanf("%d", &num[i][j]);
}
}
sum = getSum(num); /* userCode(<50字符): 调用函数计算矩阵所有元素之和 */
printf("\nsum=%d\n", sum);
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
int getSum(int num[3][3])
{
int i, j;
int sum = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
sum += num[i][j];
}
}
return sum;
}
p816.c
根据要求编写程序P816.C的指定部分:
程序P816.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:输入两个整数m和n,输出大于等于m(m>5)的n个素数,输出的各素数间以空格相隔。注:素数(Prime Number),亦称质数,指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
#include <stdio.h>
#include <math.h>
/* userCode(<50字符): 自定义函数之原型声明 */
int isPrime(int m);
int main(void)
{
int m, n, cnt;
printf("Input the m, n: ");
scanf("%d,%d", &m, &n);
printf("\nThe result:\n");
for (cnt = 0; cnt < n; m++)
{
if (isPrime(m)) /* userCode(<50字符): 调用函数判断m是否为素数 */
{
printf("%d ", m);
cnt++;
}
}
putchar('\n');
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
int isPrime(int m)
{
int flag = 1;
int i;
for (i = 2; i < m; i++)
{
if (m % i == 0)
{
flag = 0;
break;
}
}
return flag;
}
p818.c
根据要求编写程序P818.C的指定部分:
程序P818.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:找出任意的一个m×n矩阵每一行上的最大值的列下标并按示例格式要求显示。m、n(2<=m<=20、2<=n<=20)及矩阵元素从键盘输入。编程可用素材:printf("The max value in line %d is %d\n"…。
#include <stdio.h>
#define N 20
/* userCode(<50字符): 自定义函数之原型声明 */
void show(int arr[N][N], int m, int n);
int main(void)
{
int m, n;
int hang, lie, juZhen[N][N];
printf("Please input m and n: ");
scanf("%d%d", &m, &n);
printf("Please input a juZhen(%d hang, %d lie):\n", m, n);
for (hang = 0; hang < m; hang++)
{
for (lie = 0; lie < n; lie++)
{
scanf("%d", &juZhen[hang][lie]);
}
}
puts("");
show(juZhen, m, n); /* userCode(<50字符): 调用函数找出每一行上的最大值的列下标并按示例格式要求显示 */
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
void show(int arr[N][N], int m, int n)
{
int col, data;
int i, j;
for (i = 0; i < m; i++)
{
data = arr[i][0];
col = 0;
for (j = 1; j < n; j++)
{
if (data < arr[i][j])
{
data = arr[i][j]; // 擂主更新
col = j; // 书记员记数
}
}
printf("The max value in line %d is %d\n", i, col);
}
}
p820.c
根据要求编写程序P820.C的指定部分:
程序P820.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:从键盘输入一个整数n,计算对应的函数f(n)值,并按示例格式输出相应信息。函数f(n)的定义如下:
┌ 1 (n=1)
f(n)= ├ 2*f(n/2) + n (n>1)
└ 0 (n<1)
#include <stdio.h>
/* userCode(<50字符): 自定义函数之原型声明 */
long int fn(int n);
int main(void)
{
int n;
long int Fn;
printf("Please input a number: ");
scanf("%d", &n);
Fn = fn(n); /* userCode(<50字符): 调用函数计算f(n) */
printf("\nf(%d) = %ld\n", n, Fn);
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
long int fn(int n)
{
if (1 == n)
{
return (long int)1;
}
else if (n > 1)
{
return 2 * fn(n / 2) + n;
}
else
{
return 0;
}
}
p821.c
根据要求编写程序P821.C的指定部分:
程序P821.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:从键盘输入一个整数n(n≥0)和x,计算对应的n阶勒让德多项式Pn(x)的值,并按示例格式输出相应信息。n阶勒让德多项式Pn(x)的定义如下:
┌ 1 (n=0)
Pn(x)= ├ x (n=1)
└((2n-1)xPn-1(x) - (n-1)Pn-2(x)) / n (n>1)
#include <stdio.h>
/* userCode(<50字符): 自定义函数之原型声明 */
double pnx(int n, int x);
int main(void)
{
double Pnx;
int n, x;
printf("please input n, x: ");
scanf("%d,%d", &n, &x);
Pnx = pnx(n, x); /* userCode(<50字符): 调用函数计算Pn(x) */
printf("\nThe answer is %.6f.\n", Pnx);
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
double pnx(int n, int x)
{
if (0 == n)
{
return 1;
}
else if (1 == n)
{
return x;
}
else if (n > 1)
{
return ((2 * n - 1) * x * pnx(n - 1, x) - (n - 1) * pnx(n - 2, x)) / n;
}
}
p823.c
根据要求编写程序P823.C的指定部分:
程序P823.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:将m(2<=m<=20)行m列的二维数组arrayA中的最后一行放到二维数组arrayB的第0列中,把二维数组arrayA中的第0行放到二维数组arrayB的最后一列中,二维数组arrayB中的其他数据和arrayA一致。
#include <stdio.h>
#define MAX 20
/* userCode(<80字符): 自定义函数之原型声明 */
void set(int arrayA[MAX][MAX], int arrayB[MAX][MAX], int m);
int main(void)
{
int arrayA[MAX][MAX], arrayB[MAX][MAX], i, j, m;
printf("Please input m: ");
scanf("%d", &m);
printf("Please input arrayA:\n");
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arrayA[i][j]);
}
}
set(arrayA, arrayB, m); /* userCode(<60字符): 调用函数实现数组内容变换 */
printf("\nafter rotate:\n");
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
printf("%6d", arrayB[i][j]);
}
putchar('\n');
}
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
void set(int arrayA[MAX][MAX], int arrayB[MAX][MAX], int m)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < m; j++)
{
arrayB[i][j] = arrayA[i][j];
}
}
for (i = 0; i < m; i++)
{
arrayB[i][0] = arrayA[m - 1][i];
arrayB[i][m - 1] = arrayA[0][i];
}
}
p833.c
根据要求编写程序P833.C的指定部分:
程序P833.C已编写部分代码(单击此处下载),请根据程序中的要求完善程序(在指定的位置添加代码或将__________换成代码)——注意,除指定位置外,不能对程序中已有部分作任何修改或重新编写一个程序,否则作0分处理。
程序的功能是:先从键盘读入m与n(约定m,n的范围为2~20),再读入m×n矩阵,然后对该矩阵进行转置,最后输出转置后的矩阵。
#include <stdio.h>
#define MAX 20
/* userCode(<100字符): 自定义函数之原型声明 */
void rotate(int arrA[MAX][MAX], int arrB[MAX][MAX], int m, int n);
int main(void)
{
int arrA[MAX][MAX], arrB[MAX][MAX], i, j, m, n;
printf("请输入 m n: ");
scanf("%d %d", &m, &n);
printf("请输入 %d 行 %d 列矩阵:\n", m, n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &arrA[i][j]);
}
}
rotate(arrA, arrB, m, n); /* 调用函数进行转置 */
printf("\n转置后的矩阵为:\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
printf("%5d ", arrB[i][j]);
}
putchar('\n');
}
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
void rotate(int arrA[MAX][MAX], int arrB[MAX][MAX], int m, int n)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
arrB[j][i] = arrA[i][j];
}
}
}
更多推荐
所有评论(0)