目录
一、分支语句
1. if语句
如果表达式的结果为真,则语句执行。C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。并且else是和它离的最近的if匹配的。
以下是一个简单的if用法的例子:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
2. switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。其注意点如下:
- switch ( )内的是一个常量表达式,必须是一个整型或枚举类型。
- case后的值必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
- 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
- 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
- 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会继续后续的 case,直到遇到 break 为止。
- 一个 switch 语句可以有一个可选的 default case,上面所有 case 都不为真时执行default case。
示例如下:
#include <stdio.h>
int main()
{
int a;
printf("input integer number: ");
scanf("%d",&a);
switch(a)
{
case 1:printf("Monday\n");
break;
case 2:printf("Tuesday\n");
break;
case 3:printf("Wednesday\n");
break;
case 4:printf("Thursday\n");
break;
case 5:printf("Friday\n");
break;
case 6:printf("Saturday\n");
break;
case 7:printf("Sunday\n");
break;
default:printf("error\n");
}
}
3. 三元运算符
一般形式是:
Exp1 ? Exp2 : Exp3;
表达式的值是由 Exp1 决定的。如果 Exp1 为真,则 Exp2 的值为整个表达式的值。否则 Exp3 的值即为整个表达式的值。
以下例子用来演示:
#include<stdio.h>
int main()
{
int num;
printf("输入一个数字 : ");
scanf("%d",&num);
(num%2==0)?printf("偶数"):printf("奇数");
}
二、循环语句
1. while循环
给定的条件为真, while 循环语句会重复执行目标语句。直到条件为假,循环体会一直执行,如果条件一直为真,则进入死循环。
代码如下(示例):
#include <stdio.h>
int main ()
{
int a = 10;
while( a < 20 )
{
printf("a 的值: %d\n", a);
a++;
}
return 0;
}
2. for循环
for 循环是一个可以执行指定次数的循环控制结构。
代码如下(示例):
#include <stdio.h>
int main ()
{
for( int a = 10; a < 20; a++ )
{
printf("a 的值: %d\n", a);
}
return 0;
}
3. do...while循环
do...while 循环是在循环的尾部检查它的条件。do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。
代码如下(示例):
#include <stdio.h>
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
三、实例
1.计算10的阶乘
#include <stdio.h>
int factor(int n){
int result=1;
for (int i=1;i<=n;i++){
result*=i;
}
return result;
}
int main()
{
printf("%d",factor(10));
return 0;
}
2. 计算 1!+2!+3!+……+10!
#include <stdio.h>
int factor(int n){
int result=1;
for (int i=1;i<=n;i++){
result*=i;
}
return result;
}
int sum_factor(int m){
int sum=0;
for(int j=1;j<=m;j++){
sum+=factor(j);
}
return sum ;
}
int main()
{
printf("%d",sum_factor(10));
return 0;
}
3. 在一个有序数组中查找具体的某个数字n(二分查找)。
#include <stdio.h>
int binary_search(int arr[],int toFInd,int size){
int left=0;
int right=size-1;
while(left<=right){
int mid=(left+right)/2;
if(toFInd<arr[mid]){
right=mid-1;
}
else if(toFInd>arr[mid]){
left=mid+1;
}
else{
return mid;
}
}
return -1;
}
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
printf("%d\n",binary_search(arr,15,sizeof (arr)/sizeof (arr[0])));
return 0;
}
4. 编写代码,演示多个字符从两端移动,向中间汇聚。
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
char str1[]="wellcome to xian";
char str2[]="****************";
int left=0;
int right=strlen(str1)-1; //求字符串的长度
printf("%s\n",str2);
while(left<=right){
str2[left]=str1[left];
str2[right]=str1[right];
left++;
right--;
system("cls"); //清屏的操作
printf("%s\n",str2);
Sleep(500); //以毫秒为单位
}
return 0;
}
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。
#include <stdio.h>
#include <string.h>
int main()
{
int i=1;
char password[1024]={0};
printf("请输入密码:\n");
while(i<=3){
scanf("%s",password);
//if(password=="123456"){
//如果是字符串,不能使用==比较
//此处产生了数组到指针的隐式类型转换,实际上是在比较指针
//正确的方法是使用strcmp。如果两个字符串相等,返回0,不相等返回非零的值。
if(strcmp(password,"123456")==0){
printf("登录成功\n");
break ;
}else if(i<3){
printf("请重新输入\n");
i++;
}else{
i++;
}
}
if(i==4){
printf("登录失败\n");
}
return 0;
}
6.写代码将三个整数数按从大到小输出。
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
int d = 0;
printf("请输入三个数:");
scanf("%d%d%d", &a,&b,&c);
if (a < b)
{
d = a;
a = b;
b = d;
}
if (a < c)
{
d = a;
a = c;
c = d;
}
if (b < c)
{
d = b;
b = c;
c = d;
}
printf("从大到小输出结果为:%d %d %d\n", a, b, c);
return 0;
}
7.写一个代码打印1-100之间所有3的倍数的数字
#include <stdio.h>
int main()
{
for(int i=1;i<=100;i++){
if(i%3==0){
printf("%d ",i);
}
}
return 0;
}
8.给定两个数,求这两个数的最大公约数
#include <stdio.h>
int gcd(int a,int b){
int c=a % b;
while(c){
a=b;
b=c;
c=a%b;
}
return b;
}
int main()
{
int a=0;
int b=0;
printf("请输入两个整数:");
scanf("%d %d",&a,&b);
printf("最大公约数是:%d\n",gcd(a,b));
return 0;
}
9.打印1000年到2000年之间的闰年
#include <stdio.h>
int main()
{
for(int i=1000;i<=2000;i++){
if(i%100==0){
if(i%400==0){
printf("%d ",i);
}
}else if(i%4==0){
printf("%d ",i);
}
}
return 0;
}
10.打印100~200之间的素数
#include <stdio.h>
int prime(int a){
for(int j=2;j<a;j++){
if(a%j==0){
break;
return 0;
}
}
}
int main()
{
// int a=0;
// scanf("%d",&a);
// printf("%d\n",prime(a));for(int i=100;i<=200;i++){
if(prime(i)){
printf("%d\n",prime(i));
}
}
return 0;
}
11.数一下 1到 100 的所有整数中出现多少个数字9
#include <stdio.h>
int main()
{
int j=0;
for(int i=1;i<=100;i++){
if(i%10==9)
j++;
if(i/10==9) // i/10当都为整数时,结果也为整数(向下取整),有一个为浮点型时,结果为浮点型
j++;
}
printf("9的个数为%d\n",j);
return 0;
}
12.完成猜数字游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
//time(0)得到一个时间戳(从1970.01.01开始)
srand((unsigned int) time(0));
int toGuess=rand()%100+1;
int num=0;
while(1){
printf("请输入一个数字:");
scanf("%d",&num);
if(toGuess<num){
printf("高了\n");
}else if(toGuess>num){
printf("低了\n");
}else{
printf("猜对了\n");
break;
}
}
return 0;
}