C语言基础练习题<二>

1.一个班10个学生的成绩,存放在一个一维数组中,要求找出其中成绩最高的学生的成绩和该生的序号。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    
    
	float score[10], max=0;
	int i, i_max;
	printf("请输入10个学生的成绩:\n");
	for (i = 0; i < 10;i++) {
    
    
		printf("第%d名学生的成绩:",i+1);
		scanf("%f,\n",&score[i]);
		if (score[i] > max) {
    
    
			max = score[i];
			i_max = i + 1;
		}
	}
	printf("最高成绩为:%.2f,其序号为%d", max, i_max);
	return 0;
}

2.有5个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    
    
	float score[6][4], sum;
	int i, j;//i表示学生,j表示课程
	for (i = 0; i < 5;i++) {
    
    //5个学生
		printf("请输入第%d个学生的课程成绩\n",i+1);
		for (j = 0; j < 4;j++) {
    
    //4门课程
			printf("第%d门课程成绩:", j + 1);
			scanf("%f,\n", &score[i][j]);
		}
	}
	printf("**************输出每个学生的各科成绩******************\n");
	for (i = 0; i < 5; i++) {
    
    
		printf("\n");
		for (j = 0; j < 4; j++) {
    
    
			printf("%.2f\t", score[i][j]);
		}
	}
	printf("\n");
	printf("各门课程的平均成绩如下:\n");
	for (j = 0; j < 4;j++) {
    
    
		sum = 0;//必须在这里申明sum=0,因为每循环一次都是新的科目
		for (i = 0; i < 5; i++) {
    
    
			sum = sum + score[i][j];
		}
		score[5][j] = sum / 5.0;
		printf("第%d门课程的平均成绩为:%.2f\n", j + 1, score[5][j]);
	}
	return 0;
}

3.将一个数组中的值按逆序重新存放。例如:原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。

#define _CRT_SECURE_NO_WARNINGS
#define N 5
#include <stdio.h>

int main() {
    
    
	int a[N],i,temp;
	printf("请输入一组数据:(5个)\n");
	for (i = 0; i < N;i++) {
    
    
		scanf("%d,", &a[i]);
	}
	printf("\n");
	//原顺序
	for (i = 0; i < N; i++) {
    
    
		printf("%d ", a[i]);
	}
	printf("\n");
	for (i = 0; i < N/2; i++) {
    
    
		temp = a[i];
		a[i] = a[N - i - 1];
		a[N - i - 1] = temp;
	}
	//逆序
	for (i = 0; i < N; i++) {
    
    
		printf("%d ", a[i]);
	}
	return 0;
}

4.有一篇短文,共有3行文字,每行有80个字符。想统计出其中英文大写字母、小写字母、数字、空格以及其他字符各有多少个。

int main() {
    
    
	int i, j, upp=0, low=0, dig=0, spa=0, oth=0;
	char text[3][80];
	for (i = 0; i < 3;i++) {
    
    
		printf("请输入第%d行:\n", i + 1);
		gets(text[i]);
		for (j = 0; j < 80 && text[i][j] != '\0'; j++) {
    
    
			if (text[i][j]>='A'&&text[i][j]<='Z') {
    
    
				upp++;
			}
			else if (text[i][j]>='a' && text[i][j]<='z') {
    
    
				low++;
			}
			else if (text[i][j]>='0' && text[i][j]<='9') {
    
    
				dig++;
			}
			else if (text[i][j]==' ') {
    
    
				spa++;
			}
			else {
    
    
				oth++;
			}
		}
	}
	printf("upp:%d\n", upp);
	printf("low:%d\n", low);
	printf("dig:%d\n", dig);
	printf("spa:%d\n", spa);
	printf("oth:%d\n", oth);
	return 0;
}

5.将15个数由小到大的顺序放到数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。

int main() {
    
    
    /**
     * 数组
     */
    int arr[] = {
    
     1, 3, 5, 7, 9, 11, 21, 31, 40, 55, 67, 89 };
    /**
     * 计算数组长度
     */
    int len = sizeof arr / sizeof arr[0];
    /**
     * 起点索引
     */
    int start;
    /**
     * 结束索引
     */
    int end;
    /**
     * 命中索引
     */
    int index;
    /**
    * 要搜索的值
    */
    int num;
    while (1) {
    
    
        start = 0;
        end = len;
        index = -1;
        printf("请输入要搜索的数: \n");
        scanf("%d", &num);
        while (end > start) {
    
    
            if (end-1 == start) {
    
    
                if (arr[start] == num) {
    
    
                    index = 0;
                }
                else {
    
    
                    index = -1;
                    printf("找不到%d.\n",num);
                }
                break;
            }
            /**
             * 计算中间索引
             */
            int mid = (start + end) / 2;
            if (arr[mid] == num) {
    
    
                index = mid;
                break;
            }
            else if (num > arr[mid]) {
    
    
                start = mid;
            }
            else {
    
    
                end = mid;
            }
        }
        printf("search index is: %d\n", index);
        char c = '0';
        while (1) {
    
    
            if (c == '0') {
    
    
                printf("please char,is 'Y' continue to,is 'N' exit\n");
            }
            c = getchar();
            if (c == 'Y') {
    
    
                break;
            }
            else if (c == 'N') {
    
    
                exit(200);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43096786/article/details/120112967