第一次作业
第一题:计算两个数的和与差
1.①设计思路
第一步:阅读题目 理解主函数与函数声明
第二步: 分析 在主函数main中,先定义两个浮点数a和b,在定义求两个浮点数diff和sum代表差与和
第三步: 解答 使用调用函数sum_diff,psum接收&sum,pdiff接收&diff,分别赋值a和b,op1接收实数a,op2接收实数b,计算两数的和与差:psum=op1+op2;,pdiff=op1-op2
第四步:计算输出 计算op1+op2和op1-op2,输出结果
②流程图
2.实验代码
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
3.本题调试过程碰到问题及解决的办法:
错误原因:指针使用不明确
改正方法:多次使用代码,使指针使用更明确
第二题:拆分实数的整数与小数部分
1.①设计思路
第一步:阅读题目 理解主函数与函数声明
第二步: 分析 在主函数main中,定义一个浮点数x,将x的整数部分和小数部分分离
第三步: 解答 使用调用函数splitfloat,利用实数x接收主函数中的x,利用intpart接收main中的&intpart,利用fracpart接收主函数中的&fracpartsum_diff
第四步:计算输出 分解x,整数部分:intpart=(int)x,小数部分:fracpart=x-*intpart,计算,输出结果
②流程图
2.实验代码
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
3.本题调试过程碰到问题及解决的办法:
错误原因:调用使用不明确
改正方法:多次使用代码,使调用函数使用更明确
第三题:在数组中查找指定函数
1.①设计思路
第一步:阅读题目 理解主函数与函数声明
第二步: 分析 定义一个数组list[],输入俩个整数x和n,输入整数i作为数组的相应函数的下角标
第三步: 解答 使用指针*p查找整数x,未找到则输出-1
第四步:计算输出 输出下角标或者-1
②流程图
2.实验代码
int search( int list[], int n, int x )
{
int *p=list , i ,idx;
for(i=0;i<n;i++,p++){
if(*p==x){
idx=i;break;
}
if(i==(n-1)&&*p!=x){
idx=-1;break;
}
}
return idx;
}
3.本题调试过程碰到问题及解决的办法:
错误原因:for函数使用不明确
改正方法:多次使用代码,使for函数使用更明确
第四题:找最大值及其下标
1.①设计思路
第一步:阅读题目 理解主函数与函数声明
第二步: 分析 输入整数i和n,使用for函数与指针a和b
第三步: 解答 使用if语句
第四步:计算输出 回归max
②流程图
2.实验代码
int fun(int *a,int *b,int n)
{
int max =*a,i;
for(i=1;i<n;i++)
if(*(a+i)>max)
{
max = *(a+i);
*b = i;
}
return max;
}
3.本题调试过程碰到问题及解决的办法:
错误原因:调用函数与for函数和if函数同时使用不明确
改正方法:多次使用代码,使调用函数和for函数和if函数使用更明确
第五题:最小数放前最大数放后
1.①设计思路
第一步:阅读题目 理解主函数与函数声明
第二步: 分析 先定义三个调用函数input()和output()和max_min(),输入i,temp,q,w
第三步: 解答 用for函数和if函数
第四步:计算输出 计算temp=(arr+0),(arr+0)=(arr+q),(arr+q)=temp,temp=(arr+n-1),(arr+n-1)=(arr+w),(arr+w)=temp,输出
②流程图
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.①设计思路
第一步:阅读题目 理解主函数与函数声明
第二步: 分析 调用函数sort(),输入i,j,s,temp
第三步: 解答 使用双重for函数,if函数,指针
第四步:计算输出 计算s=j,temp=(x+i);(x+i)=(x+s);(x+s)=temp;
②流程图
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.本题调试过程碰到问题及解决的办法:
错误原因:双重for函数使用不协调
改正方法:多次联系是for函数更加熟练
第七题:判断回文字符串
1.①设计思路
第一步:阅读题目 理解主函数与函数声明
第二步: 分析 调用函数bool palindrome()
第三步: 解答 for函数与if函数连用,套着指针
第四步:计算输出 回归
②流程图
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.①设计思路
第一步:阅读题目 理解主函数与函数声明
第二步: 分析 调用strmcpy(),使用字符t,s
第三步: 解答 用for函数计算t到s之间的字符串
第四步:计算输出 输出字符串
②流程图
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.本题调试过程碰到问题及解决的办法:
错误原因:由于程序错误,字符串缺少元素
改正方法:多次改正for函数的输入,避免字符串的缺失
学习总结和进度:
许多代码不明确,甚至不会使用,本次作业让我最大程度的去敲代码,熟练的使用各种工具,理解各个代码之间使用联系,多次使用,使自己更加熟练程序中函数的使用。
http://www.cnblogs.com/dangrui/
http://www.cnblogs.com/zhang03/
http://www.cnblogs.com/dxfish/
http://www.cnblogs.com/chenxidream/