谢伟鹏exp5

这次作业还是星期三交
前言:数组没怎么学过,虽然功能是实现了,但是写的跟坨屎一样,知道怎么改进的私聊我一下奥
这两天学一学争取改进一下

剩下两题今晚睡觉前更新
写个der,早睡早起,明早起来写
除了第四题全部都更新完辽

第一题

#include <stdio.h>

void input(int a[], int n);
void Compare(int a[], int n);

int main(void)
{
	int a[100];
	int n;
	printf("请输入数组元素的个数\n");
	scanf("%d", &n);
	printf("请输入数组元素的值\n");
	input(a, n);		//输入数组的元素的值
	Compare(a, n);		//输出数组的极值下标

	return 0;
}

void input(int a[], int n)
{
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &a[i]);
	}
}
void Compare(int a[], int n)
{
	int f = 1;  //标记极值是否存在
	for (int i = 1; i < n; i++)
	{
		if (a[i] > a[i + 1] && a[i] > a[i - 1])
		{ 
			printf("%d\n", i);
			f = 0;
		}
		if (a[i] < a[i + 1] && a[i < a[i - 1]])
		{
			printf("%d\n", i);
			f = 0;
		}
	}
	if (f)
		printf("不存在极值\n");
	return;
}

第二题

#include <stdio.h>

void judge(int n);	//判断是否有重复数字

int main(void)
{
	int n;
	printf("请输入该数\n");
	scanf("%d", &n);
	judge(n);

	return 0;
}
void judge(int n)
{
	int a[100];
	int i = 0;
	int f = 1;	//标记,控制YES只输出一次
	while (n)
	{
		a[i] = n % 10;
		i++;
		n /= 10;
	}
	for (int j = 0; j < i; j++)
	{
		for (int k = j + 1; k < i; k++)
		{
			if (a[j] == a[k] && f == 1)
			{
				printf("yes\n");
				f = 0;
			}
		}
	}
	if (f)		//没有输出yes则输出no
		printf("no\n");
}

第三题
第三题和上次作业有一道一样,懒得发了

第四题
寄,第四题我好像理解错了,我原来理解的是把每一行如果有最大的数,就把他输出,每一列如果有最小的数,就把他输出,就是输出的数可以不止一个。但是题目好像是要只输出一个,同时满足在这行最大并且在他那一列最小。
废了,懒得改了,过两天再改。

#include <stdio.h>

