1.编写两个函数,分别求圆锥体的体积和表面积。从 main 函数中输入圆锥体的高和半径,调用两个自定义函数分别求出对应的体积和表面积,并输出完整信息。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
#define PI 3.141
double volume(double r, double h) {
double vol;
vol = (1.0 / 3.0) * PI * r * r * h;
return vol;
}
double surface(double r, double h) {
double sur;
double slanHeight = sqrt(r * r + h * h); // sqrt是根号的意思
sur = PI * r * r + PI * r * slanHeight; // S=πr^2+ πrl
return sur;
}
int main () {
double r, h;
printf("请输入圆锥体的半径:r = ");
scanf("%lf", &r);
printf("请输入圆锥体的高:h = ");
scanf("%lf", &h);
if (r <= 0 && h <= 0) {
printf("输入错误,r、h必须是正数!\n");
return 1;
}
double V = volume(r, h);
double S = surface(r, h);
printf("计算结果");
printf("半径:r = %.2f\n", r);
printf("高:h = %.2f\n", h);
printf("体积:V = %.2f\n", V);
printf("表面积:S = %.2f\n", S);
return 0;
}
2.编写函数,求出a到b之内能被7或者11整除,但不能同时被7和11整除的所有正数,并将它们放在数组中,函数返回这些数的个数。编写主程序main函数,输入a,b的值并调用函数进行运算。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int fun(int p[], int a, int b) {
int i, j = 0;
for (i = a; i <= b; i++)
if ((i % 7 == 0 || i % 11 == 0) && i % 77 != 0) // 不能同时被7和11整除的所有正数,就是不能被77整除
p[j++] = i;
return j;
}
int main() {
int array[100], a, b;
int count = 0;
int i;
printf("输入a、b的值:\n");
scanf("%d%d", &a, &b);
count = fun(array, a, b);
printf("符合条件的共有%d个元素\n", count);
for (i = 0; i < count; i++)
printf("%5d", array[i]);
printf("\n");
return 0;
}
3.输出 1~50 以内所有的勾股数,即 3 个正整数 x、y、z∈[1, 50],要求 x2+y2=z2,且 x<y<z。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int x, y, z;
for (x = 1; x < 48; x++)
for (y = x + 1; y < 49; y++)
for (z = y + 1; z < 50; z++) {
if (x * x + y * y == z * z)
printf("%3d %3d %3d\n", x, y, z);
}
return 0;
}
4.打印出所有“水仙花数”,所谓:“水仙花数”是指一个 3 位数,其各位数字立方和等于该本身。例如:153 是一个水仙花数,因为 153=1^3+5^3+3^3。
#include <stdio.h>
int main() {
int i, s, t, m;
for (i = 100; i < 999; i++) {
s = i % 10;
t = i / 10 % 10;
m = i / 100;
if (i == s * s * s +t * t * t +m * m * m) {
printf("这是水仙数:%d\n", i);
}
}
return 0;
}
5.定义一个有 10 个元素的一维整型数组,将其逆序存放,输出变化前后的数组元素。
#include <stdio.h>
int main() {
int a[10], * p = NULL, * q = NULL, temp;
printf("请输入你的数组:");
for (p = a; p < a + 10; p++)
scanf("%d", p);
for (p = a, q = a + 9; p < q; p++, q--) {
// p < q是p跟q的值交换到中间的时候就不交换了(这个时候两边的已经换好了)
temp = *p;
*p = *q;
*q = temp;
}
for (p = a; p < a + 10; p++)
printf("%4d", *p);
return 0;
}
6.编写函数判断 n 阶方阵是否对称,对称时返回 1,不对称时返回 0。主函数中定义矩阵并 调用该函数进行判断。(编程提示:函数的形参可以是行指针或列指针。)
#include <stdio.h>
#define N 3
int Judge(int (*a)[N]) {
int i, j;
int flag = 1;
for (i = 0; i < N && flag; i++) // 若flag=0(已判定不对称),直接终止循环
for (j = 0; j < i; j++) {
if (a[i][j] != a[j][i]) {
flag = 0; // 标记为“不对称”
break; // 终止当前j的循环
}
}
return flag;
}
void Input(int (*a)[N]) {
int i, j;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
scanf("%d", &a[i][j]);
}
void Output(const int (*a)[N]) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%5d", a[i][j]);
printf("\n");
}
}
int main() {
int a[N][N];
Input (a);
printf("这个方阵是:\n");
Output(a);
if (Judge(a))
printf("这个方阵是一个对称方阵!\n");
else
printf("这个方阵不是一个对称方阵!\n");
return 0;
}
7.利用结构体数组保存不超过10个学生的信息,每个学生的信息包括:学号、姓名和成绩,其中成绩包括高数、物理和英语成绩。计算每个学生的平均分并输出。
#include <stdio.h>
struct Student
{
int ID;
char name[20];
int score[3];
};
typedef struct Student Student;
int Input (Student[]);
void Average (Student[], int len);
int main() {
Student st[10]; // 定义最多存储10个学生的数组
int num;
num = Input(st);
Average(st, num);
return 0;
}
int Input(Student s[]) {
int i, j, n;
do
{
printf("输入总的学生数量:");
scanf("%d", &n);
} while (n <= 0 || n > 10);
for (i = 0; i < n; i++) {
printf("输入第%d个学生:", i + 1);
scanf("%d%s", &s[i].ID, s[i].name);
for (j = 0; j <= 2; j++) // 输入该学生的3门课成绩
scanf("%d", &s[i].score[j]);
}
return n; // 返回实际输入的学生数量
}
void Average(Student s[], int len) {
int i, j;
for (i = 0; i < len; i++) { // 遍历每个学生
int ave = 0;
for (j = 0; j <= 2; j++)
ave += s[i].score[j];
ave = ave / 3;
printf("第%d个同学的平均分是:%d.\n", i+1, ave);
}
}
8.编程实现用户对电影评分的程序,包括不超过 10 部电影和 5 个用户,每部电影包括电影编号、名称和得分(1~5),用户评分完成后,输出各电影的得分以及最受欢迎电影。
#include <stdio.h>
struct Film
{
char name[20];
int score[5];
};
typedef struct Film Film;
int Input(Film f[]);
void rating(Film f[], int len);
int best(Film f[], int len);
int main() {
Film fi[10];
int num,index;
num = Input(fi);
rating(fi, num);
index = best(fi, num);
printf("最受欢迎的电影是:%s", fi[index].name);
return 0;
}
int Input(Film f[]) {
int i, n;
do
{
printf("输入总的电影数量:");
scanf("%d", &n);
} while (n <= 0 || n > 10);
for (i = 0; i < n; i++) {
printf("这是第%d部电影:", i + 1);
scanf("%s", f[i].name);
}
return n;
}
void rating(Film f[], int len) {
int i, j;
for (i = 0; i < len; i++) {
printf("%s的评分是", f[i].name);
for (j = 0; j <= 4; j++) {
printf("%d:", j + 1);
scanf("%d", &f[i].score[j]);
}
}
}
int best(Film f[], int len) {
int i, j, index, max;
int temp[10];
for (i = 0; i < len; i++) {
temp[i] = 0;
// 累加该电影的评分
for (j = 0; j < 4; j++)
temp[i] += f[i].score[j];
}
max = temp[0];
index = 0;
for (i = 1; i < len; i++) {
// 若当前电影评分总和更高,更新“最高评分”和对应索引
if (temp[i] > max)
{
max = temp[i];
index = i;
}
}
return index;
}