写在前面
这九天时间一直在家里充工,错过了两次打卡,这次的是把九天的内容总结一下:
前三天:
分解质因数改良
这次是改良了上次的分解质因数的代码,通过与学姐和同学的讨论,发现之前的判断素因数步骤是多余的,只需要加个判断n的整数范围的if,然后加入一个循环就可解决问题,下面是代码:
#include<stdio.h>
int main()
{
int i,n;
scanf("%d",&n);//读入整数n
printf("%d=",n);//输出式子的表头
if(2<=n<=100000){ //判断n的范围
for(i=2;n>=i;i++){ //开始分解n
while(n % i == 0){
printf("%d",i);
n = n / i;
//如果n==1则是素数,否则输出x即*,继续分解,直到n为素数
if(n != 1){
printf("x");
}else{
break;
}
}
}
}
return 0;
}
日后写代码时应该把雏形去简化,找到更简单的方法。
后六天:
MOOC第七章作业
这是题目:
多项式加法(10分)
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。
输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。
输出格式:
从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。
输入样例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
输出样例:
4x6+6x5+12x3+12x2+12x+40
目的是两组多项式相加然后输出结果,第一次写的代码过于繁琐,而且也不对,所以在这里就借用了张泽洋同学的代码,加上我自己的一点理解:
#include<stdio.h>
int main()
{
int m,n; //m为系数,n为幂次
int k,i; //k为多项式组数,在本代码中只有两组
int flag = 0;
int number[101] = {0};
for (k=0;k<2;k++){ //循环两次 ,因为读入两组多项式
do{
scanf("%d %d", &n,&m);
number[n] = number[n] + m; //省去幂次的数组,更加简便,同幂次系数先相加
}while(n != 0);
}
for(i=100;i>=0;i--){ //从所给范围的最高次幂开始逐级递减
if(number[i] != 0){ //判断系数是否为零
if(flag == 0){ //用这种方法跳过第一位数的"+"
flag = 1;
}else if(number[i] > 0){ //用来判断系数正负,负数直接输出
printf("+"); //正数输出之前加一个"+"
}
if(number[i] != 1){ //判断系数是否为1,若是1则不用输出,否则输出系数
printf("%d",number[i]);
}
if(i != 0){ //若幂次不为零,输出x
printf("x",i);
if(i != 1){ //若幂次不为1,输出幂次
printf("%d",i);
}
}
}
}
if(flag == 0){
printf("0"); //如果多项式里没有任何数就输出0
}
return 0;
}
之前是写成系数一个数组,幂次一个数组,但是会很麻烦,这样写系数一个数组,幂次成为元素数量,相对来说更简单些。总结就是写代码之前要把情况想全面,不然很容易出差错。
对指针的理解(个人看法)
指针最基础的作用就是保存地址的变量,也可以作为参数。
int*p
*是一个单目运算符,用来访问指针的值所表示的地址的变量,没有”++”“–”优先级高。
指针可以用作交换两个变量的值:
void swap(int*pa,int*pb)
{
int c = *pa;
*pa = *pb;
*pb = *pa;
}
数组和指针也有很大关系,数组变量是特殊的指针,因为数组变量本身表达地址。不过,数组变量是const的指针,所以不能被赋值。
但是数组单元表达的是变量,不能表达地址,所以数组单元取地址需要用&。
[]运算符可以对数组做,同时也可以对指针做,同样,*运算符对指针,数组都可以做。
malloc:用来申请空间
#include<stdlib.h>
void*malloc(size_t size)
向malloc申请的空间的大小是以字节为单位的。
当然,用malloc申请来的空间是需要还给“系统”的:
这时需要用free(),注意:只能还申请来的空间的首地址。
后话
只总结了第九章,第十,十一,十二章还在理解消化,就先不提,这几天进度较慢,等假期忙完开学的事情就开始心无旁骛的学习。