实验六
/task.1_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", *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; }
//task.1_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", *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; }
int型:2004
char型:2002
因为++p,是加了存放单个数据占用的空间,int型一个数据占用4个字节,char型一个占用2个
//task.2_1// #include<stdio.h> int main() { int x[2][4] = {{1,9,8,4},{2,0,2,2}}; int i,j; int *p; int (*q)[4]; //使用数组名、下标访问二维数组元素 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"); } //使用 指针变量p间接访问二维数组元素 for(q=x;q<x+2;++q) { for(j=0;j<4;++j) printf("%d",*(*q+j)); printf("\n"); } return 0; }
//task.2_2// #include<stdio.h> int main() { char x[2][4] = {{'1','9','8','4'},{'2','0','2','2'}}; int i,j; char *p; char (*q)[4]; //使用数组名、下标访问二维数组元素 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"); } //使用 指针变量p间接访问二维数组元素 for(q=x;q<x+2;++q) { for(j=0;j<4;++j) printf("%c",*(*q+j)); printf("\n"); } return 0; }
2004 2016 2002 2008
指针p是以个数为单位进行++,指针q是以行数为单位++
//task.3_1// #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[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; }
1、数组大小是12,sizeof计算数组大小,strlen统计有效字符个数(处空格以外的字符个数)
2、不能
//task.3_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; }
1、s1中存放的是字符串"C,I love u."的地址,sizeof(s1)存放的是该地址的大小,strlen(s1)统计的是该地址的有效字符数
2、不能
3、交换的是s1 s2中存放的地址;没有。
//task.4// #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; } int check_id(char *str) { int Flag1,Flag2,i; int *p; if(strlen(str)==18) Flag1=1; else Flag1= 0; for(i=0;i< strlen(str);++i) { if(*(str +i)>='0'&&*(str +i )<='9'||*(str +i)=='X') Flag2=1; else Flag2= 0;} return Flag1*Flag2; }
//task.5// #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) { //s->p str->x int i,len; len=strlen(s); for(i=0;i<len/2;i++) { if(s[i] != s[len-1-i]) return 0; } return 1; }
//task.6// #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; } void encoder(char *s) { int i,len=0; while(s[len]) len++; for(i=0;i<len;i++) { if(s[i]=='z') s[i]='a'; if(s[i]=='Z') s[i]='A'; if((s[i]>'a' && s[i]<'z')||(s[i]>'A' && s[i]<'Z')) s[i]=s[i]+1; } } void decoder(char *s) { int i,len=0; while(s[len]) len++; for(i=0;i<len;i++) { if(s[i]=='a') s[i]='z'; if(s[i]=='A') s[i]='Z'; if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')) s[i]=s[i]-1; } }