简答分支循环C语言代码常见问题

1.变量要赋初始值


题目:给定两个整数a和b (0 < a,b < 10,000),计算a除以b的整数商和余数。
注意:需要对变量a,b赋初值,再进行输入更加整洁和便于维护。

2.使用scanf()函数自行输入值

继续使用第一个例子来介绍scanf(用于读取用户的键盘输入)的基本用法。

2.1程序运行到这里时会停下来等用户输入数据并按下回车键后,然后存入变量;
2.2语法与printf相似;
2.3scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符等;
2.4常用占位符:
%c-字符
%d-整数
%f-float浮点数
%lf-double浮点数
%s-字符串。

注意1:变量前必须加上取地址&符号,指针变量除外。
注意2:不要在占位符后添加换行符\n。

3.while(scanf(“%d”, &n) != EOF)

#include <stdio.h>

int main() {
    int a, b;
    while (scanf("%d %d", &a, &b) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to 
        printf("%d\n", a + b);
    }
    return 0;
}

常见的直接输入格式只能输入一个值。
scanf()循环输入:它的返回值是一个整数,表示成功读取的变量个数;没有读取到返回0;读取失败返回EOF,则-1。
因此,通过使用上述while循环语句,可以一直输入值;结束使用ctrl+Z/ctrl+C。

4.if-else语句(顺序)

void game() {
	int r = rand() % 100 + 1;
	int g = 0;
	int c = 5;
	while (c) {
		printf("还有%d次机会!", c);
		printf("请猜数字: ");
		scanf("%d", &g);
		if (g > r)
			printf("猜大了\n");
		else if (g < r)
			printf("猜小了\n");
		else {
			printf("猜对了!\n");
			break;
		}
		c--;
	}
}

问题:猜数字游戏。
使用判断语句if-else时注意逻辑清晰,大则>,小则<一一对应(尤其对于多分支或嵌套语句)。
注意:当问题不是“不是这样即为那样”的交叉关系时,可以连续使用多个if。

5.双等于号==和赋值号=

在这里插入图片描述
题目:说出上述代码的执行结果——死循环的打印5
由于进入循环后将5赋值给i,再继续执行i++使i=6,判断<10后又赋值为5,即一直死循环打印5。
因此在写代码时要注意区分判断语句双等于号==和赋值语句单等于号=,两者效果不同。
注意:可将两者调换方向写为"5=i",报错即可发现错误。

6.条件、循环语句大于一条时带大括号

在这里插入图片描述
问题:打印1-100之间所有3的倍数的数字。
为防止出现条件语句if-else匹配问题等,养成在编写代码时出现条件、循环语句后带上大括号{}的习惯,使得整体逻辑清晰,方便维护。

7.a++和++a(–同)

//后置++
int main()
{
	int a = 5;
	int b = a++;//先使用,再+1
	//b=a, a=a+1
	printf("a=%d b=%d\n", a, b);//a=6 b=5

	return 0;
}

前置++:a=6 b=6
注意:当自增(减)运算符单独作用于一个变量时,前置和后置几乎无区别,当开始出现第二个变量后,前置表示先+1再使用,后置表示先使用再+1。

8.逗号表达式

在这里插入图片描述
像上图上这种语句,并非逗号表达式,若加上()即为逗号表达式。
逗号表达式:把表达式从左到右计算出来,然后把最右边的值作为最终值。

9.sizeof()和strlen()的区别

#include <stdio.h>
#include <string.h>
int main()
{
	printf("%zd\n", sizeof(char));
	short s = 2;
    int b = 10;
    printf("%zd\n", sizeof(s = b + 1));//2
}

sizeof(类型/表达式)(括号可去掉),其中表达式不运算,单位是字节。

#include <stdio.h>
#include <string.h>

int main()
{
    char arr[] = {'b', 'i', 't'};
    printf("%d\n", strlen(arr));
	return 0;
}

打印结果为随机值。
strlen获取\0之前的字符串长度,单位是字符,空格也算是字符。

10.三种循环方式下break和continue的不同输出结果

break的作用是用于永久的终止循环,只要break被执行,直接就会跳出循环,继续往后执行;
continue的作用是跳过本次循环continue后边的代码,在for循环和while循环中有所差异的。

10.1 while 循环

int main()
{
	//1~10
	int i = 1;//初始化部分
	while (i<=10) //判断部分
	{
		if (i == 5)
			break;
		printf("%d ", i);
		i++;//调整部分
	}
	return 0;
}

输出结果为1 2 3 4 。

int main()
{
	//1~10
	int i = 1;//初始化部分
	while (i<=10) //判断部分
	{
		if (i == 5)
			continue;
		printf("%d ", i);
		i++;//调整部分
	}
	return 0;
}

由于跳过了调整部分,i一直为5,判断一直成立,从而造成1 2 3 4 死循环。

10.2 for 循环

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 10 。

10.3 do while 循环(与while相似)

int main()
{
    int i = 1;
    do
    {
        if (i == 5)
            break;//1 2 3 4 
        printf("%d ", i);
        i = i + 1;
    } while (i <= 10);
    return 0;
}
int main()
{
    int i = 1;
    do
    {
        if (i == 5)
            continue;//1 2 3 4 死循环
        printf("%d ", i);
        i = i + 1;
    } while (i <= 10);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值