c语言百日刷题第五天

目录

 1.杨辉三角

2.找出一个二维矩阵的鞍点

3.折半查找法

4.统计文章字符

 5.输出图形


固然山腰的风景很美,但我还是想去山顶看看。所以,诸君咱们山顶见!!!c语言百日刷题第五天_第1张图片

 1.杨辉三角

题目分析:1.每一行的第一个和最后一个元素都为1

2.其它元素为其正上方的元素及正上方左边的元素之和

#include
int main() {
	int n;
	int a[100][100];
	scanf("%d", &n);//用户输入要打印几行
	for (int i = 0; i < n; i++) {     //赋1
		a[i][0] = 1;
		a[i][i] = 1;
	}
	for (int i = 2; i < n; i++)  //其它元素的值
		for (int j = 1; j < i; j++)
			a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
	for (int i = 0; i < n; i++) {    //输出
		for (int j = 0; j <= i; j++) {
			printf("%d ", a[i][j]);
		}
		printf("\n");        //换行
	}
	return 0;
}

2.找出一个二维矩阵的鞍点

题目分析:鞍点即该元素在改行最大,在该列最小,也可能没有

#include
int main() {
	int row=0, line=0, max, min, i, j, k, m, n;
	int a[10][10];
	//输入矩阵
	scanf("%d %d", &m, &n);
	for (int i = 0; i < m; i++)
		for (int j = 0; j < n; j++)
			scanf("%d", &a[i][j]);
	
	for (i = 0; i < m; i++) {
		//找到该行最大的元素,并记录该元素的列
		max = a[i][0];
		for ( j = 0; j < n; j++) {
			if (max < a[i][j]) {
				max = a[i][j];
				row = j;
			}
		}
		//寻找该列的最小元素,并记录行
		min = a[0][row];
		for ( k = 0; k < m; k++) {
			if (min > a[k][row]) {
				min = a[k][row];
				line = k;
			}
		}
		//如果两个元素相等,则为鞍点
		if (min == max) {
			printf("a[%d][%d]=%d", line, row, max);
			break;
		}
		if(min!=max) printf("该矩阵没有鞍点");
	}
	return 0;
}

3.折半查找法

题目:有15个数按从小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在此数组中,则输出“无此数”

题目分析:先明确一点什么是二分法

1.先给定一个从小到大排序的数组

2.如果该数等于中间元素,则输出

3.如果该数大于中间元素,则left=mid+1

4.如果该数小于中间元素,则right=mid-1

#include
int main() {
	int a[15] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
	int left, right, num, index, length, mid, flag;
	length = sizeof(a) / sizeof(a[0]);//长度
	flag = 0;//标志
	left = 0;//左界
	right = length - 1;//右界
	printf("please enter num:");
	scanf("%d", &num);//数
	while (left <= right) {
		mid = (left + right) / 2;
		if (a[mid] == num) {
			index = mid + 1;
			flag = 1;
			break;
		}
		else if (num > a[mid]) left = mid + 1;
		else right = mid - 1;
	}
	if (flag) printf("该元素已经找到%d,下标是%d", num, index);
	else printf("无此数");
	return 0;
}

4.统计文章字符

题目:有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,数字,空格以及其它字符的个数

题目分析:利用gets函数向字符数组输入一个字符串

#include
int main() {
	char s[3][80];
	int De, Xe, num, space, other;
	De = Xe = num = space = other = 0;
	for (int i = 0; i < 3; i++)
		gets(s[i]);
	for(int i=0;i<3;i++)
		for (int j = 0; j < 80 && s[i][j] != '\0'; j++) {
			if (s[i][j] > 'a' && s[i][j] < 'z') Xe++;
			if (s[i][j] > 'A' && s[i][j] < 'Z') De++;
			if (s[i][j] > '0' && s[i][j] < '9') num++;
			if (s[i][j] == ' ') space++;
			else other++;
		}
	printf("大写字母%d 小写字母%d 数字%d 空格%d 其它字符%d", De, Xe, num, space, other);
	return 0;
}

 5.输出图形

c语言百日刷题第五天_第2张图片 

#include
int main() {
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j <= i; j++) printf(" ");
		for (int k = 0; k < 5; k++) printf("*");
		printf("\n");
	}
	return 0;
}

你可能感兴趣的:(刷题记,c语言,算法)