您的位置:首页 > 其它

【一年半以后复习】从头学习刘汝佳

2017-02-05 16:33 260 查看
一年半没有碰C了,真是非常想念。终于有时间了,忘得差不多了。现在跟着刘汝佳再从头学一遍吧

第一章

练习题

1、数据类型和数据输入格式

int和long都是用32位来存储最大值和最小值分别为2147483647(109), -2147483648;

long long 是用64位来存储最大值和最小值分别为9223372036854775807(1018),-9223372036854775808;

float的最大值和最小值分别为3.40282e+038(1038),1.17549e-038(10-38);

double的最大值和最小值分别为1.79769e+308(10308),2.22507e-308(10-308)

2、scanf("%lf%lf", &a, &b);在输入的两个数字之间加入无数空格,tab,回车都是可以的

3、正弦和余弦:SIN()和COS()函数的参数应该是弧度制的,M_PI是定义在math.h的常数。sin(M_PI / 2)得数是1.

第二章

例题

1、aabb的四位数,完全平方数——7744

#include<stdio.h>
#include<math.h>
int main(){
double k ;
int i, j, s;
for( i = 1; i < 10; i++){
for( j = 0; j < 10; j++){
s = 1100 * i + 11 * j;
k = sqrt(s) ;
if( k == (int)k ){
printf("%d\n", s);
}
}
}
return 0;
}
求不大于x的最大整数有函数floor(x),为了防止0.9999999当成0,用floor(x+0.5)表示四舍五入。
2、3n+1

#include<stdio.h>
#include<math.h>
int main(){
int i, j, n, num;
scanf("%d", &n);
num = 0;
while( n != 1){
if( n % 2 == 0){
n = n / 2;
}
else{
n = 3 * n + 1;
}
num++;
}
printf("%d", num);
}在n = 987654321时溢出,此时n应该使用long long形式,但是涉及输入输出的问题。格式一般来说为"%lld"
#include<stdio.h>
#include<math.h>
int main(){
int i, j, n, num;
long long real;
scanf("%d", &n);
num = 0;
real = n;   //做一个接力就可以了
while( real != 1){
if( real % 2 == 0){
real = real / 2;
}
else{
real = 3 * real + 1;
}
num++;
}
printf("%d", num);
}


3、π/4 = 1 + 1/3 - 1/5 + ...
#include<stdio.h>
#include<math.h>
int main(){

int i, j, k;
double a, b, c, pi = 0;
i = 1;
do{
if(i % 2){
pi += 1.0 / (i*2-1);
}
else{
pi -= 1.0 / (i*2-1);
}
i++;
}while(1.0/i > 1e-6);
printf("%.6f\n", pi*4);
}4、阶乘相加
#include<stdio.h>
#include<math.h>
#include<time.h>
int main(){
const int mod = 1000000;
int n, s = 0, i, j, fac, sum = 0;
scanf("%d", &n);
for( i = 1; i <= n; i++){
fac = 1;
for( j = 1; j <= i; j++){
fac = fac * j % mod; // 简化计算的方法,每步计算取余计算结果不同,不管是加还是乘
}
sum = (sum + fac) % mod;
}
printf("%d\n", sum);
printf("%.f\n", (double)clock() / CLOCKS_PER_SEC);//计算程序运行时间的方法
}5、数据统计
#include<stdio.h>
#include<math.h>
#include<time.h>
// 重定向版
int main(){
freopen("D:\\Dev-Cpp\\datain.txt","r",stdin); // 文件的位置
freopen("D:\\Dev-Cpp\\dataout.txt","w",stdout);
int x, num = 0, min= 1000, max = 0, mean, sum = 0;
while( scanf("%d", &x) == 1){
sum += x;
num++;
if( min > x) min = x;
if( max < x) max = x;
}
printf("%d %d %f", min, max, sum * 0.1 / num);
}
#include<stdio.h>
#include<math.h>
#include<time.h>
int main(){
//fopen版
FILE *fin, *fout;
fin = fopen("D:\\360安全浏览器下载\\Dev-Cpp\\datain.txt","rb");
fout = fopen("D:\\360安全浏览器下载\\Dev-Cpp\\dataout.txt","wb");
int x, num = 0, min= 1000, max = 0, mean, sum = 0;
while( fscanf(fin, "%d", &x) == 1){
sum += x;
num++;
if( min > x) min = x;
if( max < x) max = x;
}
fprintf(fout, "%d %d %f %d", min, max, sum * 0.1 / num, num);
fclose(fin);
fclose(fout);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: