作業要求二
1)C高級第一次PTA作業(1)
6-1 計算兩數的和與差
本題要求實現一個計算輸入的兩數的和與差的簡單函數。
代碼如下:
`void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum = op1 + op2;
*pdiff = op1 - op2;
}`
指針在題目中的作用:
op1代表a,op2代表b,*psum代表sum,*pdiff代表diff。
6-2 拆分實數的整數與小數部分
本題要求實現一個拆分實數的整數與小數部分的簡單函數。
代碼如下:
`void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart = x;
*fracpart=x - *intpart;
}`
指針在題目中的作用:
x為輸入數,*intpart取x整數部分,*fracpart取輸入數減整數的部分(也就是小數部分)。
2)C高級第一次PTA作業(2)
6-1 在數組中查找指定元素
本題要求實現一個在數組中查找指定元素的簡單函數。
代碼如下:
`int search(int list[], int n, int x ){
int i,index;
for(i=0;i<n;i++)
{
if(list[i]==x){
index = i;
break;
}else{
index = -1;
}
}
return index;
}`
(1)主要描述題目算法
第一步:聲明函數
第二步:定義兩個變量
第三步:規划循環判斷數組中有無指定函數
第四步:返回原函數
(2)流程圖
錯誤信息:
錯誤原因:一開始找到相等函數的時候忘記在index=i之后加入break導致循環繼續答案錯誤。
改正方法:在index=i;之后加入break。
6-2 找最大值及其下標
在一維整型數組中找出其中最大的數及其下標。
代碼如下:
`int fun(int *a,int *b,int n){
int i;
for(i=0;i<n;i++){
if(a[i]>*a){
*a = a[i];
*b = i;
}
}return *a;
}`
(1)主要描述題目算法
第一步:聲明函數
第二步:定義一個變量
第三步:規划循環判斷數組中前一個數是否比后一個大
第四步:是就交換然后記下下標
第五步:返回原函數
(2)流程圖
錯誤信息:
錯誤原因:最初的時候不知道輸出什么好,所以寫了return *a和return *b,結果答案錯誤。
改正方法:咨詢了室友之后,室友告訴我只需要輸出return *a就行,我問了室友原因室友也不知道,希望老師解答一下。
3)C高級第一次PTA作業(3)
6-1 最小數放前最大數放后
為一維數組輸入10個整數;將其中最小的數與第一個數對換,將最大的數與最后一個數對換;輸出數組元素。
代碼如下:
`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 t;
int i,x,y,z;
int min=*arr;
int max=0;
for(i=0;i<n;i++){
if(*(arr+i)<min){
min=*(arr+i);
x=i;
}
}
t=*(arr+x);
*(arr+x)=*arr;
*arr=t;
for(y=0;y<n;y++){
if(*(arr+y)>max){
max=*(arr+y);
z=y;
}
}
t=*(arr+z);
*(arr+z)=*(arr+n-1);
*(arr+n-1)=t;
}
void output(int *arr,int n){
int i;
for(i=0;i<n;i++){
printf("%3d",*(arr+i));
}
}`
(1)主要描述題目算法
第一步:聲明第一個函數
第二步:輸入數組中所有的數
第三步:返回原函數
第四步:聲明第二個函數
第五步:找出最小的數並記下下標
第六步:交換最小數
第七步:找出最大的數並記下下標
第八步:交換最大數
第九步:返回原函數
第十步:聲明第三個函數
第十一步:輸出數組中所有的數
第十二步:返回原函數
(2)流程圖
錯誤信息:
錯誤原因:一開始我寫成了 min=*(arr+i); *arr=min;
只是一開始的值變成了最小值或最大值,並沒有交換,結果答案錯誤。
改正方法:經過的DEV C++運行之后我發現了問題定義了新的變量來表示指針,然后進行了交換的三行代碼,答案正確。
6-2 指針選擇法排序
指針選擇法對10個數進行由大到小的排序。
代碼如下:
`void sort(int *x,int n){
int i,j,t;
for(j=1;j<10;j++)
for(i=0;i<10-j;i++)
{
if(*(x+i)<*(x+i+1))
{
t=*(x+i);
*(x+i)=*(x+i+1);
*(x+i+1)=t;
}
}
}`
(1)主要描述題目算法
第一步:聲明第一個函數
第二步:定義三個變量
第三步:確定一共循環幾次
第四步:第一個數與后面的數比較排序然后第二個數依此循環
第五步:返回原函數
(2)流程圖
4)C高級第一次PTA作業(4)
6-1 判斷回文字符串
本題要求編寫函數,判斷給定的一串字符是否為“回文”。
代碼如下:
`bool palindrome( char *s ){
int i,j;
int n = strlen(s);
for(i=0,j=n-1;i<=(n-1)/2;i++,j--)
{
if(*(s+i)!=*(s+j))
{
return false;
}
}
if(i>=j) return true;
}`
(1)主要描述題目算法
第一步:聲明第一個函數
第二步:定義兩個變量
第三步:數清楚一共幾個字符
第四步:判斷第一個數與最后一個數是否一樣
第五步:循環
第六步:返回原函數
(2)流程圖
錯誤信息(1):
錯誤原因:忘記了strlen函數導致忘記取字符串字符的數量。
改正方法:寫入strlen函數。
錯誤信息(2):
錯誤原因:開始我寫的是
if(s[i]!=s[j]) break; if(i>j) return ture; return no;
造成的錯誤就是忽略了只有兩個字符的情況。
改正方法:
if(*(s+i)!=*(s+j)) { return false; } if(i>=j) return true;
對於這種情況進行了分別的討論。
6-2 使用函數實現字符串部分復制
本題要求編寫函數,將輸入字符串t中從第m個字符開始的全部字符復制到字符串s中。
代碼如下:
`void strmcpy( char *t, int m, char *s ){
int n;
n=strlen(t);
int i;
int a=0;
if(m<=n){
for(i=m;t[i-m]!='\0';i++)
{
*(s+a)=t[i-1];
a++;
}*(s + n) = '\0';
}else{
*s='\0';
}
}`
(1)主要描述題目算法
第一步:聲明第一個函數
第二步:數清楚一共幾個字符
第三步:判斷是否有意義
第四步:如果有意義讓字符串t從第m個字符開始的全部字符復制到字符串s
第五步:最后加入'\0'
第七步:如果沒意義直接讓字符串s變為'\0'
第八步:返回原函數
流程圖
錯誤信息:
錯誤原因:一開始寫的是 t[i]!='\0'
忘記了i的取值一開始是m結果編譯錯誤。
改正方法:改為 t[i-m]!='\0'
。
附加題
小寫字母y變換為a,小寫字母z變換為b,其他字母變換成為該字母ASCII碼順序后2為字母
代碼如下:
`#include<stdio.h>
void mima( char *s );
int main ()
{
char a[20];
gets(a);
mima(a);
printf("%s",a);
return 0;
}
void mima( char *s ){
int i;
for(i=0;*(s+i)!='\0';i++)
{
if(*(s+i)=='y'){
*(s+i)='a';
}else if(*(s+i)=='z'){
*(s+i)='b';
}else{
*(s+i)=*(s+i)+2;
}
}
} `
(1)主要描述題目算法
第一步:輸入字符串
第二步:聲明函數
第三步:循環判斷是否為y,z
第四步:如果為y則變為a,如果為z則變為b,如果都不是則加2
第五步:返回原函數
第七步:輸出字符串
結果圖
流程圖
作業要求三
1、總結兩周里所學的知識點有哪些學會了?哪些還沒有學會?
在所在的兩個周,我們主要先復習了上半學期的主要知識,然后對於指針以及針對於一般變量、數組與字符變量代替,和指針在函數中的應用。更是學習了指針的理論知識和它所注意的事情。
主要沒有搞清楚還有三點,一是對於字符變量還是略有生疏經常忘記 t[i]!='\0'
需要 i=0
要讓初始量為零;二是對於"strcpy"、"strcat"、"strcmp"的應用還是不太明白:三是希望老師解答一下C高級第一次PTA作業(2)6-2 找最大值及其下標中我的錯誤。
2、將PTA作業的源代碼使用git提交到托管平台上,要求給出上傳成功截圖和你的git地址。
git地址:https://git.coding.net/wuyaole/dayixiagxueqi01.git
截圖
3、點評作業
4、用表格和折線圖呈現本周(3/12 8:00~3/26 8:00)的代碼行數和所用時間、博客字數和所用時間