1、题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前20个月)

  • 分析:兔子的规律为数列1,1,2,3,5,8,13,21…即下个月是上两个月之和,该模型在数学上称为fibonacci数列。
  • 代码:
#include <stdio.h>int fib(int n) {if (n == 1 || n == 2) {return 1;}else{return fib(n - 1) + fib(n - 2);}
}int main()
{for (int i = 1; i <= 20; i++) {printf("第%d个月兔子总数为:%d\n", i, fib(i));}return 0;
}

2、题目:判断101-200之间有多少个素数,并输出所有素数。

  • 什么是素数?所谓素数就是我们通常说的质数,只能有1和它本身才能整除自己,即除了1和它本身以外不再有其他因数的自然数
  • 假设我们要求7这个数是不是素数,我们要拿2 3 4 5 6来试除它,所以试除范围为2~i-1。
  • 代码:
#include <stdio.h>
int main()
{int i=0;int count = 0; //素数个数for (i = 101; i <= 200; i++) {int j = 0;int flag = 1; //假设是素数for (j = 2; j < i; j++) { // i是否是素数,拿2 到 i-1 范围的数去试除if (i % j == 0) {flag = 0;break; //不是素数,跳出此循环}     }if (flag == 1) {printf("%d\t", i);count++;}}printf("素数的个数为%d", count);return 0;
}

3、题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

  • 分析:

    • 例如153是“水仙花数”,因为:153 = 1的3次方 + 5的3次方 + 3的3次方。
    • 利用for循环控制100-999个数,每个数分解出个位,十位,百位。
  • 代码:
