函数相关练习题2
- 1.不同班级的平均分
- 2.二维数组和函数的概念
- 3.外部变量和全局变量
- 4.全局变量的例子
- 5.输入10个数,找出最大数及最大数的下标
1.不同班级的平均分
#include <stdio.h>
void inityarry(int arr[],int len){
int i;
for(i=0;i<len;i++){
printf("请输入第%d个学生的成绩\n",i+1);
scanf("%d",&arr[i]);
}
puts("done");
}
void printarry(int arr[],int len){
int i;
printf("总人数:%d个\n",len);
for(i=0;i<len;i++){
printf("%d ",arr[i]);
}
puts("\n done\n");
}
float getaverage(int arr[],int len){
int i;
float aver = 0.0;
int sum = 0;
for(i=0;i<len;i++){
sum = sum + arr[i];
}
aver = (float)sum/len;
return aver;
}
int main(){
int classOne[5];
int classTwo[10];
float averofClassone;
float averofClassTwo;
int lenclassone = sizeof(classOne)/sizeof(classOne[0]);
int lenclassTwo = sizeof(classTwo)/sizeof(classTwo[0]);
inityarry(classOne,lenclassone);
inityarry(classTwo,lenclassTwo);
printarry(classOne,lenclassone);
printarry(classTwo,lenclassTwo);
averofClassone = getaverage(classOne,lenclassone);
averofClassTwo = getaverage(classTwo,lenclassTwo);
printf("一班平均分:%f\n",averofClassone);
printf("二班平均分:%f\n",averofClassTwo);
return 0;
return 0;
}
2.二维数组和函数的概念
#include <stdio.h>
void TWO(int arr[][3]){
int i;
int j;
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("%d",arr[i][j]);
}
putchar("\n");
}
}
int main(){
int arr[2][3] = {{1,2,3},{11,22,33}};
TWO(arr);
return 0;
}
//二维数组是特殊的一维数组,每个元素又是一个数组
//大小要确定(列)
合法写法:
int arr[2][3]
int arr[][3]
//关心的点:数组数据类型
//数组的大小(数组的列)
不合法写法
int arr[][]
int arr[3][]
#include <stdio.h>
void TWO(int arr[][4], int hang, int lie) {
int i;
int j;
for (i = 0; i < hang; i++) {
for (j = 0; j < lie; j++) {
printf("%d ", arr[i][j]); // 在元素之间添加一个空格以提高可读性
}
printf("\n"); //
}
}
void init(int arr[][4], int hang, int lie) {
int i;
int j;
for (i = 0; i < hang; i++) {
for (j = 0; j < lie; j++) {
printf("请输入第%d行,第%d列的数据\n", i + 1, j + 1);
scanf("%d", &arr[i][j]);
}
}
}
int MX(int arr[][4], int hang, int lie) {
int i;
int j;
int max = arr[0][0]; // 初始化max为数组的第一个元素
for (i = 0; i < hang; i++) {
for (j = 0; j < lie; j++) {
if (max < arr[i][j]) {
max = arr[i][j];
}
}
}
return max;
}
int main() {
int max;
int arr[3][4];
init(arr, 3, 4);
TWO(arr, 3, 4);
max = MX(arr, 3, 4);
printf("max is %d\n", max);
return 0;
}
3.外部变量和全局变量
#include <stdio.h>
//全局变量:所有函数之前的外部变量
//优点:便捷
//缺点: 所有函数都可以操作这个变量
int a = 10;
int b = 20;
void fun1(){
printf("fun1:%d\n",a);
printf("fun1:%d\n",b);
}
//局部变量(外部变量)
int p = 100;
int q = 90;
void fun2(){
printf("fun2:%d\n",p);
printf("fun2:%d\n",q);
}
int main(){
fun1();
fun2();
printf("main:%d\n",a);
printf("main:%d\n",b);
return 0;
}
4.全局变量的例子
#include <stdio.h>
int max;
int min;
float getresult(int arr[],int len){
int i;
int sum = 0;
max = min = arr[0];
for(i=0;i<len;i++){
if(max<arr[i]){
max = arr[i];
}
if(min>arr[i]){
min = arr[i];
}
sum += arr[i];
}
return (float)sum/len;
}
int main(){
int scores[] = {1,2,3,4,5,6,7,8,9,10};
float aver;
aver = getresult(scores,sizeof(scores)/sizeof(scores[0]));
printf("班级的最高分:%d\n 最低分是%d\n 平均分是%f\n",max,min,aver);
return 0;
}
//函数调用的目的:通过调用函数获得某些结果
//函数强调的是功能性的封装供调用者来改变当中的一些数据
5.输入10个数,找出最大数及最大数的下标
-
封装冒泡排序的函数
-
封装选择排序的函数
#include <stdio.h> void bubbleMax(int arr[], int size, int *maxIndex) { int i, j, tempIndex = 0; for (i = 0; i < size - 1; i++) { for (j = 0; j < size - i - 1; j++) { if (arr[j] < arr[j + 1]) { // 如果当前元素小于下一个元素,则交换它们 tempIndex = j; j = size; // 强制退出内层循环 } } if (tempIndex != *maxIndex) { // 更新最大值的下标 *maxIndex = tempIndex; } } } void selectionSort(int arr[], int size) { int i, j, minIndex, temp; for (i = 0; i < size - 1; i++) { minIndex = i; for (j = i + 1; j < size; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } if (minIndex != i) { // 交换找到的最小值和当前元素 temp = arr[minIndex]; arr[minIndex] = arr[i]; arr[i] = temp; } } } int main() { int arr[10] = {3, 8, 2, 5, 1, 9, 6, 7, 4, 0}; int size = sizeof(arr) / sizeof(arr[0]); int maxIndex = 0; int maxVal; // 使用冒泡排序找出最大数的下标 bubbleMax(arr, size, &maxIndex); maxVal = arr[maxIndex]; printf("最大数是:%d,其下标是:%d\n", maxVal, maxIndex); // 使用选择排序对数组进行排序 selectionSort(arr, size); printf("排序后的数组:\n"); for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }