码迷,mamicode.com
首页 > 编程语言 > 详细

《明解c语言》读书笔记

时间:2014-11-26 23:58:41      阅读:682      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

1-3 输入和显示

  • puts函数只接受 一个 实参,并且在结尾自动换行

 

2-1运算

  • 求商运算符  :除法运算符" / ",如果是两个整数相除结果为整数如果需要保留小数时 必须将其中一个除数转换为浮点数。5/3=1 3/5=0 6.0/4=1.5   (List01)
  • 求余运算符 int%int
  • 用printf函数打印%时,要避免使用转换功能,必须写成%%,printf(“5%%3=%d\n”,5%3);当使用不具备转换说明功能的puts函数时,写一个%即可。

       练习:显示读取整数的最后一位数字(对10求余)

                百分比问题(list02)

  • 操作数类型不同时,会进行向上转型(int——>double),然后再运算。
  • 还是百分比问题,代码改动,因为输入的用户习惯是整数而不是实数,所以将输入整数向上转型后再进行求商运算

       

bubuko.com,布布扣
 1 #include<stdio.h>
 2 int main()
 3 {
 4     float num1,num2;
 5     puts("请输入第一个数:");
 6     scanf("%d",&num1);
 7     puts("请输入第一个数:");
 8     scanf("%d",&num2);
 9     printf("num1是num2的%f%%",double(num1)/num2*100);
10     getch();//持续显示dos窗口
11     return 0;
12 }
View Code
  • 条件运算符,是一个三目运算符。n1?n2:n3
  • switch语句:如果case语句后面没有break,则会顺序执行下来。

bubuko.com,布布扣

4-1  do语句

  • 逆向显示数值(规定是正数)

    

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int num;
 5     do
 6     {
 7         puts("请输入一个正数:");
 8         scanf("%d",&num);
 9         if(num<0)
10             puts("请重新输入一个正数!");
11     }while(num<0);
12     
13     puts("逆序的正数变为:");
14     
15     do
16     {
17         printf("%d",num%10);
18         num=num/10;
19     }while(num!=0);
20 
21     getch();
22     
23     return 0;
24 }

 

  •  4-13:输入整数后,循环显示1234567890,显示的位数和输入的整数值相同。例如输入12,显示:123456789012

     

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i,j,num;
 5     j=1;
 6     printf("enter a number:");
 7     scanf("%d",&num);
 8     for(i=1;i<=num;i++)
 9     {
10         printf("%d",j);
11         j++;
12         if(j==10)
13             j=0;
14     }
15     getch();
16     return 0;
17 }

4-15 输入九九乘法表增加横轴标题

 1 #include<stdio.h>
 2 void main()
 3 {
 4     int i,j;
 5     printf("    | ");
 6     for(i=1;i<=9;i++)
 7     {
 8         printf("%3d ",i);
 9     }
10     putchar(\n);
11     for (i=0;i<=50;i++)
12     {
13         printf("-");
14     }
15     putchar(\n);
16     for(i=1;i<=9;i++)
17 
18     {
19         printf(" %d  |",i);
20         for(j=1;j<=9;j++)
21         {
22             
23             printf(" %3d",i*j);
24         }
25         putchar(\n);
26     }
27     getch();
28 }

bubuko.com,布布扣

 5-1数组

  • 数组的声明和初始化

     1)声明数组的时候,元素个数必须是常量

    int n=5;int a[n];(FALSE)


2)初始化如不指定元素个数,数组会根据初始化值的个数自动进行设定

   int vc[]={1,2,3,5,7};

3)初始化初始值数量不足时,会自动用0对剩余的元素进行初始化

4)不能通过赋值进行初始化

int vc[3];

vc={1,2,3};

练习:以10分为单位显示出学生的成绩分布图

结果:

bubuko.com,布布扣

代码:

 1 #include<stdio.h>
 2 #define NUMBER 80  //人数上限
 3 void main()
 4 {
 5     int i,j;
 6     int num;  //实际人数
 7     int fenshu[NUMBER];//学生分数
 8     int fenbu[11]={0};//分数分布
 9 
10     printf("请输入学生人数:");
11     do
12     {
13         scanf("%d",&num);
14         if(num<1||num>NUMBER)
15             printf("\a人数范围[1到%d]:",NUMBER);
16     }while(num<1||num>NUMBER);
17 
18     puts("请输入学生分数:");
19 
20     for(i=0;i<num;i++)
21     {
22         printf("%2d号:",i+1);
23         do
24         {
25             scanf("%d",&fenshu[i]);
26             if(fenshu[i]<0||fenshu[i]>100)
27                 printf("\a分数范围[0到100]:");
28         }while(fenshu[i]<0||fenshu[i]>100);
29         fenbu[fenshu[i]/10]++;
30     }
31 
32     puts("\n ---分布图---");
33     printf("   100:");
34     for(j=0;j<fenbu[10];j++)
35         putchar(*);
36     putchar(\n);
37     
38     for(i=9;i>=0;i--)
39     {
40         printf("%3d-%3d:",i*10,i*10+9);
41         for(j=0;j<fenbu[i];j++)
42             putchar(*);
43         putchar(\n);
44     }
45     getch();
46 }

