实验6 吱吱吱针

task1.1

#include <stdio.h> 
#define N 4 
int main() 
{ 
   int x[N] = {1, 9, 8, 4};
   int i; 
   int *p; 
   
   // 方式1:通过数组名和下标遍历输出数组元素 
   
   for(i=0; i<N; ++i) 
   printf("%d", x[i]); 
   printf("\n"); 
   
   // 方式2:通过指针变量遍历输出数组元素 (写法1) 
   
   for(p=x; p<x+N; ++p) 
   printf("%d\n", *p);  
   printf("\n"); 
   
   // 方式2:通过指针变量遍历输出数组元素(写法2) 
   
   p = x; 
   for(i=0; i<N; ++i) 
   printf("%d", *(p+i)); 
   printf("\n"); 
   
   // 方式2:通过指针变量遍历输出数组元素(写法3) 
   
   p = x; 
   for(i=0; i<N; ++i) 
   printf("%d", p[i]); 
   printf("\n"); 
   
   return 0; 
} 

回答问题:

2004

task1.2

#include <stdio.h> 
#define N 4 
int main() 
{
   char x[N] = {'1', '9', '8', '4'};
   int i; 
   char *p; 
   
   // 方式1:通过数组名和下标遍历输出数组元素 
   
   for(i=0; i<N; ++i) 
   printf("%c", x[i]); 
   printf("\n"); 
   
   // 方式2:通过指针变量遍历输出数组元素 (写法1) 
   
   for(p=x; p<x+N; ++p) 
   printf("%c\n", *p); 
   printf("\n"); 
   
   // 方式2:通过指针变量遍历输出数组元素(写法2) 
   
   p = x;
   for(i=0; i<N; ++i) 
   printf("%c", *(p+i)); 
   printf("\n"); 
   
   // 方式2:通过指针变量遍历输出数组元素(写法3) 
   
   p = x; 
   for(i=0; i<N; ++i) 
   printf("%c", p[i]); 
   printf("\n"); 
   
   return 0; 
}

回答问题:

2001

task2.1

#include <stdio.h> 
int main() 
{ 
   int x[2][4] = { {1,9,8,4}, {2,0,2,2}} ; 
   int i, j; 
   
   int *p; // 指针变量,存放int类型数据的地址 
   
   int (*q)[4]; // 指针变量,指向包含4个int型元素的一维数组 

   // 使用数组名、下标访问二维数组元素 

   for(i=0; i<2; ++i) 
   { 
      for(j=0; j<4; ++j) 
      printf("%d", x[i][j]); 
      printf("\n"); 
      
    }
      
    // 使用指针变量p间接访问二维数组元素 
    
    for(p = &x[0][0], i = 0; p < &x[0][0] + 8; ++p, ++i) 
    { 
       printf("%d", *p); 
       if( (i+1)%4 == 0) 
       printf("\n"); 
    
    }
    
    // 使用指针变量q间接访问二维数组元素 
    
    for(q=x; q<x+2; ++q) 
    { 
       for(j=0; j<4; ++j) 
       printf("%d", *(*q+j)); 
       printf("\n"); 
       
    }
       
       return 0; 
 }

回答问题:

2004

2016

task2.2

#include <stdio.h> 
int main() 
{ 
   char x[2][4] = { {'1', '9', '8', '4'}, {'2', '0', '2', '2'} }; 
   int i, j; 
   
   char *p; // 指针变量,存放char类型数据的地址 
   
   char (*q)[4]; // 指针变量,指向包含4个char型元素的一维数组 
   
   // 使用数组名、下标访问二维数组元素 
   
   for(i=0; i<2; ++i) 
   { 
      for(j=0; j<4; ++j) 
      printf("%c", x[i][j]); 
      printf("\n"); 
      
    }
    
    // 使用指针变量p间接访问二维数组元素 
    
    for(p = &x[0][0], i = 0; p < &x[0][0] + 8; ++p, ++i)
    { 
       printf("%c", *p); 
       
       if( (i+1)%4 == 0) 
       printf("\n"); 
       
    }
    
    // 使用指针变量q间接访问二维数组元素 
    
    for(q=x; q<x+2; ++q) 
    { 
       for(j=0; j<4; ++j) 
       printf("%c", *(*q+j)); 
       printf("\n"); 
       
    }
    
    return 0; 
}

回答问题:

2001

2004

task3.1

int main() 
{ 
   char s1[] = "C, I love u."; 
   char s2[] = "C, I hate u."; 
   char tmp[N]; 
   printf("sizeof(s1) vs. strlen(s1): \n"); 
   printf("sizeof(s1) = %d\n", sizeof(s1)); 
   printf("strlen(s1) = %d\n", strlen(s1));
   printf("\nbefore swap: \n"); 
   printf("s1: %s\n", s1); 
   printf("s2: %s\n", s2); 
   printf("\nswapping...\n"); 
   strcpy(tmp, s1); 
   strcpy(s1, s2); 
   strcpy(s2, tmp); 
   printf("\nafter swap: \n"); 
   printf("s1: %s\n", s1); 
   printf("s2: %s\n", s2); 
   
   return 0; 
   
}

