版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/87565728
1. 例题
- 这里的a[4]代表定义数组时,指定数组包含4个元素
int a[4] = {1,2,3,4};
- 使用数组求Fibonacci数列
# include <stdio.h>
int main()
{
int i;
int a[40] = {1,1};
for(i=2;i<20;i++)
a[i] = a[i-1] + a[i-2];
for(i=0;i<20;i++)
{
if(i%5==0) printf("\n");
printf("%d\t",a[i]);
}
return 0;
}
- 对数组排序(简单选择排序)
# include <stdio.h>
int main()
{
int a[10] = {2,1,4,3,6,9,10,5,8,7};
int i=0,j,min,temp;
for(i=0;i<10;i++)
{
min = i;
for(j=min+1;j<10;j++)
{
if(a[j]<a[min])
{
min = j;
flag = 1;
}
}
if(min!=i)
{
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
for(i=0;i<10;i++)
printf("%d\n",a[i]);
return 0;
}
- 矩阵转置
# include <stdio.h>
int main()
{
int a[2][3] = {{1,2,3},{4,5,6}};
int b[3][2];
int i,j,temp;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
b[j][i] = a[i][j];
}
}
printf("a矩阵:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
printf("b矩阵:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%d\t",b[i][j]);
printf("\n");
}
return 0;
}
- 数组求最大值
# include <stdio.h>
int main()
{
int a[2][2] = {{1,2},{4,5}};
int i,j,max = a[0][0],max_i,max_j;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
if(a[i][j]>max)
{
max = a[i][j];
max_i = i;
max_j = j;
}
}
}
printf("最大值:%d,行坐标:%d,列坐标:%d",max,max_i,max_j);
return 0;
}
- 输出菱形
# include <stdio.h>
int main()
{
char a[6][5] = {{' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
int i,j;
for(i=0;i<6;i++)
{
for(j=0;j<5;j++)
printf("%c",a[i][j]);
printf("\n");
}
return 0;
}
- 有三个字符串,找出其中最大的一个
#include <stdio.h>
#include <string.h>
int main()
{
char str[3][20];
char string[20];
int i;
for(i=0;i<3;i++)
gets(str[i]);
if(strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else strcpy(string,str[1]);
if(strcmp(string,str[2])>0)
printf("%s",string);
else printf("%s",str[2]);
return 0;
}
2. 习题
- 使用选择法对10个整数排序参考例3
下面是冒泡排序:
#include <stdio.h>
int main()
{
int a[10] = {3,4,6,5,2,8,9,7,10,1};
int i,j,temp;
for(i=0;i<10;i++)
{
for(j=1;j<10-i;j++)
{
if(a[j-1]>a[j])
{
temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
for(i=0;i<10;i++)
printf("%d\n",a[i]);
return 0;
}
- 求一个3x3整型矩阵对角线元素之和
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int main()
{
int a[3][3];
int i,j,sum = 0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
sum = sum + a[i][i];
printf("对角线元素之和为:%d",sum);
return 0;
}
- 在一个排好序的数组中,插入一个数,仍然有序
#include <stdio.h>
int main()
{
int a[10] = {1,3,5,7};
int elem,i,j,len=4;
printf("插入的数据为:");
scanf("%d",&elem);
for(i=0;i<len;i++)
{
if (a[i]>elem)
break;
}
for(j=len;j>i;j--)
{
a[j] = a[j-1];
}
len++;
a[i] = elem;
for(i=0;i<len;i++)
printf("%d\n",a[i]);
return 0;
}
- 逆序输出数组
#include <stdio.h>
int main()
{
int a[10] = {1,3,5,7,9};
int i,j,temp;
i=0;j=4;
while(i<j)
{
if(i<j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
i++;
j--;
}
for(i=0;i<5;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
- 杨辉三角
- 魔方阵(复杂,待处理)
- 找鞍点
#include <stdio.h>
# include <stdbool.h>
int main() {
int a[3][3] = {{1,2,5},{3,4,6},{7,8,9}};
int i,j,max,max_j;
bool flag1,flag2 = true;
//打印二维数组
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
//寻找鞍点
for(i=0;i<3;i++)
{
flag1 = true;
max = a[i][0];
//寻找第i行最大值 ,同时记录它所在列max_j
for(j=0;j<3;j++)
{
if(max<a[i][j])
{
max = a[i][j];
max_j = j;
}
}
//判断行最大值是否是列最小值
for(j=0;j<3;j++)
{
if(max>a[j][max_j])
flag1 = false;
}
if(flag1) {
printf("%d是鞍点",max);
flag2 = false; //存在鞍点,置flag2为false
}
}
if(flag2) printf("无鞍点");
return 0;
}
- 折半查找法找数
# include <stdio.h>
int main() {
int a[20] = {30,28,26,25,19,17,16,14,12,11,10,8,7,5,1};
int low=0,high=14,mid,elem;
printf("请输入要查找的值:");
scanf("%d",&elem);
while(low<=high) {
mid = (low+high)/2;
if(a[mid]==elem) {
printf("%d是数组中第%d个值",elem,mid+1);
break;
}
else if(a[mid]>elem) low = mid+1;
else high = mid-1;
}
if(low>high) printf("数字%d不存在",elem);
return 0;
}
10.统计字符个数
11. 输出图案
# include <stdio.h>
int main() {
int i,j;
for(i=0; i<5; i++) {
for(j=0; j<=i; j++)
printf(" ");
for(j=1; j<5; j++) {
printf("* ");
}
printf("\n");
}
return 0;
}
- 转译电文
# include <stdio.h>
# include <string.h>
int main() {
char s[200];
int i=0;
printf("请输入电文:");
gets(s);
while(s[i]!='\0'){
if((s[i]>='A')&&(s[i]<='Z'))
s[i] = 90 - (s[i]-65);
if((s[i]>='a')&&(s[i]<='z'))
s[i] = 122 - (s[i] - 97);
i++;
}
printf("转译后的电文为:");
puts(s);
return 0;
}