第二階段補題報告


知識點

鏈接:C 排序算法 - 趙世榮 - 博客園 (cnblogs.com)

  順時針矩陣 - 趙世榮 - 博客園 (cnblogs.com)

編程題

7-2 字符串循環左移(部分正確)

錯因:1、錯誤地看出右移;

      2、未考慮到大於字符數的情況

錯題:

#include<stdio.h>
#include<string.h>

int main(){
    
    char str1[100+1],str2[100+1];
    int N;
    gets(str1);
    scanf("%d",&N);
    int len;
    len=strlen(str1);
    
    int i,k=0;
    for(i=0;i<=len;i++){
        if(i<=len-N){
        str2[i]=str1[i+N];}
        else{str2[i]=str1[k];
            k++;}
    }

    str2[i]='\0';
    puts(str2);
    
    return 0;
}

正確:

#include<stdio.h>
#include<string.h>
int main() {
    //輸入
    char str1[100 + 1], str2[100 + 1];
    int N;
    gets(str1);
    scanf("%d", &N);

    //計算
    int len, i;
    len = strlen(str1);
   N%=len;
    for (i = 0; i < len; i++) {
        str2[(i - N+len) % len] = str1[i];
        
    }
    str2[len] = '\0';
    //輸出
    puts(str2);
    return 0;
}

7-3 順時針矩陣 (30 分)

錯題:

#include<stdio.h>
#include<stdlib.h>
#define X 100
int main(){
   int N,m=1;
   int i,j,k,z,c;
   int a[X][X]={0};
   scanf("%d",&N);
   for(c=0;c<=N/2+1;c++){
        for(i=c;i<=N-c-1;i++){
            a[c][i]=m++;
        }
        for(j=c+1;j<N-c;j++){
           a[j][N-c-1]=m++;
        }
        for(k=N-c-2;k>=c;k--){
            a[N-c-1][k]=m++;
        }
        for(z=N-c-2;z>=c+1;z--){
            a[z][c]=m++;
        }
   }
   for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        printf("%3d",a[i][j]);
    }
    printf("\n");
   }
 
}

正確:

#include<stdio.h>
#include<stdlib.h>
#define X 100
int main(){
   int N,m=1;
   int i,j,k,z,c;
   int a[X][X]={0};
   scanf("%d",&N);
   for(c=0;c<=N/2+1;c++){
       
       //0
        for(j=c;j<N-c;j++){
           a[j][N-c-1]=m++;
        }
       
        for(k=N-c-2;k>=c;k--){
            a[N-c-1][k]=m++;
        }
       
        for(z=N-c-2;z>=c+1;z--){
            a[z][c]=m++;
        }
       
       for(i=c;i<N-c-1;i++){
            a[c][i]=m++;
        }
   }
   for(i=0;i<N;i++){
    for(j=0;j<N;j++){
        printf("%4d",a[i][j]);
    }
    printf("\n");
   }
 
}

7-1 最受歡迎的菜品(部分正確)

錯因:只輸出了最后的最受歡迎的菜品

#include<stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    int a[n+1]={0,0};
    int m;
    while(scanf("%d",&m)!=EOF){
        if(m>0&&m<=n)
        a[m]++;
    }
    
    int i;
    int max=1;
    for(i=1;i<=n+1;i++){
       if(a[max]<=a[i]){
           max=i;
       }
    }
    int j;
    int flag=0;
    for(j=1;j<=n+1;j++){
        if(a[j]==a[max]){
            flag=1;
            break;
        }
    }
    
    if(flag==0){
        printf("%d %d",max,a[max]);
    }else{
        printf("%d %d\n",j,a[j]);
        printf("%d %d\n",max,a[max]);
    }
    return 0;
}

正確:

#include<stdio.h>
int main() {
    //輸入
    int N;
    scanf("%d", &N);

    int n, num[1000 + 1] = { 0 };
    while (scanf("%d", &n) != EOF) {
        num[n]++;
    }
    //計算
    int i,max=1;
    for (i = 1; i <= N; i++) {
        if (num[i] >= num[max]) {
            max = i;
        }
    }
    //輸出
    int j;
    for (j = 1; j <= N; j++) {
        if (num[j] == num[max]) {
            printf("%d %d\n", j, num[j]);
        }
    }

    return 0;
}

