复习:
数组:连续 类型相同
初始化:
int a[5]={1,2,3};
int a[5]={0};
int a[]={1,23};
a[0]=90
0-4
scanf
printf
int a[5]={1,2,3,4,5}
a[5]//错
a[5]={1,2,3,4,5}//错
冒泡排序:
最大值
int max=a[0]
int m=0;
字符数组:
‘a’
char a[10];
字符串数组:以\0结尾
char a[10]={'1','7','a','\0'}
char a[5]="love";
ch = getchar()-->scanf("%c",&ch);
putchar(ch);-->printf("%c",ch);
%s
scanf("%s",&a[0]);//-->a
printf("%s",a);
宏定义:
#define N 50
int main()
{
int arr[N];
}
一、数组名代表数组首地址
二、类型转换
int a=3;
float b=1.23;
a+b
当两个不同类型变量进行计算时 要转成同一个类型
1.隐式转换
转换规则 :级别从低到高
char->short->int->float->double
#include<stdio.h>
int main()
{
int a=3;
float b=1.23;
float c = a+b;//将a转成float类型 由编译器gcc转换
printf("%f\n",c);
}
2.强制类型转换
#include<stdio.h>
int main()
{
int a=3;
float b=1.23;
int c = a+(int)b;//显示转换 (int)b 表示将b强制转成int类型
printf("%d\n",c);
}
3.特殊情况
#include<stdio.h>
int main()
{
float a = 1.99;
int b;
b = a;//赋值 计算机会默认将符号后边的类型转成符号左边的类型
printf("%d\n",b);
}
float double
2*10^3 ==2000 ==2e3
2*10^-5 ==0.00002 ==2e-5
练习:一个水分子重量约3.0*10^-23g 1夸脱水大约950g
编写程序 输入水的夸脱数 显示这么多水中含有多少个水分子
#include<stdio.h>
int main()
{
double result;
double a=3.0e-23;
int x;
printf("please input :\n");
scanf("%d",&x);
result = x*950/a;
printf("%lf\n",result);
}
三、输入输出函数
1.输出
(1)输出一个字符到屏幕
#include<stdio.h>
int main()
{
char ch='a';
putchar(ch);
putchar('#');
putchar('\n');
}
(2)输出一个字符串
#include<stdio.h>
int main()
{
char a[]="love";
printf("%s\n",a);
puts(a);//自动换行 输出字符串到屏幕
}
(3)printf格式输出
整型 %d
字符型 %c
浮点型 %f
双精度 %lf
十六进制 %x
以指数形式输出浮点数 %e
#include<stdio.h>
int main()
{
int b=13;
printf("%d %x\n",b,b);
float f=0.00134;
printf("%f\n",f);
printf("%e\n",f);
}
#include<stdio.h>
int main()
{
int h=2,m=34,n=6;
printf("%02d:%02d:%02d\n",h,m,n);//可以指定输出几位
}
#include<stdio.h>
int main()
{
float f=1.232;
printf("%.2f\n",f);//.2f 表示小数点后保留2位数字
}
2.输入
(1)输入一个字符
char ch = getchar();
(2)输入一个字符串
#include<stdio.h>
int main()
{
char str[50];
puts("input:");
gets(str);//从键盘获取一个字符串 阻塞
//scanf("%s",str);
puts(str);
}
(3)scanf 格式化输入
格式同printf
四、字符串处理函数
1.实现求字符串长度(有效字符的个数 不算\0)
#include<stdio.h>
int main()
{
int i=0;
char str[50];
puts("please input a string:");
gets(str);
while(str[i]!='\0')
{
i++;
}
printf("the length is %d\n",i);
}
2.字符串拷贝 将字符串数组b中的字符串拷贝到字符数组a中
char a[100];
char b[50]="love";
#include<stdio.h>
int main()
{
int i=0;
char a[100];
char b[50]="love";
while(b[i]!='\0')
{
a[i] = b[i];
i++;
}
a[i] = '\0';
puts(a);
}
3.实现字符串的连接 例如:
#include<stdio.h>
int main()
{
char a[100]="good good study";
char b[50]="day day up";
int i=0;
while(a[i]!='\0')
{
i++;
}
int j=0;
while(b[j]!='\0')
{
a[i] = b[j];
j++;
i++;
}
a[i]='\0';
puts(a);
}
4.系统中字符串处理函数
strlen strcpy strcat strcmp --》 必须加头文件#include<string.h>
(1)
strlen:计算字符串的长度 不包括'\0'
#include<stdio.h>
#include<string.h>
int main()
{
char a[100]="good good study";
char b[50]="day day up";
printf("%d\n",strlen(b));
}
注意:
strlen sizeof()区别
#include<stdio.h>
#include<string.h>
int main()
{
char b[50]="day day up";
printf("strlen:%d\n",strlen(b));//10
printf("sizeof:%d\n",sizeof(b));//50 sizeof(数组名) 测整个数组大小
printf("%d\n",sizeof(b[0]));//1
}
(2)strcpy(str1,str2)//将str2字符串(含'\0')拷贝到str1空间里 str2 源字符串 str1目标位置
#include<stdio.h>
#include<string.h>
int main()
{
char a[100]="good good study";
char b[50]="day day up";
strcpy(a,b);
puts(a);//day day up
}
(3)strcat(str1,str2)//将str2追加到str1
#include<stdio.h>
#include<string.h>
int main()
{
char a[100]="good good study";
char b[50]="day day up";
strcat(a,b);
puts(a);
}
(4)strcmp(str1,str2)
功能:将str1中字符与str2中字符逐个比较(按ascii大小) 直到遇到不相同的
字符或者遇到'\0'停止
返回值:
如果str1>str2 返回1
如果str1==str2 返回0
如果str1<str2 返回-1
#include<stdio.h>
#include<string.h>
int main()
{
char a[100]="abc";
char b[50]="ag";
char str[]="abcd";
char str2[100]="abc";
printf("%d\n",strcmp(a,b));
printf("%d\n",strcmp(a,str));
}
练习:输入一个名字 判断这个人的名字是不是"xiaoming"
#include<stdio.h>
#include<string.h>
int main()
{
char str[100];
puts("please input string:");
gets(str);
if(strcmp(str,"xiaoming")==0)
{
puts("he is xiaoming");
}
else
{
puts("he isn't xiaoming");
}
}
五、随机函数
1.rand() 能产生随机数
需要添加头文件#include<stdlib.h>
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ret;
while(1)
{
ret = rand()%10+1;
printf("%d\n",ret);
getchar();//等待键盘按键
}
}
2.srand
srand(seed)//seed 是rand的种子 用来初始化rand()起始值
#include<stdio.h>
#include<stdlib.h>
int main()
{
srand(time(NULL));//一次 time(NULL)获取当前系统的时间 秒数
//1970.1.1.0.0.0到现在经历的秒数
int ret;
while(1)
{
ret = rand()%10+1;//rand的范围
printf("%d\n",ret);
getchar();
}
}
练习:随机产生一个1-10之间的数 让对方猜5次 如果猜对了 就提示
“congratulations!” 如果猜错了 提示"bigger"或"small"
#include<stdio.h>
#include<stdlib.h>
int main()
{
srand(time(NULL));//一次 time(NULL)获取当前系统的时间
int ret,input,i;
ret = rand()%10+1;//rand的范围
for(i=0;i<5;i++)
{
puts("please input :");
scanf("%d",&input);
if(input==ret)
{
puts("congratulations!");
break;
}
else if(input>ret)
{
puts("bigger!");
}
else
{
puts("smaller!");
}
}
}
作业1:
从键盘输入一行字符 统计其中 英文字母 空格 数字 其他 的个数
*^?8 _agbc
作业2:
求出一句话中最长的单词的长度 并找到首字母在数组中的位置
i am a student.
作业3:实现35选7
(1)系统随机产生1-35之间不重复的7个数
(2)用户键盘输入7个数
(3) 开奖
a 3571289
b 3876492
count==2
switch(count)
{
case 7:
puts("500 0000!");
break;
case 6:
puts("50 0000");
break;
case 5:
puts("5 0000");
break;
case 4:
puts("5000");
break;
...
}
作业4.实现mystrcmp功能