基础
一维数组:
1、用数组实现求 10 个数的和。
#include
int main()
{
int a[10]={0};
int sum=0;
for(int i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<10;i++)
{
sum+=a[i];
}
printf("%d\n",sum);
return 0;
}
2、将一个数组中的值按逆序重新存放。
#include
int main()
{
int a[500]={0};
int n=0;
int tmp=0;
int sum=0;
printf("数据总量:");
scanf("%d",&n);
for(int i=0;i a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
for(int i=0;i
3、从键盘输入 10 个数,计算并输出它们的最大值、最小值和平均值。
#include
int main()
{
int a[500]={0};
int n=0;
int tmp=0;
int sum=0;
printf("数据总量:");
scanf("%d",&n);
for(int i=0;i a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
for(int i=0;i
二维数组
1、有一个 3*4 的矩阵,找出其中值最大的元素,及其行列号。
#include
int main()
{
int a[3][4] = {0};
int MAX = a[0][0];//默认定义最大值为第一个数据
int MAX_i = 0,MAX_j = 0;//默认第一个数据的下标最大下标
int i,j;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
scanf("%d", &a[i][j]);
}
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
if(a[i][j] > MAX)//更新MAX的值
{
MAX = a[i][j];
MAX_i = i;//更新i,j的值
MAX_j = j;
}
}
}
printf("MAX = %d\n", MAX);
printf("MAX_i = %d\n", MAX_i);
printf("MAX_j = %d\n", MAX_j);
return 0;
}
2、一个 3*3 的整型矩阵对角线元素之和。
#include
int main()
{
int i;
int sum = 0;
int sum1 = 0;
int j;
int a[3][3] = { {1,2,3},
{3,4,5},
{10,7,8}};
for(i = 0; i < 3; i++)//主对角线
{
sum += a[i][i];
}
printf("%d\n", sum);
for(i = 0,j = 2; j >= 0; i++, j--)//负对角线
{
sum1 += a[i][j];
}
printf("%d\n", sum1);
return 0;
}
字符数组:
1、输入一行字符,统计其中大写字母的个数,并将所有的大写字母转化成小写字母后输出。
#include
int main()
{
char a[5] = {0};
int i;
int count = 0;
printf("程序功能:\n");
printf("输入五个字母,使大写变小写并统计大写字母个数:\n");
for(i = 0; i < 5; i++)
{
scanf("%c", &a[i]);
}
while(getchar() != '\n');
for(i = 0; i < 5; i++)
{
if(a[i] >= 'A' && a[i] <= 'Z')
{
a[i] = a[i] + 32;
count++;
}
}
for(i = 0; i < 5; i++)
{
printf("%c ", a[i]);
}
printf("\n");
printf("大写字母总数:%d", count);
printf("\n");
return 0;
}
2、输入密码,设置一个密码,然后输入密码,机会为 3 次,三次密码错误就直接退出。
#include
#include
#define N 500
int main()
{
char a[N] = {0};
int i = 0;
int j = 0;
int k = 0;
int m = 0;
int n = 0;
int flag = 0;
char pwd[N] = {0};//设置密码
printf("请输入要设置的密码");
gets(pwd);
n = strlen(pwd);
printf("请输入密码");
for(j = 3; j > 0; j--)
{
flag = 0;
printf("还可输入%d次密码:\n", j);
gets(a);
m = strlen(a);
if(m <= n)
{
for(k = 0; k < n; k++)
{
if(pwd[k] == a[k])
{
flag++;
}
else
{
flag = 0;
}
}
}
if(flag == n)
{
printf("密码正确\n");
break;
}
else
{
printf("密码不正确\n");
}
}
return 0;
}
3、输入一行字符,分别统计出其中字母、空格、数字和其他字符的个数。
#include
#include
int main()
{
char a[100] = {0};
int i = 0, j = 0, n = 0;
int z = 0, kongge = 0, num = 0, other = 0;
//gets(a); 不安全,缓冲区太大,但是不知道缓冲区有多大,容易引起崩溃
fgets(a,(sizeof a / sizeof a[0]), stdin); //读到EOF停止
n = strlen(a);
for(j = 0; j < n; j++)
{
if((a[j] >= 'a' && a[j] <= 'z') || (a[j] >= 'A' && a[j] <= 'Z'))
{
z++;
}
else if(a[j] == 32)
{
kongge++;
}
else if(a[j] >= '0' && a[j] <= '9')
{
num++;
}
else
{
other++;
}
}
printf("字母:%d, 空格:%d, 数字:%d, 其他:%d\n", z, kongge, num, other);
return 0;
}
提升
一维数组
1、 利用数组实现斐波那契数列的前 30 项,并要求格式化对齐,每行值输出 5 个数。(斐波那契数列:1 1 2 3 5 8 13 21……) 。
#include
int main()
{
int a[30] = {1,1};
int i;
for(i = 2; i < 30; i++)
{
a[i] = a[i - 1] + a[i - 2];
}
for(i = 0; i < 30; i++)
{
printf("%-5d ", a[i]);
if((i + 1) % 5 == 0)
{
printf("\n");
}
}
printf("\n");
return 0;
}
2、 将 n 个整数由小到大排序。
#include
int main()
{
int i,j,tmp = 0;
int n;
int a[500] = {0};
printf("请输入数据:\n");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
for(i = 1; i < n; i++)
{
for(j = 0; j < n - i; j++)
{
if(a[j] > a[j + 1])
{
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
for(i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
3、 输入 10 进制数转换为二进制进行输出。
#include
#include
int main()
{
int temp[32] = {0};
int num = 0, i = 0, j = 0;
printf("请输入十进制数:");
scanf("%d", &num);
for(i = 0; num != 0; i++)
{
temp[i] = num % 2;
num /= 2;
}
for(j = i-1; j >= 0; j--)
{
printf("%d", temp[j]);
}
printf("\n");
return 0;
}
二维数组
1、将一个 3×3 矩阵转置,(行变列列变行)。
#include
int main()
{
int a[3][3] = {{1,2,3},
{4,5,6},
{7,8,9}};
int i,j;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(j % 3 == 0)
{
printf("\n");
}
printf("%d", a[i][j]);
}
}
printf("\n");
for(i = 0; i < 3; i++)
{
for(j = 0; j < 3; j++)
{
if(j % 3 == 0)
{
printf("\n");
}
printf("%d", a[j][i]);
}
}
printf("\n");
return 0;
}
2、分别给出 3 个学生的 4 门课程的成绩,求其中的最高成绩、各门课程的平均成绩和总平均成绩。
#include
int main()
{
float a[3][4] = {0};
int i,j;
float MAX = 0;
int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0, sum5 = 0;
for(i = 0; i < 3; i++)
{
printf("请输入第%d个学生的4门课成绩:\n", i + 1);
for(j = 0; j < 4; j++)
{
scanf("%f", &a[i][j]);
}
}
printf("---------------------------\n");
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
if(a[i][j] > MAX)
{
MAX = a[i][j];
}
}
}
for(i = 0; i < 3; i++)
{
sum1 += a[i][0];
}
for(i = 0; i < 3; i++)
{
sum2 += a[i][1];
}
for(i = 0; i < 3; i++)
{
sum3 += a[i][2];
}
for(i = 0; i < 3; i++)
{
sum4 += a[i][3
];
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
sum5 += a[i][j];
}
}
printf("最高成绩:%.1f\n", MAX);
printf("---------------------------\n");
printf("第一门课平均成绩:%.1f\n", sum1*1.0/4);
printf("第二门课平均成绩:%.1f\n", sum2*1.0/4);
printf("第三门课平均成绩:%.1f\n", sum3*1.0/4);
printf("第四门课平均成绩:%.1f\n", sum4*1.0/4);
printf("---------------------------\n");
printf("总平均成绩:%.1f\n", sum5*1.0/4);
printf("\n");
return 0;
}
3、 打印杨辉三角的前 10 行 。
#include
#define N 10
int main()
{
int a[N][N] = {' '};
int i,j;
// a[0][0] + a[0][1]
for(i = 0; i < 10; i++)
{
a[i][0] = 1;
}
for(i = 0; i < 9; i++)
{
a[i][i] = 1;
}
for(i = 2; i < 10; i++)
{
for(j = 1; j < 10; j++)
{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
{
printf("%-2d ", a[i][j]);
}
printf("\n");
}
return 0;
}
字符数组
1、 不使用库函数,实现字符串的求长度,复制,比较,连接。
#include
int main()
{
char a[500] = "0";
char b[500] = "0";
int flag = 0;
int n;
int count = 0;
int i = 0,j = 0;
printf("---------------------------------------\n");
printf("实现求字符串长度\n");
printf("请输入a字符串:");
scanf("%s", a);
for(i = 0; i < sizeof(a) / sizeof (a[0]); i++)//求字符串a长度
{
if(a[i] != '\0')
{
count++;
}
}
printf("此字符串a的长度为:%d\n", count);
printf("---------------------------------------\n");
printf("实现strcpy\n");
printf("请输入a字符串:");
scanf("%s", a);
printf("请输入b字符串:");
scanf("%s", b);
for(i = 0; i < sizeof(a) / sizeof (a[0]); i++)
{
if(b[i] != '\0')
{
a[i] = b[i];
}
}
printf("把b复制到a后此字符串,a为:%s\n", a);
printf("---------------------------------------\n");
printf("实现strcmp\n");
printf("请输入a字符串:");
scanf("%s", a);
printf("请输入b字符串:");
scanf("%s", b);
for(i = 0; i < sizeof(a) / sizeof (a[0]); i++)
{
if(a[i] > b[i])
{
flag = 1;
break;
}
else
{
flag = 0;
break;
}
}
if(flag == 1)
{
printf("a数组大于b\n");
}
else
{
printf("b数组大于a\n");
}
printf("---------------------------------------\n");
printf("实现strcat\n");
printf("请再次输入a字符串:");
scanf("%s", a);
printf("请再次输入b字符串:");
scanf("%s", b);
while(a[i] != '\0')
{
i++;
}
while(b[j] != '\0')
{
a[i++] = b[j++];
}
a[i] = '\0';
printf("字符串a = %s\n", a);
return 0;
}
2、 输入一个字符串,判断是否是回文。(回文:这个字符串顺读和反读是一样的。如“abcba”和”123321”都是回文。
#include
#include
int main()
{
char a[500] = "0";
int i = 0;
int j = 0;
int k = 0;
int flag = 1;
scanf("%s", a);
/*if(a[strlen(a) - 1] == '\n')
{
a[strlen(a) - 1] == '\0';
}*/
while(getchar() != '\n');
for(i = 0, j = strlen(a) - 1; i < j; i++,j--)
{
if(a[i] != a[j])
{
flag = 0;
break;
}
}
if(flag)
{
printf("%s是回文\n", a);
}
else
{
printf("%s不是回文\n", a);
}
return 0;
}
3、 一篇文章,有三行文字,每行有 80 个字符。要求统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。(二维数组)
#include
int main()
{
char a[3][80] = {0};
int numD = 0, numd = 0, num = 0, konge = 0, other = 0;
int i,j;
for(i = 0; i < 3; i++)
{
gets(a[i]);
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 80; j++)
{
if(a[i][j] >= 'A' && a[i][j] <= 'Z')
{
numD++;
}
else if(a[i][j] >= 'a' && a[i][j] <= 'z')
{
numd++;
}
else if(a[i][j] >= '0' && a[i][j] <= '9')
{
num++;
}
else if(a[i][j] == ' ')
{
konge++;
}
else
{
other++;
}
}
}
printf("%d %d %d %d %d\n", numD, numd, num, konge, other);
return 0;
}