c语言经典测试题13

1.题1

#include<stdio.h>
int main()
{
unsigned char i = 7;
int j = 0;
for(;i > 0;i -= 3)
{
++j;
}
printf("%d\n", j);
return 0;
}

上述代码的运行结果是什么呢?

我们来分析一下:for循环中没有初始化,但是在上述中i完成初始化了,我们发现j是用来计算循环的次数的,有人会想7-3=4,4-3=1,1-3=-2,这样的话就不满足判断条件i>0,这样不就停下来啦,所以结果j应该等于3,但是这样的想的小伙伴是不是忘记了一个条件那就是i是无符号的char,所以不存在负数,只有一种可能使for循环停下来,那就是i=0时可以,那现在很明确了我们只需要求得i在第一次等于0时循环的次数即可,刚开始为-2时其实1数值为254,然后不断减3为2,再减3为-1,其实为255,再不断减3为0,总共有173次,那到底对不对呢?

运行看看:

 2.题2

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 数据范围:两个数都满足 0≤n≤1000

int Add(int num1, int num2 ) {
while(num2 != 0) {//进位不为0则持续与相加结果进行相加
int tmp = num1 ^ num2;//得到每位相加不考虑进位的数据
num2 = (num1 & num2) << 1;//同1的位相加则会进位
num1 = tmp;
}
return num1;
}

3.题3

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。

int majorityElement(int* nums, int numsSize){
int count = 1;
int tmp = nums[0];
for (int i = 1; i < numsSize; i++) {
if (tmp == nums[i]){//与保存的字符相同则计数+1
count++;
} else {//与保存的字符不同则计数-1
count--;
//计数为0表示有可能保存的字符不是最多的字符,换下一个
if (count == 0) tmp = nums[i + 1];
}
}
return tmp;

4.题4

给定两个数组,编写一个函数来计算它们的交集。

示例: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
static int arr[1000];
*returnSize = 0;
int i, j, k;
for (i = 0; i < nums1Size; i++) {
for (j = 0; j < nums2Size; j++) {
if (nums2[j] == nums1[i]) break;//判断nums1[i] 是否在nums2数组中
}
if (j == nums2Size) {// nums1中i位置的数据在nums2数组中不存在,则非交集数据
continue;
}
//只有在另一个数组中存在的数据才能走下来,判断是否已经被添加到返回数组中
for (j = 0; j < *returnSize; j++) {
if (nums1[i] == arr[j]) break;//判断nums1[i] 是否在 arr 这个返回数组中
}
if (j == *returnSize) {//不在返回数组中,则添加到返回数组中
arr[*returnSize] = nums1[i];
*returnSize += 1;
}
}
return arr;
}

5.题5

输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出 输入描述:

1.输入待截取的字符串

2.输入一个正整数k,代表截取的长度

#include <stdio.h>
int main()
{
char str[101];
while(scanf("%s", str) > 0) {
int n;
scanf("%d", &n);
str[n] = '\0';
printf("%s\n", str);
}
return 0;
}

c语言经典测试题在这里就是最后一篇了,大家学到多少了呢?会不会对c语言有了更多的认识了呢?接下来就是开始更新c++相关的博客了。和大家一起努力很开心,哈哈。

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c23856

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值