我有两道c语言题要做,应该不难,请各位大神帮忙

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我有两道c语言题要做,应该不难,请各位大神帮忙相关的知识,希望对你有一定的参考价值。

一、从键盘输入10个整数放入数组a,要求:
⑴ 找出这10个数中的最大数;
⑵ 求这10个数的平均值;
⑶ 将超过平均值的数放入数组b;
⑷ 对数组a按照从小到大排序。
注意:以上四个功能用函数实现。
二、假设学生信息包括学号(char(6))、姓名(char(6))和成绩(int),定义一个包含10个学生信息的结构体数组stu[10],要求:
⑴ 从键盘输入10个学生信息放入数组stu;
⑵ 对数组stu按照成绩从大到小排序;
⑶ 输出排序后的学生信息;
注意:以上三个功能用函数实现,并且要求用指针访问结构体成员。

一、
下面是C语言实现以上四个功能的代码,函数包括 find_max、average、greater_than_average 和 sort,具体细节可以查看注释:

#include <stdio.h>

void find_max(int arr[], int len, int *max)
// 找出数组中的最大数
*max = arr[];
for (int i = 1; i < len; i++)
if (arr[i] > *max)
*max = arr[i];




double average(int arr[], int len)
// 求数组的平均值
double sum = ;
for (int i = ; i < len; i++)
sum += arr[i];

return sum / len;


int greater_than_average(int arr[], int len, int *b)
// 将大于平均值的数放入数组b,并返回b数组的长度
double avg = average(arr, len);
int count = ;
for (int i = ; i < len; i++)
if (arr[i] > avg)
b[count++] = arr[i];


return count;


void sort(int arr[], int len)
// 对数组a按照从小到大排序
for (int i = ; i < len - 1; i++)
for (int j = ; j < len - 1 - i; j++)
if (arr[j] > arr[j+1])
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;





int main()
int a[10], b[10], max;
double avg;
for (int i = ; i < 10; i++)
printf("请输入第%d个整数:", i + 1);
scanf("%d", &a[i]);

find_max(a, 10, &max);
printf("这10个数中的最大数是:%d\n", max);
avg = average(a, 10);
printf("这10个数的平均值是:%lf\n", avg);
int b_len = greater_than_average(a, 10, b);
printf("大于平均值的数有%d个,它们分别是:", b_len);
for (int i = ; i < b_len; i++)
printf("%d ", b[i]);

printf("\n");
sort(a, 10);
printf("排序后的数组a为:");
for (int i = ; i < 10; i++)
printf("%d ", a[i]);

printf("\n");
return ;


这个程序通过 main 函数从键盘输入10个整数,并分别调用 find_max、average、greater_than_average 和 sort 这四个函数实现题目要求的四个功能。具体来说:

find_max 函数用一个指针参数返回数组中的最大数;

average 函数返回数组中所有数的平均值;

greater_than_average 函数将大于平均值的数放入数组b,并返回b数组的长度;

sort 函数按从小到大的顺序对数组a排序。

二、
下面是C语言实现以上三个功能的代码,主要包含 input_stu、sort_stu 和 output_stu 三个函数,具体细节可以查看注释:

#include <stdio.h>
#include <string.h>

// 定义学生信息结构体
struct student
char id[7];
char name[7];
int score;
;

// 从键盘输入10个学生信息
void input_stu(struct student *stu, int len)
for (int i = ; i < len; i++)
printf("请输入第%d个学生的学号:", i + 1);
scanf("%s", stu[i].id);
printf("请输入第%d个学生的姓名:", i + 1);
scanf("%s", stu[i].name);
printf("请输入第%d个学生的成绩:", i + 1);
scanf("%d", &stu[i].score);



// 按照成绩从大到小排序
void sort_stu(struct student *stu, int len)
for (int i = ; i < len - 1; i++)
for (int j = ; j < len - 1 - i; j++)
if (stu[j].score < stu[j+1].score)
// 交换位置
struct student temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;





// 输出排序后的学生信息
void output_stu(struct student *stu, int len)
printf("排序后的学生信息如下:\n");
printf("学号\t姓名\t成绩\n");
for (int i = ; i < len; i++)
printf("%s\t%s\t%d\n", stu[i].id, stu[i].name, stu[i].score);



int main()
// 定义10个学生结构体,用数组存储
struct student stu[10];

// 从键盘输入10个学生信息
input_stu(stu, 10);

// 按照成绩从大到小排序
sort_stu(stu, 10);

// 输出排序后的学生信息
output_stu(stu, 10);

