幕间总结 002

一、关系操作符

1. switch语句
int func(int a)
{
    int b;
    switch (a)
    {
        case 1: b = 30;
        case 2: b = 20;
        case 3: b = 16;
        default: b = 0;
    }
    return b;
}

则func(1) = (      )?

switch的每个case之后如果没有加break语句,当前case执行结束后,会继续执行紧跟case中的语句。

由func(1)可知,在调用func时形参a的值为1,switch(a)<==>switch(1),case 1被命中,因为该switch语句中所有分支下都没有增加break语句,因此会从上往下顺序执行,最后执行default中语句返回,即b = 0 。

2. 关系操作符

关于关系操作符说法错误的是?

A. C语言的关系操作符就是用来比较大小关系的

B. 关系操作符中判断是否相等使用==

C. ==操作符可以用来比较2个字符串是否相等

D. 关系操作符参与的关系表达式,通常返回0或1,表示真

==操作符不可以用来比较2个字符串是否相等。在C语言中,可以使用strcmp()函数来比较两个字符串是否相等:

// 使用strcmp()函数来比较两个字符串是否相等
#include <stdio.h>
#include <string.h>

int main()
{
    char str1[50] = "Hello";
    char str2[50] = "hello";

    if (strcmp(str1, str2) == 0)
        printf("两个字符串相同");
    else
        printf("两个字符串不同");

    return 0;
}

还可以使用strcmp()函数来比较字符串的大小: 

// 使用strcmp()函数比较str1和str2的大小,并根据结果打印出它们之间的关系
#include <stdio.h>
#include <string.h>

int main()
{
    char str1[50] = "World";
    char str2[50] = "hello";

    if (strcmp(str1, str2) > 0)
        printf("%s 在 %s 后面", str1, str2);
    else if (strcmp(str1, str2) < 0)
        printf("%s 在 %s 前面", str1, str2);
    else
        printf("%s 和 %s 相同", str1, str2);

    return 0;
}
3. 奇偶项区分计算

计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

/*
思路:
1. 从上述表达式可以分析出
   a. 该表达式主要由100项,基数项为正,偶数项为负
2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0
    然后使用flag标记控制奇偶项,奇数项为正,偶数项为负
    然后将所有的项相加即可
*/
#include <stdio.h>

int  main()
{
	int i = 0;
	double sum = 0.0;
	int flag = 1;
	for(i=1; i<=100; i++)
	{
		sum += flag*1.0/i;
		flag = -flag;
	}
	printf("%lf\n", sum);
	return 0;
}

二、break和continue

辗转相除法求最大公约数

给定两个数,求这两个数的最大公约数

例如:

输入:20 40

输出:20

#include <stdio.h>

int main() 
{
	int a = 1, b = 1;
	printf("请输入两个整数:");
	scanf("%d %d", &a, &b);

	//辗转相除法
	while (b != 0) {
		int tmp = a % b;
        a = b;
		b = tmp;
	}
	printf("这两个整数的最大公约数是 %d\n", a);
	return 0;
}
示例:18和24的最大公约数

第一次:tmp = a%b = 18%24 = 6  a = 18  b = 6

第二次:tmp = a%b = 18%6  = 0  a = 6   b = 0

第三次:b = 0 循环结束
  
此时a中的内容即为两个数中的最大公约数,即为6。

三、一维数组

1. 逗号运算符

使用逗号运算符是为了把几个表达式放在一起。

整个逗号表达式的值为系列中最后一个表达式的值。

表达式1, 表达式2

从本质上讲,逗号的作用是将一系列运算按顺序(先求解表达式 1,再求解表达式 2。整个逗号表达式的值是表达式 2 的值。最右边的那个表达式的值将作为整个逗号表达式的值,其他表达式的值会被丢弃)执行。

#include <stdio.h>
 
int main()
{
   int i, j;
   
   j = 10;
   i = (j++, j+10, 99+j);
 
   printf("%d\n", i);
   
   return 0;
}

如上面的示例,j 最初的值为 10,然后自增到 11,这时 j 的值就为 11,然后再计算第二个表达式 j+10,最后 j(j 为 11) 再加上 99,最后 i 为 最后一个表达式的值 99+j,即 99+ 11=110,输出结果为110。

2. sizeof和strlen函数计算数组长度的方式
示例一
#include <stdio.h>

int main()
{
    char str[] = "c:\talk saxy.mp4";
    printf("%d %d\n", sizeof(str), strlen(str));
    return 0;
}

C语言中,反斜杠(\)通常用于表示转义字符序列,如"\n"表示换行符,"\t"表示制表符等等。

该字符串实际上包含了以下内容: "c: alk saxy.mp4"(':'后面有一个空格)。

在这个字符串中,有15个可见字符和1个空字符('\0'),用于表示字符串的结束。

sizeof(str)返回的是字符数组str的大小,它包括了数组中的字符以及一个用于表示字符串结尾的空字符('\0')。字符串包括15个字符,再加上一个结尾的空字符,又因为每个 char 字符在该系统中占用 1 个字节,所以sizeof(str)返回16。

strlen(str)返回的是字符串的实际长度,即不包括结尾的空字符('\0')。因此,对于该字符串,strlen(str)返回15,因为它只计算了字符串中的15个字符。

示例二
int main()
{
	char acX[] = "abcdefg";
	char acY[] = { 'a','b','c','d','e','f','g' };
	printf("%zd %zd\n", sizeof(acX), sizeof(acY));
	printf("%d %d\n", strlen(acX), strlen(acY));
	return 0;
}

(1)输出内容(第一行):8 7

sizeof(acX) 返回的是acX字符数组的大小,这包括了字符串"abcdefg"以及结尾的空字符('\0'),所以它的大小是8字节(7个字符 + 1个空字符)。

sizeof(acY) 返回的是acY字符数组的大小,这是明确指定的,它包含了7个字符,所以它的大小是7字节。
(2)输出内容(第二行):7 42

strlen(acX) 返回的是acX中非空字符的数量,也就是7,因为它不包括结尾的空字符。

strlen(acY) 返回的是acY中非空字符的数量,然而acY并没有以空字符结尾,因此strlen(acY)会继续查找内存,直到找到一个空字符('\0'),这可能导致strlen(acY)返回的值不是预期的7,而是一个较大的值,这里是42。

3. 变长数组

在C语言中,以下哪个选项描述了变长数组(Variable Length Array,VLA)的特点?

A. 变长数组的大小在编译时确定,不能改变。

B. 变长数组的大小可能在运行时确定,比如使用变量来指定数组大小,一旦确定大小后,它的大小是固定的,无法改变。

C. 一旦确定大小后,它的大小是固定的,无法改变

D. 变长数组只能用于存储字符类型的数据。

变长数组( variable-length  array),C语言术语,也简称VLA。是指用 整型变量或表达式声明或定义的数组 ,而不是说数组的长度会随时变化,变长数组在其生存期内的长度同样是固定的 。

代码示例:

int n;
scanf ("%d", &n);
int array[n];

注意上述语法在C99之前是不支持的。

A选项错误:编译时无法确定,编译时候编译器不知道n是什么值,n的值要等到程序运行起来后,用户输入之后n的值确定了,才能确定数组的大小

B选项错误:说法不严谨,一定是在运行时确定大小的,而不是可能

C选项正确

D选项错误:存储什么类型数据,看定义时候给数组名前放什么类型,比如int a[n]就是存放int类型 short a[n]就是存在short类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值