// .结构体.成员名 (*ps).age 等价于 ps->age
// ->结构体指针->成员名
struct Stu
{
char name[20];
int age;
double score;
};
void set_stu(struct Stu* ps)
{
strcpy(ps->name, "zhangsan");
ps->age = 20;
ps->score = 100.0;
}
void print_stu(struct Stu* ps)
{
printf("%s %d %lf\n", ps->name, ps->age, ps->score);
}
int main()
{
struct Stu s = { 0 };
set_stu(&s);
print_stu(&s);
return 0;
}
//整形提升
int main()
{
char a = 5;
char b = 126;
char c = a + b;
printf("%d", c);
return 0;
}
编码实现:求一个整数存储在内存中的二进制中1的个数
int main()
{
int num = 10;
int count = 0;
while (num)
{
if (num % 2 == 1)
count++;
num = num / 2;
}
printf("二进制中1的个数=%d\n", count);
return 0;
}
int main()
{
int num = 10;
int i = 0;
int count = 0;
while (num)
{
count++;
num = num & (num - 1);
}
printf("二进制中1的个数=%d\n", count);
return 0;
}
void test1(int arr[])
{
printf("%d\n", sizeof(arr));//(2)
}
void test2(char ch[])
{
printf("%d\n", sizeof(ch));//(4)
}
int main() {
int arr[10] = { 0 };
char ch[10] = { 0 };
printf("%d\n", sizeof(arr));//(1)
printf("%d\n", sizeof(ch));//(3)
test1(arr);
test2(ch);
return 0;
}
// 第一行先输入有几个数字
// 第二行输入几个随机数
// 第三行输入需要删除的数字
//输出为一行,删除指定数字之后的序列
int main()
{
int n = 0;
scanf("%d", &n);//规定输入数字的个数
int arr[50];
int i = 0;
//输入随机数字
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
int del = 0;
scanf("%d", &del);//输入需要删除的数字
int j = 0;//作为下标锁定的位置是存放不删除的数字
for (i = 0; i < n; i++)
{
if (arr[i] != del)
{
arr[j++] = arr[i];
}
}
for (i = 0; i < j; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
//输入n个成绩,换行输出n个成绩中最高分和最低分的差
//第一行输入成绩个数
//第二行输入成绩,空格隔开
//输出n个成绩中最高分和最低分的差
int main()
{
int n = 0;
scanf("%d", &n);
int arr[50];
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d ", &arr[i]);
}
int max = arr[0];
for (i = 1; i < n; i++)
{
if (arr[i] > max)
arr[i] = max;
}
int min = arr[0];
for (i = 1; i < n; i++)
{
if (min > arr[i])
min = arr[i];
}
printf("%d\n", max - min);
return 0;
}
int main()
{
int n=0;
scanf("%d", &n);
int arr[10];
int i = 0;
int max = 0;
int min = 100;
for (i = 0; i < n; i++)
{
scanf("%d ", &arr[i]);
if (arr[i]>max)
max = arr[i];
if (arr[i]<min)
min = arr[i];
}
printf("%d", max-min);
return 0;
}
//输入一个字母,判断是否是大写, 大写换成小写,小写换成大写
//多组输入,每行输入一个字母
int main()
{
char ch = 0;
//scanf读取成功的时候,返回的是读取的数据个数
//scanf函数在读取失败的时候返回EOF
while (scanf("%c",&ch)==1)
{
if (ch >= 'a' && ch <= 'z')
printf("%c\n",ch-32);
if (ch >= 'A' && ch <= 'Z')
printf("%c\n", ch + 32);
}
return 0;
}
//getchar()处理多余的\n
#include<ctype.h>
int main()
{
char ch = 0;
//scanf读取成功的时候,返回的是读取的数据个数
//scanf函数在读取失败的时候返回EOF
while (scanf("%c", &ch) == 1)
{
if (islower(ch))//判断是否为小写的函数
printf("%c\n", toupper(ch));//小写转大写的函数
if (isupper(ch))//判断是否为大写的函数
printf("%c\n", tolower(ch));//大写转小写的函数
}
return 0;
}
//判断是否是字母,多组输入,每行输入一个
int main()
{
char ch = 0;
//%c的前面加空格,是为了跳过下一个字符之前的所有空白字符包括\n
while (scanf("%c",&ch)==1)
{
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
//isalpha()是判断一个字符是否是字母的库函数
printf("%c is zimu\n", ch);
else
printf("%c no zimu\n", ch);
getchar();//处理多余的\n
}
return 0;
}
变种水仙花数-lily number;把任意的数字,从中间拆分成两个数字,比如1461可以拆分成(1和461),(14和61
),(1466和1),如果所有拆分后的乘积之和都等于自身,则是一个lily number。
例如 :
655=6*55+65*5
1461=1*461+14*61+146*1
求出5位数中的所有lily number。
#include<math.h>
int main()
{
int i = 0;
for (i = 10000; i <= 99999; i++)
{
int sum = 0;
int j = 0;
for (j = 1; j <= 4; j++)
{
int k = (int)pow(10, j);
sum += (i % k) * (i / k);
}
if (sum == i)
printf("%d\n", i);
}
return 0;
}