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

论坛 期权论坛 脚本     
匿名网站用户   2020-12-21 03:38   38   0

一年半没有碰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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP