<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">在学习的过程中最重要的就是自己对所学的东西感不感兴趣,兴趣在我们学习的过程中会给我们一些动力,从而激发我们潜在的力量,今天就给大家介绍几种有意思的C语言练习题,从而使大家可以对C语言又不一样的学习态度。</span>
①.5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第一,我第三。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四,A第一。
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
对于初学C语言的人来说一看这种题一点思路的都没有,但也不要懊恼,毕竟是人家的面试题么,话不多说先看程序。
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0, d = 0, e = 0;
for (a = 1; a <= 5; a++)
for (b = 1; b <= 5; b++)
for (c = 1; c <= 5; c++)
for (d = 1; d <= 5; d++)
for (e = 1; e <= 5; e++)
if((b == 1) + (a == 3)==1 &&(b == 2) + (e == 4) == 1 && (c == 1) +
(d == 2) == 1&& (c == 5) + (d == 3) == 1 && (e == 4) + (a == 1) ==1)
{
printf("A:%d B:%d C:%d D:%d E:%d\n", a, b, c, d, e);
}
return 0;
}
其中最不容易想到的就是if里边的条件判断,每人说的那句话都是一个假一个真所以判断结果和为1.
②.日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
这个题和上个题有些相似的地方,就是根据每个人说的话的真假可以做出一个判断条件从而达到此题的目的。
#include<stdio.h>
int main()
{
int k = 0;
for (k = 'a'; k <= 'd'; k++)
{
if ((k != 'a') + (k == 'c') + (k == 'd') + (k !='d') == 3)
{
printf("killer is %c", k);
}
}
return 0;
}
判断条件和上题有着一样的思路。
③.猜数字游戏
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
void game();
void menue();
int main()
{
int i = 0;
l:menue();
scanf_s("%d", &i);
switch(i)
{
case 1:game(11);
break;
case 2:game(101);
break;
case 3:game(1001);
break;
case 4: return 0;
break;
default: "error";
}
Sleep(1000);
system("cls");
goto l;
system("pause");
}
void game(int i)
{
int num = 0, r = 0;
srand((int)time(0));
r = (rand() % i);
printf("请猜一个数:>");
scanf_s("%d", &num);
while (num != r)
{
if (num > r)
{
printf("猜大了:<");
}
if (num < r)
{
printf("猜小了:<");
}
scanf_s("%d", &num);
}
printf("猜对了:>");
}
void menue()
{
printf("欢迎进入猜数游戏\n");
printf("1.简单(0-10)\n");
printf("2.一般(0-100)\n");
printf("3.困难(0-1000)\n");
printf("4.退出游戏\n");
}
自己用C语言写出来的第一个算是小游戏的估计就是这个猜数游戏了,猜数字游戏的逻辑也是很简单的作为新手培养感情也是不错的选择。
④.三次密码输入的模拟。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 0,i=0;
char pwd[] = "123456";
char key[7];
printf("请输入密码");
for (i = 0; i < 3; i++)
{
scanf("%s", key);
printf("%s", key);
a = strcmp(pwd, key);
if (a != 0)
{
if (i < 2)
{
printf("密码错误\n请重新输入:");
}
else
{
printf("密码错误\n超过输入次数!!!\n");
}
}
else
{
printf("密码正确\n欢迎使用!\n");
break;
}
}
system("pause");
return 0;
}
是不是有点像银行卡密码的感觉,在这个代码的编写过程中我们创建2个一维数组来存取我们的用户输入密码和正确密码,其次在密码的比对过程我们用了一个strcmp()这个用于比较的库函数。
⑤在屏幕上打印杨辉三角。
#include<stdio.h>
int main()
{
int arr[10][10] = {0};
int i,k,j;
for (i = 0; i <= 10; i++)
{
arr[i][0] = 1;
arr[i][i] = 1;
}
for (i = 2; i < 10; i++)
{
for (j = 1; j < 10; j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for (i = 0; i<10; i++)
{
for (k = 0; k < 10 - i; k++)
{
printf(" ");
}
for (j = 0; j <= i; j++)
{
printf("%3d ", arr[i][j]);
}
printf("\n");
}
system("pause");
return 0;
}
首先我们用了一个
for (i = 0; i <= 10; i++)
{
arr[i][0] = 1;
arr[i][i] = 1;
}
给第一行和对角线赋值为1,然后根据杨辉三角的规律其中的一个数等于肩膀上的2个数之和,用2个for语句固定好每个行每一个维值得值就是:
for (i = 2; i < 10; i++)
{
for (j = 1; j < 10; j++)
{
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
固定好个位置的值接下来的就是每一个值得打印了。