1题目描述
编写一个 C 语言程序,计算两个整数在二进制表示中有多少位不同。要求:
1. 提示用户输入两个整数。
2. 比较这两个整数在二进制表示中的每一位(共32位)是否不同。
3. 统计不同的位的数量。
4. 输出不同的位数。
c语言代码:
#include<stdio.h>
int main() {
int a = 0; // 定义第一个整数
int b = 0; // 定义第二个整数
int i = 0; // 循环计数器
int count = 0; // 不同位的计数器
printf("请输入两个整数: "); // 提示用户输入两个整数
scanf("%d %d", &a, &b); // 读取用户输入的两个整数
// 逐位比较两个整数的二进制表示
for (i = 0; i < 32; i++) {
if ((a % 2) != (b % 2)) { // 检查最低位是否不同
count++; // 如果不同,计数器加1
}
a /= 2; // 右移一位
b /= 2; // 右移一位
}
printf("结果: %d\n", count); // 输出不同位的数量
return 0;
}
假设用户输入 5
和 3
:
- 5 的二进制表示为
101
- 3 的二进制表示为
011
- 不同的位数为
2
输出:结果: 2
2反转字符串live
解题1
#include <stdio.h>
#include <string.h>
int main() {
char String[] = "live"; // 定义并初始化一个字符串
char Reverse[5] = { 0 }; // 定义一个用于存储反转后字符串的数组,并初始化为0
int len = strlen(String); // 计算字符串的长度
// 循环反转字符串
for (int i = 0; i < len; i++) {
Reverse[i] = String[len - i - 1]; // 将原字符串的倒数第 i 个字符赋值给反转字符串的第 i 个位置
}
// 输出原字符串和反转后的字符串
printf("原字符串: %s\n", String);
printf("反转后的字符串: %s\n", Reverse);
return 0;
}
解题2
#include <stdio.h>
#include <string.h>
void reverseString(char str[]) {
int start = 0; // 字符串起始位置
int end = strlen(str) - 1; // 字符串结束位置
// 交换字符,直到到达字符串的中间
while (start < end) {
// 交换字符
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++; // 移动起始指针向右
end--; // 移动结束指针向左
}
}
int main() {
char str[] = "live"; // 初始化字符串
printf("原字符串: %s\n", str);
reverseString(str); // 反转字符串
printf("反转后的字符串: %s\n", str);
return 0;
}
3数值交换
#include <stdio.h>
// 函数声明
void swap(int* a, int* b) {
int temp = *a; // 将 a 指向的值保存到临时变量 temp 中
*a = *b; // 将 b 指向的值赋给 a 指向的位置
*b = temp; // 将临时变量 temp 的值赋给 b 指向的位置
}
int main() {
int x = 5; // 初始化 x 为 5
int y = 10; // 初始化 y 为 10
printf("交换前:\n");
printf("x = %d\n", x); // 输出 x 的值
printf("y = %d\n", y); // 输出 y 的值
// 调用 swap 函数,传入 x 和 y 的地址
swap(&x, &y);
printf("交换后:\n");
printf("x = %d\n", x); // 输出交换后的 x 的值
printf("y = %d\n", y); // 输出交换后的 y 的值
return 0; // 程序结束
}
4回文函数判断
回文函数用于判断一个给定的字符串是否为回文。输入是一个字符数组(字符串),输出是一个布尔值,表示该字符串是否为回文。
#include <stdio.h>
#include <string.h>
// 函数声明
// 函数定义
int huiwen(char str[]) {
int len = strlen(str); // 获取字符串的长度
for (int i = 0; i < len / 2; i++) { // 遍历字符串的前半部分
if (str[i] != str[len - i - 1]) { // 检查字符是否与对应的后半部分字符相同
return 0; // 不是回文
}
}
return 1; // 是回文
}
int main() {
char str1[] = "racecar"; // 定义并初始化字符串 1
char str2[] = "hello"; // 定义并初始化字符串 2
if (huiwen(str1)) { // 检查字符串 1 是否是回文
printf("'%s' 是回文。\n", str1); // 输出结果
}
else {
printf("'%s' 不是回文。\n", str1); // 输出结果
}
if (huiwen(str2)) { // 检查字符串 2 是否是回文
printf("'%s' 是回文。\n", str2); // 输出结果
}
else {
printf("'%s' 不是回文。\n", str2); // 输出结果
}
return 0; // 程序结束
}
5将两个字符串连接
#include <stdio.h>
void myStr(char* dest, const char* src) {
// 移动dest指针到末尾
while (*dest) {
dest++;
}
// 将src字符串复制到dest末尾
while (*src) {
*dest++ = *src++;
}
// 添加字符串结束符
*dest = '\0';
}
int main() {
char str1[100] = "Hello, "; // 确保有足够的空间
char str2[] = "world!";
// 使用自定义的字符串连接函数
myStr(str1, str2);
// 打印结果
printf("%s\n", str1); // 输出: Hello, world!
return 0;
}
6题目描述
login
函数用于验证输入的用户名和密码是否正确,若用户名是 “张三” 且密码是 “123”,则返回 1,否则返回 0。welcome
函数根据传入的参数(登录结果)打印不同的提示信息,若登录成功打印 “欢迎登录,登录成功!”,若登录失败打印 “登录失败,请检查账号名和密码。”。
#include <stdio.h>
#include <string.h>
// 登录函数
int login(char username[], char password[]) {
if (strcmp(username, "张三") == 0 && strcmp(password, "123") == 0) {
return 1; // 用户名和密码匹配,返回1表示登录成功
}
else {
return 0; // 用户名或密码不匹配,返回0表示登录失败
}
}
// 欢迎提示函数
void welcome(int result) {
if (result == 1) {
printf("欢迎登录,登录成功!\n"); // 登录成功提示
}
else {
printf("登录失败,请检查账号名和密码。\n"); // 登录失败提示
}
}
int main() {
char username[20]; // 定义用户名数组
char password[20]; // 定义密码数组
printf("请输入账号名:");
scanf("%s", username); // 输入用户名
printf("请输入密码:");
scanf("%s", password); // 输入密码
int result = login(username, password); // 调用登录函数,获取登录结果
welcome(result); // 调用欢迎提示函数,输出登录结果
return 0; // 程序结束
}