栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】语句

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】语句

 

文章目录
  • 1. 什么是语句
  • 2. 分支语句
    • 2.1 if语句
    • 2.2 switch语句
    • 2.3 分支语句练习
  • 3. 循环语句
    • 3.1 for语句
    • 3.2 while语句
    • 3.3 goto语句(不推荐使用)
    • 3.4 循环语句练习题

 

1. 什么是语句

C语言中由一个分号隔开的就是一条语句

2. 分支语句 2.1 if语句

if语句(单选)

#include
int main(){
	int a = 0;
	if(a == 0)
		printf("hello world!n");
}

if-else语句(二选一)

#include
int main(){
	int a = 0;
	int b = 2;
	if(a == 0){
		printf("呵呵n");
	}else{
		printf("哈哈n");
	}
	
	return 0;
}
//打印:呵呵

悬空if-else语句(else与最近的未匹配的if相结合)

#include
int main(){
	int a = 0;
	int b = 2;
	if(a == 0)
		if(b == 1)
		printf("呵呵n");
	else
		printf("哈哈n");
	
	return 0;
}
//打印:哈哈



if-else语句 可以替换为 条件表达式(三目表达式)

#include
int main(){
	int a = 1;
	int b = 5;
	if(a > b){
		printf("max = %dn",a);
	}else{
		printf("max = %dn",b);
	}
	//int max = (a > b ? a : b);
	//printf("max = %dn",max);
}

if …else if …else(多选一)

注意事项:	
1. 一个 if 后可跟零个或一个 else,else 必须在所有 else if 之后
2. 一个 if 后可跟零个或多个 else if,else if 必须在 else 之前
3. 一旦某个 else if 匹配成功,其他的 else if 或 else 将不会被测试
#include 
int main()
{
    int day = 0;
    printf("请输入一个整数(1~7):");
    scanf("%d", &day);
    if (day == 1)
    {
        printf("工作日n");
    }
    else if (day == 2)
    {
        printf("工作日n");
    }
    else if (day == 3)
    {
        printf("工作日n");
    }
    else if (day == 4)
    {
        printf("工作日n");
    }
    else if (day == 5)
    {
        printf("工作日n");
    }
    else if (day == 6)
    {
        printf("休息日n");
    }
    else if (day == 7)
    {
        printf("休息日n");
    }
    else
    {
        printf("数字输入错误,请重新输入!n");
    }

    return 0;
}
2.2 switch语句

switch语句(多选一)

每个switch语句中只能出现一条default子句,它可以出现在语句列表中的任何位置。
(相较于if...else if...else使用更简单)
#include 
int main()
{
    int day = 0;
    printf("请输入一个整数(1~7):");
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日n");
        break;
    case 6:
    case 7:
        printf("休息日n");
        break;
    default:
        printf("数字输入错误,请重新输入!n");
        break;
    }

    return 0;
}
#include
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 = %dn",m,n);
   
    return 0;
}

//结果:m = 5,n = 3
2.3 分支语句练习
//将三个数按从小到大输出
#include

