题3,求一个3*3矩阵对角线之和
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int str[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
str[i][j] = rand();//生成随机数
printf("%d\t", str[i][j]);
}
printf("\n");
}
int sum=0;
for (int i = 0; i < 3; i++) {
sum = sum + str[i][i];//对角线下标相同
}
printf("%d ", sum);
return 0;
}
题4,有一个已经排好序的数组,要求输入一个数后,把他按原来规律插入原数组
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//仅限从小到大排序,从大到小条件反过来就可以了
#include<stdlib.h>
int main() {
int str[100];
int temp;
for (int i = 0; i < 10; i++) {
str[i] = rand();
}
//冒泡排序
for (int i = 0; i < 9; i++) {//管从头到尾排几趟的
for (int j = 0; j < 9 - i; j++) {
if (str[j] > str[j + 1]) {//自己跟自己的下一个比
temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
}//已经排好序了
int a;
scanf("%d", &a);
int index=0;
for (int i = 0; i < 10; i++) {
if (a > str[i]) {
index = i;//保存插入位置的下标
}
}
for (int i = 9; i > index; i--) {//从最后开始到这个下标的所有数依次后移
str[i + 1] = str[i];
}
str[index] = a;//把输入的数插入
for (int i = 0; i < 11; i++) {//多了一个数,条件加一
printf("%d ", str[i]);
}
return 0;
}
题5,将数组中的值逆序存放
思想:建两个数组,尾给头;想随机输入数组数量,但不太会
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int str1[20],str2[20];
str1[0] = 0;
int i=0;
int j = 0;
for ( i = 0; i<10; i++) {
str1[i] = rand();//输入十个数
}
for ( i = 9; i >= 0; i--,j++) {
str2[j] = str1[i];//将1尾给2头
}
for (i = 0; i < 10; i++) {
printf("%d ", str1[i]);//输出原数组
}
printf("\n");
for (i = 0; i < 10; i++) {
printf("%d ", str2[i]);//输出转换后的数组
}
return 0;
}
题8找出二维数组中的鞍点(边界条件过不了,如果同行或同列有相同的数就不对了)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
int str[3][4];
int i, j;
int flag = 0;
for ( i = 0; i < 3; i++) {
for ( j = 0; j < 4; j++) {
scanf("%d", &str[i][j]);
//str[i][j] = rand();
}
}
printf("\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
printf("%d ", str[i][j]);
}
printf("\n");
}
int max;
int max_index=0;
int min;
int min_index=0;
int k;
for (i = 0; i < 3; i++) {
max = str[i][0];
for (j = 0; j < 4; j++) {
if (str[i][j] > max) {
max_index = j;
max = str[i][j];
}
}
min = str[0][max_index];
for (k = 0; k < 3; k++) {
if (str[k][max_index] < min) {
min_index = k;
min = str[k][max_index];
}
}
if (max == min) {
flag = 1;
printf("行:%d,列:%d,值:%d",min_index, max_index, str[min_index][max_index]);
}
}
if (flag == 0) {
printf("无鞍点");
}
return 0;
}
题15,在15个数中折半查找
折半查找(二分法排序):low mid high key,key和mid比较,key大了low =mid+1,key小了high=mid-1;直到low和high交错停止
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//一定要先知道顺序,是从大到小还是从小到大,会涉及到后边查找下标的移动
int main() {
int str[15];
int temp;//中间变量
for (int i = 0; i < 15; i++) {
scanf("%d", &str[i]);//输入15个数
}
for (int i = 0; i < 14; i++) {//冒泡排序
for (int j = 0; j < 14 - i; j++) {
if (str[j] > str[j + 1]) {
temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
}
for (int i = 0; i < 15; i++) {
printf("%d ", str[i]);//从小到大输出
}
printf("\n");
int low = 0, high = 14;//最低和最高
int mid;//中间
int key;//要查找的数
int flag = 0;//标记位
scanf("%d", &key);
while (low <= high) {
mid = (low + high) / 2;
if (key == str[mid]) {
printf("是第%d个元素值为%d", mid,str[mid]);
flag = 1;
break;//找到了要跳出循环啊
}
else if (key > str[mid]) {
low = mid + 1;
}
else {
high = mid -1;
}
}
if (flag == 0) {
printf("无此值");
}
return 0;
}
有三行文字每行20个字符,要求分别统计出其中英文大写字母,小写字母,数字,空格以及其他字符的个数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<ctype.h>//函数们的头文件
int main() {
char str[3][20];//就是要用二维数组
int Balpha, Salpha, digit, space, other;
//Balpha = 0, Salpha = 0, digit = 0, space = 0, other = 0;
for(int i = 0; i < 3; i++) {
fgets(str[i], 20, stdin);//天杀的就是用二维数组,但是输入的是str[i],不是这两个都输入
}
for (int i = 0; i < 3; i++) {
Balpha = 0, Salpha = 0, digit = 0, space = 0, other = 0;//因为要统计每一行结果所以每次记得要归零
for(int j=0;str[i][j]!='\n';j++){//必须是以换行结尾,不是\0
if (isalpha(str[i][j])) {//是字母
if (islower(str[i][j])) {//是小写字母//扩展tolower转小写,返回的是ASCII码
Salpha++;
}
else if (isupper(str[i][j])) {//是大写字母//扩展toupper转大写,返回的是ASCII码
Balpha++;
}
}
else if (isdigit(str[i][j])) {//是数字,函数必须以这个格式写否则数不对
digit++;
}
else if (isspace(str[i][j])) {//是空格
space++;
}
else {
other++;
}
}
printf("大写字母为:%d个\n", Balpha);
printf("小写字母为:%d个\n", Salpha);
printf("数字为:%d个\n", digit);
printf("空格为:%d个\n", space);
printf("其他字符为:%d个\n", other);
printf("\n");
}
return 0;
}
mmmNNN ...888 (3,3,3,3)
HHHgff == = '''(3,3,3,3)
Jm / 9 (1,1,1,)
复制粘贴小tips:要想不从第一个字开始选中及下行,可以按住alt在往下拉,这样可以从中间劈一半选中
译原码,一行电文已加密,加密规则为第1字母变成第26字母,第i变成第(26-i+1),非字母字符不变,要求变回原码,并输出密码和原码,
只能数组吧,我不会啊啊啊啊,自己做不出来,借鉴的别人的代码,愚蠢,找不明白规律
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char c[100]="";
int i = 0, j, x;
printf("请输入一行电文\n");
while ((c[i] = getchar()) != '\n')
i++;
printf("%s", c);
x = strlen(c);
for (i = 0; i < x; i++)
{
if (c[i] >= 'A' && c[i] <= 'Z')
{
c[i] = 'Z' - (c[i] - 'A');//我不会找规律啊啊啊啊
}
else if (c[i] >= 'a' && c[i] <= 'z')
{
c[i] = 'z' - (c[i] - 'a');
}
}
printf("%s", c);
return 0;
}
将两个字符串连接起来
怎么在不知道循环次数的前提下输入一个数组呢?)(用%s输入就可以了)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
char a[30] = "";//初始化嗷都
char b[10] = "";
fgets(a, 10, stdin);//换行输入,不能搭配strcat,会多一个换行
fgets(b, 10, stdin);//用这个输入,求strlen要减一
//scanf("%s", a);//可空格可换行,搭配strcat刚刚好,但实现不了自己拼接两个数组
//scanf("%s", b);//用这个输入,求strlen不要减一
int len1 = strlen(a)-1;
int len2 = strlen(b)-1;
char c[20]="";
for (int i = 0; i < len1; i++) {
c[i] = a[i];
}
for (int i = len1; i < len2+len1; i++) {
c[i] = b[i-len1];
}
for (int i = 0; i < len1+len2; i++) {
printf("%c", c[i]);
}
/*strcat(a, b);
printf("%s", a);*/
/*for (int i = 0; i < len1 + len2; i++) {
printf("%c", a[i]);
}*/
return 0;
}
比较两个字符串
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main() {
char a[10] = "";
char b[10] = "";
scanf("%s", a);
scanf("%s", b);
int len1 = strlen(a);
int len2 = strlen(b);
int max;
max = len1 >= len2 ? len1:len2;//这个形式写简单
int flag = 0;
for (int i = 0; i < max; i++) {
if (a[i] > b[i]) {//一次性直接比完
flag = 1;
break;
}
else if (a[i] < b[i]) {
flag = 2;
break;
}
}
if (flag == 1) {
printf("%s", a);
}
else {
printf("%s", b);
}
//if (strcmp(a, b) > 0) {//函数形式
// printf("%s", a);
//}
//else {
// printf("%s", b);
//}
/*AbC
aBC*/
return 0;
}
复制字符串
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main() {
char a[10] = "";
char b[10] = "";
scanf("%s", a);
scanf("%s", b);
int len1 = strlen(a);
int len2 = strlen(b);
int i;
//for (i = 0; i < len1; i++) {//为了不使数据重叠这个用了一个将a数组清空,其实不主流,正确的做法是加终止符
// a[i] = 0;//根本没必要,因为下面长度已经限定了
//}
for (i = 0; i < len2; i++) {
a[i] = b[i];
}
a[i] = '\0';
printf("%s", a);
//for (i = 0; i < len2; i++) {//根本不用再加\0了,因为初始化都带上了
// printf("%c",a[i]);
//}
return 0;
}