if语句
(else总是和离他最近的if相匹配)
if(条件)
{
条件语句1}
else if
{
条件语句2
}
else
{
条件语句3
}
输出1—100之间的奇数
#include<stdio.h>
int main()
{
int i=1;
while(i<=100)
{
printf("%d ",i);
i+=2;
}
return 0;
}
#include<stdio.h>
int main()
{
int i=1;
while(i<=100&&i%2==1)
{
printf("%d ",i);
i+=2;
}
return 0;
}
switch语句
switch(整形表达式)//若为字符(char型,则对应其ASCII码值)
{
case 整形常量表达式:
语句;
case 1:
printf;
break;
case 2:
printf;
break;
default:
printf;
break;
}
注:若没有break,则会输出每个case后的值,直到break
switch例题:
#include <stdio.h>
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++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
输出结果是:m=3,n=5
break:结束循环
continue:结束本次循环,本次后面的语句不运行,重头开始运行循环语句
getchar() putchar()
int ch=getchar();
putchar=(ch);=printf(“%c”,ch);
scanf:
scanf(“%d”,&a);
scanf(“%s”,password);//password是一个字符串数组名,输入的字符串自动存储到字符串数组中,不需要用&
while循环
while(条件)
{
执行语句
}
for循环
for(变量初始化,判断条件,调整变量)
{
执行语句}
1、不可在for循环内修改变量,防止for循环失去控制
2、建议控制变量的取值采用前闭后开的写法,如(i=1,i<10,i++)
例题1
答案:0次,因为k=0结果是0,始终为假6,=是赋值符号,==是判断符号
例题2
这里打印多少个hehe?
int i = 0;
printf("hehe\n");
//如果省略掉初始化部分,这里打印多少个hehe?
printf("hehe\n");
}
答案:100,10。10*10=100,里外各循环十次。1*10=10,外面循环一次,里面循环10次。
do while循环
do
{
循环语句
}
while(循环条件);
例:
#include <stdio.h>
int main()
{
int i=1;
do
{
printf("%d ",i);
i++;
}
while(i<=10);
return 0;
}
例题:
1、计算n的阶乘
#include <stdio.h>
int main()
{
int n;
int r=1;
int i=1;
scanf("%d",&n);
for(;i<=n;i++)
{
r=r*i;
}
printf("n!=%d\n",r);
return 0;
}
2、计算1!+2!+···+10!
#include <stdio.h>
int main()
{
int r=1;
int i=1;
int sum=0;
for(;i<=10;i++)
{
r=r*i;
sum+=r;
}
printf("sum=%d\n",sum);
return 0;
}
3、在一个有序数组中查找具体的某个数字n所对应的下标。
例题:arr[]={1,2,3,4,5,6,7,8,9,10};
arr[mid]=7,求mid
折半/二分 查找算法
#include <stdio.h>
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int k=7;
int sz=sizeof(arr)/sizeof(arr[0]);
int left=0;
int right=sz-1;
while(left<=right)
{
int mid=(left+right)/2;
if(k<arr[mid])
{
right=mid-1;
}
else if(k>arr[mid])
{
left=mid+1;
}
else
{
printf("找到了,下标是%d\n",mid);
break;
}
if(left>right)
printf("找不到\n");
}
return 0;
}
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
#include <stdio.h>
int main()
{
char arr1[]="Welcome to bit!";
char arr2[]="##############";
int left=0;
int right=sizeof(arr1)/sizeof(arr1[0])-2;
while (left<=right)
{
arr2[left]=arr1[left];
arr2[right]=arr1[right];
printf("%s\n",arr2);
left++;
right--;
}
return 0;
}
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序)
注:数组比较不能用==,要用库函数strcmp #include <string.h>
#include <stdio.h>
#include <string.h>
int main()
{
int i=0;
char arr[20]={“”};//数组初始化必须给定大小或者给一串字符,因为不知道输入密码的长度,所以尽量设置的大一点。
for(i=0;i<3;i++)
{
printf("请输入密码:");
scanf("%s",arr);
if(strcmp(arr,"925117")==0)
{
printf("密码正确\n");
break;
}
else
{
printf("密码错误\n");
}
}
if(i==3)
printf("三次输入错误,退出程序\n");
return 0;
}
字符串结尾有个隐藏的/0,数组没有。
例题:写代码将三个数从大到小输出
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d" "%d" "%d",&a,&b,&c);
if(a<=b)
{
int tmp=a;
a=b;
b=tmp;
}
if(a<=c)
{
int tmp=a;
a=c;
c=tmp;
}
if(b<=c)
{
int tmp=b;
b=c;
c=tmp;
}
printf("%d %d %d\n",a,b,c);
return 0;
}
例题:给定两个数,求这两个数的最大公约数
辗转相除法
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d %d",&a,&b);
while (a%b)
{
c=a%b;
a=b;
b=c;
}
printf("最大公约数是:%d\n",b);
return 0;
}
例题:打印1000-2000之间的闰年,并算出一共有多少个。
注:闰年:1、可被4整除且不能被100整除
2 、可被400整除
#include <stdio.h>
int main()
{
int a;
int b=0;
for(a=1000;a<=2000;a++ )
{
if(a%4==0 && a%100!=0)
{
printf("%d ",a);
b++;
}
else if(a%400==0)
{
printf("%d ",a);
b++;
}
}
printf("\n%d\n",b);
return 0;
}
例题:打印100-200之间的素数(只能被1和它本身整除的数)。
试除法
#include <stdio.h>
int main()
{
int i,j;
int k=0;
for(i=100;i<=200;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
break;
}
if(j==i)
{
printf("%d ",i);
k++;
}
}
printf("\n%d\n",k);
return 0;
}
优化后计算次数更少
#include <stdio.h>
#include <math.h>
int main()
{
int i,j;
int k=0;
for(i=101;i<=200;i+=2)//除了2,其他的偶数不可能是素数
{
for(j=2;j<sqrt(i);j++)//sqrt给i开平方,数学库函数
{
if(i%j==0)
break;//for循环break后本轮 j不自加
}
if(j>sqrt(i))
{
printf("%d ",i);
k++;
}
}
printf("\n%d\n",k);
return 0;
}
算出1-100之间整数中9的个数。
1、个位是9:%10=9
2、十位是9:/10=9
#include <stdio.h>
#include <math.h>
int main()
{
int i;
int j=0;
for(i=1;i<=100;i++)
{
if(i%10==9)
j++;
if(i/10==9)
j++;
}
printf("%d\n",j);
return 0;
}
计算1/1-1/2+1/3-1/4+···+1/99-1/100的值。
#include <stdio.h>
int main()
{
int i;
double sum=0.0;
flag=1;
for(i=1;i<=100;i++)
{
sum+=1.0/i*flag;
flag=-flag;
}
printf("%lf\n ",sum);
return 0;
}
求十个整数中的最大值。
#include <stdio.h>
int main()
{
int arr[10]={};
scanf("%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d" "%d",&arr[0],&arr[1],&arr[2],&arr[3],&arr[4],&arr[5],&arr[6],&arr[7],&arr[8],&arr[9]);
int max=arr[0];
int i;
for(i=1;i<=9;i++)
{
if(max<arr[i])
{
max=arr[i];
}
}
printf("%d\n",max);
return 0;
}