strcmp改写
int my_strcmp(const char *str1, const char *str2) {
while (*str1 != '\0' && *str2 != '\0') {
if (*str1 != *str2) {
return (*str1 - *str2);
}
str1++;
str2++;
}
return (*str1 - *str2);
}
int main() {
const char *s1 = "hello";
const char *s2 = "world";
int result = my_strcmp(s1, s2);
if (result == 0) {
printf("字符串相等\n");
} else if (result < 0) {
printf("字符串 s1 小于字符串 s2\n");
} else {
printf("字符串 s1 大于字符串 s2\n");
}
return 0;
}
strcat改写
char* my_strcat(char *dest, const char *src) {
char *original_dest = dest;
while (*dest != '\0') {
dest++;
}
while (*src != '\0') {
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return original_dest;
}
int main() {
char str1[20] = "Hello, ";
const char *str2 = "world!";
my_strcat(str1, str2);
printf("拼接后的字符串: %s\n", str1);
return 0;
}
用指针的方式实现,输出一个杨辉三角
#include <stdio.h>
int yhsj(int n){
int* p1=&n;
int tr[*p1][*p1];
for (int i = 0; i < *p1; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
tr[i][j] = 1;
} else {
tr[i][j] = tr[i - 1][j - 1] + tr[i - 1][j];
}
}
}
for (int i = 0; i < *p1; i++) {
for (int j = 0; j <= i; j++) {
printf("%d ", tr[i][j]);
}
printf("\n");
}
}
int main(){
int n = 10;
yhsj(n);
return 0;
}
16.以下与库函数strcmp(char *s,char *t)功能相等的程序段是 D 。
A)strcmp1(char *s,char *t)
{ for ( ; *s++=*t++; )
if (*s= =’\0’)
return 0 ;
return (*s-*t) ;
}
B)strcmp2(char *s,char *t)
{ for ( ; *s++=*t++; )
if (!*s) return 0 ;
return (*s-*t) ;
}
C)strcmp3(char *s,char *t)
{ for ( ; *t= =*s; )
{ if (!*t) return 0 ; t++ ; s++ ; }
return (*s-*t) ;
}
D)strcmp4(char *s,char *t)
{ for ( ; *s==*t; s++, t++ )
if (!*s) return 0 ;
return (*t-*s) ;
}
17.以下说明不正确的是 B 。
A)char a[10]=”china” ;
B)char a[10],*p=a; p=”china”;
C)char *a; a=”china” ;
D)char a[10]; a=”china”;
18.设有说明语句:char a[]=”It is mine”;char *p=”It is mine”;则以下不正确的叙述是 D 。
A)a+1表示的是字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
19.若已定义char s[10];则在下面表达式中不表示s[1]的地址是 B 。
A)s+1 B)s++ C)&s[0]+1 D)&s[1]
20.若有定义:int a[5],*p=a;则对a数组元素的正确引用是 C 。
A)*&a[5] B)a+2 C)*(p+5) D)*(a+2)
21.若有定义:int a[5],*p=a;则对a数组元素地址的正确引用是 D 。
A)p+5 B)*a+1 C)&a+1 D)&a[0]
22.若有定义:int a[2][3];则对a数组的第i行第j列元素值的正确引用是 A 。
A)*(*(a+i)+j) B)(a+i)[j] C)*(a+i+j) D)*(a+i)+j
23.若有定义:int a[2][3];则对a数组的第i行第j列元素地址的正确引用是 A 。
A)*(a[i]+j) B)(a+i) C)*(a+j) D)a[i]+j
24.若有程序段:int a[2][3],(*p)[3]; p=a;则对a数组元素地址的正确引用是 B 。
A)*(p+2) B)p[2] C)p[1]+1 D)(p+1)+2
25.若有程序段:int a[2][3],(*p)[3]; p=a;则对a数组元素的正确引用是 C 。
A)(p+1)[0] B)*(*(p+2)+1) C)*(p[1]+1) D)p[1]+2
26.若有定义:int a[5];则a数组中首元素的地址可以表示为 C 。
A)&a B)a+1 C)a D)&a[1]
27.若有定义:int (*p)[4];则标识符p C 。
A)是一个指向整型变量的指针
B)是一个指针数组名
C)是一个指针,它指向一个含有四个整型元素的一维数组
D)定义不合法
28.以下与int *q[5];等价的定义语句是 B 。
A)int q[5] B)int *q C)int *(q[5]) D)int (*q)[5]
29.以下正确的说明语句是 B 。
A)int *b[]={1,3,5,7,9} ;
B)int a[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
C)int a[]={1,3,5,7,9}; int *num[5]={a[0],a[1],a[2],a[3],a[4]};
D)int a[3][4],(*num)[4] ; num[1]=&a[1][3];
30.若有定义:int b[4][6],*p,*q[4];且0≤i<4,则不正确的赋值语句是 B 。
A)q[i]=b[i]; B)p=b; C)p=b[i]; D)q[i]=&b[0][0]
32.若要对a进行自减运算,则a应有下面明 D 。
A)int p[3]; int *a=p; B)int k; int *a=&k; C)char *a[3] D)int b[10]; int *a=b+1;
33.以下选项中,对指针变量p的正确操作是 B 。
A)int a[3], *p; p=&a; B)int a[5], *p; p=a;
C)int a[5];int *p=a=100;
D)int a[5]; int *p1,*p2=a; *p1=*p2;
34.若有定义:int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是 C 。
A)x[3] B)p1=x+3,*p1++
C)p1=x+2,*(p1++) D)p1=x+2,*++p1
35.下面程序段的输出是 A 。
int a[ ]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;
for (k=0; k<4; k++) q[k]=&a[k*3];
printf(“%d\n”,q[3][0]);
A)22 B)16 C)20 D)输出不合法
36.若要对a进行自增运算,则a应具有下面说明 A 。
A)int a[3][2]; B)char *a[ ]={“12”,”ab”};
C)char (*a) [3] D)int b[10], *a=b;
37.若有定义int a[4][6];则能正确表示a数组中任一元素a[i][j](i,j均在有效范围内)地址的表达式 A 。
A)&a[0][0]+6*i+j B)&a[0][0]+4*j+i
C)&a[0][0]+4*i+j D)&a[0][0]+6*j+I
38.下面程序的运行结果是 A 。
main ( )
{ int x[5]={2,4,6,8,10}, *p, **pp ;
p=x , pp = &p ;
printf(“%d”,*(p++));
printf(“%3d”,**pp);
}
A)4 4 B)2 4 C)2 2 D)4 6
39.若有定义int x[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*p)[3]=x ; 则能够正确表示数组元素x[1][2]的表达式是 D 。
A)*((*p+1)[2]) B)(*p+1)+2
C)*(*(p+5)) D)*(*(p+1)+2)
40.若有说明:char *language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则language[2]的值是 C 。
A)一个字符 B)一个地址 C)一个字符串 D)一个不定值
41.设有定义:char *cc[2]={“1234”,”5678”};则正确的叙述是 D 。
A)cc数组的两个元素中各自存放了字符串”1234”和”5678”的首地址
B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
C)cc是指针变量,它指向含有两个数组元素的字符型一维数组
D)cc元素的值分别维”1234”和”5678”