Linux C系列学习笔记_第7集

一维数组代码

#include <stdio.h>
#define MAX 10

int arrmax(int *arr)
{
	int sum, max, pos;
	int i;
	max = arr[1], pos = 0;
	for (i = 0; i < MAX; i++)
	{
		sum += arr[i];
		if (arr[i] > max)
		{
			max = arr[i];
			pos = i + 1;
		}
	}
	printf("最大值是%d,位于第%d个\n", max, pos);
}

int printarr(int *arr)
{
	printf("成绩为:");
	for (int i = 0; i < MAX; i++)
	{
		printf("%d\t", arr[i]);
	}
	putchar(10);
	return 0;
}

int nixu(int *arr)
{
	int i = 0, j;
	while (i <= MAX / 2)
	{
		j = arr[i];
		arr[i] = arr[MAX - 1 - i];
		arr[MAX - 1 - i] = j;
		i++;
	}
	for (int i = 0; i < MAX; i++)
	{
		printf("%d\t", arr[i]);
	}
	putchar(10);
	return 0;
}

int search(int *arr)
{
	int search = 0, count = 0, pos = 0;
	int i = 0; //用于遍历数组的循环变量
	printf("请输入您要查找的值:");
	scanf("%d", &search);
	getchar();
	putchar(10);
	//开始遍历数组,实现存在性查找
	for (i = 0; i < MAX; i++)
	{
		//判断数据是否是要查找的数据
		if (search == arr[i])
		{
			count++;
			if (count == 1)
				pos = i + 1;
		}
	}
	//判断是否查找到
	if (!count)
		printf("未找到\n");
	else
		printf("%d位于第%d个,共出现%d次\n", search, pos, count);
	return 0;
}

