1.打印水仙花数
打印所有的三位数的水仙花数,例如:153 = 1*1*1+5*5*5+3*3*3
#include <stdio.h>
int main(void) {
int i, a, b, c;
for (i = 100; i < 1000; i++) {
a = i / 100;
b = i / 10 % 10;//i / 10 - a * 10
c = i % 10;
if (i == a * a * a + b * b * b + c * c * c) {
printf("%d\n", i);
}
}
}
运行结果: 153 307 371 407
2.任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序, 然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
#include<stdio.h>
void mop(int n, int a[]) {
int i, j, temp;
for (i = 0; i < n; i++) {
for (j = 0; j < n - i; j++) {
if (a[j] < a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
for (i = 0; i < n + 1; i++) {
printf("%d\t", a[i]);
}
}
int main(void) {
int a[10], i, temp;
for (i = 0; i < 9; i++) {
scanf("%d", &a[i]);
}
mop(8, a);
printf("\n");
scanf("%d", &temp);
printf("\n");
a[9] = temp;
mop(9, a);
}
3.语句的作用域
#include<stdio.h>
int main(void) {
int a = 6;
if (a > 5)
while(a > 3)
if (a > 6)
printf("~~~");
if (a > -1)
if (a < 7)
while (a > 4)
printf("!!!");
}
运行结果为:!!!
因为上面的代码没有加作用域,所以它的作用范围是依次包含执行, 直到执行到printf结束,输出,第一个printf前的a不满足条件,所以不会输出~~~
4.指针的参数传递
#include<stdio.h>
void func(int* p);
void func2(int a[]);
int main() {
int a[4] = {1, 2, 3, 4};
printf("%d\t", a);
printf("%d\t", &a[0]);
func(a);
func2(a);
}
void func(int* p) {
printf("%d\t", p);
}
void func2(int a[]) {
printf("%d\n", a);
}
运行结果:2293552 2293552 2293552 2293552
因为在数组中数组名代表数组的首地址,a[0]指针偏移量为0,所以a的地址与a[0]的地址为一致的。
在func函数中, 把数组a的地址传给p,打印出来的地址则为a的地址2293552。
在func2函数中,把数组a的地址传给a[], 打印出来的地址也为a的地址2293552