第一題:
計算兩數的和與差
設計思路:
1:看題目:主函數與函數聲明,知道它要你干什么
2:理解與分析:在main中,定義兩個實數a,b;要你求兩數的和與差
3:解答:通過調用函數sum_diff,指針psum接收&sum,指針pdiff接收&diff,實數op1接收實數a,實數op2接收實數b,計算兩數的和與差:*psum=op1+op2;,*pdiff=op1-op2
4:輸出
流程圖:

實驗代碼:
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
錯誤信息:
無
第二題:
拆分實數的整數與小數部分
設計思路:
1:看題目:主函數與函數聲明,知道它要你干什么
2:理解與分析:在main中,給你一個實數x,要求你將他的整數與小數分離
3:解答:在splitfloat中,利用實數x接收main中的x,利用指針intpart接收main中的&intpart,利用指針fracpart接收main中的&fracpart,再先分解x整數部分:*intpart=(int)x,小數等於x減去整數:*fracpart=x-*intpart
流程圖:

實驗代碼:
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
錯誤信息:
1:求整數時,寫成了*intpart=x/1
改正方式:
1:將它改為:*intpart=(int)t;
小結:
整數除以整數還是整數,浮點數(或者整數)除以整數(或者浮點數)是浮點數,浮點數除以浮點數還是浮點數
疑問:為什么這個也可以通過?
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=x/1;
*fracpart=x-*intpart;
}
第三題:
在數組中查找指定元素
設計思路:
1:看題目:主函數與函數聲明,知道它要你干什么
2:理解與分析:題目給你一個數組a[MAXN],里面存有一些數字,然后再讓你輸入一個數字x,看數組中是否存在這個數,在調用函數list{},判斷這個數是否在數組中,若在,返回這個數的下標,反之,返回-1
流程圖:

實驗代碼:
int search( int list[], int n, int x )
{
int s=-1;
int i;
for(i=0;i<n;i++)
{
if(list[i]==x)
{
s=i;break;
}
}
return s;
}
錯誤信息:
無
第四題:
找最大值及其下標
設計思路:
1:看題目:主函數與函數聲明,知道它要你干什么
2:理解與分析:題目給你一個數組a[N],讓你調用函數fun找出最大值max,,並輸出它的下標p
3:解答:在函數fun中,指針a接受數組a[ ],n接受數組大小N,用指針p接受最大的下標,再用一個for循環找出最大值及其下標
流程圖:

實驗代碼:
int fun(int *a,int *b,int n)
{
int i;
int s=a[0];
for(i=1;i<n;i++)
{
if(s<a[i])
{
s=a[i];
*b=i;
}
}
return s;
}
錯誤信息:
無
改正方式:
無
我的總結
在這兩周中,我們學習了許多知識點,其中有通過調用函數:在數組中查找指定元素,這題目判斷一個數是否在數組中;找最大值及其下標,這題目要求我們在數組中找出最大值及其下標;計算兩數的和與差,這題目要求我們計算兩個數的和與差;拆分實數的整數與小數部分,這題目要求我們將一個實數分解成整數部分,及小數部分;還有就是,這兩周中,我的打字速度也進步了許多,以前不會用電腦畫流程圖,現在也會了。每次學到許多新的東西,我都會感到開心,並也感謝教我學習的人。
第五題:
最小數放前最大數放后
設計思路:
1:看題目:主函數與函數聲明,知道它要你干什么
2:理解與分析:在main中,給你一個數組,其中有十個整數 ,希望你通過調用函數,把最小數放前最大數放后
3:解答:
第一步:在input中,它用指針arr接收數組a[],用整數n接收數組的大小10,再用一個for循環,給數組a賦值
第二步:在max_min中,它用指針arr接收數組a[],用整數n接收數組的大小10,先定義並賦值兩個整形變量,分別為:max=a[0],min=a[0];利用兩個for循環,找到最大值最小值,再定義一個整型變量t,實現把最小數放前最大數放后
第三步:在output中,它用指針arr接收數組a[],用整數n接收數組的大小10,定義並賦值一個整型變量i =0,再用一個for循環,將數組a[]中的元素輸出
流程圖:

