IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c语言题目 -> 正文阅读

[C++知识库]c语言题目

1.求以下代码的结果

#include <stdio.h> 
int main()
{
	int a[5] = { 1, 2, 3, 4, 5 };
	int* p1 = (int*)(&a + 1);
	int* p2 = (int*)((int)a + 1);
	int* p3 = (int*)(a + 1);
	printf("%d, %x, %d\n", p1[-1], p2[0], p3[1]);
	return 0;
}

分析:在vs-2019中,数组的储存情况是

??? ?int* p1 = (int*)(&a + 1);直接&数组名,得到的是一个数组的地址,&a的类型是int(*)[5],&a+1跨过的是一个数组,得到的是数组末端的地址。(int *)强制转换为指针类型。p1[-1]得到的就是p1前一个地址所对应的值5。

??? ?int* p2 = (int*)((int)a + 1);这里的数组名对应的类型是int *,表示首元素的地址,(int )将a的地址16进制0x00FF74C转化为10进制5240652,加1得到5240653,(int *)将5240653转化为指针类型,得到的16进制数字是p2所对应的地址004FF74D,其数据以16进制存放是0x 02000000。

?int* p3 = (int*)(a + 1);p3对应a【1】的地址,p3[1]就是a【2】的值3

结果:5, 2000000, 3

2.如下代码输出结果是什么?

#include<stdio.h>
char buffer[6] = {0};
char *mystring(){ ? 
? ? char *s = "Hello world";
? ? for(int i = 0;i<(sizeof(buffer) - 1);i++){
? ? buffer[i] = *(s+i);
????}
? ? return buffer;
}
int main(int args,char**argv){
? ? printf("%s\n",mystring());
? ? return 0;
}

解析:局部变量的作用域在作用的代码块范围之内,随着函数结束,数组内容被回收,我们得到了一个野指针,其内容不确定。

3.要求写一个函数,将字符串中的空格替换为%20。样例: “abc defgx yz” 转换“abc%20defgx%20yz”

#include<stdio.h>
#include<string.h>
void fun(char* p, int n)
{
	
	int count = 0;
	for (int i = 0; i < n; i++)
	{
		if (*(p + i) == ' ')
			count++;
	}
	int j = count * 2 + n - 1;//扩大数组长度 从后便利,避免元素被重新覆盖
	for (int i = n - 1; i >= 0; i--)
	{
		if (*(p + i) == ' ')
		{
			p[j--] = '0';
			p[j--] = '2';
			p[j--] = '%';
		}
		else
			p[j--] = p[i];
	}
}
int main()
{
	char arr[20] = { 0 };
	printf("输入字符串内容\n");
	gets(arr);
	int sz = strlen(arr);
	fun(arr, sz);
	puts(arr);
	return 0;
}

4.求 unsigned int 型变量 x 在内存中二进制 1 的个数

//运用&运算:同时为1则为1

#include<stdio.h>
int main()
{
	unsigned int x;
	int count = 0;
	scanf("%d", &x);
	while (x)
	{
		x = x & (x - 1);   
		count++;
	}
	printf("%d", count);
}

5.有一个数组 , 编写函数,求数组中前K个最小的数字

int Fun(int* p,int n)
{
 int k = 0;
 printf("请输入数字k,来查找数组前k个元素中最小的数字,k的范围1~%d\n",n);
 scanf("%d", &k);
 int min = p[0];
 for (int j = 0; j < k; j++)
 {
  if (*(p + j) < min)
   min = *(p + j);
 }
 return min;
}
int main()
{
 int arr[100] = { 0 }; int i = 0;
 printf("请输入数组的数字\n");
 char ch = 0;
 while (ch!='\n')
 {
  scanf("%d", &arr[i]);
  ch=getchar();
  i++;
 }
 i = Fun(arr, i);
 printf("数组前k个元素最小的数字是%d", i);
 return 0;
}

6.输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的 最大值。要求时间复杂度为O(n)。例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输 出为该子数组的和18

#include<stdio.h>   //  1 -2 3
int Sum(int arr[], int i)
{
 int max = arr[0]; int sum = 0, tmp = 0;
 if (i == 1)return arr[0];//数组只有一个元素
 for (int j = 0; j < i; j++)
  if (arr[j] > max)
   max = arr[j];
 if (max < 0)return max;// 数组内容全部是负数 
for (int j = 0; j < i; j++)
 {sum += arr[j];
  if (sum < 0)sum = 0;
  if (sum > max)max = sum;}
 return max;
}
int main()
{
 int arr[100] = {0};char ch = 0;int i = 0;
 printf("输入数组元素\n");
 while (ch != '\n')
 {
  scanf("%d,", &arr[i]);
  i++;
  ch = getchar();
 }
 printf("%d ", Sum(arr, i));
 return 0;
}

7.在字符串中找出第一个只出现一次的字符。如输入 "abaccdeff" ,则输出 'b'

#include<stdio.h>
#include<string.h>
int search(char* p, int n)
{
 if (n == 1)
  return p[0];
 char count[256] = { 0 };
 for (int i = 0; i < n; i++)
  count[p[i]]++;//p[i]里面存放字符转换为了对应的ascii码值
 for (int i = 0; i < n; i++)
  if (count[p[i]]== 1)
  {
   return *(p+i);
   break;
  }
 return '0';
}
int main()
{
 char arr[100] = { 0 }; char ch = 0; int i = 0;
 printf("请输入字符串\n");
 gets(arr);
  i = strlen(arr);
  ch = search(arr, i);
  if (ch != '0') printf("%c ", ch);
  else printf("没有只出现重复的字符\n");
 return 0;
}

8.输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入

”They are students.” 和 ”aeiou” ,则删除之后的第一个字符串变成 ”Thy r stdnts.”
#include<stdio.h>
#include<string.h>
void Delate(char* arr, char* str,int m,int n)
{
	int j = 0;
	for (int i =0;i<m; i++)
	{
		int flag = 1;
		for (int k = 0; k < n; k++)
		{
			if (arr[i] == str[k])
			{
				flag = 0;
				break;
			}
		}
		if (flag == 1)//没有相等的
			arr[j++] = arr[i];
	}
	arr[j] = '\0';
}
int main()
{
	char arr[100] = { 0 };
	char str[100] = { 0 };
	printf("输入第一个字符串\n");
	gets(arr);
	int m = strlen(arr);
	printf("输入第二个字符串\n");
	gets(str);
	int n = strlen(str);
	Delate(arr, str, m, n);
	puts(arr);
	return 0;
}

9.字符串压缩. 输入字符串只包含 a-z 字母以及结束标志,请编写函数实现对连续出现的相同字符进行压缩,例 如: ”xxxyyyyz” 压缩后字符串为 ”3x4yz” ”yyyyyyy” 压缩后为 ”7y”

#include<stdio.h>
#include<string.h>
void Fun(char* p, int n)
{
    int count = 0;//;
    int sz = n;
    int k = 0;
    for (int i = 0; i < n; i++)
    {
        if (p[i] == p[i + 1])
            count++;
        else if (count)
        {
            p[k++] = count + '1';          
            p[k++] = p[i];
            count = 0;
        }
        else
            p[k++] = p[i];
    }
    p[k] = '\0';
}
int main()
{
    char arr[100] = { 0 };
    printf("输入数组内容\n");
    gets(arr);
    int sz = strlen(arr);
    Fun(arr, sz);
    puts(arr);
    return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:16:03  更:2021-08-31 15:16:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/4 18:20:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码