条件运算符
表达式1?表达式2:表达式3
表达式1为真,结果是表达式2的结果;否则是表达式3的结果。
sizeof()运算符
计算类型和变量的占内存长度,单位是字节
int 4
char 1
float 4
short 2
double 8
++自增 --自减
变量自身+1或者-1。
前缀和后缀形式表达式的结果不一样。
前缀:表达式的结果是变量+1或-1之后的值。
后缀:表达式的结果是变量+1或-1之前的值。
短路特性
&& ||
&& 左边为假,右边不执行。
|| 左边为真,右边不执行。
switch-case结构
switch(表达式) //表达式的结果必须是整型,或者字符型。
{
case 值(常量): //值是表达式可能产生的结果。
可以写无数个case
default: 当没有匹配到任何case,会执行default,可以省略。
}
当匹配到某个case的时候,会从这个开始case执行,直到遇见break或者switch结束。
while循环
while(表达式)
{
循环体
}
for循环
for(表达式1;表达式2;表达式3)
{
循环体
}
用户不断输入数字,每输入一个数字就打印,直到输入为0时为止
#include
int main()
{
int input;
while(1)
{
scanf("%d", &input);
if(input == 0)
{
break;
}
printf("%d\n", input);
}
return 0;
}
输出以下图形.要求:每次只输出一个字符。
*****
#include
int main()
{
int i;
//循环变量习惯从0开始
//我们一定要清楚代码执行的流程,千万不要想当然
for(i = 0;i < 5;i++)
{
printf("*");
}
//循环走完的时候,已经打印了5个*
printf("\n");
return 0;
}
输出以下图形。要求:每次只输出一个字符。
*****
*****
*****
#include
int main()
{
int i;
int line;
for(line = 0;line < 3;line++)
{
//循环变量习惯从0开始
//我们一定要清楚代码执行的流程,千万不要想当然
for(i = 0;i < 5;i++)
{
printf("*");
}
//循环走完的时候,已经打印了5个*
printf("\n");
}
return 0;
}
输出以下图形。要求:每次只输出一个字符。
*
**
***
****
#include
int main()
{
int i;
int line;
//int len = 1;
for(line = 0;line < 4;line++)
{
//循环变量习惯从0开始
//我们一定要清楚代码执行的流程,千万不要想当然
for(i = 0;i < line+1;i++)
{
printf("*");
}
//循环走完的时候,已经打印了5个*
printf("\n");
//len++;
}
return 0;
}
输入学生成绩,程序中加入循环,可以反复输入成绩查看等级
90-100 分打印 A
80-89 分打印 B
70-79 分打印 C
60-69 分打印 D
其他不及格
#include
int main()
{
int score;
while(1)
{
scanf("%d", &score);
if(score<0 || score>100)
{
printf("输入错误\n");
}
else if(score >= 90)
{
printf("A\n");
}
else if(score >= 80)
{
printf("B\n");
}
else if(score >= 70)
{
printf("C\n");
}
else if(score >= 60)
{
printf("D\n");
}
else
{
printf("不及格\n");
}
}
return 0;
}
实现输入一个字符,使用循环可以反复的输入判断,判断这个字符是不是数字,如果不是数字,是大写字符还是小写字符
#include
int main()
{
char input;
while(1)
{
scanf("%c", &input);
if(input>='0' && input<='9')
{
printf("数字\n");
}
else if(input>='a' && input<='z')
{
printf("小写\n");
}
else if(input>='A' && input<='Z')
{
printf("大写\n");
}
else
{
printf("啥也不是\n");
}
getchar();//清理回车
}
return 0;
}
判断用户输入的年是否为闰年?
四年一润
百年不润
四百年又润 2000 yes 1900 no
#include
int main()
{
int year;
scanf("%d", &year);
if(year%4==0&&year%100!=0 || year%400==0)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
在所有的三位数中,寻找有几个水仙花数。 (4个)
(371 == 3*3*3 + 7*7*7 + 1*1*1)
num%10 得到个位数
num/10%10 得到十位数
num/100 得到百位数
#include
int main()
{
int num;
//循环所有的三位数
for(num = 100;num < 1000;num++)
{
int a = num%10;//个位数
int b = num/10%10;//十位数
int c = num/100;//百位数
if(a*a*a+b*b*b+c*c*c == num)
{
printf("%d\n", num);
}
}
return 0;
}
do
{
循环体。
}while( 条件 );
第一次的循环体是无条件执行的,循环体执行完之后判断条件,条件为真再执行循环体。
do-while循环以;结尾。
C语言的语句一定是以{}或者;结尾。
if()
{}
switch()
{}
while()
{}
for()
{}
特点: 先执行,再判断。
#include
int main()
{
int i=1;
do
{
printf("%d",i);
i++;
}while(i<=5);
return 0;
}
1 ~ 100 之间求和。使用 do-while 完成。
#include
int main()
{
int i = 1;
int sum = 0;
do
{
sum += i;
i++;
}while(i < 101);
printf("%d\n", sum);
return 0;
}
请输入一个数,如果满足条件(150~160 之间包括150和160),输出它,并且结束程序即可。
(要求:请确保这个数是范围内的数,如果不在范围内,请重新输入)建议使用do-while
#include
int main()
{
while(1)
{
int input;
scanf("%d", &input);
if(input>=150 && input<=160)
{
printf("%d\n", input);
break;
}
}
return 0;
}
#include
int main()
{
int input;
do
{
scanf("%d", &input);
}while(input<150 || input>160);
printf("%d\n", input);
return 0;
}
输出以下图形。要求:每次只输出一个字符。
*
***
*****
#include
int main()
{
int i, j;
//int spaceCount = 2;
//int starCount = 1;
for(i = 0;i < 9;i++)
{
for(j = 0;j < 8-i;j++)
{
printf(" ");
}
for(j = 0;j < 2*i+1;j++)
{
printf("*");
}
// starCount+=2;
printf("\n");
// spaceCount--;
}
return 0;
}
不同的循环写法适合表达不同的逻辑。
while 适合表达不以循环次数为条件的循环。
for 适合表达以循环次数为条件的循环。
do-while 校验循环体逻辑执行的结果,不符合预期就循环重来。
continue 结束本次循环的循环体。while会直接去判断循环条件;for会直接去执行表达式3
break 结束整个循环。
return 结束当前函数,它并不属于循环的关键字。
一堆变量组合到一起就是数组。
当我们需要很多变量时,我们会定义数组。
int grade[10];
grade是数组
[10]说明数组里有10个变量,数组里的变量,称为数组的元素。
int说明数组里的10个变量都是int类型。
数组里的变量,类型都是一样的。
定义数组的时候,数组的长度必须是常量!
数组长度必须是确定的!
元素名称:
grade[0] 数组的第一个元素 数组元素[]里的数字,叫数组元素的角标。(也可以叫下标)
grade[1]
grade[2]
…
grade[9] 数组的最后一个元素 数组最后一个元素的下标,一定是数组的长度-1。
区分: int a[5] 和 a[5] 的区别:
int a[5] : 是在定义数组。 5代表的是,共有 5 个元素。
a[5] : 是数组中第 6 个元素的元素名。
数组不能整体赋值,必须是给某个元素单独赋值。
grade[0] = 98;
grade[1] = 77;
grade[2] = 44;
int i;
//使用循环,给数组里的所有元素赋值为88
for(i=0; i<10; i++)
grade[i] = 88; //数组元素的角标,可以是变量。
#include
int main()
{
int grade[10];
grade[0] = 1;
grade[1] = 10;
int i;
for(i = 3;i < 10;i++)
{
grade[i] = i;
}
grade[2] = 250;
//经常使用循环变量作为数组的角标
for(i = 0;i < 10;i++)
{
printf("%d ", grade[i]);
}
printf("\n");
return 0;
}
定义的时候赋值才叫初始化!只有在给数组初始化的时候才能用{}赋值。
完全初始化: int grade[10] = {1,2,3,4,5,6,7,8,9,10}; 初始化的数据和数组的长度相等。
部分初始化: int a[10] = {1,2}; a[0]=1 a[1]=2 a[2]~a[9] = 0 初始化的数据数量,小于数组的长度,其余的数组 元素补0。
int b[10] = {0}; 数组所有元素都初始化0,b[0] = 0 b[1]~b[9]=0 系统补0。
int c[10] = {1}; c[0]=1 c[1]~c[9] = 0
默认初始化: int array[] = {1,2,3,4,5,0,0,0}; 数组的长度根据初始化的数据决定。
for(i = 0;i < 10;i++)
{
//遍历数组的每个元素,并且打印
printf("%d\n", grade[i]);
}
char a[10];
short b[100];
float c[20];
double x[30];
请将 1 ~ 100 这 100 个数放在数组里保存起来。
请打印输出第 50 到 第60 个变量中保存的值。
最低等 编译错误
高级一 会崩溃的错误
最高级错误 没有任何线索,就是结果不符合预期
#include
int main()
{
int a[100];
int i;
for(i = 0;i < 100;i++)
{
a[i] = i+1;
}
for(i = 49;i < 60;i++)
{
printf("a[%d] = %d\n", i, a[i]);
}
return 0;
}
请输入 10 个整数,保存在数组中,然后累加求和。
#include
int main()
{
int a[10];
int i;
for(i = 0;i < 10;i++)
{
scanf("%d", &a[i]);
}
int sum = 0;
for(i = 0;i < 10;i++)
{
sum += a[i];
}
printf("sum = %d\n", sum);
return 0;
}
输入10个考试分数(0~100整数,超出范围重新输入)存到数组中,然后计算最高分、最低分。
#include
int main()
{
int a[10];
int i;
for(i = 0;i < 10;i++)
{
do
{
printf("please input %d\n", i);
scanf("%d", &a[i]);
}while(a[i]<0 || a[i]>100);
}
int max = a[0], min = a[0];
for(i = 1;i < 10;i++)
{
if(max < a[i])
{
max = a[i];
}
else if(min > a[i])
{
min = a[i];
}
}
printf("max = %d min = %d\n", max, min);
return 0;
}
上题基础上,请输出最大值和最小值所在位置的下标,并交换最大值和最小值的位置。
12,45,78,9,43,99,32,7,8,23
假设a[5]最大值 a[7]最小值
交换后a[5]=7 a[7]=567
#include
int main()
{
int a[10];
int i;
for(i = 0;i < 10;i++)
{
do
{
printf("please input %d\n", i);
scanf("%d", &a[i]);
}while(a[i]<0 || a[i]>100);
}
//查看输入
for(i = 0;i < 10;i++)
{
printf("%d ", a[i]);
}
printf("\n");
int max = a[0], min = a[0];
int maxIndex = 0, minIndex = 0;
for(i = 1;i < 10;i++)
{
if(max < a[i])
{
max = a[i];
maxIndex = i;//保存当前最大值的角标
}
else if(min > a[i])
{
min = a[i];
minIndex = i;//保存当前最小值的角标
}
}
printf("max = %d min = %d\n", max, min);
printf("maxIndex = %d minIndex = %d\n", maxIndex, minIndex);
int temp = a[maxIndex];
a[maxIndex] = a[minIndex];
a[minIndex] = temp;
for(i = 0;i < 10;i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
求 100 - 200 的素数(质数:只能被1和他自己整除的整数)。
请输出斐波那契数列的前 20 项。
已知前两项:1 1 。 从第三项开始,每一项都是前两项之和。 1 1 2 3 5 8 13 21 34 。。。6765
求任意两个字符串中的最长子串。
Char a[] = “abcabcdabc”;
Char b[] = “abcdefgh”;
最长”abcd”