练习一:使用指针打印数组内容
#include <stdio.h>
void print(int* p, int sz) {
int i = 0;
for (i = 0; i < sz; i++) {
printf("%d ", *p++);
//printf("%d ", *(p + i));
}
}
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
print(arr, sz);
return 0;
}
练习二:在小端机器中,下面代码输出的结果是
#include <stdio.h>
int main()
{
int a = 0x11223344;
char *pc = (char*)&a;
*pc = 0;
printf("%x\n", a);
return 0;
}
//注意:以%x格式打印的是八进制数,没有0x
//打印0x:
//printf("%#x\n",a);
//printf("0x%x\n",a);
练习三:下面哪个是指针数组:
注意:
指针数组:
int* arr[10];——>数组arr[10],存储的类型是int*
数组指针:
int (*arr)[10]——>先定义了指针*arr,int和[10]表示指针arr指向含有n个int类型的数组
练习四:写一个函数,可以逆序一个字符串的内容。长度为 1≦len(s)≦10000
注意:逆序字符串的内容,不是逆序打印
#include <stdio.h>
#include <string.h>
int main() {
char arr[10001] = { 0 };
gets(arr);
char* left = arr;
char* right = arr + strlen(arr) - 1;
while (left < right) {
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
printf("%s\n", arr);
return 0;
}
练习五:用C语言在屏幕上输出以下图案:
(找规律,推而广之)
#include <stdio.h>
int main() {
int line = 0;
scanf("%d", &line);
//上
int i = 0;
for (i = 0; i < line; i++) {//注意每一个循环的判断条件
//打印一行
//打印空格
int j = 0;
for (j = 0; j < line - 1 - i; j++) {
printf(" ");
}
//打印*
for (j = 0; j < 2 * i + 1; j++) {
printf("*");
}
printf("\n");
}
//下
for (i = 0; i < line - 1; i++) {
//打印空格
int j = 0;
for (j = 0; j <= i; j++) {
printf(" ");
}
//打印*
for (j = 0; j < 2 * (line - 1 - i) - 1; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
练习六:打印水仙花数
求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。
三位的自幂数称为水仙花数,这里的水仙花数概念更加广泛
#include <stdio.h>
#include <math.h>
//打印水仙花数
int main() {
for (int i = 0; i <= 100000; i++) {
//判断自幂数
//求出i的位数
int n = 1;
int tmp = i;
while (tmp /= 10) {//注意
n++;
}
//求出i的每一位的n次方之和
tmp = i;
int sum = 0;
while (tmp) {//注意循环条件,保证每一位都参与运算
sum += (int)pow(tmp % 10, n);
tmp /= 10;
}
if (i == sum)
printf("%d ", i);
}
return 0;
}
练习七:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,
例如:2+22+222+2222+22222
#include <stdio.h>
int main() {
int a = 0;
int n = 0;
scanf("%d %d", &a, &n);
int i = 0;
int k = 0;
int sum = 0;
for (i = 0; i < n; i++) {
k = k * 10 + a;
sum += k;
}
printf("%d\n", sum);
return 0;
}