【趣学C语言和数据结构100例】
问题描述
-
找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
-
有 15 个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
-
有一篇文章,共有 3 行文字,每行有 80 个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
-
有一行电文,已按下面规律译成密码:A->Z a->z B->Y b->y C->X c->x 即第 1 个字母变成第 26 个字母,第 i 个字母变成第(z-(i-a))个字母,非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。
-
编一程序,将两个字符串连接起来,不要用 strcat 函数
代码分析
16.找鞍点
分析:鞍点:该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
思路:创造二维数组,且初始化数组全为0 。两个for循环嵌套,在第一个循环找到第i行最大,并记录在第几列col,然后找到第i行第col列最小,判断条件max == min && col < Y,则为找到鞍点。
17.折半查查找
输入数组和需要找到的数,使用双下标,low,high,初始指向起点和终点,使用while查找,只要low <= high,则进行,进行折半,使用mid = low + (high - low) / 2; // 改进后的 mid 计算方式,(mid=(low+high)/2; //改进前的 mid 计算方式,可能存在溢出风险。)进行num == array[mid],如果找到,则输出,如果array[mid] > num,则进行high = mid - 1;,如果array[mid] < num,则进行low = mid + 1;。
18.统计字符的个数
输入3行文字,每行有 80 个字符,则创造array[3][80]。每一行,fgets(array[i], 80, stdin);进行输入。对于每一行的每一个字符进行判断,直接使用函数/区间判断。
19. 找规律
观察规律,A->Z a->z B->Y b->y C->X c->x,第 1 个字母变成第 26 个字母,第 i 个字母变成第(z-(i-a))个字母,非字母字符不变
创造两个数组,分别存储密文和原文。先输入密文fgets(密文, 100, stdin);使用for循环遍历,如果是字母,即isalpha(cipher[i]),如果在A到Z,则进行’Z’ - (cipher[i] - ‘A’);,如果在a到x,则进行’a’ - (cipher[i] - ‘z’);
20.字符串连接,不用 strcat 函数
使用while循环找到 s1 字符串的末尾,把s2依次赋值给s1。
代码实现
#include <stdio.h>
#include <ctype.h>
#define N 15
#define X 3
#define Y 4
int main()
{
// 16.找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
int array[X][Y];
int max, min, row, col, i, j, flag = 0;
printf("输入%d到%d的二维数组\n", X, Y);
for (i = 0; i < X; i++) {
for (j = 0; j < Y; j++) {
scanf("%d", &array[i][j]); // 初始化数组全为0
}
}
for (i = 0; i < X; i++) {
// 找到第i行最大
max = array[i][0];
col = 0;
f
标签:字母,mid,趣学,low,数组,100,C语言,鞍点,array
From: https://blog.csdn.net/lwcwam/article/details/142903905