1语句
c语言遇到分号就是一条语句
int main()
{
;//空语句
return 0;
}
2分支语句
2.1if语句
if语句的三种形式
①
if(表达式)
语句;
②
if(表达式)
语句1;
else
语句2;
③
//多分枝
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
else和距离最近的if 结合
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
//无执行结果
if (a == 1)执行完到return 0,else和离他最近的if(b==2)的if相结合
②判断一个数是不是奇数
int IsOdd(int num)
{
if (num%2 != 0)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int num = 0;
int ret = 0;
scanf("%d", &num);//!!!这块不能加换行
ret = IsOdd(num);
if (ret == 1)
{
printf("是奇数");
}
else
{
printf("不是奇数");
}
return 0;
}
③输出100-200的奇数
int IsOdd(int num)
{
if (num%2 != 0)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int i = 1;
for (i = 1; i <= 100; i++)
{
int ret = IsOdd(i);
if (ret == 1)
{
printf("%d\n", i);
}
}
return 0;
}
2.2switch语句
①switch语句在遇到break才会结束
int main()
{
int day = 2;
switch (day)
{
case 1:
printf("周一\n");
case 2:
printf("周二\n");
case 3:
printf("周三\n");
break;
case 4:
printf("周四\n");
break;
case 5:
printf("周五\n");
break;
default:
printf("周末\n");
break;
}
}
//打印结果周二周三,输入的是2,应该是case2,但是case2没有break,直到case2遇到break才结束
switch遇到break会结束,不再执行,所以每条语句后面都加break
②switch参数只能是整型,float,double都不能做switch参数
③switch可以嵌套
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{
case 1:
n++;
case 2:
m++;//m=4
n++;//n=3
break;
}//break结束之后由于外面的case没有break还有继续往case4走
case 4:
m++;//m=5
break;
default:
break;
}
printf("m=%d,n=%d\n", m, n);
return 0;
}
//m=5,n=3
switch需要注意的
①每条case后面都加上break
②default语句
当switch表达式的值不匹配case语句时执行default语句
3循环语句
3.1while 语句
3.1.1while基本语法
while(表达式)
循环语句;
输出1-10之间的数字
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}
3.1.2break和continue
break:结束循环
continue:结束本趟循环
①break
int main()
{
int i = 1;
while (i <= 10){
if (i == 5)
break;//当i=5的时候执行break语句,while循环就会结束打印5以及后续的循环都会结束
printf("%d ", i);
i++;
}
return 0;
}
//1 2 3 4
②continue
int main()
{
int i = 1;
while (i <= 10){
if (i == 5)
continue;//本趟循环结束,后面两句不会执行,然后开始执行while(i <=5)和if(i==5)又到continue然后陷入循环
printf("%d ", i);
i++;
}
return 0;
}
//1 2 3 4
int main()
{
int i = 1;
while (i <= 10){
i++;
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
//2 3 4 6 7 8 9 10
int main()
{
int i = 1;
while (i <= 10){
printf("%d ", i);
i++;
if (i == 5)
continue;//当i =5时本趟循环结束,后续不会执行,但该循环后续没有语句所以continue不会对循环造成影响
}
return 0;
}
3.2getchar()函数
getchar():从键盘读取一个字符
!!读字符返回int 类型
#include<stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
putchar(ch);
return 0;
}
①EOF:ending of flow,代表文件结尾,从键盘读到EOF结束也就是读到-1结束
EOF=-1
ctrl+z:代表-1
ctrl+c:终止程序
从键盘输入-1就是字符(-1)并不是数字-1
②从键盘输入数据后会放入缓冲区,使用while循环以及getchar()函数会把缓冲区里的字符一个一个读出来
//打印1-9之间的数字
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
if (ch < '0' || ch>'9')
continue;
putchar(ch);
}
return 0;
}
3.3for循环
for(表达式1;表达式2;表达式3)
循环语句
表达式1:初始化循环变量
表达式2:条件判断,用于终止循环
表达式3:循环条件的调整
表达式1→表达式2→循环语句→表达式3→表达式2→循环语句→表达式3
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
①for循环中也可以用break和continue
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
//1 2 3 4
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
//1 2 3 4 6 7 8 9
②一个表达式里面可以有两个语句
int main()
{
int x = 0;
int y = 0;
for ( x = 0, y = 0; x < 2 && y < 5; x++, y++)
printf("hehe\n");
return 0;
}
③
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)
k++;
return 0;
}
//不会执行,没有循环条件,=是赋值符号
3.4do…while()循环
do
循环语句;
while(表达式);
int main()
{
int i = 0;
do{
printf("%d ", i);
i++;
} while (i <= 10);
return 0;
}
do…while()和while区别:do…while()肯定会执行一次上面的代码不执行do…while里的循环i=0也会执行
for,while,do…while三个没有区别;不知道循环次数的时候用while,while必须执行一次的时候用do…while
3.5goto函数
goto语句:跳转到下一个标签
goto常用的用法终止 程序在某些深处嵌套的结构,跳出两层或多层循环
//关机程序
int main()
{
char input[10] = { 0 };
system("shutdown -s -t 60");
again:
printf("电脑将在1分钟内关机,如果输入:我是猪,就取关机!\n请输入:");
scanf("%s", input);
if (0 == strcmp(input, "我是猪"))
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}
作业
①n!
do...while
int main()
{
int i = 0;
int ret = 1;
do{
i++;
ret *= i;
} while (i <5);//循环执行完才会判断这里如果是i<=5,i等于5 的时候满足条件会再执行一次i++
printf("%d ", ret);
return 0;
}
#if 0
//while
int main()
{
int i = 0;
int ret = 1;
while (i <= 5)
{
i++;
ret *= i;
}
printf("%d ", ret);
return 0;
}
#endif
#if 0
//for
int main()
{
int i = 0;
int ret = 1;
for (i = 1; i <= 5; i++){
ret *= i;
}
printf("%d ", ret);
return 0;
}
#endif
②1!+2!+3!+n!
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int ret = 1;
int sum = 0;
int n = 0;
scanf("%d", &n);
for (j = 1; j <= 5; j++){
ret = 1;//!!!在j=2嵌套循环结束之后ret=2,j=3的时候ret会从3*1*2,因此每次循环要将ret赋值为1
for (i = 1; i <= j; i++){
ret *= i;
}
sum += ret;
}
printf("%d ", sum);
return 0;
}
③在一个有序数组中查找具体的某个数字N
int BinarySearch(int arr[], int len, int n)
{
int left = 0;
int right = len - 1;
while (left <= right){
int mid = (left + right) / 2;
if (arr[mid] < n){
left = mid + 1;
}
else if (arr[mid] > n)
{
right = mid - 1;
}
else
return mid;//不能打印因为函数没有返回值
}
return -1;//如果没有找到返回-1
}
int main()
{
int arr[] = {6,9,11,13,15,20,25,50};
int index = BinarySearch(arr, 8, 15);
printf("%d", index);
}
④模拟用户登录场景,并且只能登录三次
#define _CRT_SECU_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
int count = 3;
char password[10];
while (count > 0)
{
printf("请输入您的密码:");
scanf("%s", password);
//srcmp(x,y)判断x和y是否相等,如果相等返回0
if (strcmp(password, "123456") == 0){
printf("登录成功\n");
break;
}
else
{
count--;
printf("密码出入错误,您还有%d次机会\n", count--);
}
}
return 0;
}
⑤编写代码演示多个字符从两端移动,向中间汇聚
int main()
{
char str[] = "welcome to xian";
char str2[] = "###############";
int len = strlen(str);
int left = 0;
int right = len-1;
while (left <= right){
Sleep(1000);//每次打印间歇1000毫秒
str2[left] = str[left];
str2[right] = str[right];
left++;
right--;
printf("%s\n", str2);
}
return 0;
}
//打印结果
w#############n
we###########an
wel#########ian
welc#######xian
welco##### xian
welcom###o xian
welcome#to xian
welcome to xian
⑥1/1-2/i+3/i…1/100
int main()
{
int i = 1;
int flg = 1;
double sum = 0.0;//求和肯定是浮点数
for (i = 1; i <= 100; i++)
{
sum = sum + 1.0 / i*flg;//1/i肯定是浮点数,如果是1的话小数部分就会被舍去
flg = -flg;
}
printf("%lf", sum);
return 0;
}
⑦交换两个数组的值
int main()
{
int arr[4];
int arr2[4];
int tmp = 0;
int i = 0;
for (i = 0; i <4; i++)
{
scanf("%d", &arr[i]);
}
for (i = 0; i <4; i++)
{
scanf("%d", &arr2[i]);
}
for (i = 0; i <= 3; i++)
{
tmp = arr[i];
arr[i] = arr2[i];
arr2[i] = tmp;
}
printf("\n");
for (i = 0; i <4; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
for (i = 0; i <4; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
作业2
①找出100-200之间的素数
int main()
{
//i定义的是100-20之间的数字
int i = 0;
for (i = 100; i <= 200; i++){
int j = 0;
//j是2-i之间的数字,用i除2-i之间的所有数字,如果有结果是0 的情况说明i不是素数
for (j = 2; j < i; j++){
if (i%j == 0){
break;}
//else{
//printf("%d\n", i);//i=9,j=2的时候会打印9
//}
}
//如果i把2-i之间的素数除完,没有等于0 的情况说明i是素数
if (j >= i){
printf("%d\n", i);}
}
return 0;
}
int main()
{
//如果i不能被2-i/2之间的素数整除说明i是素数
int i = 0;
for (i = 100; i <= 200; i++){
int j = 0;
for (j = 2; j < i/2; j++){
if (i%j == 0){
break;
}
}
if (j >= i/2){
printf("%d\n", i);
}
}
return 0;
}
i
nt main()
{
//如果i不能被2-根号i之间的素数整除说明i是素数
int i = 0;
for (i = 100; i <= 200; i++){
int j = 0;
for (j = 2; j <sqrt((double)i); j++){
if (i%j == 0){
break;
}
}
if (j >= sqrt((double)i)){
printf("%d\n", i);
}
}
return 0;
}
int main()
{
//如果i不能被2-根号i之间的素数整除说明i是素数,偶数肯定不是素数
int i = 0;
for (i = 101; i <= 200; i+=2){
int j = 0;
for (j = 2; j <sqrt((double)i); j++){
if (i%j == 0){
break;
}
}
if (j >= sqrt((double)i)){
printf("%d\n", i);
}
}
return 0;
}
②输出乘法口诀
int main()
{
int i = 0;
for (i = 1; i <= 9; i++)
{
int j = 0;
for (j = 1; j <= i; j++)
{
printf(" %d*%d= %-2d", i, j, i*j);//-代表向左靠齐,-2向左空2格靠齐
}
printf("\n");
}
return 0;
}
③打印1000-2000之间的闰年
#include<stdio.h>
int main()
{
int year = 0;
for (year = 1000; year <= 2000; year++){
if( (((year % 4) == 0) && ((year % 100)!= 0)) || ((year % 400) == 0)){
printf("%d\n", year);
}
}
return 0;
}
④换两个数之间的值
int main()
{
int a = 10;
int b = 20;
int tmp = 0;
tmp = a;
a = b;
b = tmp;
printf("%d\n%d\n", a, b);
return 0;
}
//不创建新的 变量,交换2个变量的值,利用加减
#include<stdio.h>
#include<math.h>
int main()
{
int a = 20;
int b = 30;
a = a + b;//a= 20+30=50
b = a - b;//b=50-30=20
a = a - b;//a=50-20=30
printf("%d\n%d\n", a, b);
return 0;
}
//不创建新的变量,交换2个变量的值,利用异或(相同的为0,不同的为1)
#include<stdio.h>
#include<math.h>
int main()
{
int a = 4;//0100
int b = 6;//0110
a = a^b;//0010
b = a^b;//0100
a = a^b;//0110
printf("%d\n%d\n", a, b);
return 0;
}
⑤求10个整数里最大的值
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<limits.h>
int main()
{
int arr[10];
int i = 0;
int max = 0;
for (i = 0; i < 10; i++){
scanf("%d", &arr[i]);
}
max = arr[0];
for (i = 1; i < 10; i++)
{
if (arr[i]>max){
max = arr[i];
}
}
printf("%d\n", max);
return 0;
}
⑥将三个整数从大到小输出
#include <stdio.h>
int main()
{
int a = 10;
int b = 3;
int c = 6;
int temp = 0;
if (a < b){
temp = a;
a = b;
b = temp;
}
if (a < c){
temp = a;
a = c;
c = temp;
}
if (b < c){
temp = b;
b = c;
c = temp;
}
printf("%d\n%d\n%d\n", a,b,c);
return 0;
}
⑦求2个数的最大公约数(两个数余数为0时的除数)
#include<stdio.h>
int main()
{
int a = 24;
int b = 18;
int c = 0;
while (a%b != 0){
c = a%b;
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}