實驗代碼:
void max_min(int *arr,int n)
{
int t,s,x=0,y=0,i,min,max;
min=arr[0];max=arr[0];
for(i=0;i<n;i++)
{
if(min>arr[i])
{
min=arr[i];
x=i;
}
}
t=arr[0];arr[0]=arr[x];arr[x]=t;
for(i=0;i<n;i++)
{
if(max<arr[i])
{
max=arr[i];
y=i;
}
}
s=arr[n-1];arr[n-1]=arr[y];arr[y]=s;
}
void input(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
}
void output(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
printf("%3d",arr[i]);
}
錯誤信息:
1.輸出時:printf(" %d",arr[i]);
2.找最大值與最小值時,只用一個for循環
改正方式:
1.printf("%3d",arr[i]);
2.找最大值與最小值時,只用兩個for循環,分別.找最大值與最小值
小結:
“ %d”與“%3d”不同,一個是前面空兩格在輸出,一個是元素輸出占3個字符寬
第六題:
指針選擇法排序
設計思路:
1:看題目:主函數與函數聲明,知道它要你干什么
2:理解與分析:在main中,給你一個數組,其中有十個整數 ,希望你通過調用函數,將10個數進行由大到小的排序輸出
3:解答:
第一步:定義t,i=0,j=i+1,max;其中t記錄最大值下標,i用於選擇法排序中外層for循環,而(i+1)表示進行到了第幾輪交換,j用於選擇法排序中內層for循環,表示x[i]后面元素的下標,max用於儲存最大值
第二步:進入第一個for循環:將max,t初始化,max=x[i]; t=i;
第三步:進入第二個for循環:判斷max<x[j]?若成立:max=x[j];t=j;
第四步:離開第二個for循環后,判斷t!=i?若成立:max=x[t];x[t]=x[i];x[i]=max;找到了最大值,並把它放在了第一,之后就重復第二步到第四步,直到跳出第一個for循環
流程圖:

實驗代碼:
void sort(int *x,int n)
{
int t,i,j,max;
for(i=0;i<(n-1);i++)
{
max=x[i];
t=i;
for(j=i+1;j<n;j++)
{
if(max<x[j])
{
max=x[j];
t=j;
}
}
if(t!=i)
{
max=x[t];x[t]=x[i];x[i]=max;
}
}
}
錯誤信息:

第七題:
判斷回文字符串
設計思路:
1:看題目:主函數與函數聲明,知道它要你干什么,了解“回文”是指順讀和倒讀都一樣的字符串
2:理解與分析:在main中,給你一個字符串s,要你判斷它是不是回文
3:解答:
第一步:在main中,定義一個數組s[MAXN]
第二步:在palindrome中,指針s接收數組s,再定義i,n,k,j,其中,n=strlen(s),i=0,j=n-1
第三步:再利用一個for循環,條件1:i=0,j=n-1;條件二:i<j;條件三:i++,j--
第四步:在for循環中,判斷:s[i]!=s[j],若成立,break;反之,繼續
第五步:判斷i<j?成立:return false;反之:return true;
流程圖:

實驗代碼:
bool palindrome( char *s )
{
int i,n,k,j;
n=strlen(s);
i=0,j=n-1;
for(i=0,j=n-1;i<j;i++,j--)
{
if(s[i]!=s[j])
{
break;
}
}
if(i<j)
return false;
else
return true;
}
錯誤信息:
無
第八題:
使用函數實現字符串部分復制
設計思路:
1:看題目:主函數與函數聲明,知道它要你干什么,希望你寫一個函數,實現字符串部分復制
2:理解與分析:在main中,給你一個字符串t,要求你從第m個字符開始的全部字符復制到字符串s中
3:解答:
第一步:在strmcpy中,用指針t接收字符串t,用指針s接收字符串s,用m接收main中m(從第幾個數開始復制)
第二步:定義i,j,n;其中i,j用於循環嵌套,n統計字符串s長度
第三步:調用函數strcpy,將t全部復制到s中,再調用函數strlen,統計字符串s長度,並賦值給n
第四步:再用兩個for循環,實現數組s[]向左移動的單位為m-1,其一:for(i=m-1;i>0;i--);其二:for(j=i;j<n;j++);在里面為:s[j-1]=s[j];
第五步:令s[n-m+1]等於'\0',代表結束,完成了從第m個字符開始的全部字符復制到字符串s中
流程圖:

實驗代碼:
void strmcpy( char *t, int m, char *s ){
int i,j,n;
strcpy(s, t);
n = strlen(s);
for(i=m-1;i>0;i--){
for(j=i;j<n;j++){
s[j-1]=s[j];
}
}
s[n-m+1]='\0';
}
錯誤信息:
沒寫s[n-m+1]='\0'
改正方式:
加上s[n-m+1]='\0'
小結:
字符串后面都有一個'\0'
.托管截圖及網址

表格:

作業點評:
辛靜瑤:http://www.cnblogs.com/X-JY/
李伍壹:http://www.cnblogs.com/chenxidream/
姜健:http://www.cnblogs.com/jj990519/
陳天胤:http://www.cnblogs.com/cty-1/
李新華:http://www.cnblogs.com/Lixinhua18/