int maopao(int *arr)
{
	printf("冒泡排序\n");
	for (int i = 0; i < MAX - 1; i++)
	{
		for (int j = 0; j < MAX - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

int main(int argc, char const *argv[])
{
	int arr[MAX];
	int i;
	for (i = 0; i < MAX; i++)
	{
		printf("输入第 %d 个同学的成绩", i + 1);
		scanf("%d", &arr[i]);
		getchar();
		putchar(10);
	}
	//arrmax(arr);
	//nixu(arr);
	search(arr);
	printarr(arr);
	maopao(arr);
	printarr(arr);
	return 0;
}

二维数组代码

#include <stdio.h>
#define M 4
#define N 5
int main(int argc, char const *argv[])
{
	//定义一个二维数组
	int arr[M][N] = {0};
	int brr[N][M] = {0};
	//对数组进行输入输出,通过双重循环找到任意一个数据
	for (int i = 0; i < M; i++) //外行
	{
		for (int j = 0; j < N; j++) //内列
		{
			//在此处可以找到arr[i][j]
			printf("请输入第%d行%d列的元素:", i + 1, j + 1);
			scanf("%d", &arr[i][j]);
		}
		printf("\n");
	}

	//讲上述数组进行输出
	printf("数组元素分别是:\n");
	for (int i = 0; i < M; i++)
	{
		for (int j = 0; j < N; j++)
		{
			printf("%d\t", arr[i][j]);
		}
		printf("\n");
	}

	int sum[4] = {0};
	for (int i = 0; i < M; i++)
	{
		for (int j = 0; j < N; j++)
		{
			sum[i] += arr[i][j];
		}
		printf("%d行的和:%d\n", i + 1, sum[i]);
	}
	//转置
	for (int i = 0; i < M; i++)
	{
		for (int j = 0; j < N; j++)
		{
			brr[j][i] = arr[i][j];
		}
	}
	printf("转置数组元素分别是:\n");
	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < M; j++)
		{
			printf("%d\t", brr[i][j]);
		}
		printf("\n");
	}

	return 0;
}

 杨辉三角代码

#include <stdio.h>

int main(int argc, char const *argv[])
{
	while (1)
	{
		int m;
		printf("输入行数\n");
		scanf("%d", &m);
		if (m > 10 || m < 2)
		{
			printf("输入值过大或错误\n");
			break;
		}
		int yanghui[10][10] = {{1}, {1, 1}};
		int i, j;
		for (i = 2; i < m; i++)
		{
			for (j = 0; j <= i; j++)
			{
				if (j == 0)
					yanghui[i][j] = 1;
				else
					yanghui[i][j] = yanghui[i - 1][j - 1] + yanghui[i - 1][j];
			}
		}
		//printarr(yanghui,m);
		printf("数组元素分别是:\n");
		for (i = 0; i < m; i++)
		{
			for (j = 0; j <=i; j++)
			{
				printf("%d\t", yanghui[i][j]);
			}
			printf("\n");
		}
	}
	return 0;
}

课后习题:

1、提示并输入一个字符串,统计该字符串中字母、数字、空格以及其他字符的个数

#include <stdio.h>
int main()
{
	char ch;
	int letter = 0, space = 0, digit = 0, other = 0;
	printf("请输入字符串:\n");
	while ((ch = getchar()) != '\n')
	{
		if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')	//字母
			letter++;
		else if (ch >= '0' && ch <= '9')					    //数字
			digit++;
		else if (ch == ' ')										//空格
			space++;
		else
			other++;
	}
	printf("您所输入的字符串中:英文字母有%d个,空格有%d个,数字有%d个,剩余其他字符%d个\n", letter, space, digit, other);
	return 0;
}
请输入字符串:
qweweorj13514ihfh()* JK
您所输入的字符串中:英文字母有14个,空格有1个,数字有5个,剩余其他字符3个

2、提示并输入一个字符串,求出该字符串中所有数字的总和

#include <stdio.h>
int main()
{
	char ch;
	int plus = 0, flag = 0;
	printf("请输入字符串:\n");
	while ((ch = getchar()) != '\n')
	{
		if (ch >= '0' && ch <= '9')
		{
			plus += ch - '0';
			flag = 1;
		}
	}
	if (flag == 0)
		printf("字符串中没有数字\n");
	else
		printf("字符串中所有数字和为%d\n", plus);
	return 0;
}

运行结果:

ubuntu@ubuntu:day7$ ./tongji
请输入字符串:
fiojgjagf;g dfgs
字符串中没有数字
ubuntu@ubuntu:day7$ ./tongji
请输入字符串:
3465ajggj;536 
字符串中所有数字和为32

3、定义一个4*3的二维整形数组,完成对二维数组的输入、输出。并将该二维数组中每一行的最值放入到一个一维数组中,并对该一维数组进行升序排序后输出。

#include <stdio.h>
#define M 4
#define N 3
int main(int argc, char const *argv[])
{
	//定义一个二维数组
	int arr[M][N] = {0};
	int i, j;
	//对数组进行输入输出,通过双重循环找到任意一个数据
	for ( i = 0; i < M; i++) //外行
	{
		for ( j = 0; j < N; j++) //内列
		{
			printf("请输入第%d行%d列的元素:", i + 1, j + 1);
			scanf("%d", &arr[i][j]);
		}
		printf("\n");
	}

	//打印数组的所有值
	printf("数组元素分别是:\n");
	for ( i = 0; i < M; i++)
	{
		for ( j = 0; j < N; j++)
		{
			printf("%d\t", arr[i][j]);
		}
		printf("\n");
	}

	//找到每一行的最值
	int max[M];
	for ( i = 0; i < M; i++)
	{
		max[i] = arr[i][1];
		for ( j = 0; j < N; j++)
		{
			if (arr[i][j] > max[i])
				max[i] = arr[i][j];
		}
		printf("第%d行的最大值是%d\n", i + 1, max[i]);
	}

	//排序并重新输出
	int sort,tmp;
	for (i = 0; i < M; i++)
	{
		sort = i;
		for ( j = i + 1; j < M; j++)
		{
			if (max[sort] > max[j])
			{
				sort = j;
			}
		}
		if (sort != i)
		{
			tmp = max[i];
			max[i] = max[sort];
			max[sort] = tmp;
		}
	}
	printf("升序后的最大值为");
	for (int i = 0; i < M; i++)
	{
		printf("%d\t", max[i]);
	}
	putchar(10);
	return 0;
}

运行结果:

请输入第1行1列的元素:2
请输入第1行2列的元素:3
请输入第1行3列的元素:7

请输入第2行1列的元素:4
请输入第2行2列的元素:3
请输入第2行3列的元素:6

请输入第3行1列的元素:3
请输入第3行2列的元素:8
请输入第3行3列的元素:5

请输入第4行1列的元素:4
请输入第4行2列的元素:3
请输入第4行3列的元素:2

数组元素分别是:
2	3	7	
4	3	6	
3	8	5	
4	3	2	
第1行的最大值是7
第2行的最大值是6
第3行的最大值是8
第4行的最大值是4
升序后的最大值为4	6	7	8	

4、提示并输入两个一维整形数组,求这两个数组的交集。

#include <stdio.h>
#define MAX 5
int main(int argc, char const *argv[])
{
	int arr[MAX];
	int brr[MAX];
	int jiaoji[MAX];
	int i, j, k = 0;
	printf("输入第1个数组的内容\n");
	for (i = 0; i < MAX; i++)
	{
		scanf("%d", &arr[i]);
	}
	getchar();
	printf("输入第2个数组的内容\n");
	for (i = 0; i < MAX; i++)
	{
		scanf("%d", &brr[i]);
	}
	getchar();
	for (i = 0; i < MAX; i++)
	{
		for (j = 0; j < MAX; j++)
		{
			if (arr[i] == brr[j])
			{
				jiaoji[k] = arr[i];
				k++;
			}
		}
	}
	printf("交集是:\n");
	for (i = 0; i < k; i++)
	{
		printf("%d  ", jiaoji[i]);
	}
	putchar(10);
	return 0;
}

运行结果:

输入第1个数组的内容
1 3 5 7 9 
输入第2个数组的内容
2 3 4 5 6 
交集是:
3  5  

5、完成注册和登录功能:使用两个一维字符数组存储账户和密码


#include <stdio.h>
#include <string.h>
#define M 20
int main()
{
	char name[M] = {0};
	char pword[M] = {0};
	printf("请注册账号:\n");
	scanf("%s", name);
	printf("请输入注册密码:\n");
	scanf("%s", pword);
	int i;
	char input_n[M];
	char input_p[M];
	for (i = 0; i < 3; i++)//3次机会
	{
		printf("请输入账号:\n");
		scanf("%s", input_n);
		printf("请输入密码:\n");
		scanf("%s", input_p);
		if ((strcmp(input_p, pword) == 0) && (strcmp(input_n, name) == 0))
			break;
		else if (i < 3)
			printf("密码错误,重新输入!\n");
	}
	if (i < 3)
	{
		printf("登陆成功,进入程序!\n");
	}
	else
		printf("密码错误,退出程序!\n");
	return 0;
}

运行结果:

请注册账号:
qwert
请输入注册密码:
qwer@12345
请输入账号:
qwert
请输入密码:
12456
密码错误,重新输入!
请输入账号:
qwert
请输入密码:
qwer@12345
登陆成功,进入程序!

注册:完成对账号和密码的输入

登录:将登录账号和密码跟注册的账号和密码进行匹配,如果相等,则登录成功,否则,登录失败

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值