数组(2)
约 1249 字大约 4 分钟
2024-07-07
44.求二维数组的鞍点
//鞍点是该位置的元素在该行上最大,该列上最小
#include<stdio.h>
#include<stdbool.h>
#define N 5
#define M 6
bool f(int (*a)[N],int i,int j)
{
for(int x =0;x<M;++x)
{
if(a[x][j]<a[i][j])
return false;
}
return true;
}
void show(int a[M][N]) //int a[][N]或者int (*a)[N]都是定义了一个指向N个整型元素的数组的指针
{
for(int i=0;i<M;++i)
{
for(int j=0;j<N;++j)
{
printf("%5d",a[i][j]);
}
putchar('\n');
}
}
int main(void)
{
int a[M][N];
for(int i=1;i<M*N;++i)
a[i/N][i%N]-i;
show(a);
for(int i = 0;i<M;++i)
{
int k=0;
for(int j =1;j<N;++j)
{
if(a[i][k]<a[i][j])
k=j;
}
if(f(a,i,k))
printf("a[%d][%d]是这个二维数组的鞍点\n");
}
return 0;
}
45.字符数组
#include <stdio.h>
int main(void)
{
char a[10]={'h','a',' ','h','a','\n'}; //'\0'空字符是c语言中字符串结束的标志
printf("haha\0hehe");
printf("%s","ABCD"); //字符串末尾都由一个空字符
printf("%s",a);
//字符型数组定义时初始化所特有的形式
char b[10]={"ha ha\n"};
char c[10]="hah ha\n";
char d[]="ha";
// c= "ha ha\n"; error 因为c是一个char *类型的常量
char *ch ="ha ha\n"; //字符型常量在计算机的内存中是一个没有名字的数组
printf("AAA%s",ch);
return 0;
}
##
46.字符串的输入输出
#include <stdio.h>
void show(char *a,int len)
{
for(int i =0;i<len;++i)
{
printf("%d\n",a[i]);
}
}
int main(void)
{
char a[30],b[30],c[30],ch;
scanf("%s%s%s%s",a,b,c,&ch); //如果输入项是字符型数组的数组名或者是char *类型的变量 就不需要加取地址符
//使用scanf函数输入多个字符串时,用空格,tab,换行来分隔
// show(a,30); a数组中没有被赋值的元素,是一个垃圾值
printf("%s%s%s%s",a,b,c,ch);
gets(a); //和scanf函数一样都会把字符数组中的一个元素赋值为空字符,
//不同点:get可以把空格、tab赋给这个字符数组的元素;gets会丢掉换行符
ch = getchar();
puts(a);
putchar(ch);
puts("haha"); //puts输出该字符串之后,再输出一个换行符
int x = 2,y = 3;
printf("x=%d,y=%d",x,y);
char *p = "x=%#x,y=%#x\n";
printf(p,x,y);
return 0;
}
47.字符串常用的函数
#include <stdio.h>
#include <stdbool.h>
int strlen(char *a) //求字符串长度
{
if(a== NULL)
return 0;
int len =0;
while(a[len] !='\0')
len++;
return len;
}
char *strlwr(char *a) //大写字母转换为小写字母
{
if(a == NULL)
return NULL;
char *a1 = a;
while(*a != '\0')
{
if(*a <= 'Z' && *a >= 'A')
*a+=32;
++a;
}
return a1;
}
char *strupr(char *a) //小写字母转换为大写字母
{
if(a == NULL)
return NULL;
char *a1 = a;
while(*a !='\0')
{
if(*a >= 'a' && *a <= 'z')
*a-=32;
++a;
}
return a1;
}
char * strcpy(char *a,char *b) //b字符串复制到a字符串
{
if(a == NULL || b == NULL)
return a;
char *a1=a;
while((*a = *b)!= '\0')
{
a++;
b++;
}
/*或者写成
while(*(a++) = *(b++) !='\0')
;
*/
return a1;
}
char * strcat(char *a,char *b) //a字符串与b字符串合并连接
{
if(a == NULL || b == NULL)
return a;
char *a1=a;
while(*(a++) !='\0')
;
a--;
while((*a = *b)!= '\0')
{
a++;
b++;
}
return a1;
}
char * strncpy(char *a,char *b,int n)//b字符串前n个元素覆盖a字符串前n个元素,返回a字符串
{
if(a == NULL || b == NULL)
return a;
char *a1=a;
for(int i =0;i<n;++i)
a[i]=b[i];
return a1;
}
int strcmp(char *a,char *b) //判断两个字符串是否相等
{
if(a == NULL || b== NULL)
return 2; //不为1,0,-1都可以
do
{
if(*a == '\0' && *b == '\0')
return 0;
else if(*a <*b)
return -1;
else if(*a>*b)
return 1;
a++;b++;
}
while (true);
}
int main(void)
{
char a[]="bcde";
printf("%d\n",strlen(a));
printf("%s\n",strlwr(a));
printf("%s\n",strupr(a));
printf("%s\n",strcpy(a,"lala"));
printf("%s\n",strcat(a,"123"));
printf("%s\n",strncpy(a,"abcdef",4));
printf("%d\n",strcmp("abcde","abde"));
return 0;
}
48.习题1
#include <stdio.h>
#define N 10
void show(int a[N][N])
{
for(int i =1;i<N;++i)
{
for(int j =0;j<N;++j)
printf("%6d",a[i][j]);
putchar('\n');
}
}
int main(void)
{
int a[N][N]={0};
for(int i =0;i<N;++i)
a[i][0]=1;
for(int i =1;i<N;++i)
for(int j =1;j<=i;++j)
a[i][j]=a[i-1][j-1]+a[i-1][j];
show(a);
return 0;
}
49.习题2
#include <stdio.h>
#define N 10
void show(int a[])
{
for(int i=0;i<N;++i)
printf("%6d",a[i]);
putchar('\n');
}
void move(int *a ,int k,int index)
{
for(int i=0;i<k;++i)
{
int d =a[index];
a[index]=a[index-1];
a[index-1]=d;
index--;
}
}
int main(void)
{
int a[N];
for(int i=0;i<N;++i)
a[i]=i;
show(a);
int m;
do
{
printf("请输入m的值:");
scanf("%d",&m);
if(m>=0 && m<=N)
break;
printf("输入有误");
}while (1);
for(int i=N-m;i<N;++i)
move(a,N-m,i);
show(a);
return 0;
}
50.习题3
#include <stdio.h>
int main(void)
{
int a[1000]={0};
printf("请输入总人数:");
int n,i;
scanf("%d",&n);
for(int i=0,cnt=0,sum=0;sum!=n-1;++i)
{
if(a[i%n] == 3)
continue;
if((a[i%n]=(cnt++)%3+1) ==3)
sum++;
}
for(i=0;i<n;++i)
if(a[i]!=3)
break;
printf("最后留下的是原来的%d个人\n",i+1);
return 0;
}