第一次作业
PTA第一次作业作业
第一题:
计算两个数的和与差:
1.设计思路
(1)算法
第一步:阅读一遍主函数和函数的声明。
第二步:分析,在主函数中先定义四个浮点型的标识符a,b,sum,diff,对a,b分别赋值,函数调用,a的值传递给op1,b的值传递给op2,sum的地址传递给指针变量psum,diff的地址传递给指针变量pdiff;最后输出两个数的和与差。
第三步:两个数的和sum等于a+b,两个数的差diff等于a-b;所以在函数调用时,在调用函数sum_diff中两个数的和*psum等于op1+op2,两个数的差*diff等于op1-op2;
(2)流程图:
2.实验代码:
void sum_diff( float op1, float op2, float *psum, float *pdiff ){ *psum=op1+op2; *pdiff=op1-op2; }
3.本题调试过程碰到问题及解决的办法:
错误信息1:函数定义的格式错误
错误原因:在函数定义时在括号后加一个";"
改正方法:删除";";
第二题:
拆分实数的整数与小数部分:
1.设计思路
(1)算法:
第一步:阅读一遍主函数和函数的声明。
第二步:分析,在主函数中,先定义两个浮点数x,fracpart,和整型数inpart;读入一个浮点数赋值给x;调用函数splitfloat;将主函数中的x的值传递给被调函数中的形参x,将intpart和fracpart的地址传递给被调函数中的形参指针变量inpart和fracpart;最后输出是熟的整数和小数部分。
第三步:在被调函数中, x的整数部分就是对x进行取整,所以强制将x转化为整型舍去小数部分;x的小数部分就是x减去整数部分。
(2)流程图:
2.实验代码:
void splitfloat( float x, int *intpart, float *fracpart ){ *intpart=(int)x; *fracpart=x-*intpart; }
3.本题调试过程碰到问题及解决的办法:
错误信息1:程序不能通过
错误原因:强制转化的格式错误,错误:int(x);
改正方法:int放在括号内,加上强制转化的数,正确格式:(int)x;
第二次PTA作业
6-1 在数组中查找指定元素
本题要求实现一个在数组中查找指定元素的简单函数。
1.设计思路
(1)算法:
第一步:定义一个数组名为a的数组,循环变量i,需要查找的数x,和数组元素的个数n。
第二步:读入n和需要查询的数x,并对数组各元素进行赋值。
第三步:调用函数,在函数中进行查找。
第四步:输出所查找数的在数组中的位置。
(2)流程图:
2.实验代码:
int search( int list[], int n, int x ){ int j,q=-1; for(j=0;j<n;j++){ if(x==list[j]){ q=j; break; } } return(q); }
3.本题调试过程碰到问题及解决办法:
错误信息;当查找的数在数组中多次出现是结果出去
改正方法:当第一次查找到的时候跳出这个循环,在语句后面加一个break;
6-2 找最大值及其下标
在一维整型数组中找出其中最大的数及其下标。
1.设计思路
(1)算法:
第一步:定义一个数组名为a的数组、循环变量i、最大值max、和数组中最大数的下标p。
第二步:对数组进行赋值。
第三步:调用函数。在函数中找到最大值及其对应的下标。
第四步:输出数组元素的最大值及其下标。
(2)流程图:
2.实验代码:
int fun(int *a,int *b,int n){ int q=a[0]; int j; for(j=0;j<n;j++){ if(q<a[j]){ q=a[j]; *b=j; } } return(q); }
3.本题调试过程碰到问题及解决办法:
无
C高级PTA作业(3)
6-1 最小数放前最大数放后
1.设计思路:
(1)算法:
第一步:先定义一个数组。
第二步:对数组的各个元素赋值。
第三步:定义最大值max和最小值min和两个变量q,w,max和min为数组首元素的值,q和w都为0,遍历数组查找出最大值和最小值以及对应的下标。
第四步:将最大值和和数组最后一个元素交换,最小值和首元素交换。
第五步:遍历数组输出数组的每一个元素。
流程图:
2.实验代码:
void input(int *arr,int n){ int i; for(i=0;i<n;i++){ scanf("%d",arr+i); } } void max_min(int *arr,int n){ int min=arr[0],max=arr[0]; int i,temp; int q=0,w=0; for(i=0;i<n;i++){ if(min>*(arr+i)){ min=*(arr+i); q=i; } } temp=*(arr+0);*(arr+0)=*(arr+q);*(arr+q)=temp; for(i=0;i<n;i++){ if(max<*(arr+i)){ max=*(arr+i); w=i; } } temp=*(arr+n-1);*(arr+n-1)=*(arr+w);*(arr+w)=temp; } void output(int *arr,int n){ int i; for(i=0;i<n;i++){ printf("%3d",*(arr+i)); } }
3.本题调试过程碰到问题及解决办法:
错误信息1:在DEV-C++中结果是一串奇怪的数字。
错误原因:输出的格式错误我的代码是printf("%.3d",*(arr+i));
改正方法:格式改成%3d。
6-2 指针选择法排序
1.设计思路:
(1)算法:
第一步:定义一个指针变量p循环变量i和一个数组。将数组首元素的地址赋值给指针变量p。
第二步:读数组的各个元素赋值。
第三步:使用选择排序法对数组进行从大到小的排序。
第四步:遍历数组输出数组的各个元素。
(2)流程图:
2.实验代码:
void sort(int *x,int n){ int i,j,s,temp; for(i=0;i<n-1;i++){ s=i; for(j=i+1;j<n;j++){ if(*(x+s)<*(x+j)){ s=j; } } if(s!=i){ temp=*(x+i);*(x+i)=*(x+s);*(x+s)=temp; } } }
3.本题调试过程碰到问题及解决办法:
错误信息1: 结果错误,没有按照从大到小的顺序排列。
错误原因:不明白选择排序法,在选择排序法中第二次for循环中的循环变量的起始值错误。
改正方法:将第二次for循环的起始值改成i+1。
第四次PTA作业:
6-1 判断回文字符串
1.设计思路:
()算法:
第一步:定义字符数组s[20],输入字符串赋值给s;
第二步:调用函数palindrome,
第三步:在函数palindrome中,定义循环变量i=0,变量count为字符数组的长度,q,q=count/2;判断字符数组第i个元素和第count-i-1个元素是否相等,如果不相等返回false,相等的话返回true。
第四步:如果返回值是true就输出Yes,否则的话就输出No。
(2).流程图
2.实验代码:
bool palindrome( char *s ){
int i,count=0,q;
count=strlen(s);
q=count/2;
for(i=0;i<q;i++){
if((*(s+i))!=(*(s+count-i-1))){
return(false);
}
}
if(i==q){
return(true);
}
}
3.本题调试过程碰到问题及解决办法
错误信息1.结果错误
错误原因:在函数中for循环中的判断条件错误,错误为i<=p;
改正方法:将i<=p改为i<p.
6-2 使用函数实现字符串部分复制
1.设计思路:
(1)算法:
第一步:定义两个字符数组t[20],s[20],m,并且输入一个数赋给m。
第二步:调用strmcpy函数将字符数组t从m个元素开始全部的元素复制到字符数组s。
第三步:在strmcpy函数中,定义一个循环变量i,初值为m,使用for循环判断条件为*(t+i-1)!='\0',如果满足的话就执行*(s+i-m)=*(t+i-1);i++。如果不满足的话就说明m>字符数组的实际长度,就不执行for循环,在最后执行*(s+i-m)='\0';
第四步:输出字符数组s。
(2)流程图:
2.实验代码:
void strmcpy( char *t, int m, char *s ){
int i;
for(i=m;*(t+i-1)!='\0';i++){
*(s+i-m)=*(t+i-1);
}
*(s+i-m)='\0';
}
3.本题调试过程碰到问题及解决办法:
错误信息1:部分正确,
错误原因:for循环中的循环条件错误,错误为*(t+i)!='\0'
改正方法:将*(t+i)!='\0'改为*(t+i-1)!='\0'
谁评论我的作业:
陈天胤,袁中,姜健,王文博,李新华,辛静瑶
我评论谁的作业:
李新华:http://www.cnblogs.com/Lixinhua18/p/8569649.html
王文博:http://www.cnblogs.com/wwb986187/p/8635502.html
梁圣然:http://www.cnblogs.com/messi6/p/8626565.html
林昊:http://www.cnblogs.com/lh991014/p/8638313.html
学习总结和进度:
1.进度表:
2.两周来所有PTA作业中每个题目所使用的知识点。
第一次PTA作业:
在函数调用时是单向值传递,取浮点型数字的整数部分方法是将数字强制转化为整型,
第二次PTA作业:
输出整数占m列的格式是%md,
第三次PTA作业:
选择排序法外层循环条件小于是数组元素个数-1,内层循环起始条件是外层循环变量的值+1,循环条件是小于数组元素的个数,找到最大值或最小值的下标与第一个元素交换,
第四次PTA作业:
strlen函数是计算字符数组的实际长度,回文序列判断条件相等字符对应的下标和是数组元素个数-1,
3.我的收获:
%u是输出无符号数所用的格式符,逗号表达式的求解过程:先求表达式1.再求表达式2,逗号表达式的值是表达式是2的值,逗号运算符优先级时最低的,%md是输出的整数占三列
数据结构包括逻辑结构和物理结构,数据元素的存储结构形式包括顺序存储和链式存储,
&:取地址运算符,*:指针运算符或间接访问运算符
int *p=a将数组首元素的地址赋给指针变量p,
*p++先算*p再算++,*(p+i)=a[i];输出字符串时用%s,
对字符数组只能对各个元素赋值,数组在定义时可以整体赋初值,但是不能在赋值语句中整体赋值。数组名代表的是地址,但是是一个常量,它的值是不能改变的,