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

来源:互联网 发布:百度云搜索cms程序 编辑:程序博客网 时间:2024/06/05 15:13

一年半没有碰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);}





0 0