第一次作业
PTA作业
计算两个数的和与差:
1.设计思路
在主函数中先定义四个浮点型的标识符a,b,sum,diff,对a,b分别赋值,通过单向值传递把a和b传给op1和op2,sum的地址传递给指针psum,diff的地址传递给指针pdiff;最后输出和与差。sum等于a+b,diff等于a-b;所以在函数调用时,psum等于op1+op2,diff等于op1-op2;
2.代码验证
‘‘‘void sum_diff( float op1, float op2, float *psum, float *pdiff ){
*psum=op1+op2;
*pdiff=op1-op2;
}’’’
拆分实数的整数与小数部分:
1.设计思路
在主函数中,定义两个浮点数x.fracpart,和整型数inpart;输入一个浮点数赋值给x;调用splitfloat函数;把x的值传递给被调函数中的形参x,将intpart和fracpart的地址传递给形参指针变量inpart和fracpart;最后输出是熟的整数和小数部分。 x的整数部分就是对x进行整取,强制将x转化为整型舍去小数部分;x的小数部分就是减去整数部分。
2.代码验证
‘‘‘void splitfloat( float x, int *intpart, float *fracpart ){
*intpart=(int)x;
*fracpart=x-*intpart;
}’’’
在数组中查找指定元素
1.设计思路
定义名为a的数组,循环变量i,找的数x,和数组元素的个数n。读入n和要查询数x,并对数组各元素进行赋值。在函数中进行查找。输出所查找数的在数组中的位置。
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.流程图
最大值数及其下标
1.设计思路
定义名为a的数组、循环变量i、最大值max、和数组中最大数的下标p。对数组进行赋值。在函数中找到最大值及其对应的下标。输出数组元素的最大值及其下标。
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.流程图
最小数放前最大数放后
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;
}
if(max<*(arr+i)){
max=*(arr+i);
w=i;
}
}
temp=*(arr+0);*(arr+0)=*(arr+q);*(arr+q)=temp;
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.设计思路:
定义指针变量p循环变量i和数组。将首元素的地址赋值给指针变量p。对数组的各个元素赋值。使用选择排序法对数组从大到小的排序。遍历数组输出数组的各个元素。
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.设计思路
定义字符数组,输入字符串给s;调用函数palindrome,在函数palindrome中,定义循环变量i=0,q,q=count/2;判断字符数组第i个元素和第count-i-1个元素是否相等,如果不相等返回false,相等的话返回true。如果返回值是true就输出Yes,否则输出No。
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循环将第m个字符开始的全部字符复制到字符串s中,在s字符串后加上\0
2.代码验证
void strmcpy( char *t, int m, char *s )
{
int b,i;
for(i=m,b=0; *(t+i-1)!='\0'; i++,b++)
{
*(s+b) = *(t+i-1);
}
*(s+b) = '\0';
}
3.流程图
三 学习总结和进度
1.学会的内容
(1)怎样定义指针变量和引用指针变量
(2)通过指针引用数组元素
(3)字符串的引用,使用字符串变量和字符数组的比较
没有学会的内容
(1)通过指针引用多维数组
(2)多重指针