void swap(int* x,int* y){
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

void sort(int* p1,int* p2,int* p3){
    if(*p1<*p2){
        swap(p1,p2);
    }
    if(*p1<*p3){
        swap(p1,p3);
    }
    if(*p2<*p3){
        swap(p2,p3);
    }
}

int main(){
    int a,b,c;
    printf("请输入三个整数:");
    scanf("%d %d %d",&a,&b,&c);
    sort(&a,&b,&c);
    printf("由大到小排序后为:%d %d %dn",a,b,c);

    return 0;
}
//打印闰年
#include
int main(){
    int year = 0;
    int count = 0;
    for(year=1000; year<=2000;++year){
        //判断year是否为闰年
        //1. 能被4整除并且不能被100整除
        //2. 能被400整除
        if(year%4==0 && year%100!=0){
            printf("%d ",year);
            count++;
        }else if(year%400 == 0){
            printf("%d ",year);
            count++;
        }
    }
    printf("ncount = %dn",count);

    return 0;
}
------------------------------------
//打印闰年
#include
int main(){
    int year = 0;
    int count = 0;
    for(year=1000; year<=2000;++year){
        //判断year是否为闰年
        //1. 能被4整除并且不能被100整除
        //2. 能被400整除
        if((year%4==0 && year%100!=0)|| (year%400 == 0)){
            printf("%d ",year);
            count++;
        }
    }
    printf("ncount = %dn",count);

    return 0;
}
//输出1~100之间的奇数
#include 
int main(){
    for (int i = 1; i <= 100; ++i){
        if (i % 2){
            printf("%d ", i);
        }
        else{
            continue; // printf("");
        }
    }

    return 0;
}

------------------------------------
//输出1~100之间的奇数
#include
int main(){
	int i = 0;
	for(i = 1; i <= 100; i+=2){
		if(i % 2){
			printf("%d ",i);
		}else{
			continue;
		}
	}
}

下面即将学习的循环语句也能实现

//输出1~100之间的奇数
#include
int main(){
    int i = 1;
    while(i<=100){
        printf("%d ",i);
        i+=2;
    }

    // while(i<=100){
    //     if(i%2 != 0)
    //         printf("%d ",i);
    //     ++i;
    // }

    return 0;
}
3. 循环语句 3.1 for语句
for(表达式1;表达式2;表达式3){
	语句;
}
表达式1为初始化部分,表达式2为条件判断,表达式3为调整部分

理解for循环的执行顺序(表达式①只执行了一次)
①表达式1 – ②表达式2 – ③语句 – ④表达式3 --⑤表达式2 – ⑥语句 – ⑦表达式3…

for语句使用建议

  1. 不可在for循环体内修改循环变量,防止for循环失去控制
  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法
//死循环
#include
int main(){
    for(int i = 1; i<=10; ++i){
        if(i = 5){    //修改了循环变量
            printf("haha");
        }
        printf("hehe");
    }
   
    return 0;
}
3.2 while语句
//打印1~10
#include
int main(){
    int i = 1;
    while(i<=10){
        printf("%d ",i);
        ++i;
    }

    return 0;
}

while语句与if语句的结合

#include
int main(){
    int i = 1;
    while(i<=10){
        if(i == 5)
            break;
        printf("%d ",i);
        ++i;
    }

    return 0;
}
//结果:1 2 3 4

----------------------------------------
#include
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 11

----------------------------------------
//代码死循环
#include
int main(){
    int i = 1;
    while(i<=10){
        if(i == 5)
            continue;
        printf("%d ",i);
         ++i;
    }

    return 0;
}
//结果:1 2 3 4 [光标]

while语句的常用方法(去除缓冲区多余的字符)

#include
int main(){
    int ch = getchar();
    putchar(ch);

    return 0;
}
----------------------------------------
#include
int main(){
    int ch = 0;
    while((ch=getchar())!=EOF){
        putchar(ch);
    }
	
    return 0;
}
//结束按ctrl + z
//EOF  end od file -> -1

具体例子

//情况1
//假设输入:12345
//输入缓冲区为:12345n
#include
int main(){
    int ret = 0;
    char password[20] = {0};
    printf("请输入密码:>");
    scanf("%s",password); //输入密码,存放在数组中
    //缓冲区还剩余一个"n"
    //读取下一个'n'
    getchar();
    
    printf("请确认(Y/N):>");
    ret = getchar();    //Y/N
    if(ret == 'Y'){
        printf("确认成功n");
    }else{
        printf("确认失败n");
    }

    return 0;
}

//情况2
//输入:12345 ABCDE
//输入缓冲区为:12345 ABCDEn
//利用getchar(),使用循环接收缓冲区到'n'之前的所有字符(包括空格)
#include
int main(){
    int ret = 0;
    int ch = 0;
    char password[20] = {0};
    printf("请输入密码:>");
    scanf("%s",password);   //输入密码,存放在数组中
    //缓冲区还剩余一个"n"
    //读取下一个'n'
    while((ch = getchar()) != 'n'){
        ;
    }
    printf("请确认(Y/N):>");
    ret = getchar();    //Y/N
    if(ret == 'Y'){
        printf("确认成功n");
    }else{
        printf("确认失败n");
    }

    return 0;
}

do…while语句(至少执行一次)

3.3 goto语句(不推荐使用)

goto语句会打乱程序的执行顺序

//电脑关机程序
#include
#include
#include
#include

int main(){
    char input[20] = {0};
     //shutdown -s -t 60
     //system() 执行系统命令
     system("shutdown -s -t 60");
again:
    printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机n请输入>:");
    scanf("%s",&input);
    if(strcmp(input,"我是猪") == 0){     //比较两个字符串
        system("shutdown -a");
    }else{
        goto again;
    }
     
    return 0;
}

------------------------------------
//使用while循环语句
#include
#include
#include
#include

int main(){
    char input[20] = {0};
     //shutdown -s -t 60
     //system() 执行系统命令
     system("shutdown -s -t 60");

    while(1){
        printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机n请输入>:");
        scanf("%s",&input);
        if(strcmp(input,"我是猪") == 0){     //比较两个字符串
            system("shutdown -a");
            break;
        }
    }
   
    return 0;
}
3.4 循环语句练习题
//1.计算n的阶乘
#include
int main(){
    int num = 1;
    int n = 0;
    printf("请输入一个整数:");
    scanf("%d",&n);
    for(int i = 1; i<=n; ++i){
        num *= i;
    }
    printf("%d的阶乘为%dnn",n,num);
   
    return 0;
}

------------------------------------
#include
int main(){
    int num = 1;
    int n = 0;
    printf("请输入一个整数:");
    scanf("%d",&n);
    while(n){
        num *= (n--);
    }
    printf("%d的阶乘为%dnn",n,num);
   
    return 0;
}

------------------------------------
#include

int fact(int n){
    if(n){
        return n*fact(n-1);
    }else{
        return 1;
    }   
}

int main(){
    int n = 0;
    printf("请输入一个正整数:");
    scanf("%d",&n);
    int num = fact(n);
    printf("%d的阶乘为%dn",n,num);

    return 0;
}
//2.计算1!+2!+3!+...+10!
#include
int main(){
    int sum = 0;
    for(int i = 1; i<=10; ++i){
        int num = 1;
        for(int j = 1; j<=i; ++j){
            num *= j;
        }
        sum += num;
    }
    printf("%dn",sum);

    return 0;
}
//结果:4037913

------------------------------------
//代码优化
#include
int main(){
    int num = 1;
    int sum = 0;
    for(int i = 1; i<=10; ++i){
        num *= i;
        sum += num;
    }
    printf("%dn",sum);
   
    return 0;
}
//3.在一个有序数组中查找具体的某个数字n。
//编写int binsearch(int x,int v[],int n);
//功能:在V[0] <= V[1]<= V[2]...<= V[n-1]的数组中查找x
#include
int main(){
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int k = 7;
    int i = 0;
    int sz = sizeof(arr)/sizeof(arr[0]);
    for(i = 0; i
int main(){
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int sz = sizeof(arr)/sizeof(arr[0]);
    int left = 0;   //左下标
    int right = sz - 1;     //右下标
    int a = 0;

    printf("请输入一个数(1~10):");
    scanf("%d",&a);
    while(left<=right){    //①
        int mid = (left+right)/2;    //②
        if(arr[mid] > a){    //③
            right = mid - 1;
        }else if(arr[mid] < a){
            left = mid + 1;
        }else{
            printf("找到了,下标是:%dn",mid);
            break;    //④
        }
        if(left>=right){    //⑤
            printf("找不到n");
        }
    }
    return 0;
}
//4.编写代码,演示多个字符从两端移动,向中间汇聚
//整型数组无须考虑 '' 问题,
//但字符串或字符数组要考虑 //'' 问题。
//strlen 是一个函数,它用来计算指定字符串 str 的长度
#include
#include
#include
#include

int main(){
    char arr1[] = {"welcome to bit!!!!!!"};
    char arr2[] = {"####################"};
    int left = 0;
    //int right = sizeof(arr1)/sizeof(arr1[0]-2);
    int right = strlen(arr1)-1;

    while(left<=right){
        arr2[left] = arr1[left];
        arr2[right] = arr1[right];
        printf("%sn",arr2);
        //休息一秒
        Sleep(1000);    //单位ms
        system("cls");   //执行系统命令的一个函数    cls清空屏幕
        left++;
        right--;
    }
    printf("%sn",arr2);

    return 0;
}
//5.编写代码实现,模拟用户登录场景,
//并且只能登录三次。
//(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。)

strcmp函数规定:左边大于右边返回正数,左边小于右边返回负数,左边等于右边返回0。
#include
#include
int main(){
    int i = 0;
    char password[20] = {0};
    for(i=0; i<3; ++i){
        printf("请输入密码:>");
        scanf("%s",password);
        if(strcmp(password,"123456") == 0){    // *等号*不能用来比较两个字符串是否相等,应该使用一个库函数 strcmp							
            printf("登录成功n");			   //strcmp(str1,str2)
            break;							   //当str1小于str2时,返回一个小于0的数
        }else{								   //当str1大于str2时,返回一个大于0的数
            printf("密码错误n");			   //当str1等于str2时,返回0
        }
    }
    if(i == 3)
        printf("n三次密码均错误,退出程序n");

    return 0;
}
//6.求最大公约数
#include
int main(){
    int m,n;
    int r = 0;
    printf("请输入两个正整数:");
    scanf("%d%d",&m,&n);
    //while(m%n){
    //   r = m%n;
    //	 m = n;
    //	 n = r; 
    //}
    while(r = m%n){
        m = n;
        n = r;
    }
    printf("%dn",n);

    return 0;
}
//7.打印100到200的素数
#include
int main(){
    int i,j;
    int count = 0;
    for(i = 100; i<=200; ++i){
        //判断i是否为素数
        //素数判断规则
        //1. 试除法(除开1,都没有被整除的数字)
        for(j = 2; j
#include
int main(){
    int i,j;
    int count = 0;
    for(i = 100; i<=200; ++i){
        //判断i是否为素数
        //素数判断规则
        //1. 试除法(除开1,都没有被整除的数字)
        for(j = 2; j<=sqrt(i); ++j){    //使用库函数
            if(i%j == 0){
                break;
            }
        }
        if(j>sqrt(i)){
            count++;
            printf("%d ",i);
        }
    }
    printf("ncount = %dn",count);
}


------------------------------------
//继续优化
//打印100到200的素数
#include
#include
int main(){
    int i,j;
    int count = 0;
    for(i = 101; i<=200; i+=2){     //偶数不可能为素数
        for(j = 2; j<=sqrt(i); ++j){    
            if(i%j == 0){
                break;
            }
        }
        if(j>sqrt(i)){
            count++;
            printf("%d ",i);
        }
    }
    printf("ncount = %dn",count);
}

//8.编写一个程序数一下 1~100的所有整数中出现数字9的个数
#include
int main(){
    int count = 0;
    for(int i=1; i<=100; ++i){
        if((i%10 == 9) || (i/10 == 9)){
            printf("%d ",i);
            count++;
        }
    }
    printf("ncount = %dn",count);

    return 0;
}
//结果:9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99
//count = 19

------------------------------------
//编写一个程序数一下 1~100的所有整数(个位和十位)中出现数字9的个数
#include
int main(){
    int count = 0;
    for(int i=1; i<=100; ++i){
        if(i%10 == 9){
            printf("%d ",i);
            count++;
        }
        if(i/10 == 9){
            printf("%d ",i);
            count++;
        }
    }
    printf("ncount = %dn",count);

    return 0;
}
//结果:9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99 99
count = 20
//9.分数求和1.0 + (1/2) + (1/3) + (1/4) + ... + (1/99) + (1/100)
#include
int main(){
    double sum = 0.0;
    for(int i=1; i<=100; ++i){
        sum+=1.0/i;     //浮点数除以浮点数
    }
    printf("%lfn",sum);

    return 0;
}
//结果:5.187378

------------------------------------
//分数求和 1.0 + (-1/2) + (1/3) + (-1/4) + ... + (1/99) + (-1/100)
#include
int main(){
    double sum = 0.0;
    int flag = 1;
    for(int i=1; i<=100; ++i){
        sum+=flag*1.0/i;     //浮点数除以浮点数
        flag = -flag;
    }
    printf("%lfn",sum);

    return 0;
}
结果:0.688172
//10.求最大值
#include
int main(){
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int max = arr[0];   //max不能随便取值(只能取数组里面的任意一个值作为最大值)
    int sz = sizeof(arr)/sizeof(arr[0]);
    for(int i=1; i max){
            max = arr[i];
        }
    }
    printf("max = %dn",max);

    return 0;
}
//11.乘法口诀表
#include
int main(){
    for(int i=1; i<10; ++i){
        for(int j=1; j<=i; ++j){
            printf("%d*%d=%-2d ",j,i,(i*j));
        }
        printf("n");
    }

    return 0;
}
//12.猜数字游戏
//① 电脑会生成一个随机数
//② 猜数字
#include
#include
#include

void menu(){
    printf("*******************************n");
    printf("****    1.play   0.exit    ****n");
    printf("*******************************n");
}

void game(){
    //1. 生成一个随机数,rand范围1~32699
    int ret = 0;
    int guess = 0;
    //拿时间戳来设置随机数的生成起始点
    //time_t time(time_t *timer)
    //time_t
    ret = rand()%100 + 1;   //生成1~100之间的随机数,rand最大尾数为99
    // printf("%dn",ret);

    //2. 猜数字
    while(1){
        printf("请猜数字:>");
        scanf("%d",&guess);
        if(guess>ret){
            printf("猜大了n");
        }else if(guess:");
        scanf("%d",&input);
        switch(input){
            case 0:
                printf("退出游戏nn");
                break;
            case 1:
                game(); //猜数字游戏
                break;
            default:
                printf("选择错误nn");
                Sleep(1000);
                system("cls");
                break;
        }
    } while(input);

    return 0;
}

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1021796.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号