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),然后再运算。
- 还是百分比问题,代码改动,因为输入的用户习惯是整数而不是实数,所以将输入整数向上转型后再进行求商运算
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 }
- 条件运算符,是一个三目运算符。n1?n2:n3
- switch语句:如果case语句后面没有break,则会顺序执行下来。
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 }
:
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分为单位显示出学生的成绩分布图
结果:
代码:
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
结果:
代码:
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啊。。。
时间: 2024-10-27 08:27:13