程序题
①求1!+2!+.....+20!
#include <stdio.h>
Void main()
{double s =0,t=1;
Int n;
For (n=1;n<=20;n++)
{
T=t*n;
S=s+t;
}
Printf("1!+2!+...+20!=%22.15e\n",s);
}
②求一个3*3的整形二维数组对角线元素之和
#include <stdio.h>
Void main ()
{
Int a[3] [3] ,sum=0;
Int i,j;
Printf( "enter data:\n") ;
### C语言程序题知识点解析
#### 一、求1!+2!+…+20!
**题目描述:**
编写一个C程序来计算并输出1到20的阶乘之和。
**代码分析:**
```c
#include <stdio.h>
void main()
{
double s = 0, t = 1;
int n;
for (n = 1; n <= 20; n++)
{
t = t * n;
s = s + t;
}
printf("1!+2!+...+20!=%22.15e\n", s);
}
```
- **包含头文件**:`#include <stdio.h>`用于引入标准输入输出库。
- **变量声明**:定义了两个变量`s`和`t`,其中`s`用来存储阶乘之和,`t`用来存储当前项的阶乘值。
- **循环结构**:使用`for`循环从1到20迭代计算每个数的阶乘,并累加到`s`中。
- **输出结果**:使用`printf`函数输出最终的阶乘之和。
**注意事项:**
- 使用`double`类型来存储阶乘值,因为阶乘增长得非常快,可能会超出整型范围。
- 输出格式`%22.15e`表示输出的数值以科学计数法形式显示,总宽度为22位,小数部分保留15位。
#### 二、求一个3×3的整形二维数组对角线元素之和
**题目描述:**
编写一个C程序来计算并输出一个3×3的二维数组主对角线上的元素之和。
**代码分析:**
```c
#include <stdio.h>
void main()
{
int a[3][3], sum = 0;
int i, j;
printf("enter data:\n");
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &a[i][j]);
for (i = 0; i < 3; i++)
sum = sum + a[i][i];
printf("sum=%6d\n", sum);
}
```
- **包含头文件**:`#include <stdio.h>`用于引入标准输入输出库。
- **变量声明**:定义了一个3×3的二维数组`a`以及一个变量`sum`来存储对角线元素之和。
- **输入数据**:使用嵌套的`for`循环读取用户输入的数据。
- **计算对角线元素之和**:再次使用`for`循环遍历数组,并通过`a[i][i]`访问主对角线元素,累加到`sum`中。
- **输出结果**:使用`printf`函数输出最终的对角线元素之和。
**注意事项:**
- 输入数据时需要确保输入正确的数据格式。
- 输出格式`%6d`表示输出的数值占据6位空间。
#### 三、筛选100内的素数
**题目描述:**
编写一个C程序来筛选出1至100之间的所有素数。
**代码分析:**
```c
#include <stdio.h>
#include <math.h>
void main()
{
int i, j, n, a[101];
for (i = 1; i <= 100; i++)
a[i] = i;
a[1] = 0;
for (i = 2; i < sqrt(100); i++)
for (j = i + 1; j <= 100; j++)
if (a[i] != 0 && a[j] != 0)
if (a[j] % a[i] == 0)
a[j] = 0;
printf("\n");
for (i = 2, n = 0; i <= 100; i++)
if (a[i] != 0)
{
printf("%5d", a[i]);
n++;
}
if (n == 10)
{
printf("\n");
n = 0;
}
printf("\n");
}
```
- **包含头文件**:`#include <stdio.h>`用于引入标准输入输出库;`#include <math.h>`用于引入数学库,主要用于计算平方根。
- **变量声明**:定义了一个长度为101的一维数组`a`来存储1至100的整数,其中`a[1]`设为0表示1不是素数。
- **筛选素数**:使用嵌套的`for`循环进行筛选,内层循环从`i + 1`开始到100结束,如果`a[j]`能被`a[i]`整除,则`a[j]`设为0表示不是素数。
- **输出结果**:再次使用`for`循环遍历数组,并输出所有非0的元素。
**注意事项:**
- 筛选素数的过程是基于“埃拉托斯特尼筛法”实现的。
- 输出素数时每10个换一行,便于查看。
- 为了提高效率,外层循环只需要到`sqrt(100)`即可。
以上三个题目涵盖了C语言中的基本语法、控制结构、数组操作等知识点,对于初学者来说具有很好的学习价值。