这里面有些关于if while循环输入和分布统计的格式需要注意

 练习:写一段程序,求出矩阵x和y的值

我第一次写的程序可谓“人神共愤”,要数清楚原矩阵和结果矩阵的维数才能进行for循环,贴出来反省一下

 1 #include<stdio.h>
 2 void main()
 3 {
 4     
 5         int x[2][3]={{1,2,3},{4,5,6}};
 6         int y[3][2]={{1,5},{5,3},{8,1}};
 7         int mc[2][1]={0};
 8         int i,j;
 9         //计算
10         for(i=0;i<2;i++)
11         {
12             for(j=0;j<3;j++)
13             {
14             
15                 mc[i][1]+=x[i][j]*y[j][i];
16             
17             }
18         }
19         //输出
20         for(i=0;i<2;i++)
21         {
22             
23             
24                 printf("%3d",mc[i][1]);
25                 putchar(\n);
26         }
27 
28 
29     getchar();
30 }

后来看到网上的模板,用函数调用写的层次分明,原帖:http://blog.sina.com.cn/s/blog_8e392fc20101br1e.html

结果:

 bubuko.com,布布扣

代码:

 1 #include<stdio.h>
 2 #define SIZE 20 //预定义要进行转置的矩阵最大大小为 20*20
 3 //为了函数参数传递的方便,将行和列的具体大小定义为全局变量
 4 int a_column;
 5 int a_row ;
 6 int b_row;
 7 int b_column;
 8 int c[SIZE][SIZE]={0};
 9 //矩阵的输入函数
10 void inputMatrix(int a[][SIZE] , int n, int m){ //二维数组参数下标必须要确定
11  int i,j;
12  for(i = 0;i < n;i++){
13   for(j = 0;j < m;j++){
14    scanf("%d",&a[i][j]);
15   }
16  }
17 }
18 //矩阵的输出函数
19 void outputMatrix(int c[][SIZE] , int n, int m){
20  int i,j;
21  for(i = 0;i < n;i++){
22   for(j = 0;j < m;j++){
23    printf("%d ",c[i][j]);  
24   }
25   printf("\n"); //每次打印完一行后进行换行
26  }
27 }
28 //矩阵的乘法算
29 void matrixMultiplication(int a[][SIZE], int b[][SIZE]){
30  int i,j,k;
31  for(i = 0;i < a_row;i++){
32   for(j = 0; j < b_column ; j++){
33    for(k = 0; k < a_column;k++){
34     c[i][j] = c[i][j]+ a[i][k] * b[k][j];
35    }
36   }
37  }
38 }
39 int main()
40 { 
41  //定义数组并初始化
42  int a[SIZE][SIZE]={0};
43  int b[SIZE][SIZE]={0};//定义数组,注意要初始化
44  //矩阵行,列数的确定
45  printf("请输入第一个矩阵的行数 : ");
46  scanf("%d",&a_row);
47  printf("\n请输入第一个矩阵的列数 :");
48  scanf("%d",&a_column);
49  //函数调用及主功能实现
50  printf("请输入矩阵A ( %d X %d 形式)\n" ,  a_row,a_column);
51  inputMatrix(a , a_row, a_column); 
52  b_row=a_column;
53  printf("注意:根据数学原理,您将输入的第二个矩阵的行数为 %d \n",b_row);
54  printf("请输入矩阵B的列数 : ");
55  scanf("%d",&b_column);
56  printf("请输入矩阵B ( %d X %d 形式) : \n" , b_row , b_column);
57  inputMatrix(b, b_row , b_column);
58  //调用相乘函数
59  matrixMultiplication(a,b);
60  printf("A与B相乘后的矩阵C是 :\n");
61  outputMatrix(c, a_row , b_column);
62  getchar();
63  return 0;
64 }
5-15 求解质数
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int no,i;
 5     printf("请输入一个数字:");
 6     scanf("%d",&no);
 7     for(i=2;i<no;i++)
 8     {
 9           if(no%i==0)
10         {
11             printf("不是质数");
12             break;
13         }
14          
15     }
16      if(no==i)
17             printf("是质数");
18     getch();
19     return 0;
20 }

一开始printf输成prinf,结果链接出问题。vs2010既不显示关键词也不告诉我哪儿错了,害我找半天。

然后就是最后的if(no==i)如果写在for循环里面永远都跳不出来。因为i==no时候就跳出了for循环了,还怎么执行这个if啊。。。

 

 

《明解c语言》读书笔记

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/Daringoo/p/4071550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!