C语言编程笔记
5/26 b站翁恺习题+数组+整数的格式化输出
题8:求a的连续和
。
e.g :2+22+222+2222+…+222…2(n个a)
#include<stdio.h>
int main()
{
int a;
int n;
scanf("%d %d",&a,&n);
int sum=0;
int k=a;
for (int i=1;i<=n;i++){
sum+=a;
a=a*10+k;
}
printf("%d",sum);
}
二维数组的初始化
- 分组赋值——每一组数据,赋给相应的一行数组元素
e.g int array[3][2] = {{1, 2}, {3, 4}, {5, 6}};
相当于:
(1) {1, 2}数据,赋给array[0][ ] 表示第 1行数组;
(2) {3, 4}数据,赋给array[1][ ] 表示第 2行数组;
(3) {5, 6}数据,赋给array[2][ ] 表示第 3行数
- 连续赋值
e.g int array[3][2] = {1, 2, 3, 4, 5, 6};
此时,就把{1, 2, 3, 4, 5, 6}表示的一组数据,赋给二维数组。赋值的规则如下:
(1) array[3][2]表示3行2列数据;每一行是2个元素;
(2) 从 {1, 2, 3, 4, 5, 6}中取出2个元素,赋给第一行元素;所以,第一行元素得到{1, 2}数据组,剩下{3, 4, 5, 6}数据组;
(3) 从 {3, 4, 5, 6}数据组中取出2个元素,赋给第二行元素,所以,第二行元素得到{3, 4}数据组,剩下{5, 6}数据组。
(4) 从{5, 6}数据组中取出2个元素,赋给第三行元素,所以,第三行元素得到{5, 6}数据组,没有剩下任何数据。
(5) 最终,把初始化赋值的数据组划分成一行一行元素,设置到二维数组中。
声明:如果初始化赋值数据组的元素比二维数组元素少,则剩下的数组元素默认设置为0.
以下为非常规表达:
int array1[][2] = {1,2,3,4,5,6} 同 array[3][2]
int array2[][4] = { {1,2},{3,4,5},{6} }
整数的格式化输出
-
整数的输入输出:
int & long long
%d: int
%u: unsigned
%ld: long long
%lu: unsigned long long -
8进制和16进制
一个以 0 开始的数字字面量是8进制 012=10
一个以 0x 开始的数字字面量是16进制
%o——输出8进制 %x——输出16进制 -
格式字符:
%d :十进制
%o : 八进制
%x,X: 十六进制
%u :十进制绝对值
%f : 小数形式单、双精度实数 (%.2f)
%e,E :指数形式单、双精度实数
%g,G:以%f或%e中较短的输出宽度输出单、双精度实数
%c : 输出单个字符
%s : 输出字符串 -
精度
精度格式符以“.”开头,后跟十进制整数。如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
本例中:
“%5d ”要求输出宽度为5,而a值为15只有两位故补三个空格。
“%f”和“%lf ”格式的输出相同,说明“l”符对“f”类型无影响。“%5.4lf”指定输出宽度为5,精度为4,由于实际长度超过5故应该按实际位数输出,小数位数超过4位部分被截去。
第17行输出双精度实数,“%8.4lf ”由于指定精度为4位故截去了超过4位的部分。
第20行输出字符量d,其中“%8c ”指定输出宽度为8故在输出字符p之前补加7个空格。
附:单精度与双精度区别
区别:单精度浮点数在机内占4个字节,双精度浮点数在机内占8个字节。单精度浮点数有效数字8位,双精度浮点数有效数字16位。一般CPU处理单精度浮点数的速度比处理双精度浮点数快。”