/* 第一题 */
/* 每一种数据类型都是有一定的表达范围的,编程实现一种算法,
在不假定数据类型长度的条件下,算出当前系统的整型 int 所能表达的最大值。 */
#include <stdio.h>
#include <math.h>//pow(x,y)需要的头文件
int main()
{
int a, b, c;
a = sizeof(int);
b = a*8;
c = pow(2,b-1)-1;//用次方函数计算最大值
printf("整型变量的最大值为:%d",c);
return 0;
}
代码优化后
/* 通过位运算来优化代码 */
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("当前系统的整型 int的范围为: %d ~ %d\n", (0x1 << 31), ~(0x1 << 31));
return 0;
}
/* 第二题 */
/* 编写一个程序,计算N升纯净水所包含的分子个数,结果用科学计数法表示。 */
/* 注意因为水的密度是1g/cm³,所以一升水就是1000克,
水的摩尔质量是18g/mol,所以1升水有1000/18=55.55555556mol水分子 */
/* 1mol水中存在6.02*10^23个水分子 */
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("你要输入多少升的水\n");
float Water = 0;
float sum = 0;
float num = 0;
scanf("%f",&Water);
sum = (Water*1000)/18;
num = sum*(6.02e23);
printf("得到了%f升的水可以转换成%.2f mol的水分子\n",Water,sum);
printf("得到了%.2f mol的水可以转换成%.2e 的水分子\n",sum,num);
return 0;
}
优化代码后
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("你要输入多少升的水\n");
float Water = 0;
float num = 0;
scanf("%f",&Water);
num = Water*(3.34e22);
printf("得到了%.2f 升的水可以转换成%.2e 的水分子\n",Water,num);
return 0;
}
(字符与字符串)
【3】简述 ‘a’ 与 “a” 的异同。
'a':是一个字符,char类型的占用一个字节。
"a":是一串字符,同样也是char类型的,但a后面还有一个'\0',也占用一个字节,总共占用2个字节,所以是一个字符串。
/* 第四题 */
/* 编写一个程序,将用户输入的天数转化为等价的星期数和天数*/
#include <stdio.h>
// #define WEEK 7/* 定义一个全局变量WEEK */
int main()
{
int a;
// int WEEK = 7;/* 定义一个局部变量 */
printf("请输入一个数字\n");
scanf("%d",&a);
// printf("输入%d转换为%d星期%d天\n",a,a/WEEK,a%WEEK);
printf("输入%d转换为%d星期%d天\n",a,a/7,a%7);
return 0;
}
/* 第五题 */
/* 实现1--n的累加求和 */
#include <stdio.h>
int add(int a)
{
int i = 1, sum = 0;
// /* do while循环 */
// do
// {
// sum = sum + i;
// i++;
// }
// while(i<=a);
// /* for循环 */
for(i = 1;i<=a;i++)
{
sum = sum + i;
}
// /* while循环 */
// while(i<=a)
// {
// sum = sum+i;
// i++;
// }
return sum;
}
int main()
{
int a = 0;// a 输入一个数
int b = 0;// b 求和
printf("请输入一个值\n");
scanf("%d",&a);
b = add(a);
printf("1+2+3+4+...+%d = %d\n",a,b);
return 0;
}
//优化后代码
/* 采用公式法 */
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a;
scanf("%d",&a);
printf("%d\n",a*(a+1)/2);
return 0;
}