这次作业还是星期三交
前言:数组没怎么学过,虽然功能是实现了,但是写的跟坨屎一样,知道怎么改进的私聊我一下奥
这两天学一学争取改进一下
剩下两题今晚睡觉前更新
写个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);
}