运行环境:vs2013
1.求两个整数的较大值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num1, num2;
printf("---------您需要输入两个整数------------\n");
printf("---------------------------------------\n");
printf("请输入第一个整数:\n");
scanf_s("%d",&num1);
printf("请输入第二个整数:\n");
scanf_s("\n%d",&num2);
/*也可以表示为
int max=(num1>mun2)?num1:num2;
printf("较大的数为:%d\n",max);
*/
printf("较大的数为:%d\n",(num1>num2)?num1:num2);
system("pause");
return 0;
}
2. 0到100可以被整除的数
#include<stdio.h>
#include<stdlib.h>
int main()
{
printf("请输入一个被除数:\n");
int num1 = 0;
scanf_s("%d",&num1);
printf("0到100可以被%d整除的数有:\n",num1);
for (int i = 1; i <= 100; i++)
{
if (i%num1 == 0)
printf("%d\n",i);
}
system("pause");
return 0;
}
3. 鸡兔同笼
已知:头共有88个,脚共有244只。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x=0, y=0; //假设鸡的数量为x,兔的数量为y
for (x = 0; x <= 88; x++)
{
y = 88 - x;
if (x * 2 + 4 * y == 244)
{
printf("鸡的数量为:%d\n兔的数量为:%d\n", x, y);
}
}
system("pause");
return 0;
}
4.超简单的计算器
只是用来熟悉switch语句。
#include<stdio.h>
#include<stdlib.h>
int main()
{
while (1)
{
float x = 0, y = 0;
char ch;
printf("请输入:\n");
scanf_s("%f", &x);
ch = getchar();
scanf_s("%f", &y);
switch (ch)
{
case '+':
printf("%f\n", x + y);
break;
case '-':
printf("%f\n", x - y);
break;
case '*':
printf("%f\n", x*y);
break;
case '/':
if (y == 0)
printf("除数不能为0!\n");
else
printf("%f\n", x / y);
break;
default:
printf("超纲啦!\n");
}
}
system("pause");
return 0;
}
5. 成绩等级划分
/*
#include<stdio.h>
#include<stdlib.h>
int main()
{
int score = 0;
printf("请输入一个成绩:\n");
scanf_s("%d",&score);
if (score > 100 || score < 0)
{
printf("成绩输入错误!\n");
}
else if (score >= 90)
printf("等级为A\n");
else if (score >= 80 && score < 90)
printf("等级为B\n");
else if (score >= 70 && score < 80)
printf("等级为C\n");
else if (score >= 60 && score < 70)
printf("等级为D\n");
else
printf("等级为E\n");
system("pause");
return 0;
}
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int score = 0;
int num = 0;
printf("请输入成绩:\n");
scanf_s("%d", &score);
if (score >= 0 && score <= 100)
{
num = score / 10;
switch (num)
{
case 10:
case 9:
printf("等级为A\n\n");
break;
case 8:
printf("等级为B\n\n");
break;
case 7:
printf("等级为C\n\n");
break;
case 6:
printf("等级为D\n\n");
break;
default:
printf("等级为E\n\n");
break;
}
}
else
printf("成绩输入错误!\n");
system("pause");
return 0;
}
6. 最简单的密码
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x = 123456;
int y = 0;
printf("请输入密码:\n");
scanf_s("%d",&y);
if (x == y)
{
printf("输入正确,欢迎使用!\n");
}
else
printf("密码错误,即将退出程序!\n");
system("pause");
return 0;
}
7. if / else if ,可以写猜数字游戏
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x = 0, y = 0;
printf("请输入第一个数字:\n");
scanf_s("%d",&x);
printf("请输入第二个数字:\n");
scanf_s("%d",&y);
if (x*y > 5000)
printf("它们的乘积大于5000\n");
else if (x*y == 5000)
printf("它们的乘积等于5000\n");
else
printf("它们的乘积小于5000\n");
system("pause");
return 0;
}
8. 判断闰年
#include<stdio.h>
#include<stdlib.h>
int main()
{
int year = 0;
printf("请输入年份:\n");
scanf_s("%d",&year);
if (year % 100 == 0 && year % 400 == 0)
{
printf("这一年是世纪年并且是闰年\n");
}
else if (year % 4 == 0 && year % 100 != 0)
{
printf("这一年是普通年并且是闰年");
}
else
printf("这不是闰年");
system("pause");
return 0;
}
9. 判断输入的字符类型
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ch;
printf("请输入一个字符:\n");
ch = getchar();
if (ch>='0'&&ch<='9')
{
printf("这是一个数字!\n");
}
if (ch >= 'a'&&ch <= 'z')
{
printf("这是一个小写字母!\n");
}
if (ch >= 'A'&&ch <= 'Z')
{
printf("这是一个大写字母!\n");
}
system("pause");
return 0;
}
10. 输入日期查询所属星座
#include<stdio.h>
#include<stdlib.h>
int main()
{
int month = 0;
int day = 0;
printf("请输入月份:\n");
scanf_s("%d",&month);
if(month > 12 || month < 1)
{
printf("月份输入错误!\n");
}
printf("请输入日期:\n");
scanf_s("\n%d", &day);
if (day>31 || day <1)
{
printf("日期输入错误!\n");
}
else if (month == 2 && day>29)
printf("日期输入错误!\n");
else
{
switch (month)
{
case 1:
if (day >= 21 && day <= 31)
printf("宝瓶座");
else
printf("摩羯座");
break;
case 2:
if ( day <= 20)
printf("宝瓶座");
else
printf("双鱼座");
break;
case 3:
if (day <= 20)
printf("双鱼座");
else
printf("白羊座");
break;
case 4:
if ( day <= 20)
printf("白羊座");
else
printf("金牛座");
break;
case 5:
if (day <= 20)
printf("金牛座");
else
printf("双子座");
break;
case 6:
if ( day <= 20)
printf("双子座");
else
printf("巨蟹座");
break;
case 7:
if ( day <= 22)
printf("巨蟹座");
else
printf("狮子座");
break;
case 8:
if ( day <= 22)
printf("狮子座");
else
printf("处女座");
break;
case 9:
if (day <= 22)
printf("处女座");
else
printf("天秤座");
break;
case 10:
if ( day <= 22)
printf("天秤座");
else
printf("天蝎座");
break;
case 11:
if ( day <= 22)
printf("天蝎座");
else
printf("人马座");
break;
case 12:
if ( day <= 22)
printf("人马座");
else
printf("摩羯座");
break;
default:
printf("输入错误!");
break;
}
}
system("pause");
return 0;
}
11. 输入字母的大小写转换
#include<stdio.h>
#include<stdlib.h>
int main()
{
char ch;
ch = getchar();
if (ch >= 'a' && ch <= 'z')
{
printf("对应的大写字母为%c\n",ch - 32);
}
else if (ch >= 'A' && ch <= 'Z')
printf("原样输出为%c\n", ch);
else
printf("输入错误!\n");
system("pause");
return 0;
}
12. 求100以内3的倍数和
#include<stdio.h>
#include<stdlib.h>
int main()
{
int sum = 0;
for (int i = 1; i <= 100; i++)
{
if (i % 3 == 0)
{
sum += i;
printf("sum=%d 当前循环次数为i=%d\n", sum, i / 3);
}
}
printf("结果为%d\n", sum);
system("pause");
return 0;
}
13. 求100以内偶数的和
#include<stdio.h>
#include<stdlib.h>
int main()
{
int sum = 0;
int i=0;
for (i = 0; i <= 100; i = i++)
{
if (i % 2 == 0)
{
sum += i;
printf("sum=%d 当前循环次数为i=%d\n", sum, i / 2 + 1);
}
}
printf("100以内偶数之和为%d\n", sum);
system("pause");
return 0;
}
14. do-while实现循环累加
#include<stdio.h>
#include<stdlib.h>
int main()
{
int sum = 0;
int i = 0;
do //do语句先做循环后做判断,这是与其他语句的不同
{
i++;
sum += i;
printf("sum=%d 当前循环次数为i=%d\n",sum,i);
} while (i < 100); //取<=100的话,当i=100时,还要做一次循环,会多加一个101的值;
printf("结果为%d\n",sum);
system("pause");
return 0;
}
15. for循环实现循环累加
#include<stdio.h>
#include<stdlib.h>
int main()
{
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum +=i;
printf("sum=%d 当前循环次数为i=%d\n",sum,i);
}
printf("从1加到100的结果为%d\n",sum);
system("pause");
return 0;
}
16. while循环实现累加
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 1;
int sum = 0;
while (i <= 100)
{
sum = sum + i;
printf("sum=%d 当前循环次数为i=%d\n",sum,i);
i++;
}
printf("从1加到100的结果为%d\n",sum);
system("pause");
return 0;
}
17. 倒三角打印九九乘法表
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, j;
for (j = 1; j <= 9; j++)
{
for (i = j; i <= 9; i++)
{
printf("%d*%d=%d ",j,i, i*j);
}
printf("\n");
}
system("pause");
return 0;
}
19. 求m的n次方
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m = 0, n = 0;
int k = 1;
printf("请输入m:");
scanf_s("%d",&m);
printf("请输入n:");
scanf_s(" %d",&n);
if (n == 0)
printf("结果为1\n");
else if (n == 1)
printf("结果为%d\n",m);
else
{
for (int j = 1; j <= n; j++)
k *= m;
printf("结果为%d\n", k);
}
system("pause");
return 0;
}
20. 用*号打印三角形
#include<stdio.h>
#include<stdlib.h>
int main()
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j <6-1-i; j++) //打印空格数
{
printf(" ");
}
for (int k = 0; k < 2 * i+1; k++) //打印*号数
printf("*");
printf("\n");
}
system("pause");
return 0;
}
21. 从输入的多个数中找到最大值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int max = 0;
printf("请输入六个数:\n");
for (int i = 0; i < 6; i++)
{
int num = 0;
scanf_s("%d",&num);
if (i == 0)
{
max = num;
}
else if (max<num)
{
max = num;
}
}
printf("max=%d\n",max);
system("pause");
return 0;
}
22. 韩信点兵
已知:士兵站3列余2个,站5列余3个,站7列余4个,求士兵最少多少人。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n = 1;
while (1)
{
if (n % 3 == 2 && n % 5 == 3 && n % 7 == 4)
{
break;
}
n++;
}
printf("人数至少为%d人\n",n);
system("pause");
return 0;
}
23. 求1-2+3-4+5-6…+99-100的结果
#include<stdio.h>
#include<stdlib.h>
int main()
{
int sum = 0;
for (int i = 1; i <= 100; i++)
{
if (i % 2 == 0)
{
sum -= i;
}
else
sum += i;
}
printf("结果为%d\n",sum);
system("pause");
return 0;
}
24. 给出时间,打印下一秒的时刻
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0, b = 0, c = 0;
printf("请输入时\n");
scanf_s("%d",&a);
printf("请输入分\n");
scanf_s("\n%d", &b);
printf("请输入秒\n");
scanf_s("\n%d", &c);
if ((a >= 0 && a <= 23) && (b >= 0 && b <= 59) && (c >= 0 && c <= 59))
{
if (c == 59 && b != 59)
printf("%.2d:%.2d:00\n", a, b + 1);
else if (c == 59 && b == 59 && a != 23)
printf("%.2d:00:00\n", a + 1);
else if (c == 59 && b == 59 && a == 23)
printf("00:00:00\n");
else
printf("%.2d:%.2d:%d\n",a,b,c+1);
}
else
{
printf("输入错误!\n");
}
system("pause");
return 0;
}
25. 数组赋值与打印
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[6] = {};
for (int i = 0; i < 6; i++)
{
arr[i] = (i + 1) * 2;
printf("arr[%d]=%d\n",i,arr[i]);
}
system("pause");
return 0;
}
26. 数组求和
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[5] = {0};
int sum = 0;
printf("请输入:\n");
for (int i = 0; i <5; i++)
{
scanf_s("%d",&arr[i]);
sum += arr[i];
}
printf("sum=%d\n", sum);
system("pause");
return 0;
}
27. 有次数限制的密码输入
#include<stdio.h>
#include<stdlib.h>
int main()
{
int pass = 0;
int i = 1;
while (1)
{
if (i == 1)
printf("请输入密码:");
else
{
printf("密码错误,还有%d次机会,请重新输入:", 6 - i);
}
scanf_s("%d",&pass);
{
if (pass == 123456)
{
printf("输入正确,欢迎使用!\n");
break;
}
else if (i >= 1 && i < 5)
{
i++;
}
else if (i = 5)
{
printf("今日次数已用完,请明日再试!\n");
break;
}
}
}
system("pause");
return 0;
}
28. 找水仙花数
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0, b = 0, c = 0;
for (int i = 100; i <= 999; i++) //水仙花数是三位数
{
a = i / 100; //a得到的值为三位数的百位数
b = i / 10 % 10; //a得到的值为三位数的十位数
c = i % 10; //a得到的值为三位数的个位数
if (i == a*a*a+ b*b*b+c*c*c)
printf("水仙花数有%d\n",i);
}
system("pause");
return 0;
}
29. 数组的输入与拷贝
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr1[5] = {0};
int arr2[5] = {0};
int i = 0;
for (int i = 0; i < 5; i++)
{
scanf_s("%d",&arr1[i]);
arr2[i] = arr1[i];
}
for (i = 0; i < 5;i++) //打印for循环的结果要再进行一次for循环
printf("arr2[%d]=%d\n", i, arr2[i]);
/*for (int j = 0; j < 5; j++) 可以再for循环一下进行拷贝
{
arr2[j] = arr1[j];
printf("arr2[%d]=%d\n",j, arr2[j]);
}*/
system("pause");
return 0;
}
30. 求数组元素中偶数的和
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0;
int sum = 0;
int arr[10] = {0};
for (int i = 0; i < 6; i++) //从终端输入数组元素
{
scanf_s("%d",&arr[i]);
}
for (i = 0; i < 6; i++) //调用数组
{ //将偶数的和加在一起存放在sum里
if (arr[i] % 2 == 0)
{
sum += arr[i];
}
}
printf("sum=%d\n", sum);
system("pause");
return 0;
}
31. 将输入数组的多个个位数,按从后向前的顺序组成一个多位数。
#include<stdio.h>
#include<stdlib.h>
int main()
{//输入0-9的数组元素,让它倒着输出一个整数
int arr[5] = {0};
printf("请输入5个0-9之间的数:\n");
for (int i = 0; i < 5; i++)
{
scanf_s("%d",&arr[i]);
}
int number = 0;
for (int j = 4; j >= 0; j--) //从输入数组元素的最后一个开始
{
number = number * 10 + arr[j];
}
printf("number=%d\n",number);
system("pause");
return 0;
}
32. 将数组中的元素整体向前移动
如输入12345,输出23451
#include<stdio.h>
#include<stdlib.h>
int main()
{ //输入进去的数整体向前移动移位,如输入12345,输出23451
int arr[5] = {0};
for (int i = 0; i < 5; i++)
{
scanf_s("%d",&arr[i]);
}
int first = arr[0]; //先把第一个值赋给first
for (int i = 0; i<4; i++)
{
arr[i] = arr[i+1]; //依次把后面的值赋给前一个
}
arr[4] = first; //把first即第一个的值赋给最后一个
for (int i = 0; i < 5; i++)
{
printf("%d ",arr[i]);
}
putchar('\n');
system("pause");
return 0;
}
33. 将数组中元素倒序放进另一个数组输出
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[6] = { 0 };
int i = 0;
for (int i = 0; i < 6; i++)
{
scanf_s("%d", &arr[i]);
}
for (int i = 0; i < 6/2; i++) //将数组前面和后面的元素对调,循环次数为数组元素的一半
{
int temp = arr[i];
arr[i] = arr[5-i];
arr[5 - i] = temp;
}
for (int i = 0; i < 6; i++)
{
printf("arr[%d]=%d\n", i, arr[i]);
}
system("pause");
return 0;
}
34. 找到数组中连续三个元素和最大的子集
思路:将前三个元素和看作是一个数,再依次向后移动一位,依次作比较。
/*#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[10];
for (int i = 0; i < 10; i++)
{
scanf_s("%d",&arr[i]);
}
int arr2[3] = {0};
int max = arr[0]+arr[1]+arr[2];
int sum = 0;
for (int i = 0; i < 8; i++) //最后三个之后没有连续的三个元素,最后两个元素不再循环
{
sum = arr[i] + arr[i + 1] + arr[i + 2];
if (max < sum)
{
max = sum;
arr2[0] = arr[i];
arr2[1] = arr[i + 1];
arr2[2] = arr[i + 2];
}
}
printf("最大和为%d arr2[0]=%d arr2[1]=%d arr2[2]=%d",max,arr2[0],arr2[1],arr2[2]);
system("pause");
return 0;
}
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[10];
for (int i = 0; i < 10; i++)
{
scanf_s("%d", &arr[i]);
}
int index = 0;
int max = arr[0] + arr[1] + arr[2];
int sum = 0;
for (int i = 0; i < 8; i++)
{
sum = arr[i] + arr[i + 1] + arr[i + 2];
if (max < sum)
{
max = sum;
index = i;
}
}
for (int i = index; i <= index + 2; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
35. 找到数组的最大公约数
思路:先找到数组中最小的数,因为最大公约数不会超过这个最小的数,再从这个最小的数依次向下找,直到数组所有数都能被整除。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[5] = {0};
int min = 0;
for (int i = 0; i < 5; i++) //找到数组中最小的数,因为最大公约数不会超过这个最小的数
{
scanf_s("%d",&arr[i]);
if (i == 0)
{
min = arr[0];
}
if (min>arr[i])
{
min = arr[i];
}
}
while(1)
{
int a = 0;
for (int i = min; i >= 1; i--) //从这个最小的数开始往下找到最大公约数
{
for (int j = 0; j < 5; j++)
if (arr[j] % i != 0) //判断数组中的每个数是否可以被i整除
{
a = 1;
}
if (a == 0)
{
printf("最大公约数为%d\n", i);
break;
}
}
break;
}
system("pause");
return 0;
}
36. 找到数组的最小公倍数
与上题类似,也应该先找到数组中最大的数。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[5] = {0};
for (int i = 0; i < 5; i++)
{
scanf_s("%d", &arr[i]);
}
int num = 1;
while (1)
{
int a = 0;
for (int i = 0; i < 5; i++)
{
if (num%arr[i] != 0)
{
a = 1;
}
}
if (a ==0)
{
printf("最小公倍数为%d\n", num);
break;
}
num++;
}
system("pause");
return 0;
}
37. 删除数组中的某个元素
思路:直接从要删除的元素位置开始,将其后面的元素依次向前移动,直接将要删除的元素覆盖就可以。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[10];
int i = 0;
for (int i = 0; i < 10; i++)
{
scanf_s("%d", &arr[i]);
}
for (int i = 2; i< 10; i++) //从前往前移 ,直接将要删除的元素用后面的元素覆盖就可以了
{
arr[i] = arr[i+1]; //将后面位置的值赋给前一个位置
}
for (int i = 0; i < 10; i++) //只是少了一个元素,数组的长度不改变,所以还是循环10次,但是最后一个元素位置将存储一个任意值
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
38. 在数组中插入一个元素
思路:以要插入元素的位置为届,将其后面的元素从后向后移,这样才不会造成元素覆盖,将要插入元素的位置腾空,就可以直接插入元素值了。
#include<stdio.h>
#include<stdlib.h>
int main()
{//在长度为10的数组中输入9个数,然后在第五个位置插入一个数23,原来的数一次往后移
int arr[10];
int i = 0;
for (int i = 0; i < 9; i++)
{
scanf_s("%d",&arr[i]);
}
for (int i = 8; i >= 4; i--) //从最后一个元素往后移,如果从前面开始向后移的话,后面的元素会被覆盖
{
arr[i+1] = arr[i];
}
arr[4] = 23;
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
39. 找到数组中最大元素的下标
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[10];
for (int i = 0; i < 10; i++)
{
scanf_s("%d",&arr[i]);
}
int max = arr[0];
int index = 0;
for (int i = 0; i < 10; i++)
{
if (max < arr[i]) // <找到第一个最大的元素;<=找到最后一个最大的元素
{
max = arr[i];
index = i;
}
}
for (int i = 0; i < 10; i++)
{
if (max == arr[i]) //找到相同时最大值的下标
printf("最大值的下标为%d ", i);
}
printf("max=%d index=%d\n",max,index);
system("pause");
return 0;
}
40. 遍历输入输出二维数组
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[2][3];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
scanf_s("%d",&arr[i][j]);
}
}
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("arr[%d][%d]=%d\n",i,j,arr[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
41. 求两个二维数组对应位置的元素和
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr1[3][4];
int arr2[3][4];
int i, j;
printf("请为第一个二维数组赋值:\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
scanf_s("%d",&arr1[i][j]);
}
}
printf("请为第二个二维数组赋值:\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
scanf_s("%d", &arr2[i][j]);
}
}
for (int k = 0; k < 3; k++)
{
for (int m = 0; m < 4; m++)
{
printf("%d+%d=%d ", arr1[k][m], arr2[k][m], arr1[k][m]+arr2[k][m]);
}
printf("\n");
}
system("pause");
return 0;
}
42. 二维数组从小到大排序
思路:先将二维数组转为一维数组,再按照一维数组排序比较的方法实现。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int arr[2][3];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
scanf_s("%d", &arr[i][j]);
}
}
int arr1[6];
int index = 0;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
arr1[index++] = arr[i][j];
}
}
for (int i = 0; i < 6; i++)
{
printf("%d ", arr1[i]);
}
printf("\n");
for (int i = 1; i < 5; i++)
{
int flag = 0;
int temp;
for (int j = 0; j < 6-i; j++)
{
if (arr1[j] > arr1[j + 1])
{
temp = arr1[j];
arr1[j] = arr1[j+1];
arr1[j + 1] = temp;
flag = 1;
}
}
if (flag == 0)
{
break;
}
}
printf("从小到大排列为:\n");
for (int i = 0; i < 6; i++)
{
printf("%d ",arr1[i]);
}
printf("\n");
char str[10] = "beijing";
printf("stlen=%d\n",strlen(str));
system("pause");
return 0;
}
43. 倒序输出二维数组的值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[2][3];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
scanf_s("%d", &arr[i][j]);
}
}
for (int i = 1; i>=0; i--)
{
for (int j = 2; j>=0; j--)
{
printf("arr[%d][%d]=%d\n", i, j, arr[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
44. 将一维数组中的元素按奇偶数分别排序
如输入:1 5 3 2 6 8 4 7 9 0
输出:1 3 5 7 9 0 2 4 6 8
思路:先把所有元素排序(冒泡排序),再将排好序的元素按照奇数、偶数依次分别存在新的数组,最后将这两个数组再存放在一个新的数组打印出来。
#include<stdio.h>
#include<stdlib.h>
int main()
{//总体思路:先把所有元素排序,再将排好序的元素按照奇数、偶数依次分别存在新的数组,最后将这两个数组再存放在一个新的数组打印出来
int arr[10] = { 0 };
for (int i = 0; i < 10; i++)
{
scanf_s("%d", &arr[i]);
}
for (int i = 1; i < 10; i++) //先排序(冒泡排序),外层为遍历次数,从1开始
{
int flag = 0; //flag用于判断比较是否完成,即如果所有的元素都是后面的大,flag将一直为0,就跳出循环
for (int j = 0; j < 10 - i; j++) //内层为两两比较,将较大的元素后移,循环完成一次排好一个最大的数,两两比较因此会少一次,所以j<10-i
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 1;
}
}
if (flag == 0) //表示后面的数都比前面的数大,可以跳出循环了
{
break;
}
}
int arr1[10]; //定义两个新数组,分别存放排好序的奇数和偶数
int arr2[10];
int index1 = 0; //定义两个数字,记录奇数组和偶数组元素的下标
int index2 = 0;
for (int i = 0; i < 10; i++)
{
if (arr[i] % 2 != 0) //判断元素是否为奇数
{
arr1[index1++] = arr[i]; //将奇数元素存放在一个新数组arr1里
}
else
{
arr2[index2++] = arr[i]; //将偶数元素存放在一个新数组arr2里
}
}
int newarr[10];
for (int i = 0; i < index1; i++) //把奇数和偶数数组分别存进一个新数组newarr里
{
newarr[i] = arr1[i];
}
for (int i = 0; i < index2; i++)
{
newarr[index1+i] = arr2[i];
}
for (int i = 0; i < 10; i++) //遍历打印新数组newarr[]
{
printf("%d ",newarr[i]);
}
system("pause");
return 0;
}
45. 二维数组中找最大值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[2][3];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
scanf_s("%d", &arr[i][j]);
}
}
int max = arr[0][0];
for (int i = 0; i<2; i++)
{
for (int j = 0; j <3; j++)
{
if (max < arr[i][j])
{
max = arr[i][j];
}
}
}
printf("max=%d",max);
system("pause");
return 0;
}
46. 冒泡排序
/*#include<stdio.h>
#include<stdlib.h>
int main()
{//冒泡排序
int arr[5] = { 0 };
for (int i = 0; i < 5; i++)
{
scanf_s("%d",&arr[i]);
}
int min = arr[0];
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++) //当与最后一个元素比较时考虑j+1越界的问题所以j<4,如果j<5,当j=4时,j+1就越界了
{
if (arr[j]>arr[j + 1]) //把较大的值往后移,较小的值往前移,就是冒泡排序
{
int temp = arr[j]; //两两交换值
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
*/
/*上面的未做优化,即每次排序都要经历5次比较,但实际上每排一次,下次将少一次比较,
因为每次比较会把最大的放在最后,这个数可以不用再与前面的作比较*/
#include<stdio.h>
#include<stdlib.h>
int main()
{//冒泡排序
int arr[5] = { 0 };
for (int i = 0; i < 5; i++)
{
scanf_s("%d", &arr[i]);
}
int min = arr[0];
for (int i = 1; i < 5; i++) //外层循环表示次数,次数从1开始
{
int flag = 0; //内层循环j表示数组下标
for (int j = 0; j < 5-i; j++) //考虑到每完成一次排序比较,下一次比较可以减少一次,所以j<5-i(每外循环一次,内循环的两两比较可以减少一次)
{
if (arr[j]>arr[j + 1]) //把较大的值往后移,较小的值往前移,就是冒泡排序
{
int temp = arr[j]; //两两交换值
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 1;
}
if (flag == 0) //考虑有些数组不用排5次就可以排好,所以在它第一次就排好时结束循环
{
break;
}
printf("第%d次排序:",i); //查看每一次排序的结果
for (int i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}
printf("\n"); //打印第i次排序后,让其自动换行
}
for (int i = 0; i < 5; i++) //查看最后排好的结果
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
47. 将字符串下标为偶数的位置如果是小写字母将其改为大写字母,如果是大写字母保持不变。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[] = "abcDEFjkM";
for (int i = 0; i < strlen(str); i++)
{
if (i%2==0)
{
if (str[i] >= 'a'&&str[i] <= 'z')
{
str[i] -= 32;
}
}
}
printf("%s",str);
system("pause");
return 0;
}
48. 判断输入的字符是不是手机号
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{ //判断输入的字符串是否为手机号
char phoneNum[12] = "";
gets_s(phoneNum);
if (phoneNum[0] != '1') //先判断是否是1开头
{
printf("不是大陆的手机号!\n");
}
else{
int flag = 0; //用于记录输入的字符串中是否有非数字的字符
for (int i = 1; i < 11; i++)
{
if (phoneNum[i] < '0' || phoneNum[i] > '9') //如果字符串中有一个不是数字输出不合法的手机号
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("是大陆的手机号!\n");
}
else{
printf("不合法的手机号!\n");
}
}
system("pause");
return 0;
}
49. 判断字符串A中是否包含字符串B
思路:将字符串A按照字符串B的长度分开存在一个临时字符串中,将临时字符串与字符串B作比较即可。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{ //找到str1中存在与str2相同的子字符串
char str1[] = "abcdefgsjhdefg";
char str2[] = "defg";
for (int i = 0; i < strlen(str1)-3; i++) //四个元素分一组,只需要循环到倒数第三个元素之前
{
char temp[100] = "";
for (int j = 0; j < strlen(str2); j++)
{
temp[j] = str1[j + i]; //将str1中的字符串按照str2的长度分开存在temp中
if (strcmp(temp,str2)==0) //如果strcmp(temp,str2)==0,则两个字符串相等
{
printf("第%d个元素开始出现相同:",i+1); //i记录的是元素下标,从0开始
printf("%s\n ",temp);
}
}
}
system("pause");
return 0;
}
50. 从一个字符串中查找字符
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char address[100]="";
char findchar ;
memset(address, '\0', sizeof(address));
printf("请输入一个字符串:");
gets_s(address);
printf("请输入要查找的字符:");
scanf_s("\n%c",&findchar); //终端赋值失败??
printf("%s %c",address,findchar);
int num = 0;
for (int i = 0; i < strlen(address); i++)
{
if (findchar == address[i])
{
num++;
}
}
if (num == 0)
{
printf("Sorry! Not found!\n");
}
else
{
printf("num=%d\n", num);
}
system("pause");
return 0;
}
51. 倒序输出字符串
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[100];
memset(str,'\0',sizeof(str));
printf("请输入字符串:\n");
gets_s(str);
for (int i = strlen(str); i >= 0; i--)
{
printf("%c",str[i]);
}
printf("\n");
system("pause");
return 0;
}
52. 字符串的输入与长度计算
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[20] = "";
gets_s(str);
//scanf_s("%s",str);
printf("长度为%d",strlen(str));
system("pause");
return 0;
}
53. 计算二位数组的总和和平均值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[2][3];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
scanf_s("%d",&arr[i][j
]);
}
}
int sum = 0;
int num = 0;
int linesum = 0;
int linenum = 0;
for (int i = 0; i < 2; i++)
{
linesum = 0; //只记录一行的和
linenum = 0; //只记录一行的元素个数
for (int j = 0; j < 3; j++)
{
sum += arr[i][j];
num++;
linesum += arr[i][j];
linenum++;
}
printf("第%d行:linesum=%d lineave=%.2f\n",i+1,linesum,linesum/(float)linenum);
}
for (int i = 0; i < 3; i++)
{
int listsum = 0;
int listnum = 0;
for (int j = 0; j < 2; j++)
{
listsum += arr[j][i];
listnum++;
}
printf("第%d列:listsum=%d listave=%.2f\n", i + 1, listsum, listsum / (float)listnum);
}
printf("总计:sum=%d ave=%.2f\n", sum,sum/(float)num); //平均值可能是浮点数,所以要把除数或者被除数中的一个强制转换成浮点数
system("pause");
return 0;
}
54. 字符串的拼接
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s1[100] = "";
char s2[100] = "";
printf("请输入第一个字符串数组:\n");
gets_s(s1);
printf("请输入第二个字符串数组:\n");
gets_s(s2);
strcat_s(s2,s1); //xcode里可以在字符串数组后面+一个常量,表示在这个常量个元素后进行操作
printf("s2=%s", s2);
system("pause");
return 0;
}
55. 字符串的复制
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char s1[100] = "";
char s2[100] = "";
printf("请输入第一个字符串数组:\n");
gets_s(s1);
printf("请输入第二个字符串数组:\n");
gets_s(s2);
strcpy_s(s1,s2);
printf("s1=%s",s1);
system("pause");
return 0;
}
56. 数字字符转换为整数(char to int)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[] = { '2', '5', '3', '1', '2' };
long length = sizeof(str);
int sum = 0;
for (int i = 0; i < length; i++)
{
int num = str[i] - '0'; //将字符变成对应的数字
sum = sum * 10 + num;
}
printf("sum=%d", sum);
system("pause");
return 0;
}
57. 统计字符串中字母的个数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[]="abc123def";
long num = 0;
for (int i = 0; i <strlen(str); i++)
{
if ((str[i] <= 'z'&&str[i] >= 'a') || (str[i] <= 'Z'&&str[i] >= 'A'));
{
num++;
}
}
printf("%ld\n",num);
system("pause");
return 0;
}
58. 寻找字符串中第一次出现的唯一一个的字符
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{ //打印字符串中第一次只出现了一次的字符
char str[] = "abaccdeefshdds";
for (int i = 0; i < strlen(str); i++)
{
char temp = str[i];
int num = 0;
for (int j = 0; j < strlen(str); j++)
{
if (temp == str[j]) //将第一次循环记录的temp与第二次循环比较是否有相等的,若没有,则这个字符只出现了一次
{
num++; //有几个同样的元素,则num记录加一,若num只等于一,则只出现了一次
}
}
if (num == 1)
{
printf("%c\n", temp);
break;
}
}
system("pause");
return 0;
}
59. 字符串输出指定字符
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char c[] = "it's a computer";
int j = 0;
for (int i = 0; i < strlen("computer"); i++) //循环次数为要打印的字符串的长度,可以用strlen()求到
{
j = i + 7; //找到从computer开始的位置,它前面有7个位置
printf("%c",c[j]);
}
printf("\n");
system("pause");
return 0;
}
60. 字符串大小写转换
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[] = "abCDnH";
for (int i = 0; i < strlen(str); i++)
{
if (str[i] >= 'a'&&str[i] <= 'z')
{
str[i] -= 32;
}
else
{
str[i] += 32;
}
}
printf("%s\n",str);
system("pause");
return 0;
}
61. 用函数比较大小
#include<stdio.h>
#include<stdlib.h>
double min(double x, double y)
{
return x < y ? x : y;
}
int main()
{
double a;
double b;
scanf_s("%lf",&a); //double类型输入用%lf
scanf_s("%lf",&b);
double m = min(a, b);
printf("%lf\n",m);
system("pause");
return 0;
}
62. 函数求谐均值
#include<stdio.h>
#include<stdlib.h>
double xiejunzhi(double a, double b)
{
if (a != 0 && b != 0)
{
double ave = (1 / a + 1 / b) / 2;
return 1/ave;
}
else{
printf("0不能求谐均值\n");
}
}
int main()
{
double result = xiejunzhi(3.5, 4.8);
printf("谐均值为%lf\n",result);
system("pause");
return 0;
}
63. 指针
#include<stdio.h>
#include<stdlib.h>
int main()
{ //练习
double *head = NULL; //定义指针head,并赋值NULL
double salary = 8000.75; //定义一个double类型salary,并赋值8000.75
head = &salary; //让head指向salary
printf("&salary=%p\n",&salary); //用&打印salary的地址
printf("head=%p\n",head); //用head打印salary的地址
printf("salary=%.2lf\n",salary); //通过salary本身打印salary的值
printf("*head=%.2lf\n",*head); //通过head显示salary的值
double *tail = NULL;
tail = &salary;
//tail = head; 这两种方式都是让tail指向salary
printf("tail=%p\n",tail); //打印tail本身的值
printf("*tail=%.2lf\n",*tail); //打印tail指向的值
*tail = 3023.25; //通过tail修改salary的值
printf("*head=%.2lf\n",*head); //通过head显示它指向的值
int age = 28;
//head = &age; //将age的地址赋值给head(指针类型与变量类型必须一致,void*除外)
*tail += 100; //通过tail将变量salary的值加100
printf("salary=%.2lf\n",salary);
printf("size of salary =%.2ld\n",sizeof(salary));
printf("size of tail =%.2ld\n", sizeof(tail));
printf("size of head =%.2ld\n", sizeof(head));
system("pause");
return 0;
}
64. 用函数分离出实数的整数部分
#include<stdio.h>
#include<stdlib.h>
int myprint(float number)
{
return(number / 1);
}
int main()
{
int a = myprint(123.45);
printf("%d\n",a);
system("pause");
return 0;
}
65. 裴波拉契数列(函数递归)
#include<stdio.h>
#include<stdlib.h>
int myprint(int n)
{ //斐波拉契数列:1、1、2、3、5、8、13、21.....
if (n == 1 || n == 2) //前两个数是已知的,返回1;
{
return 1;
}
else{
return myprint(n - 1) + myprint(n - 2); //后面的数等于前面两个数之和
} //n不是已知条件,就一直myprint缩小,直到遇到已知的n=1、n=2,然后再一直返回到n的值
}
int main()
{
int a = myprint(8);
printf("%d\n", a);
system("pause");
return 0;
}
66. 函数 循环调用
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void donut(int number)
{
for (int i = 0; i < number; i++)
{
printf("*");
}
printf("\n");
}
int main()
{
donut(3);
system("pause");
return 0;
}
67. 将一个四位数拆分成4个字符,以空格分开
#include<stdio.h>
#include<stdlib.h>
void myprint(int number)
{
if (number >= 1000 && number <= 9999)
{
printf("%d %d %d %d\n", number / 1000, number / 100 % 10, number / 10 % 10, number % 10);
}
else
{
printf("输入的数字不合法\n");
}
}
int main()
{
myprint(1234);
system("pause");
return 0;
}
68. 输出指定格式的字符
比如,输出3行4列的*号
#include<stdio.h>
#include<stdlib.h>
void chline(char ch, int i, int j)
{
for (int m = 0; m < i; m++)
{
for (int n = 0; n < j; n++)
{
printf("%c",ch);
}
putchar('\n');
}
}
int main()
{
chline('*', 3, 4); //输出3行4列的*号
system("pause");
return 0;
}
69. 指针函数
#include<stdio.h>
#include<stdlib.h>
int findmax(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int (*pmax)(int num1,int num2);
pmax = findmax;
int max = pmax(3, 5);
printf("max=%d\n",max);
system("pause");
return 0;
}
70. 指针排序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void paixu(char *str) //首地址
{
int nlength = strlen(str);
for (int i = 1; i < nlength; i++)
{ //冒泡排序
int flag = 0;
for (int j = 0; j < nlength - i; j++)
{
if (str[j]>str[j + 1])
{
char temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
flag = 1;
}
}
if (flag == 0)
{
break;
}
}
}
int main()
{
char str[100] = "";
gets_s(str);
paixu(str);
printf("%s\n",str);
system("pause");
return 0;
}
71. 指针与数组
#include<stdio.h>
#include<stdlib.h>
int main()
{
double salarys[5] = {1500,200.43,1202.78,8000.32,5000};
for (int i = 0; i < 5; i++)
{
printf("%.2f,",*(salarys+i));
}
printf("\n");
printf("数组中第一个元素的地址:%p\n",&salarys[0]);
printf("整个数组中的首地址:%p\n", salarys);
printf("数组中最后一个元素的地址:%p\n", &salarys[4]);
printf("数组中最后一个元素的地址:%p\n", salarys+4);
double *head = &salarys[0];
double *tail = &salarys[4];
printf("*head=%.2f\n",*head);
printf("*tail=%.2f\n",*tail);
printf("head=%p\n", head);
printf("tail=%p\n",tail);
printf("tail-head=%d\n",tail-head);
*head -= 50;
printf("第一个元素减50后的值为%lf\n",*head);
head += 2;
printf("通过指针head加法运算后第三个元素为%.2f\n",*head);
head = &salarys[0];
for (int i = 0; i < 5; i++)
{
printf("使用head顺序输出%.2f,",*(head+i));
}
printf("\n");
for (int i = 0; i <5 ; i++)
{
printf("使用tail倒序输出%.2f,",*(tail-i));
}
printf("\n");
system("pause");
return 0;
}
72. 指针与字符串
#include<stdio.h>
#include<stdlib.h>
int main()
{
char str[100]="";
char* p = NULL;
gets_s(str); //这个编译器字符串输入必须用gets_s,不能用scanf_s
p = str;
printf("%s\n",p);
system("pause");
return 0;
}
73. 指针运算
#include<stdio.h>
#include<stdlib.h>
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,0};
int *p1 = &arr[0];
int *p2 = &arr[5];
long number = p2 - p1;
printf("number=%ld\n",number); //实际运行过程:(p2-p1)/sizeof(int);
system("pause");
return 0;
}
74. 函数、数组
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int sumofarray(int array[], int nlength)
{
int sum = 0;
for (int i = 0; i < nlength; i++)
{
sum += array[i];
}
return sum;
}
int main()
{
int array[5] = {1,2,3,4,5};
int sum = sumofarray(array, 5);
printf("sum=%d\n",sum);
system("pause");
return 0;
}
75. 函数封装输入、输出,找最值
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void scanarray(double array[], int nlength) //输入数组
{
for (int i = 0; i < nlength; i++)
{
scanf_s("%lf",&array[i]);
}
}
void printarray(double array[], int nlength) //打印数组中的元素
{
for (int i = 0; i < nlength; i++)
{
printf("%.2lf ",array[i]);
}
printf("\n");
}
void findmaxmin(double array[], int nlength) //找数组中的最大值与最小值
{
int max = array[0];
int min = array[0];
for (int i = 1; i < nlength; i++)
{
if (max < array[i])
{
max = array[i];
}
if (min>array[i])
{
min = array[i];
}
}
printf("max=%d min=%d\n", max, min);
}
int main()
{
double array[10] = { 0 };
scanarray(array,10);
printarray(array,10);
findmaxmin(array, 10);
system("pause");
return 0;
}
76. 结构体
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{ //给结构体变量赋值并输出。boy1和boy2被定义为外部结构变量,并对boy1作了部分成员变量初始化
struct student{
int age;
char name[10];
float score;
}boy1 = {boy1.age=19}, boy2;
strcpy_s(boy1.name,"xiaoming");
printf("input score\n");
scanf_s("%f",&boy1.score);
boy2 = boy1;
printf("age=%d\n name=%s\n score=%.2f\n",boy1.age,boy1.name,boy1.score);
printf("------------------------\n");
printf("age=%d\n name=%s\n score=%.2f\n", boy2.age, boy2.name, boy2.score);
system("pause");
return 0;
}
77. 结构体数组,计算平均值
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//定义了一个外部结构数组,并计算了平均值、找到了不及格人数
struct student{
int age;
char name[10];
float score;
}boy[3] = {
{18,"xiaoming",70},
{17,"xiaohong",50},
{19,"xiaohua",60.5}
};
int main()
{
float ave = 0, sum = 0;
int num = 0; //记录不及格人数
for (int i = 0; i < 3; i++)
{
sum += boy[i].score;
if (boy[i].score < 60) //遍历分数不及格的boy
{
num += 1;
}
}
ave = sum / 3;
printf("平均成绩为%.2f\n",ave);
printf("不及格人数有%d个\n",num);
system("pause");
return 0;
}
78. 结构指针作函数参数
#include<stdio.h>
#include<stdlib.h>
#define C 3
struct student{
char name[10];
char sex;
int age;
float mathScore;
float chineseScore;
float englishScore;
}students[C] = {
{"xiaoming",'男',18,80,90,56},
{"xiaohong",'女',19,90,91,95},
{"xiaohua",'男',20,50,60,56}
};
void fun(struct student *pstu)
{
float sumMathScore = 0,aveMathScore = 0;
float sumChineseScore = 0, aveChineseScore = 0;
float sumEnglishScore = 0, aveEnglishScore = 0;
int num1 = 0, num2 = 0, num3 = 0, num = 0;
for (int i = 0; i < C; i++)
{
sumMathScore += students[i].mathScore;
sumChineseScore += students[i].chineseScore;
sumEnglishScore += students[i].englishScore;
if (students[i].mathScore < 60)
{
num1++;
}
if (students[i].chineseScore < 60)
{
num2++;
}
if (students[i].englishScore< 60)
{
num3++;
}
}
num = num1 + num2 + num3;
printf("数学不及格的有%d人\n",num1);
printf("语文不及格的有%d人\n", num2);
printf("英语不及格的有%d人\n", num3);
printf("一共不及格的有%d人\n", num);
aveMathScore = sumMathScore / 3;
aveChineseScore = sumChineseScore / 3;
aveEnglishScore = sumEnglishScore / 3;
printf("数学平均分为%.2f\n",aveMathScore);
printf("语文平均分为%.2f\n", aveChineseScore);
printf("英语平均分为%.2f\n", aveEnglishScore);
}
int main()
{
struct student *pstu;
pstu = students;
fun(pstu);
system("pause");
return 0;
}
79. 静态局部变量
#include<stdio.h>
#include<stdlib.h>
void testfunc()
{
static int num = 9; //如果不加static关键字,结果全是9,因为每次testfunc函数被调用时,num被重新分配内存,结束后自定释放内存,并没有保留num++后的值
printf("%d %p",num++,&num); //static的作用就是不会释放内存,也不会重新分配内存,所以num++后的值才会被一直保留下来
}
int main()
{
for (int i = 0; i < 10; i++)
{
testfunc();
printf("\n");
}
system("pause");
return 0;
}
80. 求解特殊的4位数
已知:这个四位数前两位相同,后两位相同,前两位与后两位不同,同时这个四位数是一个整数的平方
#include<stdio.h>
#include<stdlib.h>
int main()
{
for (int i = 1; i < 100; i++) //限定这个整数的平方是一个四位数
{
int num = i*i;
int a = num / 1000; //分别求到这个四位数的千位、百位、十位和个位
int b = num / 100 % 10;
int c = num / 10 % 10;
int d = num % 10;
if (a == b&&c == d&&a != c) //作判断
{
printf("这个四位数为%d\n", num);
break;
}
}
system("pause");
return 0;
}
81. 持续更新中。。。