C语言习题练习4

Posted Huang_ZhenSheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言习题练习4相关的知识,希望对你有一定的参考价值。

目录

习题1:

习题2:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字

习题3:写一个函数打印arr数组的内容,不使用数组下标,使用指针。arr是一个整形一维数组。

习题4:求出0~100000之间的所有“水仙花数”并输出。

习题5:写一个函数,可以逆序一个字符串的内容。

习题6:喝汽水问题

习题7:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

习题8:下面代码在32位大端模式处理器上变量b等于()


习题1:

#include <stdio.h>
int i;
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\\n");
    }
    else
    {
        printf("<\\n");
    }
    return 0; 
}

这里的i为全局变量,无初始化默认为0,sizeof操作符,算出的结果的类型是unsigned int,sizeof的返回值类型实际为无符号整形,因此编译器会自动将左侧 i 自动转换为无符号整形的数据,-1对应的无符号整形是一个非常大的数字。

习题2:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字

例如:2+22+222+2222+22222

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//由a组成前n项之和—不考虑溢出
	int a = 0;
	int n = 0;
	scanf("%d %d", &a, &n);
	int i = 0;
	int sum = 0;
	int ret = 0;
	for (i = 1; i <= n; i++)
	{
		sum = 10 * sum + a;
		ret = ret + sum;
	}
	printf("%d ",ret);
	return 0;
}

习题3:写一个函数打印arr数组的内容,不使用数组下标,使用指针。arr是一个整形一维数组。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
方法1:
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int *pa = arr;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ",*(pa+i));
	}
	return 0;
}

方法2:
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int *p = arr;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int *pend = arr + sz - 1;
	while (p <= pend)
	{
		printf("%d ",*p);
		p++;
	}
	return 0;
}

习题4:求出0~100000之间的所有“水仙花数”并输出。

“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身

如:153=1^3+5^3+3^3,则153是一个“水仙花数”。

int main()
{
	int i = 0;
	for (i = 0; i <= 1000000; i++)
	{
		//1.计算i的位数n 
		int n = 0;
		int tmp = i;
		while (tmp)
		{
			n++;
			tmp = tmp / 10;
		}
		//2.计算i的每一位的n次方之和
		tmp = i;
		int sum = 0;
		while (tmp)
		{
			sum = sum + pow(tmp % 10, n);
			tmp = tmp / 10;
		}
		//3.判断
		if (sum == i)
		{
			printf(" %d",i);
		}
	}
	return 0;
}

习题5:写一个函数,可以逆序一个字符串的内容。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char *str)
{
	assert(str);//断言
	char *left = str;
	char *right = str + strlen(str) - 1;
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[100] = "I am a student";
	reverse(arr);
	printf("%s",arr);
	return 0;
}

习题6:喝汽水问题

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int money = 0;
	scanf("%d",&money);
	int total = money;
	int empty = money;
	while (empty >= 2)
	{
		total = total + empty / 2;
		empty = empty / 2 + empty % 2;
	}
	printf("%d\\n",total);
	return 0;
}

习题7:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。

void swap(int arr[], int sz)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("  %d",arr[i]);
	}
}
void move(int arr[], int sz)
{
	int left = 0;
	int right = sz - 1;
	while (left < right)
	{
		while ((left < right) && arr[left] % 2 == 1)
		{
			left++;
		}
		while ((left < right) && arr[right] % 2 == 0)
		{
			right--;
		}
		if (left < right)
		{
			int tmp = arr[left];
			arr[left] = arr[right];
			arr[right] = tmp;
		}
	}
}
int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11};
	int sz = sizeof(arr) / sizeof(arr[0]);
	move(arr, sz);
	swap(arr, sz);
	return 0;
}

习题8:下面代码在32位大端模式处理器上变量b等于()

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	unsigned int a = 0x1234;
	unsigned char b = *(unsigned char *)&a;
	return 0;
}

以上是关于C语言习题练习4的主要内容,如果未能解决你的问题,请参考以下文章

C语言习题练习4

C语言_文件操作相关练习题

c语言编程练习题

C语言指针练习题

C语言指针练习题

day4(while 练习题)