20200529第十次课
//数组
#include<stdio.h>
void test()
{
int a[4][3]={{1},{4,5},{5,6,7}};//int a[行][列]
int c[4][3]={1,2,3,4,5,6,7,8,9,0};
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
printf("%d",a[i][j]);
}
}
}
int main()
{
test();
}
//字符数组
//char a[4];
#include<stdio.h>
void test()
{
//这三种都可以
char a[10]={'a','b','z','f','\0'}; //'\0'为结束符,遇到'\0'后面就不读了
char b[10]={"dsfsd\0"};
char c[10]="saffnl";
//字符串以/0作为结束标志 //8个字符的字符串会有9个字符,最后一个为0
int i;
for(i=0;i<10;i++)
{
printf("%c",a[i]);
printf("%s",a); //字符串输出用%s //直接打数组名字,不用写运算符
}
}
int main()
{
test();
}
//字符串的拼接
#include<stdio.h>
#include<string.h>
void test()
{
char c1[20]="1234";
char c2[8]="adfsd";
strcat(c1,c2); //字符串的拼接
printf("%s",c1);
}
int main()
{
test();
}
//比较时的大小判断
#include<stdio.h>
#include<string.h>
void test()
{
char c1[20]="1234";
char c2[8]="asdfg";
char c3[8]="sssdr";
strcmp(c2,c3);
printf("%d",strcmp(c2,c3));//c2-c3 => c2<c3 结果为-1
///只有三种可能 1 , -1 , 0
}
int main()
{
test();
}
// 字符串的覆盖
#include<stdio.h>
#include<string.h>
void test()
{
char c1[20]="1234";
char c2[8]="asdfg";
char c3[8]="sssdr";
strcpy(c1,c3);
printf("%s",c1);
strcpy(c2,c1); //c2=c1 //把c1的值赋到c2
strcpy(c1,c3); //c1=c3
strcpy(c2,c2); //c3=c2
printf("%d",strlen("dd\0ddddd"));//从某个值开始扫描一直到\0
}
int main()
{
test();
}
作业:
1、//给出一组值,在第3个位置插入35。注意:预留空间、数组不要越界
#include<stdio.h>
void test()
{
int data[5] = {2,3,6,21};
int i;
for(i=3;i>=2;i--)
{
data[i+1] = data[i];
}
data[2] = 35;
for(i=0;i<5;i++)
{
printf(" %d ",data[i]);
}
}
int main()
{
test();
}
2、//给出一组值,查找是否存在35这一数据,如果存在,有几个;如果不存在计0
#include<stdio.h>
void test()
{
int data[5] = {1,35,2,-35,69};
int i;
int num=0;
for(i=0;i<5;i++)
{
if(data[i] == 35)
{
num++;
}
}
if(num!=0)
{
printf("有%d个35\n",num);
}
else
{
printf("记为0 ");
}
}
int main()
{
test();
}
3、//求出每一行的最大值
#include<stdio.h>
void test()
{
printf("求出每一行的最大值:\n");
int data[2][3]={{26,5,8},{65,2}};
int b[2];
int i,j;//i为行,j为列
for(i=0;i<2;i++)//行
{
b[i]=data[i][0];//设这一行最大值为0
for(j=0;j<3;j++)
{
if(data[i][j]>b[i])//如果第i行第j列的值比max大
{
b[i]=data[i][j]; //就重新给它赋值
}
}
}
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%d\n",data[i][j]);//将数组每一行每一列的数输出
}
printf("max=%d\n",b[i]); //将这一行最大的输出
}
}
int main()
{
test();
}
4、//求出每一列的最大值
#include<stdio.h>
void test()
{
printf("求出每一列的最大值:\n");
int data[4][5] = {{4,3,45},{64,8,5,2,66},{2,5},{45,65,3}};
int b[5];
int i,j;
for(j=0;j<5;j++)//行
{
b[j]=data[0][j];
for(i=0;i<4;i++)//列
{
if(data[i][j]>b[j])
{
b[j]=data[i][j];
}
}
}
for(j=0;j<5;j++)
{
for(i=0;i<4;i++)
{
printf("%d\n",data[i][j]);//将数组每一行每一列的数输出
}
printf("max=%d\n",b[j]); //将这一行最大的输出
}
}
int main()
{
test();
}
5、//输出的最大值位置及最大值
#include<stdio.h>
void test()
{
int data[2][3] = {{2,54,65},{1,99,25}};
int i,j,max;
int hang=0,lie=0;
max=data[0][0];
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
if(data[i][j]>max)
{
max=data[i][j];
hang=i;
lie=j;
}
}
}
printf("max=%d,hang=%d,lie=%d",max,hang,lie);
printf("\n"); // 位置有问题
}
int main()
{
test();
}
6、//给出一组值,删除第3个位置元素
#include<stdio.h>
void test()
{
int data[5] = {2,5,6,152,33};
int i;
for(i=3;i<5;i++)
{
data[i-1] = data[i];
}
for(i=0;i<5;i++)
{
printf(" %d ",data[i]);
}
}
int main()
{
test();
}
7、//给出一组值,查找是否存在35这一数据(无重复数据)
#include<stdio.h>
void test()
{
int data[10]={2,3,4,5,6,1,9,8,7,35};
int i;
for(i=0;i<10;i++)
{
if(data[i] = 35)
{
printf("数列中有35这个数\n");
break;
}
else
{
printf("数列中没有35这个数\n");
break;
}
}
}
int main()
{
test();
}
8、//一个数列,前3个数是0,0,1,以后每个数都是其前面3个数的和,打印出此数列前n个数。
#include<stdio.h>
void test()
{
int a,b,c,sum,i;
int n;
a=0;
b=0; //设第一、二、三的数
c=1;
printf("输入想打印出的前多少个数:\n");
scanf("%d",&n);
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
for(i=1;i<n;i++)
{
sum=a+b+c;
printf("%d\n",sum);
a=b;
b=c;
c=sum;
}
while(1);
}
int main()
{
test();
}
9、//找出最大值输出
#include<stdio.h>
void test()
{
int data[2][3] = {{2,64,29},{2,85}};
int max;
int i,j;
max = data[0][0];
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
if(data[i][j]>max)
{
max=data[i][j];
}
}
}
printf("max=%d\n",max);
printf("\n");
}
int main()
{
test();
}
10、//杨辉三角形(FAKE)
#include <stdio.h>
#define N 14
void test()
{
int i, j, k, n=0, a[N][N]; /*定义二维数组a[14][14]*/
while(n<=0||n>=13){ /*控制打印的行数不要太大,过大会造成显示不规范*/
printf("请输入要打印的行数:");
scanf("%d",&n);
}
printf("%d行杨辉三角如下:\n",n);
for(i=1;i<=n;i++)
a[i][1] = a[i][i] = 1; /*两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数*/
for(i=3;i<=n;i++)
for(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j]; /*除两边的数外都等于上两顶数之和*/
for(i=1;i<=n;i++){
for(k=1;k<=n-i;k++)
printf(" "); /*这一行主要是在输出数之前打上空格占位,让输出的数更美观*/
for(j=1;j<=i;j++) /*j<=i的原因是不输出其它的数,只输出我们想要的数*/
printf("%6d",a[i][j]);
printf("\n"); /*当一行输出完以后换行继续下一行的输出*/
}
printf("\n");
}
int main()
{
test();
}
11、//查找序列中是否存在数据n
#include<stdio.h>
void test()
{
int data[2][3] = {{2,5,8},{89,15}};
int i,j;
int n;
printf("输入一个数:\n");
scanf("%d",&n);
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
if(data[i][j] = n)
{
printf("该序列中存在数据%d\n",n);break;
}
else
{
printf("该序列中不存在数据%d\n",n);break;
}
}
}
}
int main()
{
test();
}