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:通过指针变量遍历输出数组元素 (写法2) p=x; for(i=0;i<N;++i) printf("%d",*(p+i)); printf("\n"); // 方式2:通过指针变量遍历输出数组元素(写法1) for(p=x;p<x+N;++p) printf("%d",*p); printf("\n"); // 方式2:通过指针变量遍历输出数组元素(写法3) p=x; for(i=0;i<N;++i) printf("%d",p[i]); printf("\n"); return 0; }
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",*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; }
1,task1_1中变为2004
2,task1_2中变为2001
指针变量类型不同,字符占1个字节,整形占4个字节
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; }
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 (*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"); } // 使用指针变量q间接访问二维数组元素 for(q=x;q<x+2;++q) { for(j=0;j<4;++j) printf("%c",*(*q+j)); printf("\n"); } return 0; }
task2-1中++p是2004,++q是2016
task1-2中++p是2001,++q是2004
q是定义了一个数组指针,指针指向一个含四个元素的一维数组
task3_1
#include <stdio.h> #include <string.h> #define N 80 int main() { char s1[]="c, I love u."; char s2[]="c, I love u."; char tmp[N]; printf("sizeof(s1) vs. strlen(s1):\n"); printf("sizeof(s1) = %d\n",sizeof(s1)); printf("sizeof(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); return 0; }
不可以,类型不完整,不能使用
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) { int i; if(strlen(*str)<=18)//在18位以内 {if(i=0; i<=strlen(*str);i++) { if(str[i]!='X'&&str[i]<48&&str[i]>57)//出现除了数字之外和x之外的 return 0;//不合法 else return 1;//合法 }} else return 0;//不合法 }
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,j; j=strlen(s); j--; for(i=0;i<j&&s[i]==s[j];j--,i++) { if(i>j) return 0; else 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) { int i; for(i=0;*(s+i)!=0;i++) {if(*(s+i)=='z'||*(s+i)=='Z') *(s+i)-=35; else if((*(s+i)>='a'&&*(s+i)<='y')||(*(s+i)>='A'&&*(s+i)<='Y')) *(s+i)+=1; else *(s+i)=*(s+i); } } /*函数定义 功能:对s指向的字符串进行解码处理 解码规则: 对于a~z或A~Z之间的字母字符,用其前面的字符替换; 其中,a用z替换,A用Z替换 其它非字母字符,保持不变 */ void decoder(char *s) { int i; for(i=0;*(s+i)!=0;i++) {if(*(s+i)=='a'||*(s+i)=='A') *(s+i)+=35; else if((*(s+i)>='b'&&*(s+i)<='z')||(*(s+i)>='B'&&*(s+i)<='Z')) *(s+i)-=1; else *(s+i)=*(s+i); } }