### 浙江省二级C语言上机考试题库解析
#### 题目一:输出质数因子
**题目描述**:
本题要求编写一个C语言程序,该程序的功能是接收用户输入的一个整数`n`,然后输出该整数的所有质数因子。例如,如果用户输入`13860`,程序应该输出`2、2、3、3、5、7、11`。
**代码分析与修正**:
```c
#include<stdio.h>
void main()
{
int n, i;
scanf("%d", &n);
/******1******/
i = 2;
while (n > 1)
{
if (n % i == 0)
{
printf("%d\t", i);
n /= i;
}
else
/********2*******/
i++;
}
}
```
**解析**:
1. **修正第1处**:将`i=1;i=2`修改为`i = 2;`。这里使用`i`作为循环变量,从`2`开始检查`n`是否能被整除。
2. **修正第2处**:将`n--;i++`修改为`i++;`。当`n`不能被`i`整除时,需要增加`i`的值继续检查下一个可能的因子。
#### 题目二:字母循环后移
**题目描述**:
编写一个C语言程序,该程序的功能是接收用户输入的一个小写字母,并将该字母向后移动5个位置输出。例如,如果用户输入`a`,则输出`f`;如果用户输入`w`,则输出`b`。
**代码分析与修正**:
```c
#include<stdio.h>
void main()
{
char c;
c = getchar();
if (c >= 'a' && c <= 'u')
c = c + 5;
else if (c >= 'v' && c <= 'z')
c = c - 'v' + 'a';
putchar(c);
}
```
**解析**:
1. **条件判断**:通过`if`语句检查字符`c`的值。如果`c`在`'a'`到`'u'`之间,则将其值加上`5`;如果`c`在`'v'`到`'z'`之间,则将其值减去`'v'`再加上`'a'`来实现循环。
#### 题目三:求解二次方程
**题目描述**:
编写一个C语言程序,该程序的功能是求解形如`x*x + 5*x - 2 = 0`的一元二次方程的实数解。
**代码分析与修正**:
```c
#include<stdio.h>
#include<math.h>
int f(float a, float b, float c, float *x1, float *x2)
{
if (b * b - 4 * a * c < 0)
return 1;
*x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
*x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
return 0;
}
void main()
{
float u1, u2;
float a = 1, b = 5, c = -2;
if (f(a, b, c, &u1, &u2))
printf("实数范围内无解\n");
else
printf("%.2f %.2f\n", u1, u2);
}
```
**解析**:
1. **函数定义**:定义了一个名为`f`的函数,用于求解一元二次方程的实数解。
2. **返回值处理**:如果判别式小于0,则返回`1`表示无实数解;否则计算两个根并返回`0`。
#### 题目四:计算多项式
**题目描述**:
编写一个C语言程序,该程序的功能是计算多项式`1.1 + 2.2 * x + 3.3 * x * x + 4.4 * x * x * x + 5.5 * x * x * x * x`,其中`x`的值为`1.7`。
**代码分析与修正**:
```c
#include<stdio.h>
float f(float x, float *a, int n)
{
float y = a[0], t = 1;
int i;
for (i = 1; i < n; i++)
{
t = t * x;
y = y + a[i] * t;
}
return y;
}
void main()
{
float b[5] = {1.1, 2.2, 3.3, 4.4, 5.5};
printf("%f\n", f(1.7, b, 5));
}
```
**解析**:
1. **函数定义**:定义了一个名为`f`的函数,用于计算给定系数数组`a`和指数`n`的多项式的值。
2. **循环计算**:使用`for`循环逐项计算多项式的值。
#### 题目五:求数字之和
**题目描述**:
编写一个C语言程序,该程序的功能是接收用户输入的一个整数`n`,然后输出该整数各位数字之和。例如,如果用户输入`1308`,则输出`12`;如果用户输入`-3204`,则输出`9`。
**代码分析与修正**:
```c
#include<stdio.h>
#include<math.h>
void main()
{
int n, s = 0;
scanf("%d", &n);
n = fabs(n);
while (n != 0)
{
s = s + n % 10;
n = n / 10;
}
printf("%d\n", s);
}
```
**解析**:
1. **修正第1处**:使用`fabs`函数确保`n`为正数。
2. **修正第2处**:在`while`循环中,使用`n = n / 10`来逐位取出数字并累加。
#### 题目六:统计元音字母
**题目描述**:
编写一个C语言程序,该程序的功能是统计输入字符串中所有英文字母中的各元音字母个数。
**代码分析与修正**:
```c
#include<stdio.h>
#include<ctype.h>
void main()
{
// 代码实现
}
```
**解析**:
1. **函数调用**:使用`ctype.h`中的函数来辅助判断字符类型。
2. **统计逻辑**:遍历输入的字符串,使用条件语句判断每个字符是否为元音字母,并进行相应的计数。