return ;


这个程序通过 main 函数定义并初始化了包含10个学生信息的结构体数组 stu,分别调用了 input_stu、sort_stu 和 output_stu 三个函数实现题目要求的三个功能。具体来说:

input_stu 函数用指针访问结构体数组成员,从键盘输入10个学生信息存入数组;

sort_stu 函数按照成绩从大到小排序输入的结构体数组;

output_stu 函数用指针访问结构体数组成员,输出排序后的学生信息。

注意,由于结构体中包含字符串类型的成员,因此在使用赋值语句或比较语句时,应当使用 strcpy 和 strcmp 函数进行赋值和比较,将字符数组中的值分配给另一个字符数组。
参考技术A 解:
使用标准的c语言风格编写的:
1.

#include <stdio.h>
int max(int*);//求最大值
int Average(int*);//求平均值
void up_average(int*);//求大于平均值的数
void sort(int*);//排序
int main(void)

int a[10];
int i;
printf("请输入十个整数:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n最大值为:%d\n",max(a));
printf("平均值为:%d\n",Average(a));

up_average(a);
sort(a);
return 0;
int max(int a[])

int max;
int i;
max=a[0];
for(i=1;i<10;i++)
if(a[i]>max)
max=a[i];
return max;

int Average(int a[])

int average=0;
int i;
for(i=0;i<10;i++)
average+=a[i];
average/=10;
return average;

void up_average(int a[])

int average=Average(a);
int i;
printf("大于平均值%d的数有:",average);
for(i=0;i<10;i++)
if(a[i]>average)
printf("%-2d",a[i]);
printf("\n");

void sort(int a[])

int i,j;
int temp;//用于交换
for(i=0;i<10;i++)

for(j=i+1;j<10;j++)
if(a[i]>a[j])

temp=a[i];
a[i]=a[j];
a[j]=temp;


printf("排序后(从小到大):\n");
for(i=0;i<10;i++)
printf("%-3d",a[i]);
printf("\n\n");


2.

#include <stdio.h>#include <stdlib.h>
struct s
char *code;//学号
char *name;//姓名
int grade;//成绩
stu[10];
void init(struct s *);//初始化数组stu
void sort(struct s *);//排序
void disp(struct s *);//输出学生的信息
int main(void)

init(stu);
sort(stu);
disp(stu);

return 0;

void init(struct s *stu)

int i;

for(i=0;i<10;i++)

(stu+i)->code=(char *)malloc(2*sizeof(char *));
(stu+i)->name=(char *)malloc(2*sizeof(char *));
printf("请输入第%d位学生的学号:",i+1);
scanf("%s",(stu+i)->code);
printf("请输入第%d位学生的姓名:",i+1);
scanf("%s",(stu+i)->name);
printf("请输入第%d位学生的成绩:",i+1);
scanf("%d",&((stu+i)->grade));
printf("\n");


void sort(struct s *stu)

int i,j;
for(i=0;i<10;i++)

for(j=i+1;j<10;j++)
if(((stu+i)->grade)<((stu+j)->grade))

char *temp;//用于交换姓名和学号
int tp;//用于交换成绩
tp=(stu+i)->grade;
(stu+i)->grade=(stu+j)->grade;
(stu+j)->grade=tp;
temp=(stu+i)->code;
(stu+i)->code=(stu+j)->code;
(stu+j)->code=temp;
temp=(stu+i)->name;
(stu+i)->name=(stu+j)->name;
(stu+j)->name=temp;



void disp(struct s *stu)

int i;
printf("\n学号\t姓名\t成绩\n");
for(i=0;i<10;i++)
printf("%s\t%s\t%d\n",(stu+i)->code,(stu+i)->name,(stu+i)->grade);


希望能帮助你哈
参考技术B #include <stdio.h>
#define ARRAY_SIZE 10
int Find_max(int * array)

int i;
int ret;
ret = array[0];
for(i=1; i<ARRAY_SIZE; i++)
if(array[i] > ret)
ret = array[i];
return ret;

float Calculate_average(int * array)

int i = 0;
float average = 0;
int sum = 0;
for (i=0; i < ARRAY_SIZE; i++)
sum += array[i];
return average = sum / ARRAY_SIZE;

int Exceed_to_b(int * array_a, int * array_b, float average)

int i = 0;
int j = 0;
for (i=0, j=0; i < ARRAY_SIZE; i++)
if(array_a[i] > average)

array_b[j] = array_a[i];
j++;

return j;

int insertion_sort(int *array, int len)

int i = 0;
int j = 0;
int k = 0;
int temp;

if (array == NULL)


printf("输入的数组错误\n");
return -1;//返回一个错误码



if (len < 0 || len > ARRAY_SIZE) //判断输入的数组长度是否超出了数组的界限

printf("输入的数组长度错误\n");
return -1;//返回一个错误码

for (i = 1; i < len; i++)

for(j = 0; j < i; j++)
if(array[i] >= array[j])
continue;
else

temp = array[i];
for(k = i; k > j; k--)
array[k] = array[k-1];
array[j] = temp;


return 0;

int array_sort(int * array)

if(!insertion_sort(array, ARRAY_SIZE))
return -1;
return 0;


int main()

int a[ARRAY_SIZE];
int b[ARRAY_SIZE];
int i = 0;
int num_b = 0; //记录数组b中有几个数值
float aver = 0;//计算出的a数组的平均值

for (i=0; i<ARRAY_SIZE; i++)
scanf("%d", &a[i]);
//找出最大值
printf("Max value is: %d \n", Find_max(a));
//计算平均值
printf("Average of array a is: %f \n", aver = Calculate_average(a));
//将超出平均值的数值,放入数组b
num_b = Exceed_to_b(a, b, aver);
printf("Array b value is: \n");
for (i=0; i < num_b; i++)
printf("%d", b[i]);
printf("\n");
//从小到大,对数组a排序
array_sort(a);
printf("Array a value is: \n");
for (i=0; i < ARRAY_SIZE; i++)
printf("%d,", a[i]);
printf("\n");
getchar();
return 0;
参考技术C 难得写~追问

大神帮个忙

一个Java程序题困扰了我好久,怎么想也没想明白到底是怎么回事,请各位Java大神出手帮帮忙看看~谢谢了!

//我是一个java新手,请大神指教一下,呵呵~
class Value
public int i = 15;

public class TestValue
public static void main(String argv[])
TestValue t = new TestValue();
t.first();

public void first()
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.println(v.i);

public void second(Value v, int i)
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.println(v.i + " " + i);

看代码要先从主方法看
public static void main(string argv[])就是主方法
所有的代码都是从这里开始运行的
TestValue t = new TestValue();
这是声明一个变量t 他的类型是TestValue
然后你再去看TestValue这个类
有两个方法一个是first() 一个是second(value v,int i);
主方法的第三句话是t.first();
就是说它调用了第一个方法first()
再看first()方法
int i=5;声明一个int类型的i值为5,
Value v = new Value();声明一个Value类型的v
v.i=25;为Value类型里面的plublic int i = 15这个i赋值 i是public 公有的所有v.i = 25;是起作用的
所以v.i的值就是25,
second(v,i);这里调用了second(Value v,int i)方法
把v传到second方法里面
i = 0; i赋值为0
v.i = 20; 把对象v里面的i赋值为20
Value val = new Value(); 声明一个Value类型的val
v = val; 把val的赋值给v
System.out.println(v.i + " " + i);打印val.i和的i
应该是打印15和0
最后在走first()方法的最后一段代码
System.out.println(v.i);
v.i前面赋值为25后来赋值为20 然后把val赋值给v
这里前两步骤是值传递 因为i是int类型的
val赋值给v是引用传递所以没有赋值,只是改变它的指向地址。
所以最后打印的结果是
15 0
20追问

second(v, i);
System.out.println(v.i);
v.i = 20;
System.out.println(v.i + " " + i);
这几个v.i为什么他的值不一样呢。这几个v.i把我这个基础不怎么扎实的我搞糊涂了。
麻烦你指教一下谢谢

参考技术A 太简单啦,放到eclipse中打个断点,看看如何一步一步执行的不就解决了么?
我这是教给你如何打渔啊。
参考技术B 你分清楚什么是局部变量和全局变量,,,也就是变量的作用域,还有参数的传递不会改变值的!

以上是关于我有两道c语言题要做,应该不难,请各位大神帮忙的主要内容,如果未能解决你的问题,请参考以下文章

C语言:输入一个人的出生年,月,日,再输入当前年,月,日,计算此人的实际年龄。求解各位C语大神。

c语言(求改错):用邻接表创建图并实现深度优先遍历 不知道怎么改了 在线等 各位大神行行好!!!!

跪求C语言大神!!两道题。!!

大神帮我做下这个题要用C语言不要C++

一道C语言编程题,求大神们帮帮忙,谢谢了。。

用命令lsnrctl start 启动oracle监听 但出现以下错误 该怎么办 请各位大神帮帮忙 谢谢