#include <stdio.h>
int main()
{int i = 0;for (i = 100; i <= 999; i++) {int a = i % 10; //个位int b = (i / 10) % 10; //十位int c = i / 100; //百位if (a * a * a + b * b * b + c * c * c == i) {printf("%d\t", i);}}return 0;
}

4、题目:将一个正整数分解质因数。例如:输入90,打印出90=2 *3 * 3 *5。

  • 分析:分解质因数的思路就是用该数n不断除以一个递增的数i(该数初始为2,递增至n)若能整除i,则当前i就为n的因子之一,然后将n用该因子缩小,即n=n / i 再重复执行上述操作,若n = i则说明分解因子结束了。
  • 代码:
#include <stdio.h>
int main()
{int n;printf("请输入一个正整数:");scanf("%d", &n);printf("%d = ", n);for (int i = 2; i <= n; i++){while (i != n) { if (n % i == 0){ //能整除说明i是n的因子之一printf("%d *", i);n = n / i; //找到一个因子i,n/i后缩短n继续找}else{break; //不能整除,跳出这次循环,递增i进行下一轮}}}printf("%d", n); //最后剩下的n不能整除i,也是因子之一return 0;
}

5、题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

  • 分析:利用 if 判断或者三元运算符
  • 代码:
#include <stdio.h>
int main()
{int score;char grade;printf("请输入成绩:");scanf("%d", &score);grade = (score >= 90)? 'A' : ((score >= 60) ?'B' : 'C');printf("%c", grade); return 0;
}

6、题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

  • 分析:利用辗除法。

    • 最大公约数:假设两个数字a和b,求两个数字相除的余数c=a % b,如果余数为0,则b为最大公约数。如果b不为零,a=b,b=c,继续循环计算。
    • 最小公倍数:两个数的最小公倍数数等于两个数的乘积除以两个数的最大公约数。即:x,y的最小公倍数 min(公倍数)=x*y÷max(公约数)。
  • 代码:
#include <stdio.h>
int main()
{int a = 0;int b = 0;printf("请输入两个正整数:");scanf("%d %d", &a, &b);int z = a * b;// 最大公约数int c = 0;while (a % b != 0){c = a % b;a = b;b = c;}printf("最大公约数:%d\n", b);// 最小公倍数int min = z / b;printf("最小公倍数:%d\n", min);return 0;
}

7、题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

  • 分析:利用while语句,条件为输入的字符不为’\n’。
  • 代码:
#include <stdio.h>int main()
{// 定义英文字母的个数 english// 定义空格字符的个数 space// 定义数字字符的个数 digit// 定义其他字符的个数 otherchar c;int english = 0, space = 0, digit = 0, other = 0;printf("请输入一行字符:");//运用getchar逐个识别,回车结束while ((c = getchar()) != '\n') { if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') {english++;}else if (c == ' ') {space++;}else if (c >= '0' && c <= '9') {digit++;}else{other++;}}printf("英文字母个数:%d,空格字符个数:%d,数字字符个数:%d,其他字符个数:%d",english,space,digit,other);return 0;
}

8、题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。

  • 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
  • 代码:
#include <stdio.h>int main()
{int a = 0,n = 0;int sum = 0,tempsum = 0,temp = 1;printf("请输入(0 - 9)一个整数:");scanf("%d", &a); //数字printf("请输入整数相加的个数:");scanf("%d", &n); //次数for (int i = 1; i <= n; i++){tempsum += a * temp;sum += tempsum;temp *= 10;}printf("最后结果是:%d", sum);return 0;
}

9、题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。

  • 例如6=1+2+3。编程找出1000以内的所有完数。
  • 因子:所有可以整除这个数的数,叫做因子。
  • 完数:某自然数除它本身以外的所有因子之和等于该数,则该数被称为完数。所以1不是完数,就不用考虑1。
  • 代码:
#include <stdio.h>int main()
{int s;printf("1000内的完数是:");for (int i = 2; i < 1000; i++) {s = 0;for (int j = 1; j < i; j++) { if ((i % j) == 0) { //求i与1到j的余数,若余数为0,则j为因子s += j;}}if (s == i) { // 因子相加与该数值相等,则为完数printf("%d \t", i);}}return 0;
}

10、题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

  • 分析:注意求第n次落地时总共经过的米数中反弹高度要*2,因为反弹 -> 落地,两次反弹的高度。
  • 代码:
#include <stdio.h>int main()
{float s = 100.0, h = s / 2;for (int n = 2; n <= 10; n++) {s = s + 2 * h; //第n次落地时共经过多少米h = h / 2; //第n次反跳高度}printf("第10次落地时共经过:%f米\n", s);printf("第10次反弹高度为:%f米\n", h);return 0;
}

11、题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

  • 分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
  • 代码:
#include <stdio.h>int main()
{int count = 0;for (int i = 1; i <= 4; i++) {for (int j = 1; j <= 4; j++) {for (int k = 1; k <= 4; k++) {if (i != j && i != k && j != k) {printf("%d%d%d\t", i, j, k);count++;}                }}}printf("\n组成%d个互不相同且不重复的三位数", count);return 0;
}

12、题目:企业发放的奖金根据利润提成。

  • 利润低于或等于10万元时,奖金可提10%;
  • 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
  • 20万到40万之间时,高于20万元的部分,可提成5%;
  • 40万到60万之间时高于40万元的部分,可提成3%;
  • 60万到100万之间时,高于60万元的部分,可提成1.5%;
  • 高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数?
  • 分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
  • 代码:
#include <stdio.h>int main()
{float money = 0,result = 0,temp = 0;printf("请输入当月利润:");scanf_s("%f", &money);if (money <= 10) {result = money * 0.1;}else if (money > 10 && money <= 20) {temp = money - 10;result = 10 * 0.1 + temp * 0.075;}else if (money > 20 && money <= 40) {temp = money - 20;result = 10 * 0.1 + temp * 0.05;}else if (money > 40 && money <= 60) {temp = money - 40;result = 10 * 0.1 + temp * 0.03;}else if (money > 60 && money <= 100) {temp = money - 60;result = 10 * 0.1 + temp * 0.015;}else{temp = money - 100;result = 10 * 0.1 + temp * 0.01;}printf("应发放奖金总数为:%f 万",result);return 0;
}

13、题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

  • 分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
  • 代码:
#include <stdio.h>
#include <math.h>int main()
{int i,a,b;for ( i = 1; i < 100000; i++) {a = sqrt(i + 100); // a 是加上100之后开方后的结果b = sqrt(i + 268); // b 是加上268之后开方后的结果if (a* a == i + 100 && b * b == i + 268) {printf("%d\n", i);}}return 0;
}

14、题目:输入某年某月某日,判断这一天是这一年的第几天?

  • 分析:以2023年2月22日为例,应该先把前1个月的加起来,然后再加上22天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
  • 代码:
#include <stdio.h>int main()
{int day, month, year, sum;printf("请输入查询日期:\n");printf("请输入年份:");scanf_s("%d", &year);printf("请输入月份:");scanf_s("%d", &month);printf("请输入日期:");scanf_s("%d", &day);// 计算查询的月份之前月份的总天数,例如:查询3月,那么计算1-2月的总天数switch (month){case 1:sum = 0;break;case 2:sum = 31;break;case 3: // 此时先按照是平年,即2月份是28天进行计算sum = 59;break;case 4:sum = 90;break;case 5:sum = 120;break;case 6:sum = 151;break;case 7:sum = 181;break;case 8:sum = 212;break;case 9:sum = 243;break;case 10:sum = 273;break;case 11:sum = 304;break;case 12:sum = 334;break;default:printf("输入错误,请重新输入!");break;}// 月份总天数再加上日期天数sum = sum + day;// 判断是否为闰年if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {if (month > 2) { //如果是闰年且月份大于2,总天数加1sum++;}}printf("%d年%d月%d日的总天数为:%d", year, month, day, sum);return 0;
}

15、题目:输入三个整数x,y,z,请把这三个数由小到大输出。

  • 分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
  • 代码:
#include <stdio.h>int main()
{int x, y, z, tmp;printf("请输入三个整数:");scanf("%d%d%d", &x, &y, &z);// 将三个数中最小的放到x上,最大的放到z上if (x > y) { tmp = x;x = y;y = tmp;}if (x > z) {tmp = z;z = x;x = tmp;}// 上面交换后,最小的就在x上,此时只需要y和z比大小if (y > z) {tmp = y;y = z;z = tmp;}printf("从小到大:%d %d %d\n", x, y, z);return 0;
}

16、题目:用*号输出字母C的图案。

  • 分析:可先用’*'号在纸上写出字母C,再分行输出。
  • 代码:
#include <stdio.h>int main()
{printf(" ****\n");printf(" *\n");printf(" * \n");printf(" ****\n");return 0;
}

17、题目:输出特殊图案。

  • 分析:字符共有256个。不同字符,图形不一样。
  • 代码:
#include <stdio.h>int main()
{char a = 176, b = 219;printf("%c%c%c%c%c\n", b, a, a, a, b);printf("%c%c%c%c%c\n", a, b, a, b, a);printf("%c%c%c%c%c\n", a, a, b, a, a);printf("%c%c%c%c%c\n", a, b, a, b, a);printf("%c%c%c%c%c\n", b, a, a, a, b);return 0;
}

18、题目:输出9*9口诀。

  • 分析:分行与列考虑,共9行9列,i控制行,j控制列。
  • 代码:
#include <stdio.h>int main()
{int r;for (int i = 1; i <= 9; i++) {for (int j = 1; j <= 9; j++) {if (i >= j) {r = i * j;printf("%d * %d = %d\t", i, j, r);}     }printf("\n");}return 0;
}

19、题目:要求输出国际象棋棋盘。

  • 分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
  • 国际象棋棋盘简单表示:八乘八的矩阵或网格,在行数与列数相加为偶数的格子上显示一个字符,其余位置为空格。
  • 代码:
#include <stdio.h>
#include<stdlib.h>int main()
{int i, j;for (i = 1; i <= 8; i++){for (j = 1; j <= 8; j++) {if ((i + j) % 2 == 0) { // 行和列相加为偶数的是白格printf("■");}else {printf("  "); // 3个空格}              }       printf("\n");}return 0;
}

20、题目:打印楼梯,同时在楼梯上方打印两个笑脸。

  • 分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
  • 代码:
#include <stdio.h>int main()
{printf("\1\1\n");//输出两个笑脸for (int i = 1; i < 11; i++){for (int j = 1; j <= i; j++) {printf("%c%c",219,219);}          printf("\n");}return 0;
}

21、题目:猴子吃桃问题

  • 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
  • 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
  • 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
  • 分析:采取逆向思维的方法,从后往前推断。
  • 代码:
#include <stdio.h>int main()
{// 从后往前推int day = 9,d1 = 0;int d2 = 1; //第10天只剩1个桃子while (day > 0) {d1 = (d2 + 1) * 2; //第1天的桃子数是 第2天的加1后 的2倍d2 = d1;day--;}printf("桃子总数为:%d", d1);return 0;
}

22、题目:两个乒乓球队进行比赛,各出三人。

  • 甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。
  • a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
  • 分析:循环依次比较,两两比较,if 判断参赛队员是否重复及对战条件。
  • 代码:
#include <stdio.h>int main()
{char a, b, c; // a、b、c三个选手for (a = 'x'; a <= 'z'; a++) {for (b = 'x'; b <= 'z'; b++) {if (a != b) { //避免重复比赛for (c = 'x'; c <= 'z'; c++) {if (c != a && c != b) { //避免重复比赛if (a != 'x' && c != 'x' && c != 'z') { //所给条件printf("a - %c\n b - %c\n c - %c\n", a, b, c);}}}}}}return 0;
}

23、题目:打印出如下图案(菱形)

  • 分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
  • 图案里的*数量,从上到下看:1 ,3,5,7,5,3,1
  • 图案里空格数量,从上到下看:3,2,1,0,1,2,3
  • 代码:
#include <stdio.h>int main()
{int i, j, k;//先打印前4行for (i = 1; i <= 4; i++) {for (j = 1; j <= 4 - i; j++) { //每一行先打印需要打印的空格,空格数为(4 - 行号),譬如第1行,需要打4-1个空格,第2行需要打4-2个空格printf(" ");}for (k = 1; k <= 2 * i - 1; k++) { //打完空格打‘*',每行需要打印2倍行号-1个,譬如第1行打印2*1 - 1个,第2行打印2*2 - 1=3个printf("*");}printf("\n");}//然后打印后面三行,行号从1开始计算for (i = 1; i <= 3; i++) {for (j = 1; j <= i; j++) { //每行打印空格数为行号数,譬如第1行打印1个,第2行打印2个printf(" ");}for (k = 1; k <= 7 - 2 * i; k++) { //每行打印7-2*i个’*',譬如第1行打印7-2*1=5个,第2行打印7-2*2=3个printf("*");}printf("\n");}return 0;
}

24、题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

  • 分析:请抓住分子与分母的变化规律。
  • 代码:
#include <stdio.h>int main()
{float a = 2,b = 1,sum = 0,temp; // a为分子,b为分母for (int n = 1; n <= 20; n++) {sum = sum + a / b;   temp = a;// 后一项的分子 = 前一项的(分子+分母)a = a + b;// 后一项的分母 = 前一项的分子b = temp;}printf("数列的前20项之和为:%f", sum);return 0;
}

25、题目:求1+2!+3!+…+20!的和

  • 分析:此程序只是把累加变成了累乘。
  • 代码:
#include <stdio.h>int main()
{int a = 1,sum = 0; for (int n = 1; n <= 20; n++) {a = a * n;sum = sum + a; }printf("1+2!+3!+...+20!=%d", sum);return 0;
}

26、题目:利用递归方法求5!。

  • 分析:
    f(n) = n* (n - 1) * (n - 2) * …* 3* 2*1
    f(n) = n * f(n-1)
  • 代码:
#include <stdio.h>int f(int num) {if (num >= 1) {return num * f(num - 1);}else {return 1;}
}int main()
{printf("5!=%d", f(5));return 0;
}

27、题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

  • 分析:其实就是你输出5个,它就一直递归调用,到1的时候就先输出最后一个,再回到原来的函数体执行下一行,也就是输出倒数第二个,然后依次返回原函数体,就是说你进去再出来。
  • 代码:
#include <stdio.h>void f(int n) {char c;if (n == 1) {c = getchar();putchar(c);}else {c = getchar();f(n - 1);putchar(c);}
}int main() {void f(int n);printf("请输入5个字符:");f(5);return 0;
}

28、题目:有5个人坐在一起

  • 问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。
  • 问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
  • 分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
  • 代码:
#include <stdio.h>int age(int n) {int result;if (n == 1) {result = 10;}else {result = age(n - 1) + 2;}return result;
}int main()
{printf("第5个人的年龄是:%d", age(5));return 0;
}

29、题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

  • 分析:把输入的这个整数分解,假如输入一个五位数,那么我们就把这个五位数的万位,千位,百位,十位,个位都求出来,最后输出时先输出个位,就成功实现逆序。
  • 代码:
#include <stdio.h>int main()
{int a, b, c, d, e, x;printf("请输入不多于5位数的正整数:");scanf("%d", &x);a = x / 10000;           //万位b = x % 10000 / 1000;   //千位c = x % 1000 / 100;     //百位d = x % 100 / 10;       //十位e = x % 10;             //个位if (a != 0) { //说明是5位数printf("输入的正整数是5位数\n");printf("逆序为:%d%d%d%d%d", e, d, c, b, a);}else if (b != 0) {printf("输入的正整数是4位数\n");printf("逆序为:%d%d%d%d", e, d, c, b);}else if (c != 0) {printf("输入的正整数是3位数\n");printf("逆序为:%d%d%d", e, d, c);}else if (d != 0) {printf("输入的正整数是2位数\n");printf("逆序为:%d%d", e, d);}else if (e != 0) {printf("输入的正整数是1位数\n");printf("逆序为:%d", e);}return 0;
}

30、题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

  • 分析:根据回文数的定义,将万位,千位,百位,十位,个位都求出来,再个位与万位对比,十位与千位对比。
  • 代码:
#include <stdio.h>int main() {int a, b, d, e, x;printf("请输入一个5位数:");scanf_s("%d", &x);a = x / 10000;           //万位b = x % 10000 / 1000;   //千位d = x % 100 / 10;       //十位e = x % 10;             //个位if (e == a && d == b) {printf("该数:%d是回文数!", x);}else {printf("该数:%d不是回文数!", x);}return 0;
}

31、题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

  • 分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母。
  • monday tuesday wednesday thursday friday saturday sunday
  • 代码:
#include <stdio.h>int main() {char c;char j;printf("请输入星期的第一个字符:");c = getchar();getchar();//如果不加这个,导致下面第二次使用getchar时读入的是换行符并不是第二个输入的字符// monday tuesday wednesday thursday friday saturday sundayswitch (c){case 'm':printf("monday\n");break;case 't':printf("请输入第2个字符:\n");j = getchar();if (j == 'u') {printf("tuesday\n");}if (j == 'h') {printf("thursday\n");}break;case 'w':printf("wednesday\n");break;case 'f':printf("friday\n");break;case 's':printf("friday\n");j = getchar();if (j == 'u') {printf("sunday\n");}if (j == 'a') {printf("saturday\n");}break;default:printf("输入有误,请重新再来!");break;}return 0;
}

34、题目:练习函数调用

  • 代码:
#include <stdio.h>void hello_world(void)
{printf("Hello, world!\n");
}
void three_hellos(void)
{int counter;for (counter = 1; counter <= 3; counter++) {hello_world();//调用此函数}
}
int main()
{three_hellos();//调用此函数return 0;
}

36、题目:求100之内的素数

  • 分析:素数是指质数,在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
  • 代码:
#include <stdio.h>int isPrime(int n) {if (n <= 1) {return 0;}for (int i = 2; i < n; i++) {if (n % i == 0) {return 0;}}return 1;
}int main() {int isPrime(int n);for (int i = 2; i <= 100; i++) {if (isPrime(i)) {printf("%d\t", i);}}return 0;
}

37、题目:对10个数进行排序

  • 分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。
  • 代码:
#include <stdio.h>int main() {int a[10],temp;printf("请输入10个数字:\n");for (int i = 0; i < 10; i++) {scanf_s("%d", &a[i]);}for (int i = 0; i < 10; i++) {int min = i; //将第一个数作为最小的数for (int j = i + 1; j < 10; j++) {if (a[min] > a[j]) {min = j;}}temp = a[i];a[i] = a[min];a[min] = temp;}printf("排序后:\n");for (int i = 0; i < 10; i++) {printf("%d\t", a[i]);}return 0;
}

38、题目:求一个3*3矩阵对角线元素之和

  • 分析:a[i][i]累加后输出。
  • 代码:
#include <stdio.h>int main() {int a[3][3] = { 1,3,4,5,7,9,4,7,1 };int sum = 0;for (int i = 0; i < 3; i++) {sum += a[i][i];}printf("对角线之和:%d", sum);return 0;
}

39、题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

  • 分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。
  • 代码:
#include <stdio.h>int main() {int a[11] = { 1,4,6,9,13,16,19,28,40,100 };int length = sizeof(a) / sizeof(int);printf("原来的数组为:");for (int i = 0; i < length; i++) {printf("%-4d", a[i]);}printf("\n");// 插入一个数int b,i,j;printf("请输入插入的一个数:");scanf_s("%d", &b);if (b > a[9]) {a[10] = b;}else {// b插到什么位置// 先移动后插入for ( i = 0; i < length; i++) {if (a[i] < b) {continue; //跳出本次循环,进行下一次循环}else {for ( j = length - 1; j >= i; j--) {a[j + 1] = a[j]; //从后往前,把元素都后移一位,留出要插入的位置}a[j+1] = b; //插入}break;}}printf("之后的数组为:");for (int i = 0; i < length; i++) {printf("%-4d", a[i]);}printf("\n");return 0;
}

40、题目:将一个数组逆序输出。

  • 分析:用第一个与最后一个交换。
  • 代码:
#include <stdio.h>int main() {int a[5] = { 9,6,5,4,1 };int length = sizeof(a) / sizeof(int);printf("原来的数组为:");for (int i = 0; i < length; i++) {printf("%-4d", a[i]);}printf("\n");// 逆序int temp;for (int i = 0; i < length/2; i++) {temp = a[i];a[i] = a[length - 1 - i];a[length - 1 - i] = temp;}printf("之后的数组为:");for (int i = 0; i < length; i++) {printf("%-4d", a[i]);}return 0;
}

41、题目:学习static定义静态变量的用法

  • 分析:静态变量的值,在被调用的时候,每次都在当前变化的基础上,继续变化。通常作为计数器使用!
  • 没加 static 修饰前:
#include <stdio.h>void varfunc()
{int num = 5;num--;printf("当前num=%d\n", num);
}
void main()
{int i;for (i = 0; i < 3; i++) {varfunc();}
}

  • 加 static 修饰后:
#include <stdio.h>void varfunc()
{static int num = 5; // static修饰num--;printf("当前num=%d\n", num);
}
void main()
{int i;for (i = 0; i < 3; i++) {varfunc();}
}

42、题目:学习使用auto局部定义变量的用法

  • 分析:

    • 关键字auto用于声明一个变量为自动变量,自动变量也称局部变量。
    • 将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。所有局部变量默认都是auto,一般省略不写。
    • auto声明全局变量时,编译出错。auto声明局部变量时,编译正常。
    • auto修饰变量,变量的类型默认为整型。
  • 代码:
#include <stdio.h>void main() {int i, num;num = 2;for (i = 0; i < 3; i++){printf(" The num equal %d \n", num);num++;{auto  num = 1;printf(" The internal block num equal %d \n", num);num++;}}
}

43、题目:学习使用extern的用法。

  • 分析:如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字的声明即可。
  • 代码:

一个源文件 mytest.c

#include <stdio.h>
int number = 100000;

另一个源文件 test.c

#include <stdio.h>
extern int number; //把number放到了一个外部文件进行初始化,通过关键字extern来声明调用这个numbervoid sell(){number--;
}
void main() {sell();printf(" number = %d \n", number);
}

44、题目:变量的作用域。

  • 【一】:全局变量
#include <stdio.h>int a = 1;
int b = 10;
int c;void add() {c = a + b;printf("a = %d\n", a);
}void main()
{add();printf("c = %d\n", c);
}

  • 【二】:就近原则
#include <stdio.h>int a = 1;
int b = 10;
int c;void add() {c = a + b;printf("a = %d\n", a);
}void main()
{a = 20; add(); // 会选择离的近的上面赋值的 a = 20printf("c = %d\n", c);
}

  • 【三】:局部变量
#include <stdio.h>int a = 1;
int b = 10;
int c;void add() {c = a + b;printf("a = %d\n", a);
}void main()
{int a = 20;add(); //它只能调用上面全局变量的a,不能调用上面局部变量【a = 20】printf("c = %d\n", c);
}

46、题目:define宏定义——定义一个变量

  • 分析:特殊变量提出定义。
  • 代码:
#include <stdio.h>
#define PI 3.1415926int main()
{float r = 2;float s = PI * r * r;printf("%f\n", s);
}

47、题目:define宏定义——标识符

  • 【一】分析:将CH定义成乘号
  • 代码:
#include <stdio.h>
#define PI 3.1415926
#define CH *
int main()
{float r = 2;float s = PI CH r CH r;printf("%f\n", s);
}

  • 【二】分析:将定义公式 这样可以同时使用int与float型的
  • 代码:
#include <stdio.h>
#define PI 3
#define CH *
#define s(a,b) a*b*b
int main()
{float r = 2;int t = 3;printf("s(a,b) = %d\n", s(PI, t));printf("s(a,b) = %f\n", s(PI, r));
}

48、题目:#if #ifdef和#ifndef的综合应用。

  • 分析:编译器没有编译该语句,该语句没有生成汇编代码。
  • 【一】#if 类似于if-else
  • 代码:
#include <stdio.h>
#define MAX
#define MAXIMUM(x,y) (x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
int main()
{#define A 0#if (A > 1)printf("A > 1");#elif (A == 1)printf("A == 1");#else printf("A < 1");#endifreturn 0;
}

  • 【二】#ifdef
  • 分析:#ifdef MAX 表示如果已经定义了MAX宏定义【即往前找是否宏定义了MAX】则执行下面的语句
  • 代码:
#include <stdio.h>
#define MAX
#define MAXIMUM(x,y) (x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
int main()
{int a = 10, b = 20;#ifdef MAXprintf("更大的数字是 %d \n", MAXIMUM(a, b));#else printf("更小的数字是 %d \n", MINIMUM(a, b));#endifreturn 0;
}

  • 【三】#ifndef
  • 分析:#ifndef MAX 表示如果没有定义了MAX宏定义则执行下面的语句。
  • 代码:
#define MAX
#define MAXIMUM(x,y) (x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
int main()
{int a = 10, b = 20;#ifndef MINprintf("更大的数字是 %d \n", MAXIMUM(a, b));#else printf("更小的数字是 %d \n", MINIMUM(a, b));#endifreturn 0;
}

50、题目:#include 的应用练习

  • 分析:引用另一个c函数
  • 代码:
  • test.c
#define PI 3.1415926
  • main.c
#include <stdio.h>
#include "test.c"
int main(){float r = 1.5;float area = PI * r * r;printf("area = %f\n",area);return 0;
}

【C语言】机试100题及代码答案(上)相关推荐

  1. 北京电大c语言实验作业二,大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc...

    大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc C语言实验报告实验1-1:helloworld程序:源代码:#includemain(){printf("hellowor ...

  2. 沈航C语言上机实验题答案,大学大一c语言程序设计实验室上机题全部代码答案(实验报告).doc...

    大学大一c语言程序设计实验室上机题全部代码答案(实验报告) C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hell ...

  3. 华为OD机试真题Java_2022-2023-题目0188-网上商城优惠活动(一)

    网上商城优惠活动(一) 题目描述 背景 某网上商城举办优惠活动,发布了满减.打折.无门槛3种优惠券,分别为: 每满100元优惠10元,无使用数限制,如100~199元可以使用1张减10元,200~29 ...

  4. 【华为OD机试真题 python】数轴上两个点集距离

    题目描述 同一个数轴x有两个点的集合A={A1,A2,-,Am}和B={B1,B2,-,Bm},A(i)和B(j)均为正整数.A.B已经按照从小到大排好序,A.B均不为空.给定一个距离R 正整数,列出 ...

  5. 【华为OD机试真题】网上商城优惠活动(python版)100%通过率 超详细代码注释 代码解读

    [华为OD机试真题 2022&2023]真题目录 @点这里@ [华为OD机试真题]信号发射和接收 &试读& @点这里@ [华为OD机试真题]租车骑绿道 &试读& ...

  6. 【华为OD机试真题】货币单位换算(C++javapython)100%通过率 超详细代码注释 代码优化

    [华为OD机试真题 2022&2023]真题目录 @点这里@ [华为OD机试真题]信号发射和接收 &试读& @点这里@ [华为OD机试真题]租车骑绿道 &试读& ...

  7. 【华为OD机试真题】Excel单元格数值统计(javapython)100%通过率 超详细代码注释 代码深度解读

    [华为OD机试真题 2022&2023]真题目录 @点这里@ [华为OD机试真题]信号发射和接收 &试读& @点这里@ [华为OD机试真题]租车骑绿道 &试读& ...

  8. 【华为OD机试真题】AI处理器组合(java)100%通过率 超详细代码注释 代码深度解读

    [华为OD机试真题 2022&2023]真题目录 @点这里@ [华为OD机试真题]信号发射和接收 &试读& @点这里@ [华为OD机试真题]租车骑绿道 &试读& ...

  9. 【华为OD机试真题】字符串解密(C++javapython)100%通过率 超详细代码注释 代码解读

    [华为OD机试真题 2022&2023]真题目录 @点这里@ [华为OD机试真题]信号发射和接收 &试读& @点这里@ [华为OD机试真题]租车骑绿道 &试读& ...

最新文章

  1. 一起谈.NET技术,浅析购物车的实现
  2. C++ 多线程编程总结
  3. C# DataGrid 控件在winform里显示行号
  4. start running 开始跑步减肥
  5. Android 创建自己的Camera App
  6. VS项目属性的一些配置项的总结(important)
  7. openwrt打印服务器硬件需求,openwrt打印服务器
  8. 架构师于小波:魅族实时消息推送架构
  9. 在线工具网,程序员必备小网址
  10. 电脑能登录QQ和微信,但是打不开网页浏览器
  11. grok java_Java Grok.match方法代码示例
  12. Vue返回上一页保留数据
  13. 哈夫曼树【北邮机试】
  14. Redis分布式锁使用不当,酿成一个重大事故,超卖了100瓶飞天茅台!
  15. Python——LeetCode刷题——【387. 字符串中的第一个唯一字符】
  16. jQueryRotate实现 幸运转盘 Demo
  17. mysql复制表以及复制数据库
  18. 一键重装系统win10超详细教程
  19. 电力工程师 计算机英语,电力工程师的英文求职信
  20. 企业从无到有,究竟靠什么?

热门文章

  1. 【开源】蓝奏云直链解析
  2. timedatectl的详细用法
  3. 中国开发者真实现状:40 岁不做开发,算法工程师最稀缺!
  4. 百度又一神器发布!网友:牛逼炸了...
  5. 计算机毕业设计——基于HTML电商购物商城项目设计与实现-快购优品 带论文6500字 答辩ppt
  6. Shiro第十二章-与Spring集成、配置文件初解
  7. 当梵高遇上路飞——海贼王op风格迁移
  8. MySQL数据库---数据库基础
  9. markdown 数学公式 任意符号 存在符号
  10. Android单元测试 Instrumentation