#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
/*int main()
{
int i,m, sc[5], n = 5; //sc[5]有5个数据 sc[0] 到sc[4]地址只到4
for (i = 0; i < 5; i++)
scanf("%d", &sc[i]);
for (m = 0; m < 5; m++) //等价于for(i=4;i>=0;i--) i一定要从4 开始
printf("%d", sc[m]);
printf("\n");
//printf("%d", sc[5]);//没有 随便给一个数
return 0;
}*/
/*int main()
{
int sc[12];
int n = 12;
int t;
printf("输入12个整数:\n");
for (int i = 0; i < 12; i++)
scanf("%d", &sc[i]);
for (int i = 0; i < n - 1; i++)
for (int j = 0; j < n - 1 - i; j++)
if (sc[j]>sc[j+1])
{
t = sc[j]; sc[j] = sc[j + 1]; sc[j + 1] = t;
}
printf("第二大的数是:%d\n", sc[10]);
return 0;
}*/
/*
* 数组初始化的几种:
* int sc[5]={1,2,3,4,5};
* int sc[5]={1,2,3}前3个数据提供初值,后面的2个元素值为0
* int sc[5]={0,0,0,0,0}全部为0
* int sc[]={1,2,3,4,5}数据个数已经确定 可以不用指定数组长度
*/
/*int main()
{
int sc[10] = { 0 };
for (int i = 0; i < 10; i++)
printf("%d", sc[i]);
return 0;
}*/ //10个 0
//从键盘输入5个数,求其中最大值 并且输出
/*int main()
{
int i, a[5], max;
int p;
for (i = 0; i < 5; i++)
scanf("%d", &a[i]);
max = a[0]; //把数组第一个数据给max,利用for一个个比较
for (i = 1; i < 5; i++)
if (max < a[i])
{
max = a[i];
p = i;
}
printf("最大值为%d,下标为%d\n", max,p);
return 0;
}*/
//冒泡排序法 对数据进行排序,两两比较决定上升还是下降,得出升序序列还是降序序列
//输入6个数 从小到大排序
/*int main()
{
int a[6], n = 6;
int i;
int j;//内部比较的次数
int t;//用来进行3部交换
printf("请输入6个数据:\n"); //输入数据
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (i = 0; i < n - 1; i++)//有6个数 所以要比较5(n-1)轮
for (j = 0; j < n - 1 - i; j++)//内部次数 第一轮5次 第二轮4次 所以为 n-1-i次
if (a[j] > a[j + 1])
{
t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;
}
printf("排序后的数据为:\n");
for (i = 0; i < n; i++)
printf("%d ", a[i]);
return 0;
}
*/
/* 第一轮
输入 次数1 2 3 4 5
16 10 10 10 10 10
10 16 11 11 11 11
11 11 16 16 16 16
17 17 17 17 15 15
15 15 15 15 17 14
14 14 14 14 14 17//可以理解为把最大的数放在最底下了 下一轮就不需要他了
第二轮
次数 1 2 3 4
10 10 10 10 10
11 11 11 11 11
16 16 16 15 15
15 15 15 16 14
14 14 14 14 16 //两两比较 并且吧最大的放在最下面
*/
//按照姓名对班上的同学的名字从小到大排序(首字母排序)用冒泡排序法和strcmp()函数来比较字符串大小,用strcpy()函数来进行复制,用来3部交换
/*int main()
{
char xsname[6][10] = { "张三丰","李思平","王武法","马事顺","白启明" ,"周凯旋" };
int i, j;
int n = 6;
char t[10];//用来交换
printf("排序前同学的名字为:\n");
for (i = 0; i < n; i++)
printf("%s ", xsname[i]);
//接下来用冒泡排序
for (i = 0; i < n - 1; i++)//6个同学比较5轮
for (j = 0; j < n - 1 - i; j++)//每一轮比较5-i次
if (strcmp(xsname[j], xsname[j + 1]) > 0)
{
strcpy(t, xsname[j]); strcpy(xsname[j], xsname[j + 1]); strcpy(xsname[j + 1], t);
}
printf("\n排序后同学的名字为:\n");
for (i = 0; i < n; i++)
printf("%s ", xsname[i]);
return 0;
}*/
/*字符数组 定义 char 数组名[常量表达式]
* char c[7]
* c[0]=w c[1]=e c[2]=l c[3]=z c[4]=b c[5]=a c[6]=h 0到6六个下标
*
* 字符数组的初始化:
* char c[5]={‘H',’e','l','l','o'};
* 若提供的字符个数小于数组长度,则只将这些字赋值给数组中前面的那些元素,其余的元素自动使用\0填充
* 也可以不指定数组长度
*
* 字符串与字符串结束标志
* 用null即\0终止 \0即为ASCII码值为0的字符
* char c[6]={"Hello"}; 自动为c[5]使用null字符填充
* 大括号可以省略,数组长度可以省略说明
*/
/*int main()
{
char c[6] = { 'H','e','l','l','o','\0' };
int i;
for (i = 0; i < 5; i++)
printf("%c", c[i]);//打印字符用%c
return 0;
}*/
//Hello
/*int main()
{
char c[6];
int i;
for(i=0;i<5;i++)
scanf("%c", &c[i]); //注意不要空格 空格也算一个字符
c[5] = '\0';//字符串结束标志
for (i = 0; i < 5; i++)
printf("%c", c[i]);
return 0;
}*/
/*int main()
{
char c[6] = { 'H','e','l','l','o','\0' };
printf("%s", c); //%s直接输出字符串
return 0;
}*/
/*int main()
{
char c[6];
scanf("%s", c);//可以没有取地址符号 并且系统自动在输入的字符后面加一个’\0'结束符
printf("%s", c);
return 0;
}*/
//用gets 和 puts来操作
/*int main()
{
char c[20];
printf("请输入字符串\n");
gets_s(c);
printf("请输出字符串:\n");
puts(c);
return 0;
}*/
/*字符串连接函数
* strcat(字符数组1,字符数组2) 把2连接到1后面,把1的\0删除 要求1必须足够长,能容纳所有的字符
* 否则会越界
*/
/*int main()
{
char str1[20] = { "南京信息工程大学" };
char str2[20] = { "欢迎你" };
printf("字符串数组1为%s\n", str1);
printf("字符串数组2为%s\n", str2);
strcat(str1, str2);//#include<string.h>
printf("合并之后的字符串为%s\n", str1);//南京信息工程大学欢迎你
return 0;
}*/
/*字符串复制函数
strcpy(字符数组1,字符数组2);
会把2中的字符串拷贝到1中结束符也被拷贝了
*/
/*int main()
{
char str1[20] = { "南京信息工程大学" };
char str2[20] = { "欢迎你" };
printf("字符串数组1为%s\n", str1);//南京信息工程大学
printf("字符串数组2为%s\n", str2);//欢迎你
strcpy(str1, str2);
printf("复制后,字符串1为:%s\n", str1);//欢迎你
printf("复制后,字符串2为:%s\n", str2);//欢迎你
return 0;
}*/
/*字符串长度函数strlen不包括\0
*/
/*int main()
{
char str1[] = "abcdef";
printf("%d\n", strlen(str1));
return 0;//6
}*/
/*strcmp函数 是进行字符串的比较
* strcmp(字符数组1,字符数组2)将各个字符对应的ASCII码值进行比较,从第0个字符开始比较,如果相等就比较下一个字符,直到遇见不同的字符,或者到字符串的末尾
*字符数组1和2相等,则返回0
* 大于 返回1
* 小于 返回-1
*/
/*int main()
{
char stra[] = { "abcdef" };
char strb[] = "ABCDEF";
char strc[] = "abcde";
char a[] = "江苏";
char b[] = "浙江";
char c[] = { "浙江" };
printf("stra和strb比较:%d\n", strcmp(stra, strb));
printf("stra和strc比较:%d\n", strcmp(stra, strc));
printf("strb和strc比较:%d\n", strcmp(strb, strc));
printf("a和b比较:%d\n", strcmp(a, b));//江苏的首字母j 浙江首字母z j<z 所以为-1
printf("b和c比较:%d\n", strcmp(b, c));
return 0;
}*/
//二位数组的定义和引用
/*例如 int sc[3][4]
* 一个二维数组,可以看作一个一维数组的列表
* sc[0] sc[0][0] sc[0][1] sc[0][2] sc[0][3] sc[0][4]
* sc[1] sc[1][0] sc[1][1] sc[1][2] sc[1][3] sc[1][4]
* sc[2] sc[2][0] sc[2][1] sc[2][2] sc[2][3] sc[2][4]
*/
/*二位数组的初始化
int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
int a[3][4] = { {1},{2,5},{0,9,7} };
1 0 0 0
2 5 0 0
0 9 7 0
如果对全部的数组元素都赋初值,则定义数组时对1维的长度可以不指定,但是二位的长度不能省略
int a[][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
等价于
int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
在定义时也可以支队部分元素赋初值而省略第一维的长度,但应分行赋初值
int a[][4]={{0,2,3},{},{1,10}}
0 2 3 0
0 0 0 0
1 10 0 0
*/
//两种办法输出 *
// ***
// *****
// ***
// *
/*int main()
{
char a[5][6] = {" *"," ***","*****"," ***"," *"};//注意是6而不是5 字符串结尾有/0
int i;
for (i = 0; i < 5; i++)
printf("%s\n", a[i]);//是字符串而不是字符
printf("\n");
return 0;
}*/
/*int main()
{
char a[5][6] = { " *"," ***","*****"," ***"," *" };
int i, j;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
printf("%c", a[i][j]);
printf("\n");
}
return 0;
}*/
//杨辉三角 每一列和最后1列元素为1,其他列元素为其左上方和正上方元素之和,请使用数组输出杨辉三角的前10行
/*
* 1
* 1 1
* 1 2 1
* 1 3 3 1
*/
/*int main()
{
int a[10][10];
int i, j;
for (i = 0; i < 10; i++)//第一列和最后一列全为1
{
a[i][0] = 1;
a[i][i] = 1;
}
for (i = 2; i < 10; i++)//从第3行第二列开始有不同
for (j = 1; j < i; j++)//j<i 就行了后面的不需要
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];//规律的体现
for (i = 0; i < 10; i++)
{
for (j = 0; j<=i; j++)//j<=i
printf("%5d", a[i][j]);
printf("\n");
}
return 0;
}*/
//折半法查找数是否在数组中
/*int main()
{
int a[7] = { 12,45,67,89,123,-45,71 };
int n = 7;
int i, j;
int t;//先用冒泡排序法进行排序从小到大 不会的博主以前有讲解哦
for (i = 0; i < n - 1; i++)
for (j = 0; j < n - 1 - i;j++)
if (a[j] > a[j + 1])
{
t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;
}
printf("排序后的数为:\n");
for (i = 0; i < n; i++)
printf("%d ", a[i]);//将数组里的数排序好
//接下来用折半法查找指定的数值
int number;//你要查找的数
printf("\n请输入需要查找的数值:");
scanf("%d", &number);
int start = 0,middle, end = n - 1;//数组开始和结尾的地址
middle = ((start + end) / 2);//数组中间的位置
int x=0;//用来标记是否找到
while (start <= end)
{
if (number == a[middle])
{
x = 1; break;//找到就跳出循环
}//这里给出排序完的数为:-45 12 45 67 71 89 123
else if (number > a[middle])//假如为number为70 此时a[middle]=67 明显大于 所以在后半部分找(middle+1到end)
start = middle + 1;//start变为4,middle变为(4+6)/2=5,end不变; 继续 -45 12 45 67 71 89 123 a[middle]=89 70<89应该是下一个else
else if (number < a[middle])//70<89,就是在前半部分找(原来就是在 71 89 123中找,现在就是在 start到middle-1找) end 变为middle-1为4,end=start=4;
end = middle - 1; //此时中间值也是4 实际上就一个数71了 70<71 又进入第一个else if 之后start变换后大于end 跳出循环 所以这个数不在数组中
middle = (start + end) / 2;//新的中间的位置
}
if (x)
printf("%d在数组中\n", number);
else
printf("%d不在数组中\n", number);
return 0;
}*/
5544

被折叠的 条评论
为什么被折叠?



