【知识点详解】
1. 条件表达式在C语言中的使用:题目中提到的"用C语言中的条件表达式表示所编班级个数",在C语言中,条件表达式通常指的是三目运算符 `? :`。它可以用于简洁地表示if...else结构。例如,表达式 `n % k == 0 ? n / k : n / k + 1` 表示如果n可以被k整除,则班级数为n/k,否则为n/k加1。
2. 结构体和指针操作:在C语言中,`struct`用来定义自定义数据类型。题目中的表达式`(p->y/p->x*s[1].x+s[1].y)`涉及到结构体成员访问和指针操作,其中`p->`是访问指针指向的结构体成员,`s[1]`则是访问数组的第二个元素。
3. switch语句与循环控制:程序段中的`switch(c-'0')`根据字符c与'0'的差值执行不同的case,结合`continue`和`break`,可以实现字符的位移输出。此代码将输入字符串中的数字字符依次转换并输出。
4. 指针变量的定义:`int *p1`定义了一个指向int类型的指针;`p2[5]`定义了包含5个int元素的指针数组;`(*p3)()`定义了一个指向函数的指针,该函数没有参数且返回值为int;`(*p4)[5]`定义了一个指针,它指向含有5个int元素的数组。
5. 位操作与类型转换:在给定的程序段中,`u2=(u1 & 0xff)<<4`和`u3=(u1 & 0xff00) >>4`是位操作,分别取u1的低8位向左移4位和高8位向右移4位。`printf("%x %x %x", u2, u3, u2/u3)`将输出转换后的十六进制值和除法结果。
6. switch语句的转换:将switch语句改写成等价的条件语句,可以转换为嵌套的if...else if...else结构。在给定的代码中,外层的if判断x是否不等于0,内层的switch则根据x是否大于0来决定y的值。
7. 递归函数的理解与输出:函数`conv(m)`是一个递归函数,用于将整数m转换为其二进制表示。递归终止条件是m小于2,否则对m进行除2操作并继续递归。`main`函数调用`conv(13)`将输出13的二进制形式,即1101。
试题二:
1. 函数`sort()`是一个冒泡排序的实现,用于对整型数组进行升序排序。`delsame()`函数用于去除数组中的重复元素,并返回新的元素数量。程序的输出是经过排序并去除重复元素后的数组。
试题三:
1. 程序3.1中,首先应该修复行号错误,将`#01`改为`#1`,`#02`改为`#2`。然后,程序应计算素数之和,可以通过遍历输入的10个正整数,判断每个数是否为素数,如果是,则累加到总和中。注意,1不是素数,应该排除在外。在检查素数时,可以使用一个简单的循环来验证每个数是否能被小于其平方根的数整除。