复习:
数据类型:
int %d
long %ld
short %hd
float %f
double %lf
char %c
循环语句:
重复
for
for(i=0;i<5;i++)
{
}
while
while(条件)
{
}
do-while
do
{
;
}while(条件);
选择:
if
if()
{
}
else if
{
}
switch()
{
case 常量:
语句;
break;
...
default:
}
运算符:
算术运算 + - *
/ %
关系运算:
>= <= < > != ==
逻辑运算符:
&& || !
三目运算符:
a>b?a:b
变量自增自减
int z=x++;
int w = ++x;
赋值运算符:
+= -= *= /= %=
常量:
整型
浮点
字符
字符串
宏
字符常量
'a'
ascii
新知识:
一、宏定义
1.常量
#define N 5
#define 定义宏
N 宏名 是常量 一般是大写
5 宏值
2.
宏是预处理阶段实现机械替换 用宏值替换掉宏名
宏优点:
(1)一改全改
(2)可以增强代码的可读性
130 2:10
90 1:30
#include<stdio.h>
#define PER_HOUR 60
int main()//90 1:30 90/60 90%60
{
int time;
while(1)
{
printf("input time:\n");
scanf("%d",&time);
if(time==0)
{
break;
}
printf("%d:%d\n",time/PER_HOUR,time%PER_HOUR);
}
}
练习:设圆的半径r 求圆周长及面积 用scanf输入半径 求结果
3.14 PI 用宏表示
#include<stdio.h>
#define PI 3.14
int main()
{
float r,s,c;
printf("please input r:\n");
scanf("%f",&r);
c= 2*PI*r;
s = PI*r*r;
printf("%f %f\n",s,c);
return 0;
}
二、数组:相同数据类型的集合
1.定义数组
类型 数组名[数组元素个数];
int arr[5];//
arr[0]=10
arr[1]=20
arr[2]=30
arr[3]
arr[4]
2.数组初始化
int arr[5]={10,20,30,40,50};//全部初始化
int arr[5]={10,20,30};//部分初始化 没被初始化的自动清0
int arr[5]={0};//清零
int arr[]={10,20,30,7};//默认初始化
//数组个数可以缺省 具体个数由初始化的值个数决定
//注意 只限于初始化
3.输出
#include<stdio.h>
int main()
{
int arr[5]={0};
int i;
for(i=0;i<5;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
4.scanf 输入数据
#include<stdio.h>
#define N 3
int main()
{
int arr[N];
int i;
for(i=0;i<N;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<N;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
练习:键盘获取5个学员成绩 求和及平均值
#include<stdio.h>
#define N 5
int main()
{
int stu[N];
int i,sum=0,avg;
for(i=0;i<N;i++)
{
scanf("%d",&stu[i]);
sum += stu[i];
}
printf("sum:%d avg:%d\n",sum,sum/N);
return 0;
}
练习:输入5个学生成绩 如果成绩>100或者<0 要重新输入
保证5个正确值
方法1:
#include<stdio.h>
#define N 5
int main()
{
int stu[N];
int i;
for(i=0;i<5;i++)
{
do
{
scanf("%d",&stu[i]);
}while(stu[i]<0||stu[i]>100);
}
for(i=0;i<5;i++)
{
printf("%d\n",stu[i]);
}
return 0;
}
方法2:
#include<stdio.h>
#define N 5
int main()
{
int stu[N];
int i;
for(i=0;i<5;i++)//130
{
scanf("%d",&stu[i]);
if(stu[i]<0||stu[i]>100)
{
i--;//
}
}
for(i=0;i<5;i++)
{
printf("%d\n",stu[i]);
}
return 0;
}
练习,计算斐波那契数列
已知前两项分别是1 从第三项开始 每项是前两项之和
1 1 2 3 5.... 程序实现计算前20项
#include<stdio.h>
int main()
{
int a[20]={1,1};
int i;
for(i=2;i<20;i++)
{
a[i] = a[i-1]+a[i-2];
}
for(i=0;i<20;i++)
{
printf("%d ",a[i]);
}
return 0;
}
5.找数组中最大值
#include<stdio.h>
int main()
{
int a[6]={45,23,67,89,12,9};
int max=a[0];
int i;
for(i=1;i<6;i++)
{
if(max<a[i])
{
max = a[i];
}
}
printf("%d\n",max);
return 0;
}
练习: int a[6]={45,23,67,89,12,9};
找到最大值 最小值及所在的位置
#include<stdio.h>
int main()
{
int a[6]={45,23,67,89,12,9};
int max=a[0];
int min=a[0];
int m=0,n=0;
int i;
for(i=1;i<6;i++)
{
if(max<a[i])
{
max = a[i];
m = i;
}
if(min>a[i])
{
min = a[i];
n = i;
}
}
printf("max:%d min:%d m:%d n:%d\n",max,min,m,n);
return 0;
}
6.冒泡排序
实现过程:从小到大
(1)比较数据中的前两个数 将大数放后面 较小数放前面 然后比较第二个数和
第三个数
(2)依次类推
(3)如果n个数据排序 需要排n-1趟
#include<stdio.h>
int main()
{
int a[6]={23,45,12,67,78,89};
int tmp,i,j;
for(i=0;i<5;i++)//排6-1趟
{
for(j=0;j<5-i;j++)//每趟比较5-i次
{
if(a[j]>a[j+1])
{
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
for(i=0;i<6;i++)
{
printf("%d ",a[i]);
}
return 0;
}
二、字符数组
1.定义字符数组
char a[50];
2.赋值
a[0]='a'
a[1]-'x'
a[2]
...
3.循环赋值
#include<stdio.h>
int main()
{
char a[10];
int i;
for(i=0;i<10;i++)
{
scanf("%c",&a[i]);
}
}
4.使用字符输入函数
#include<stdio.h>
int main()
{
char ch;
ch = getchar();//getchar() 从键盘获取字符 并返回
printf("%c\n",ch);
return 0;
}
5.初始化
char a[5]={'a','b','c','d','e'};//全部初始化
char a[5]={'a','b','c'};//部分初始化 未初始化的自动清零
char a[5]={'\0'};//将数组清零
6.使用字符输出函数
#include<stdio.h>
int main()
{
char ch;
ch = getchar();//getchar() 从键盘获取字符 并返回
putchar(ch);//输出ch的值
putchar('a');//输出字符'a'
return 0;
}
7.字符常量和字符串常量
字符串常量:以‘\0’结尾的一组字符
(1)特点:
a、由双引号引起来 "a"等价于'a' '\0' -->'\0'是系统自动加的 占空间
b、字符串存在字符数组中
(2)
定义
char str[20]={'l','o','v','e','\0'};
char str[20]={"love"};
char str[20]="love";
数组长度?
(3)打印输出
方法1:%c
#include<stdio.h>
int main()
{
char str[20]="love";
int i;
for(i=0;str[i]!='\0';i++)
{
printf("%c ",str[i]);
}
return 0;
}
方法2:%s 字符串格式控制符 整体操作字符串
#include<stdio.h>
int main()
{
char str[20]="love";
int i;
/*
for(i=0;str[i]!='\0';i++)
{
printf("%c ",str[i]);
}
*/
printf("%s\n",str); //从str首地址开始(数组名代表数组首地址) 逐个字符打印输出 直到\0
return 0;
}
练习:键盘输入一组字符 将输入的字符排序
char s[6]={'a','c','b','g','d','f'}
#include<stdio.h>
#define N 10
int main()
{
char str[N]="\0";
printf("input 10 char:\n");
int i,j;
char tmp;
for(i=0;i<N;i++)
{
str[i] = getchar();
getchar();//取回车
}
for(i=0;i<N-1;i++)
{
for(j=0;j<N-1-i;j++)
{
if(str[j]>str[j+1])
{
tmp = str[j];
str[j] = str[j+1];
str[j+1] = tmp;
}
}
}
printf("%s\n",str);
return 0;
}
作业1:
歌唱比赛 10个评委打分 统计结果:将10个评分去掉一个最高分 去掉一个最低分
统计出剩下8个评委分数的平均分
a#include<stdio.h>
#define N 5
int main()
{
int max,min,sum=0;
int i;
int score[N];
for(i=0;i<N;i++)
{
scanf("%d",&score[i]);
}
min = score[0];
max = score[0];
for(i=0;i<N;i++)
{
if(max<score[i])
{
max = score[i];
}
if(min>score[i])
{
min = score[i];
}
sum += score[i];
}
printf("%d %d %d\n",max,min,(sum-max-min)/(N-2));
return 0;
}
作业2:输入一个字符串 判断输入的字符串是不是"hello"
#include<stdio.h>
int main()
{ int i;
char str[100];
char str2[]="hello";
puts("input a string:");
gets(str);
for(i=0;str2[i]!='\0';i++)
{
if(str2[i]==str[i])
{
if(i==4)
{
puts("equal!");
}
continue;
}
puts("not equal!");
break;
}
}
作业3:输入一个字符 再输入一个字符串 判断这个字符是否在这个字符串中
#include<stdio.h>
int main()
{ int i=0;
char ch;
char str[100];
puts("input a string:");
gets(str);
puts("input a char:");
ch = getchar();
while(str[i]!='\0')
{
if(ch==str[i])
{
puts("exist!");
break;
}
i++;
}
}
作业4:输出一个字符串中所有的元音字母(a e i o u A E I O U)
#include<stdio.h>
int main()
{ int i=0;
char str[100];
puts("input a string:");
gets(str);
while(str[i]!='\0')
{
if(str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'\
||str[i]=='u'||str[i]=='A'||str[i]=='E'||str[i]=='I'\
||str[i]=='O'||str[i]=='U')
{
putchar(str[i]);
}
i++;
}
}
作业5:删除字符串中所有的字母'c'
#include<stdio.h>
#define N 5
int main()
{
char str[100];
gets(str);
int i=0,j=0;
while(str[i]!='\0')
{
if(str[i]=='c')
{
j = i;
while(str[j]!='\0')
{
str[j] = str[j+1];
j++;
}
}
if(str[i]!='c')
{
i++;
}
}
printf("%s\n",str);
return 0;
}