1.结构体改值:
②第二套1 对形参b所指结构体的数据进行修改
1.结构体传参传地址&结构体
2.在函数里用->,在main里用.,数组用.
②第五套1 对形参b所指结构体的数据进行修改
返回指针变量的地址,不用取*,所以用struct student *(前面第二套1是没有返回值所以用void
③第12套3 计算出x所指数组中n个幂数之和
那个没有=!!
2.链表
①第二套2 为结点数据赋0到m-1的值
链表
传表头啊啊啊
结构体用*
②第四套1 将链表从小到大变成从大到小
h所指的data是没有数据的,是从b的data开始才有数据,所以要让p指向h->next指向b,然后q指向p的下一个地址,然后让q遍历与p比较,遍历完了之后p移位再让q遍历和p比较,直至p移向最后一位,最后一位的next是null(比他小就放前面
③第10套1 将链表从小到大排序
先创建链表
然后把该链表赋值给函数里的指针
两次循环,先固定p不变,然后遍历(通过让q指向next)q的data与p的data比较,然后如果p比较大就交换,然后让p位移(让p指向next)再进行如上操作
④第12套1 找出链表的最大值
固定p,然后位移遍历p与pmax比较(p[i]只是数组++,p还是指着第一个数,忘记哪道题了
3.移动
①第二套3 一维数组的数据移动
第0位移出,逐位前移,是那一位往前移动,所以j开始为1,然后把第一位赋值给最后一位
②第六套2 找出Ascll码最大的字符,放在第一位,其他向后移动
③第15套1 把字符最右边的n个字符赋值到新的数组里
算出字符串的长度
如果没有超过,那就把原来的s赋值给t
如果超了,那就从n遍历到数组最后一位那里,然后前面的s的不要了,最后t直接赋0
③第六套1 取出偶数 再进行倒序排列
倒序排就是!!取出最后一位然后*10,然后再向前一位一位的取值,再*10
④第七套1 取出ascll码值<97的,存入字符数组里形成一个新的字符串
n最后存完了最后一个字符之后还++了所以刚刚好
是s++移位不是*s++
n索引值就是符合条件的个数
⑤第8套 2 倒序+交叉存放
⑥第10套2 取出数字字符,形成新的字符串
⑦第10套 3 找出ascll码是奇数的删除,剩下的组成数组
strlen s就是这个数组的首地址
⑧第15套2 从低位开始取变量的奇数位上的数放在t中
低位是指从右边开始数
没有返回值,然后()用了*的在下面的函数里也要用*才是真实值
⑧第13套1 把偶数取出,按高位到低位排序
就是先看数据是否结束,然后取出个位看是否为偶数,为偶数则拼成另一个数,10即每一次进来就把进来的那个数字搞到高位,然后取完个位就把个位去掉
4.阶乘
①第三套1 算阶乘,为了不重复计算,搞了结构体还有old
阶乘
发现:结构体在函数里就用“.”
在被调用的函数里的结构体用->
old里储存着上一次的n 和阶乘
如果下一次输入的和上次一样,就输出old里的n 和 order
如果比上一次的大那就在上一次的基础上,多*上次没有*的即old.n+1开始到 现在的n 一直累*
如果比上一次小,就在上一次的基础上,减去多的那块,即/多*的那块,累/
储存这一次的n
②第五套3 求阶乘的倒数的累加
第一个for循环:从1到n,分别求每个阶乘
kk的值要保存
第二个for循环:求这个数i的阶乘
第二个for循环后进行累加
kk的值是保存的,所以就相当于已经做了一个累乘了,下一次循环就继续*就行
一次循环进行一个数的阶乘的实现+累加
③第11套3 求一个关于阶乘的公式
阶乘里:i=1,然后i<=m
求有分母分子的那种定义变量flaot
放阶乘的变量初始化要写1.0
④第13套3 求下列级数和
⑤第14套1 根据一个数学式子来写
有些值是要变化的,有时候他没变就是哪个空要填了
⑥第15套2 1/x*x
⑦第15套3 一个四位正整数==各个数字的四次方和,个数,数组
下面这个循环不能改变i的值,所以将i赋值给k,对k进行操作
进行完这一次的玫瑰后,下一个值进来sum要清0
j就是它的个数
5.立方和
①第三套2 三位数==各个位上数字的立方和
6.第9套1 输入一个数,然后进行相应的数学运算
7.第9套2 正整数是否等于某个连续正整数序列之和
6.因子
①第三套3 求给定整数的所有因子
要给下面没有赋值的变量赋值
是把可以被n整除的因子加起来
7.统计整数里数字的个数
①第四套2 计算出长整数各个位置上的数值,0有几多,1有几多
传地址的话,那个函数里要写*
②第五套2 返回字符的种类,大写小写
④第6套 3 找出数组里能被整除的元素,剩下的累加
已经定义了数组的长度
sum是一个指针,指向当前的地址,只有*sum才代表通过地址访问里面的内容
如果是结构体、数组就不用加*,因为他们本身就是地址
⑤第7套3 找出最大最小值
这种最大值最小值的直接设一个变量max然后把一个值赋给它,然后用它和其他的比较
⑥第11套1 统计其中的数字、小写字、大写字母的个数
⑦第11套2 找出所有因子,统计因子个数,判断是否为完数
因子:n%i==0的数
完数:因子之和恰好==这个数本身
找因子:如果n能被i整除,那么i就是n的因子
找完数:n如果能刚好减完它的因子,那他就是完数
⑧第12套2 计算s所指字符串中含有t所指字符串的数目
就是开始p、s指向一个空间,r、t指向一个空间,然后当r!=0时,看r和p的值是否相等,相等就两者同时向后位移,不相等就跳出循环,其实就是看这两个数组是否相等,相等同时向后位移,看看后面相不相等,
如果r位移到/0,说明前面都是相等的,然后计数的n++
如果r!=0,但是跳出循环了,证明没有相等的,s向后位移,然后p再回来s这里重新对从这个字母开始判断
r每次判断到不相等or判断到0,循环回来就让r回到原始t的位置
8.保留小数,四舍五入
①第四套3 保留两位小数+四舍五入
直接/1000.0得到小数
9.根据输入的数,写二维数组
①第7套2 根据输入的数,写二维数组,其实就是那个位数值*位数值(但是不是0*0
二维数组:int a[][M],行可以不写,列一定要写
不是0*0!
⑥第8套1 二维数组的改值
改变行,遍历列,把列的值改到新的一行
①第14套3 找二维数组的最大值
①第八套3 在数组中找符合情况的数字,并累加记录,存放到对应的数组里
然后他是0-10所以是11个
void fun( int *a, int *b)
{
int i=0,n[10]={0,0,0,0,0,0,0,0,0,0},j=0;
for(i=0;i<M;i++)b[i]=0;
for(i=0;i<N;i++)
{
if(a[i]>=0 && a[i]<=9)
n[0]++;
if(a[i]>=10 && a[i]<=19)
n[1]++;
if(a[i]>=20 && a[i]<=29)
n[2]++;
if(a[i]>=30 && a[i]<=39)
n[3]++;
if(a[i]>=40 && a[i]<=49)
n[4]++;
if(a[i]>=50 && a[i]<=59)
n[5]++;
if(a[i]>=60 && a[i]<=69)
n[6]++;
if(a[i]>=70 && a[i]<=79)
n[7]++;
if(a[i]>=80 && a[i]<=89)
n[8]++;
if(a[i]>=90 && a[i]<=100)
n[9]++;
if(a[i]>=100)
b[10]++;
}
for(j=0;j<M;j++)
{
b[j] = n[j];
}
}
void fun( int *a, int *b)
{
int i=0,j=0;
for(i=0;i<M;i++)b[i]=0;
for(i=0;i<N;i++)
{
if(a[i]>=0 && a[i]<=9)
b[0]++;
if(a[i]>=10 && a[i]<=19)
b[1]++;
if(a[i]>=20 && a[i]<=29)
b[2]++;
if(a[i]>=30 && a[i]<=39)
b[3]++;
if(a[i]>=40 && a[i]<=49)
b[4]++;
if(a[i]>=50 && a[i]<=59)
b[5]++;
if(a[i]>=60 && a[i]<=69)
b[6]++;
if(a[i]>=70 && a[i]<=79)
b[7]++;
if(a[i]>=80 && a[i]<=89)
b[8]++;
if(a[i]>=90 && a[i]<=99)
b[9]++;
if(a[i]>=100)
b[10]++;
}
在给数组赋值前要遍历数组,让数组清0,然后再赋值:
①先把b数组清0,然后遍历a,判断a的十位是什么,十位是什么就存在b的哪个位里
超过100的即/10超过10的就存在10里
累加
a[]也行,*a+i也行
③第9套3 判断是否是连续的字母序列
算出数组长度,or指针遍历
int fun( char *t )
{
int i,flag=1,changdu=0;
changdu = strlen(&t);
for(i=0;i<changdu;i++)//uvwxyz
{
if((t[i+1] - t[i])!=1)
flag=0;
}
return flag;
}
10.第13套2
原来是字符串啊喂,所以数字的ascll要-‘0’才是真正的
上一次的整体*8+7(八进制*8,+7加上他原本的基,来累加