int main(void)
{
	int a[100][100];
	int n, m;
	int max = 0;//最大值
	int min = 0;//最小值
	int mhang = 0;//最值行数
	int mlie = 0;//最值列数
	int f1 = 0;
	int f2 = 0;
	int f3 = 0;
	int f4 = 0;//判断这种特征的元素是否存在
	printf("请输入该数组的行数和列数\n");
	scanf("%d%d", &n, &m);
	printf("请输入数组元素\n");
	for (int i = 0; i < n; i++)//输入数组元素
	{
		for (int j = 0; j < m; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	for (int i = 0; i < n; i++)//输出某行最大值的行数和列数
	{
		max = a[i][0];
		for (int j = 0; j < m; j++)//找出最值
		{
			if (a[i][j] > max)
			{
				max = a[i][j];
				mhang = i;
				mlie = j;
			}
		}
		for (int k = 0; k < m; k++)//把最值与每一个数进行比较,看是否存在最值
		{
			if (a[i][k] == max && mlie != k)
				f1 = 1;
		}
		if(!f1)
		{ 
			printf("第%d行最大的数组元素在第%d行第%d列\n", mhang + 1, mhang + 1, mlie + 1);
			f3 = 1;
		}
	}

	mhang = 0;//对行列初始化
	mlie = 0;
	for (int j = 0; j < m; j++)
	{
		min = a[0][j];
		for (int i = 0; i < n; i++)
		{
			
			if (a[i][j] < min)
			{
				min = a[i][j];
				mhang = i;
				mlie = j;
			}
		}
		for (int k = 0; k < m; k++)//把最值与每一个数进行比较,看是否存在最值
		{
			if (a[k][j] == min && mhang != k)
				f2 = 1;
		}
		if (!f2)
		{
			f4 = 1;
			printf("第%d列最小的数组元素在第%d行第%d列\n", mlie + 1, mhang + 1, mlie + 1);
		}
			
	}
	if (!f3 && !f4)
		printf("不存在这种特征的元素\n");
	
	return 0;
}

第五题

#include <stdio.h>
#include <string.h>

int main(void)
{
	char character[100];
	scanf("%s", character);			//输入字符
	char alphabet[26][2][2];		//[26]存储26个大小写字母,[2]→大小写
									//第二个[2],一个用来表示字母,一个用来表示出现次数
	char number[10][2];				//存储10个数字,与上同理
	char a = 'a';
	char A = 'A';
	char n = 0;
	for (int i = 0; i < 26; i++)	//读入大小写字母
	{
		alphabet[i][0][0] = a + i;	//小写字母
		alphabet[i][1][0] = A + i;	//大写字母
		alphabet[i][0][1] = 0;		//个数初始化为0
	}
	for (int i = 0; i < 10; i++)	//读入10个数字
	{
		number[i][0] = n + i;
		number[i][1] = 0;			//个数初始化为0
	}
	for (int i = 0; i < strlen(character); i++)//检测出现次数
	{
		for (int j = 0; j < 26; j++)
		{
			if (character[i] == alphabet[j][0][0] || character[i] == alphabet[j][1][0])
			{
				alphabet[j][0][1]++;
			}
		}
		for (int k = 0; k < 10; k++)
		{
			if ((int)(character[i] - 48) == number[k][0])
			{
				number[k][1]++;
			}
		}
	}
	for (int i = 0; i < 26; i++)//输出字母出现次数
	{
		printf("%c的出现次数:%d\n", a + i, alphabet[i][0][1]);
	}
	for (int i = 0; i < 10; i++)//输出数字出现次数
	{
		printf("%d的出现次数:%d\n", n + i, number[i][1]);
	}


	return 0;
}

第六题

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

void input(int a[]);	//输入学生成绩
bool is_all(int a[]);	//判断是否全部都超过60分
int passgrade(int a[]);	//算及格线

int main(void)
{
	int a[100];
	int grade;		//及格线
	input(a);
	if (is_all(a))
		printf("及格线为60分\n");
	else
	{
		grade = passgrade(a);
		printf("及格线为%d分", grade);
	}

	return 0;
}
void input(int a[])
{
	int i = 0;
	printf("请输入学生的成绩,输入任意字母结束输入\n");
	while (scanf("%d", &a[i]) == 1)
	{
		i++;
	}
	return;
}
bool is_all(int a[])
{
	int all = strlen(a);
	int pass = 0;
	for (int i = 0; i < all; i++)
	{
		if (a[i] >= 60)
			pass++;
	}
	if (pass == all)
		return true;
	return false;
}
int passgrade(int a[])
{
	float passnumber = 0;			//超过及格线的人数
	float allnumber = strlen(a);	//总人数
	
	for (int i = 100; i >= 0; i -= 10)
	{
		for (int j = 0; j < allnumber; j++)
		{
			if (a[j] >= i)
			{
				passnumber++;
			}
		}
		if (passnumber / allnumber >= 0.6)
		{
			return i;
		}
	}
}

第七题

#include <stdio.h>

int main(void)
{
	int a[25][25];
	int sum = 1;
	for (int i = 0; i < 10; i++)
	{
		a[i][i] = sum + 4 * i;
		sum = a[i][i];
		int m = 0;
		for (int j = i + 1; j <= 20 - i * 1; j += 2)
		{
			a[i][j] = a[i][j - 1] + 1 + 2 * i;
			a[i][j + 1] = a[i][j] + 4 + i * 2 + 4 * m;
			m++;
		}
		m = 0;
		for (int k = i + 2; k <= 20 - i * 1; k += 2)
		{
			a[k - 1][i] = a[k - 2][i] + 2 + 2 * i + 4 * m;
			a[k][i] = a[k - 1][i] + i * 2 + 1;
			m++;
		}
	}
	for (int i = 0; i < 20; i++)
	{
		for (int j = 0; j < 20 - i; j++)
		{
			if (a[i][j])
			printf("%-4d",a[i][j]);
		}
		putchar('\n');
	}

	return 0;
}

第八题

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void input(char a[], int n);		//随机生成字符串
void judge(char a[], int n);		//用户输入,判断正确率

int main(void)
{
	char a[100];
	int n;
	srand((unsigned int)time(NULL));
	printf("请输入要随机生成字符串的长度\n");
	scanf("%d", &n);
	input(a, n);
	judge(a, n);

	return 0;
}
void input(char a[], int n)
{
	int m;
	for (int i = 0; i < n; i++)
	{
		m = rand() % 2;						//随机是大写还是小写
		if(m)
			a[i] = (char)(rand() % 26 + 65);//小写
		else
			a[i] = (char)(rand() % 26 + 97);//大写
		printf("%c", a[i]);
	}
	putchar('\n');
}
void judge(char a[], int n)
{
	char b[100];
	printf("请输入字符串:");
	double yes = 0;
	scanf("%s", b);
	for (int i = 0; i < n; i++)
	{
		if (b[i] == a[i])
			yes++;
	}
	printf("输入的正确率为%%%.2lf", yes / n * 100);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值