回答问题:

strlen计算字符串中的字符个数,而sizeof计算的事对象所占的内存空间

13

不可以替换

交换了

task3.2

#include<stdio.h>
#include<string.h>
#define N 80 
int main() 
{ 
   char *s1 = "C, I love u."; 
   char *s2 = "C, I hate u."; 
   char *tmp; 
   
   printf("sizeof(s1) vs. strlen(s1): \n"); 
   
   printf("sizeof(s1) = %d\n", sizeof(s1)); 
   printf("strlen(s1) = %d\n", strlen(s1)); 
   
   printf("\nbefore swap: \n"); 
   
   printf("s1: %s\n", s1); 
   printf("s2: %s\n", s2); 
   
   printf("\nswapping...\n"); 
   
   tmp = s1; 
   s1 = s2; 
   s2 = tmp;
   
   printf("\nafter swap: \n"); 
   
   printf("s1: %s\n", s1); 
   printf("s2: %s\n", s2); 
   
   return 0; }

回答问题:

存放的是"C, I love u."的地址,sizeof计算的是s1所占的内存空间,strlen计算的是字符串的字符个数

可以替换

交换的是地址,没有交换

task4

#include <stdio.h> 
#include <string.h> 
#define N 5 
int check_id(char *str);     // 函数声明 
int main() 
{ 
    char *pid[N] = {"31010120000721656X", "330106199609203301", "53010220051126571", "510104199211197977", "53010220051126133Y"}; 
    int i; 
    for(i=0; i<N; ++i) 
    if( check_id(pid[i]) )   // 函数调用 
       printf("%s\tTrue\n", pid[i]); 
    else
       printf("%s\tFalse\n", pid[i]); 
      
    return 0;
    
}

// 函数定义 
// 功能: 检查指针str指向的身份证号码串形式上是否合法。 
// 形式合法,返回1,否则,返回0 

int check_id(char *str) 
{  
    char *p,*temp;
    for(p=str;p<str+5;p++) 
    {
        if(strlen(p) != 18)
            {
               return 0;
               break;
            }           
        else
            {
                temp = p;
                for(;temp<p+18;temp++)
                {
                    if(*temp>='0'&&*temp<='9'||*temp == 'X');
                    else
                        {
                            return 0;
                            break;
                        }
                }
                if(temp = p+18)
                return 1;            
            }
    }
}     

task5

#include <stdio.h> 
#include <string.h> 
#define N 80 
int is_palindrome(char *s); // 函数声明 
int main() 
{ 
   char str[N]; 
   int flag; 
   printf("Enter a string:\n"); 
   gets(str); 
   
   flag = is_palindrome(str); // 函数调用 
   
   if (flag) 
       printf("YES\n"); 
   else
       printf("NO\n"); 
       
    return 0; }
    
    // 函数定义 
    // 功能:判断s指向的字符串是否是回文串 
    // 如果是,返回1;否则,返回0 

int is_palindrome(char *s) 
{ 
   int i=0,len,j;
   len = strlen(s);
   printf("字符串长度是: %d\n", len);
   j = len/2;
   for(;i<j;)
   {
           if(*(s+i) == *(s+len-i-1))
               i++;
           else
           {
              return 0;
              break;
           }
        if(i=j)
           return 1;
   }       
}

task6

#include <stdio.h> 
#define N 80 
void encoder(char *s); // 函数声明 
void decoder(char *s); // 函数声明 
int main() 
{ 
   
   char words[N];
   
   printf("输入英文文本: "); 
   gets(words); 
   
   printf("编码后的英文文本: "); 
   encoder(words); // 函数调用 
   printf("%s\n", words); 
   
   printf("对编码后的英文文本解码: "); 
   decoder(words); // 函数调用 
   printf("%s\n", words); 
   
   return 0; 

}

/*函数定义 功能:对s指向的字符串进行编码处理 
编码规则: 对于a~z或A~Z之间的字母字符,用其后的字符替换; 其中,z用a替换,Z用A替换 其它非字母字符,保持不变 */

void encoder(char *s) 
{ 
   for(;*s!='\0';s++)
   {
        if(*s == 'z'||*s == 'Z')
           *s = *s - 25;
        else if(*s >= 'a'&&*s < 'z'||*s >= 'A'&&*s < 'Z')
           *s = *s + 1;
   }
}

/*函数定义 功能:对s指向的字符串进行解码处理 
解码规则: 对于a~z或A~Z之间的字母字符,用其前面的字符替换; 其中,a用z替换,A用Z替换 其它非字母字符,保持不变 */

void decoder(char *s) 
{ 
   for(;*s!='\0';s++)
   {
           if(*s == 'a'||*s == 'A')
           *s = *s + 25;
        else if(*s > 'a'&&*s <= 'z'||*s > 'A'&&*s <= 'Z')
           *s = *s - 1;
   }
} 

 

posted @ 2022-06-07 15:23  酒酿鸭不想思考  阅读(28)  评论(2编辑  收藏  举报