C语言一些题目
完成猜数字游戏
-
-
-
-
-
void Menu() {
-
printf("------------------\n");
-
printf("欢迎来到猜数字小游戏\n");
-
printf("1.开始游戏\n");
-
printf("2.退出\n");
-
printf("------------------\n");
-
}
-
-
int main() {
-
int i = 1;
-
while (i) {
-
Menu();
-
printf("请选择:");
-
scanf("%d", &i);
-
switch (i)
-
{
-
case 1:
-
printf("-------游戏开始------\n");
-
int input = 0;
-
unsigned int num = 0;
-
/*用srand和rand制造出一个伪随机数*/
-
srand((unsigned)time(NULL));
-
num = rand() % 100;
-
while (1) {
-
printf("请猜出你的数字:");
-
scanf("%d", &input);
-
if (num > input) {
-
printf("猜小了!\n");
-
}
-
else if (num < input) {
-
printf("猜大了\n");
-
}
-
else {
-
system("cls");
-
printf("恭喜你猜对了!\n");
-
break;
-
}
-
}
-
break;
-
case 2:
-
i = 0;
-
break;
-
default:
-
printf("选择错误");
-
break;
-
}
-
}
-
system("pause");
-
return 0;
-
}
写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
-
-
-
-
-
typedef int Type;
-
-
int binary_search(Type arr[], int sz, int key) {
-
if (arr == NULL) {
-
return;
-
}
-
/*二分查找*/
-
int left = 0;
-
int right = sz - 1;
-
-
while (left <= right) {
-
/*求出mid的下标*/
-
int mid = left + (right - left) / 2;
-
if (arr[mid] > key) {
-
right = mid - 1;
-
}
-
else if (arr[mid] < key) {
-
left = mid + 1;
-
}
-
else {
-
return mid;
-
}
-
}
-
/*如果到了这里表示没有找到*/
-
return -1;
-
}
-
-
int main() {
-
Type arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
-
int sz = sizeof(arr) / sizeof(arr[0]);
-
int key = 0;
-
int ret = binary_search(arr, sz, key);
-
printf("expect 0, actual :%d", ret);
-
system("pause");
-
return 0;
-
}
编写代码模拟三次密码输入的场景
-
-
-
-
-
-
-
/*模拟三次输入密码的情况*/
-
int main() {
-
int i = 1;
-
char* mes = "123456";
-
while (i) {
-
if (i == 4) {
-
printf("您已经错误三次了!");
-
break;
-
}
-
printf("请输入密码:");
-
char mes2[20];
-
scanf("%s", mes2);
-
if (strcmp(mes, mes2) == 0) {
-
printf("登录成功!");
-
break;
-
}
-
else {
-
printf("第%d次输入失败,请重新输入!\n", i);
-
i++;
-
}
-
}
-
system("pause");
-
return 0;
-
}
编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出
-
-
-
-
-
int main() {
-
char ch;
-
while ((ch = getchar()) != EOF) {
-
if (ch >= 'a' && ch <= 'z') {
-
printf("%c \n", ch - 32);
-
}
-
else if (ch >= 'A' && ch <= 'Z') {
-
printf("%c \n", ch + 32);
-
}
-
else if(ch > '0' && ch < '9'){
-
printf("输错啦!\n");
-
}
-
else {
-
;
-
}
-
}
-
system("pause");
-
return 0;
-
}
写一个函数返回参数二进制中 1 的个数
-
#define _CRT_SECURE_NO_WARNINGS 1
-
#include<stdio.h>
-
#include<stdlib.h>
-
-
int count_one_bits(unsigned int value) {
-
-
int count = 0;
-
int i = 0;
-
while (value) {
-
if (value % 2 == 1) {
-
count++;
-
}
-
value /= 2;
-
}
-
return count;
-
}
-
-
int main() {
-
int i = 15;
-
int ret = count_one_bits(i);
-
printf("expect 4, actual: %d\n", ret);
-
system("pause");
-
return 0;
-
}
输出一个整数的每一位
逆序输出:
-
-
-
-
-
-
int main() {
-
int num = -12495;
-
printf("该整数的每一位为:\n");
-
while (num) {
-
if (num < 0) {
-
num = -num;
-
}
-
printf("%d ", num % 10);
-
num /= 10;
-
}
-
system("pause");
-
return 0;
-
}
正序输出(递归):
-
-
-
-
-
/*递归,正序*/
-
void Print(int num) {
-
if (num < 0) {
-
num = -num;
-
}
-
if (num >= 10) {
-
Print(num / 10);
-
}
-
/*num在10以内了*/
-
printf("%d ", num % 10);
-
}
-
-
int main() {
-
int num = 12124;
-
printf("该整数的每一位为:\n");
-
Print(num);
-
system("pause");
-
return 0;
-
}
编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
-
-
-
-
-
int main() {
-
int i = 0;
-
int a[32] = { 0 };
-
int b[32] = { 0 };
-
int num1 = -1999;
-
int num2 = 2299;
-
for (; i < 32; i++) {
-
a[i] = num1 % 2;
-
num1 /= 2;
-
b[i] = num2 % 2;
-
num2 /= 2;
-
}
-
/*现在把num1和num2两个数的所有位分别存入到了a和b两个数组里面*/
-
int count = 0;
-
for (i = 0; i < 32; i++) {
-
if (a[i] != b[i]) {
-
count++;
-
}
-
}
-
printf("expect 7,actual:%d", count);
-
system("pause");
-
return 0;
-
}
获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
-
-
-
-
-
-
-
int main() {
-
//获取一个二进制序列的偶数位和奇数位
-
int num = -15;
-
int i = 32;
-
int arr[32] = { 0 };
-
if (num >= 0) {
-
/*如果这个数大于0*/
-
for (i = 31; i >= 0; i--) {
-
arr[i] = num % 2;
-
num /= 2;
-
}
-
/*现在数组arr里面是num的二进制序列*/
-
printf("该二进制的奇数序列为:\n");
-
for (i = 0; i < 32; i += 2) {
-
printf("%d", arr[i]);
-
}
-
printf("\n");
-
printf("该二进制的偶数序列为:\n");
-
for ( i = 1; i < 32; i += 2) {
-
printf("%d", arr[i]);
-
if (i % 4 == 0) {
-
printf(" ");
-
}
-
}
-
printf("\n");
-
}
-
else {
-
/*
-
**如果这个数小于0
-
**负数在机器中存的是补码
-
*/
-
//对该数进行求绝对值,然后再减1
-
//源码取反+1就是这个数的补码,所以减个1再取反
-
num = abs(num) - 1;
-
for (i = 0; i < 32; i++) {
-
/*
-
**得到源码了
-
**对每一位进行取反
-
*/
-
arr[i] = !((num%2)^0);
-
num /= 2;
-
}
-
printf("该二进制序列的奇数序列为:\n");
-
for (i = 31; i >= 0; i -= 2) {
-
printf("%d", arr[i]);
-
}
-
printf("该二进制序列的偶数序列为:\n");
-
for (i = 30; i >= 0; i -= 2) {
-
printf("%d", arr[i]);
-
}
-
}
-
system("pause");
-
return 0;
-
}
--------------------- 本文来自 Qregi 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/Qregi/article/details/79319123?utm_source=copy