# C语言博客作业04--数组

| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业04--数组 |
| 这个作业的目标 | 学习数组相关内容|
| 姓名 |廖浩轩|

# 1.本章学习总结

## 1.1 学习内容总结

#include <stdio.h>
#define M 10
void main()
{
static int a[M]={-12,0,6,16,23,56,80,100,110,115};
int n,low,mid,high,found;
low=0;
high=M-1;
found=0;
printf("Input a number to be searched:");
scanf("%d",&n);
while(low<=high)
{
mid=(low+high)/2;
if(n==a[mid]) {found=1;break;}
else if(n>a[mid]) low=mid+1;
else high=mid-1;
}
if(found==1) printf("The index of %d is %d",n,mid);
else printf("There is not %d",n);
}


#include <stdio.h>
int main()
{
int a[11];
int i, k, x;
printf("请您输入一个数组中的10个数字:\n");
for (i = 0; i <= 9; i++)
{
scanf("%d", &a[i]);
}
printf("请您输入一个要插入的数字:\n");
scanf("%d", &x);
for (i = 0; i <= 9; i++)
{
if (x < a[i])   //找到第一个比x大的数据
break;
}
k = i;        //跳出来记住位置
for (i = 9; i >= k; i--)  /*自第k个数据之后的所有数据后移*/
{
a[i + 1] = a[i];
}
a[k] = x;                      //将x插入一定要在for循环外面，在里面会把后面的数据覆盖
for (i = 0; i <= 10; i++)
{
printf("%d ", a[i]);
}
return 0;
}


#include<stdio.h>
#define N 10
void main()
{
int a[N], num, i, n = N;
int j;
/*输入N个数到数组中;*/
for (i = 0; i < n; i++)
{
scanf(" %d", &num);
a[i] = num;
}
/*在数组a中删除指定的zhi数num;*/
for (i = 0; i < n; i++)
{
if (a[i] == num)
{
//a[i]=a[n];//如果不保留原数组里的顺序，此一句即可代替下边2行语句，同时省掉变量j
for (j = i; j < n - 1; j++)
{
a[j] = a[j + 1];
}
n--;
}
}
/*输出删除了num后的数组a;*/
for (i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
getchar();
}


#include <stdio.h>
#define SIZE 100
int deleteData(int*, int, int);
int main()
{
int n = 10;
int i, j, locate;
int a[SIZE] = { 12,15,79,4,6,52,16,1,9,19 };
for (j = 0; j < n; j++)
{
printf(" %d", a[j]);
}
printf("\n请输入数组a[10]需要删除的元素位置序号:");
scanf("%d", &locate);
n = deleteData(a, n, locate);
for (i = 0; i < n; i++)
{
printf(" %d", a[i]);
}
printf("\n");
return 0;
}
int deleteData(int arr[], int len, int loc)
{
int i = loc;
while (i < len - 1)
{
arr[i] = arr[i + 1];
i++;
}
len--;
return len;
}


#include<stdio.h>
int main() {
int i;
int j;
int n;
int num[100];
int k;
int temp;
scanf("%d %d", &n,&k);
for (i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
for (i = 0; i < k; i++)
{
for (j = 0; j < n; j++)
{
if (num[j] < num[j - 1])
{
int temp = num[j - 1];
num[j - 1] = num[j];
num[j] = temp;

}
}
}
for (i = 0; i < n; i++)
{

if (i != 0)
{
printf(" ");
}
printf("%d", num[i]);
}
return 0;
}


#include<stdio.h>
int main() {
int i;
int j;
int n;
int num[10];
int temp;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
for (i = 0; i < n-1; i++)
{
for (j = 0; j < n-i-1; j++)
{
if (num[j] < num[j + 1])
{
temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
for (i = 0; i < n; i++)
{

if (i != 0)
{
printf(" ");
}
printf("%d", num[i]);
}
return 0;
}


PTA题目：调查电视节目受欢迎程度，查找整数等，附上查找整数的代码

#include<stdio.h>
int main() {
int i;
int n;
int num[20];
int X;
int temp=0;
scanf("%d %d", &n,&X);
for (i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
for (i = 0; i < n; i++)
{
if (num[i] == X)
{
printf("%d", i);
temp = 1;
}
}
if (temp == 0)
{
}
return 0;
}


PTA题目：

#include<stdio.h>
int panduan(int n);
int main()
{
int a[100001];
int n;
int m;
int i;
int flag = 0;

scanf("%d", &n);
if (panduan(n) == 1)
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}

int panduan(int n)
{
int static b[100001];
int i;
int x;
for (i = 1; i <= n; i++)
{
scanf("%d", &x);
if (b[x] == 1)
{
return 1;
}
else
{
b[x] = 1;
}
}


• gets识别换行符\n，也就是不识别空格，可以输入一行数据， puts输出后，会自动加上一个换行符
• 如果不是使用scanf函数的%s格式，或者是使用gets函数输入字符串，记得一定需要在最后面加一个'\0'.例如：使用scanf函数的%c格式，或者使用getchar，一定要在后面加上一个'\0'
• scanf函数输入时，然后整数换行时，输入直接闪退，这个时候需要在%d后面加上\n换行

# 2.PTA实验作业

## 2.1 有重复的数据

### 2.1.1 伪代码

int main
{
scanf n //得知输入数值数量
if panduan=1 //利用函数来判断输出值
printf YES //证明有重复数据
else
printf NO //证明没有重复数据
}
int panduan
{
int static b[100001]//设置静态数组
int x
for
scanf x
if (b[x] == 1) 返回返回值1
else b[x] = 1//利用数值来作为数组下标，如果下标出现两次则说明有重复数据
end for
}


## 2.2 找鞍点

### 2.2.1 伪代码

定义数组和max数组
for
if (a[i][j] >= a[i][maxi]) //判断行最大数并记录位置到max数组中
{
maxi = j;
}
max[i] = maxi;
end for
for
//判断上述已经是行最大数的数是否为列最大数
if（不是） break//跳出循环
if （是）  printf("%d %d\n", j, max[j]);//输出鞍点位置，并结束程序
end for



## 2.3 切分表达式

### 2.3.1 伪代码

定义字符数组
get(字符数组)
for
if （所获取为0~9的数值）
while (((ch[i] >= '0' && ch[i] <= '9') || ch[i] == '.') && ch[i] != '\0')//判断下一位是为0~9数值或为小数点，记录对应下标
for  printf("%c", ch[j]);//输出对应下标的数
if （所获取为‘-’字符）
if (ch[i - 1] >= '0' && ch[i - 1] <= '9' || ch[i + 1] == '(')//数组前一位是数字或者下一位是前括号
{
putchar('-');
putchar('\n');//减号单独输出一行
}
else
{
putchar('-');//只输出减号
}
if （所获取为‘+’）
if(i == 0)//正号为起始，仅输出正号
{
putchar('+');
}
else//正号单独输出一行
{
putchar('-');
putchar('\n')
}
else//其余的单独输出一行
{
printf("%c", ch[i]);
putchar('\n');
}
end for


### 2.3.3 请说明和超星视频做法区别，各自优缺点。

posted @ 2020-12-13 22:09  山无垢山城  阅读(93)  评论(0编辑  收藏  举报