填空題


請完善程序,實現以下程序功能:以下程序模擬字符串處理函數strcat()的功能,對兩個字符串進行連接。首先從鍵盤上輸入兩個字符串並保存到數組s1(最多80個字符)和s2(最多80個字符)中,然后通過對字符串s2中字符逐個進行傳遞的方式,將字符串s2中的字符全部順序復制到數組s1中原有字符的后面,最后輸出s1的內容。

(部分正確)

錯誤:

#include <stdio.h>
int main(void)
{char s1[161],s2[81];
 int i,j;
 gets(s1);  //輸入字符串s1
 gets(s2);  //輸入字符串s2
 i=0;  //准備連接
 while(
s1!='\0'
)
    i++;
 for(j=
0
;
s2[j]!='\0'
;j++)  //將字符串s2的內容連接到s1中
    {s1[i]=s2[j];
    
i++
;
    }
 
s1[i+1]='\0'
;
 puts(s1);  //輸出連接后的字符串s1
 return 0;
}

正確:

#include <stdio.h>
int main(void)
{char s1[161],s2[81];
 int i,j;
 gets(s1);  //輸入字符串s1
 gets(s2);  //輸入字符串s2
 i=0;  //准備連接
 while(
s1[i]!='\0'
)
    i++;
 for(j=
0
;
s2[j]!='\0'
;j++)  //將字符串s2的內容連接到s1中
    {s1[i]=s2[j];
    
i++
;
    }
 
s1[i]='\0'
;
 puts(s1);  //輸出連接后的字符串s1
 return 0;
}
5-5

本題目要求運用二分查找法在數組R(已升序排序)中查找k值,輸出其位置pos(即數組下標,從0開始),如果找不到,則輸出-1。

(部分正確)

錯誤:

#include<stdio.h>
#define N  10
int BSearch(int [],int,int);

int main(){
   int R[N],n;
   int pos,k;
   while(~scanf("%d",&n))
   { 
      for(int i=0;i<n;i++)
      scanf("%d",&R[i]);  //按從小到大的順序輸入n個整數
      scanf("%d",&k);     //輸入待查找的整數k
      pos=
(R,n,k)
;
     printf("%d\n",pos);
   }
   return 0;
}
int BSearch(int R[],int n,int x)    // 二分查找函數,返回查找到的位置(數組下標,從0開始),未找到時,返回-1。
{
   int pos;
   int low=0,high=n-1,mid;
   for ( 
pos=-1;low<=high;
)     
   {    
        mid=  
(low+high)/2
 ;
        if  ( 
R[mid]==x
  )
        {
           pos = mid ;
           break;
        }
        if ( 
x<R[mid]
 )     
           high = 
mid-1
 ;
       else
          low = 
mid+1
 ;
     }
    return pos;    
}

正確:

#include<stdio.h>
#define N  10
int BSearch(int [],int,int);

int main(){
   int R[N],n;
   int pos,k;
   while(~scanf("%d",&n))
   { 
      for(int i=0;i<n;i++)
      scanf("%d",&R[i]);  //按從小到大的順序輸入n個整數
      scanf("%d",&k);     //輸入待查找的整數k
      pos=
BSearch(R,n,k)+1
;
     printf("%d\n",pos);
   }
   return 0;
}
int BSearch(int R[],int n,int x)    // 二分查找函數,返回查找到的位置(數組下標,從0開始),未找到時,返回-1。
{
   int pos;
   int low=0,high=n-1,mid;
   for ( 
pos=-1;low<=high;
)     
   {    
        mid=  
(low+high)/2
 ;
        if  ( 
x==R[mid]
  )
        {
           pos = mid ;
           break;
        }
        if ( 
x<R[mid]
 )     
           high = 
mid-1
 ;
       else
          low = 
mid+1
 ;
     }
    return pos;    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM