数组本身也是一个对象,其类型由它的元素类型延伸而来。更具体地说,数组的类型由元素的类型和数量所决定。
如果一个数组的元素是 T 类型,那么该数组就称为“T 数组”。例如,如果元素类型为 int,那么该数组的类型就是“int 数组”。然而,int 数组类型是不完整的类型,除非指定了数组元素的数量。如果一个 int 数组有 16 个元素,那么它就是一个完整的对象类型,即“16 个 int 元素数组”。
数组的定义决定了数组名称、元素类型以及元素个数。没有显式初始化操作的数组定义,其语法如下:
类型 名称[元素数量];
C语言程序如下:
#include <stdio.h>
void fun(int a[],int n,int *k)
{
int i,maxxr,j
maxxr=a[0]
for(i=0i<ni++)
{
if(maxxr<a[i])
{
maxxr=a[i]
}
}
for(i=0i<ni++)
{
if(maxxr==a[i]){
j=i
break
}
}
*k=j
}
int main(void)
{
int a[10]={ 876,675,896,101,301,401,980,431,451,777},k
fun(a, 10, &k)
printf("%d,%d", k, a[k])
}
扩展资料:
思路:
1、先定义数组(其数组长度取最大值,题目要求为10),然后通过for循环给数组一个个赋值,即可得到一个数组;
2、找数组的最大值,这一步是最关键的一步,由于所输入的值不确定那个是最大值,故可以先设置另一个一个变量(index)来存储最大值变量的下标。
3、紧接着继续在数组里for循环,逐一跟下标为index的值相比较,如果比下标为index的值大,这时候就将两者中数值大的下标赋值给index。
4、按要求输出。
#include<stdio.h>#include<malloc.h>
#include<string.h>
typedef char* string //字符串
//学生结构体
typedef struct Student{
char name[16] //姓名
int id //学号
float grade //成绩
struct Student *next//下一个学生节点
}Student,*student
//班级结构体
typedef struct Class{
student list //学生列表
int num //学生人数
}Class,*class
//创建一个新班级
class newClass()
//销毁一个班级
void destroyClass(class c)
//创建一个新学生
student newStudent(string name,int id,float grade)
//向班级中加入一个学生
void append(class c,student stu)
//统计不及格人数,并打印名单
void showNotPass(class c)
//统计全班平均分及以上的学生人数并打印名单
void showGreaterThanAvg(class c)
//统计各分数段的学生人数及所占百分比
void showGradeRange(class c)
//输出最高分及学号
void showFirst(class c)
//输出班里的所有成员
void output(class c)
int main(){
char name[16]
int id
float grade
class myClass = newClass() //创建一个班级
printf("输入学生信息\n")
puts("姓名\t学号\t成绩")
while(~scanf("%s%d%f",name,&id,&grade) && grade >= 0){ //grade<0结束
append(myClass,newStudent(name,id,grade)) //向班级中加入一名新学生
}
//不及格信息
showNotPass(myClass)
//超过平均分的信息
showGreaterThanAvg(myClass)
//区间信息
showGradeRange(myClass)
//第一名
showFirst(myClass)
return 0
}
//创建一个新班级
class newClass(){
class tmp = (class)malloc(sizeof(Class))
tmp->num = 0
tmp->list = NULL
return tmp
}
//销毁一个班级
void destroyClass(class c){
if(c == NULL) return
student list = c->list
student next = NULL
while(list!=NULL){
next = list->next
free(list) //释放当前节点
list = next
}
free(c)
c = NULL
}
//创建一个新学生
student newStudent(string name,int id,float grade){
student tmp = (student)malloc(sizeof(Student))
strcpy(tmp->name,name)
tmp->id = id
tmp->grade = grade
tmp->next = NULL
return tmp
}
//向班级中加入一个学生
void append(class c,student stu){
if(c == NULL || stu == NULL) return
stu->next = c->list
c->list = stu
c->num++
}
//统计不及格人数,并打印名单
void showNotPass(class c){
if(c == NULL) return
class tmpClass = newClass()
student tmp = c->list
for(tmp != NULLtmp = tmp->next){
if(tmp->grade < 60){
student tmpStu = (student)malloc(sizeof(Student))
memcpy(tmpStu,tmp,sizeof(Student))
append(tmpClass,tmpStu)
}
}
printf("不及格人数:%d\n",tmpClass->num)
output(tmpClass)
destroyClass(tmpClass)
}
//统计全班平均分及以上的学生人数并打印名单
void showGreaterThanAvg(class c){
if(c == NULL || c->num == 0){
puts("班级没有人")
return
}
student tmp = c->list
float sum = 0
for(tmp != NULLtmp = tmp->next){
sum+=tmp->grade
}//统计总分
float avg = sum / c->num//平均分
class tmpClass = newClass()
for(tmp=c->listtmp != NULL tmp = tmp->next){
if(tmp->grade >= avg){
student tmpNode = (student)malloc(sizeof(Student)) //一个临时学生节点
memcpy(tmpNode,tmp,sizeof(Student))
append(tmpClass,tmpNode)
}
}
printf("平均分及以上的学生人数为:%d\n",tmpClass->num)
output(tmpClass)
destroyClass(tmpClass)
}
//统计各分数段的学生人数及所占百分比
void showGradeRange(class c){
if(c == NULL){
puts("班级没有人")
return
}
int i
class container[10]
for(i = 0 i < 10 i++){ //初始化分数段班级容器
container[i] = newClass()
}
student tmp = c->list
for( tmp != NULL tmp = tmp->next){
int index = (int)tmp->grade % 10 //区间
if(index > 9) index = 9 //大于90的算成一个区间
student tmpStu = (student)malloc(sizeof(Student))
memcpy(tmpStu,tmp,sizeof(Student))
append(container[index],tmpStu)
}
for(i = 0 i < 10 i++){
int num = container[i]->num
printf("%d~%d的人数:%d,占比:%.6g%%\n",i*10,(i+1)*10,num,(float)(num*100)/c->num)
destroyClass(container[i])
}
puts("")
}
//输出最高分及学号
void showFirst(class c){
if(c == NULL || c->list == NULL) return
student max = c->list
student tmp = max->next
for(tmp != NULLtmp = tmp->next){
if(tmp->grade > max->grade) max = tmp
}
printf("最高分:%.2g,学号:%d\n",max->grade,max->id)
}
void output(class c){
if(c == NULL) return
puts("名单:")
student tmp = c->list
for(tmp!=NULLtmp = tmp->next){
printf("%s\n",tmp->name)
}
puts("")
}
代码有点长....