C语言练习100例
Day 1
题目:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
程序代码:
#include <stdio.h>
int main(){
int a,b,c,d,i=0;
for(a=1;a<=5;a++){
for(b=1;b<=5;b++){
for(c=1;c<=5;c++){
for(d=1;d<=5;d++){
if(a==b&&a==c&&a==d){
}
else{
printf("%d%d%d%d ",a,b,c,d);
i++;
}
}
}
}
}
printf("i = %d",i);
}
Day 2
一维数组练习
题目:输入年龄,计算各个年龄段的人数
// 输入一组年龄并统计各阶段年龄的人数
#include <stdio.h>
// v2.0
int main()
{
int age[20] = {};
int age_0_10 = 0;
int age_10_20 = 0;
int age_20_30 = 0;
int age_30_40 = 0;
int age_40_50 = 0;
int age_50_60 = 0;
int age_60_70 = 0;
int age_70_80 = 0;
int age_80_90 = 0;
int age_90_100 = 0;
//数据采集 20 个
for (int i = 0; i <= 20; i++)
{
scanf("%d", &age[i]);
printf("%d \n", age[i]);
//输入 0 自动退出采集数据
if (age[i] == 0)
{
break;
}
if (age[i] < 0 && age[i] > 100)
{
printf("请输入合法数据!");
i--;
}
}
//判断总共采集人数
int all = 0;
for (int i = 0; i < 20; i++)
{
if (age[i] > 0)
all++;
}
printf("共 %d 人 \n", all);
printf("%d", age_0_10);
//将年龄段分类
for (int i = 0; i <= 20; i++)
{
/* 遍历年龄段code */
int k = age[i] / 10;
if (age[i] > 0)
switch (k)
{
case 0:
age_0_10++;
break;
case 1:
age_10_20++;
break;
case 2:
age_20_30++;
break;
case 3:
age_30_40++;
break;
case 4:
age_40_50++;
break;
case 5:
age_50_60++;
break;
case 6:
age_60_70++;
break;
case 7:
age_70_80++;
break;
case 8:
age_80_90++;
break;
case 9:
age_90_100++;
break;
}
}
printf("age_00_10 %d 人\n", age_0_10);
printf("age_10_20 %d 人\n", age_10_20);
printf("age_20_30 %d 人\n", age_20_30);
printf("age_30_40 %d 人\n", age_30_40);
printf("age_40_50 %d 人\n", age_40_50);
printf("age_50_60 %d 人\n", age_50_60);
printf("age_60_70 %d 人\n", age_60_70);
printf("age_70_80 %d 人\n", age_70_80);
printf("age_80_90 %d 人\n", age_80_90);
printf("age_90_100 %d 人\n", age_90_100);
printf("ok!");
}
Day 3
利用一维数组实现冒泡排序
#include <stdio.h>
int main()
{
int a[5] = {0, 4, 2, 1, 3};
// 小 大
int i, j;
int t;
int n =sizeof(a)/sizeof(a[0]);
for (i = 0; i < n-1; i++)
{
for (j = n-1; j > 0; j--)
{
if (a[j] < a[j - 1])
{
t = a[j];
a[j] = a[j - 1];
a[j - 1] = t;
}
}
}
for (i = 0; i <= n-1; i++)
{
printf("%d", a[i]);
}
}
Day 4
- 题目:判断101-200之间有多少个素数,并输出所有素数。
- 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
#include <stdio.h>
//打印100-200中的所有素数,并计算个数
//素数:质数是指在大于1的【自然数】中,除了1和它本身以外不再有其他因数的自然数。
//自然数:自然数是指用以计量事物的件数或表示事物次序的数。即用数码0,1,2,3,4……所表示的数。
int main()
{
int a, sum = 0;
int i;
//遍历100-200中的所有自然数
for (a = 100; a <= 200; a++)
{
// 从1到本身,遍历除一边
for (i = 2; i < a; i++)
{
if (a % i == 0)
{
break;
}
else
{
if (i == a - 1)
{
printf("%d ", a);
sum++;
}
}
}
}
printf("\n共 %d 个数 ", sum);
return 0;
}
输出
101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
共 21 个数
PS D:\Save\C\lx>
题目:利用for循环打印等腰三角形
#include <stdio.h>
int main()
{
int i, j, k;
printf("\1\1\n");
// 控制行数
for (i = 0; i < 10; i++)
{
//控制每行开始的位置
for (k = 9; k > i; k--)
{
printf(" ");
}
//控制每行方块的数量,每行比每行多一块
for (j = 0; j < i; j++)
{
printf("▇");
printf(" ");
}
printf("\n");
}
return 0;
}
输出
Day 5
- 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
- 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
#include <stdio.h>
// 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,
// 其各位数字立方和等于该数本身。100-999
// 例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
int main()
{
int i = 153;
int a, b, c;
int sum = 0;
for (i = 100; i < 999; i++)
{
a = i / 100;
b = (i / 10)%10;
c = i % 10;
if (i == (a * a * a) + (b * b * b) + (c * c * c))
{
printf("%d \n", i);
sum++;
}
}
printf("共 %d 个 ", sum);
}