51、题目:学习使用按位与 & 。

  • 分析:0&0=0; 0&1=0; 1&0=0; 1&1=1 【见0为0】
  • 代码:
#include <stdio.h>

int main()
{
	int a = 110;
	int b = 101;
	int c = a & b;
	printf("a = %d\n", a);
	printf("b = %d\n", b);
	printf("a & b = %d \n", c);

	return 0;
}

在这里插入图片描述

52、题目:学习使用按位或 | 。

  • 分析:0|0=0; 0|1=1; 1|0=1; 1|1=1 【见1为1】
  • 代码:
#include <stdio.h>

int main()
{
	int a = 110;
	int b = 100;
	int c = a | b;
	printf("a = %d\n", a);
	printf("b = %d\n", b);
	printf("a & b = %d \n", c);

	return 0;
}

在这里插入图片描述

53、题目:学习使用按位异或 ^ 。

  • 分析:0^ 0=0; 0^ 1=1; 1^ 0=1; 1^1=0 【相同为0,不同为1】
  • 代码:
#include <stdio.h>

int main()
{
	int a = 110;
	int b = 100;
	int c = a ^ b;
	printf("a = %d\n", a);
	printf("b = %d\n", b);
	printf("a & b = %d \n", c);

	return 0;
}

在这里插入图片描述

54、题目:学习使用按位取反~。

  • 分析:~0=1; ~1=0; ~指对一个数的二进制按位取反
    在这里插入图片描述
  • 代码:
#include <stdio.h>

int main()
{
	int a = 5;
	int b = ~a;
	/*
	5  --> 0000 0101
	~a --> 1111 1010  符号位是1为负数,计算机里存负数是用补码存的
		补码是通过原来的数 取反,+1 来的 
		要求原码则反过来求 -1,取反
	-1 --> 1111 1001
		取反,这里的取反是补码,反码的取反,不允许改变符号位的
	取反 --> 1000 0110
	故b是 1000 0110
	那么对应的是 -6
	*/
	printf("b = %d \n", b);

	return 0;
}

在这里插入图片描述

56、题目:学习使用%。

  • 分析:%后面的东西,决定了变量以什么样的格式输出。
  • 代码:
#include <stdio.h>

int main()
{
	int a = 16;
	printf("%d的十进制是%d\n", a, a);
	printf("%d的八进制是%o\n", a, a);
	printf("%d的十六进制是%x\n", a, a);

	return 0;
}

在这里插入图片描述

61、题目:打印出杨辉三角形(要求打印出10行如下图)

  • 分析:
    1
          1  1
          1  2  1
          1  3  3  1
          1  4  6  4  1
          1  5  10 10 5  1
  • 杨辉三角性质:每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大。
  • 代码:
#include <stdio.h>

int main()
{
	int i, j;
	int a[10][10] = {};

	// 第一列和斜线上赋值均为1
	for (i = 0; i < 10; i++) {
		for (j = 0; j <= i; j++) {
			if (i == j || j == 0) {
				a[i][j] = 1;
			}
		}
	}

	// 里面的值按照是前一行对应前两个数字和求解
	for (i = 1; i < 10; i++) {
		for (j = 1; j < i; j++) {
			a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
		}
	}

	for (i = 0; i < 10; i++) {
		for (j = 0; j <= i; j++) {
			printf("%-4d", a[i][j]);
		}
		printf("\n");
	}

	return 0;
}

在这里插入图片描述

66、题目:输入3个数a,b,c,按大小顺序输出。

  • 分析:利用指针方法。
  • 代码:
#include <stdio.h>

void swap(int *x, int *y) {
	int temp;
	temp = *x;
	*x = *y;
	*y = temp;
}

int main()
{
	void swap(int* x, int* y);
	int a, b, c;
	int* pa, * pb, * pc;
	printf("请输入三个数字:");
	scanf_s("%d,%d,%d", &a, &b, &c);
	pa = &a;
	pb = &b;
	pc = &c;

	if (a > b) {
		swap(pa, pb);
	}
	if (a > c) {
		swap(pa, pc);
	}
	if (b > c) {
		swap(pb, pc);
	}
	printf("顺序排列为:%d,%d,%d", a, b, c);

	return 0;
}

67、题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

  • 分析:利用指针输出数组
  • 代码:
#include <stdio.h>
#include <math.h>

int main()
{
	int a[5] = {};
	int i;
	printf("输入5个数字:");
	for (i = 0; i < 5; i++) {
		scanf_s("%d", &a[i]);
	}

	// 找最大值
	int max,x;
	max = a[0]; //将数组中第一个值作为初始值进行比较
	for (i = 1; i < 5; i++) {
		if (a[i] > max) {
			max = a[i];
			x = i;
		}
	}
	printf("max = %d\n", max);

	// 最大值与第一个元素进行交换
	int temp;
	temp = a[0];
	a[0] = a[x];
	a[x] = temp;
	
	// 找最小值
	int min, y;
	min = a[0]; //将数组中第一个值作为初始值进行比较
	for (i = 1; i < 5; i++) {
		if (a[i] < min) {
			min = a[i];
			y = i;
		}
	}
	printf("min = %d\n", min);

	// 最小值与最后一个元素进行交换
	int t;
	t = a[4];
	a[4] = a[y];
	a[y] = t;

	// 最后输出结果
	printf("输出最后结果:\n");
	int* p; // p叫做指针变量;指针是地址,是内存地址。
	//p = a; // a地址赋给p
	for (p = a; p < &a[5]; p++) { // &a[5]指第5个元素的地址,也可以用p+5来表示 指针移到5号元素
		printf("%-4d", *p);
	}
	return 0;
}

在这里插入图片描述

68、题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

  • 分析:
    • 例:1,2 , 3,4 , 5,6
    • 若m=2 则:5,6 ,1 , 2 ,3 ,4
  • 代码:
#include <stdio.h>
#include <math.h>

int main()
{
	int n, m;
	int a[20] = {};
	int* p;
	int i;

	printf("总共整数个数为(n不大于20):");
	scanf_s("%d", &n);
	printf("输入%d个整数:",n);
	for (i = 0; i < n; i++) {
		scanf_s("%d", &a[i]);
	}

	printf("要后移的位置为:(不超过%d大小)",n);
	scanf_s("%d", &m);

	// 一趟操作:将最后一个元素保存,前面所有元素后移,将最后一个元素放到第一个位置
	// 全部循环m次这样的操作
	for (i = 0; i < m; i++) {
		// 保存要取的m个整数;
		p = a + n - 1; //指针指向最后一个元素
		int temp;
		temp = *p;

		// 把前面的所有数依次后移m个位置;
		while (p > a) { // 第一个元素放到第二个位置结束,即一旦p指针指向a所在位置停止
			*p = *(p - 1); // 前一个元素放到后一个元素位置
			p--; // 指针移动
		}
		// 将最后一个整数放到第一个位置
		*p = temp;
	}
	
	// 输出数组
	for (p = a; p < a + n; p++) { //最后一个元素是 a+n-1
		printf("%-4d", *p);
	}
	return 0;
}

在这里插入图片描述

69、题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

  • 分析:约瑟夫环
    在这里插入图片描述
  • 代码:
#include <stdio.h>
#include <math.h>


int main()
{
	int table[100] = {};
	for (int i = 1; i <= 8; i++) {
		table[i] = 1;
	}
	for (int i = 1; i <= 8; i++) {
		printf("%-4d", table[i]);
	}
	printf("\n");

	int index; // 当前指向的人
	int baoshu; // 报数是1还是2还是3
	int count = 8; // 还剩下几个人

	// 第一个人
	index = 0;
	baoshu = 0;

	while (count > 0) {
		index++;
		baoshu++;

		while (table[index] == 0) {
			index++;
			if (index > 8) {
				index = 1;
			}
		}

		if (baoshu == 3) {
			table[index] = 0;
			printf("%-4d", index); // 输出报数顺序
			count--;
			baoshu = 0;
		}

	}

	return 0;
}

在这里插入图片描述

70、题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

  • 分析:
    在这里插入图片描述
  • 代码:
#include <stdio.h>
#include <math.h>

//函数
int length(char a[]) {
	char* p;
	p = a;
	int count = 0;
	while (*p != '\0') {
		count++;
		p++;
	}
	return count;
}
//int length(char *p) {
//	int count = 0;
//	while (*p != '\0') {
//		count++;
//		p++;
//	}
//	return count;
//}
int main()
{
	int length(char a[]);
	char a[10]; 
	printf("请输入字符串:");
	scanf_s("%s", a,20);

	int len = length(a);
	
	printf("字符串内容:%s\n", a);
	printf("字符串个数:%d", len);
	
	return 0;
}

在这里插入图片描述

71、题目:编写input()和output()函数输入,输出5个学生的数据记录。

  • 分析:定义学生结构体数据类型,注意scanf_s
    详细解释:https://blog.csdn.net/weixin_51520483/article/details/123965668
  • 代码:
#include <stdio.h>
#include <math.h>
#include <string.h>
/*
	函数:定义、声明、调用
*/

// 定义一个student的数据类型
struct student{
	char name[20];
	char sex[5];
	int age;
};

void input(struct student *stu) {
	int i;
	printf("请输入5名学生姓名、性别、年龄:\n");
	for (i = 0; i < 5; i++) {
		// scanf("%s%s%d", stu[i].name,stu[i].sex, &stu[i].age);
		scanf_s("%s%s%d", stu[i].name,20, stu[i].sex,20, &stu[i].age);
	}
}
void output(struct student* stu) {
	for (int i = 0; i < 5; i++) {
		printf("姓名:%s,性别:%s,年龄:%d\n",stu[i].name,stu[i].sex,stu[i].age);
	}
}

int main(void)
{
	struct student stu1[5];

/*	char a[20] = "sjncsnc"; //可以这样给字符串数组赋值
		char a[20]; a[20] = "sjncsnc"; //但不能先定义再赋值

	// strcpy只用于解决字符串数组赋值问题
	strcpy(stu1.name, "even");
	strcpy(stu1.sex, "女");
	stu1.age = 17;
*/
	void input(struct student* stu);
	input(stu1);
	void output(struct student* stu);
	output(stu1);

	return 0;
}

在这里插入图片描述

72、题目:创建一个链表。

  • 分析:创建单链表
  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>

// 定义一个节点node
// typedef重新定义类型名称
typedef struct node{
	int data; //数据域
	struct node* next; // 指针域
}linklist; //struct node是旧名字,linklist是新的名字

int main(void)
{
	int n=0;
	printf("元素个数:");
	scanf_s("%d", &n);

	// 定义一个头指针h和尾指针r并让他们指向头结点
	linklist* r;
	linklist* h;
	h = r = (linklist*)malloc(sizeof(node)); //分配一个node大小的内存给头结点

	int i;
	linklist* p; // 定义一个指针,指向节点
	for (i = 1; i <= n; i++) {
		p = (linklist*)malloc(sizeof(node)); //分配一个node大小的内存给节点
		printf("输入第%d个元素的值:", i);
		scanf_s("%d", &(p->data)); // 给数据域赋值
		p->next = NULL; // 新节点的指针域赋为空
		r->next = p; // 上一节点指向新节点
		r = p;  // 尾结点指向新产生的节点(在新节点产生的过程中尾指针一直后移,而头指针不动)
	}
	linklist* ptr;
	for (ptr = h->next; ptr != NULL;ptr=ptr->next) {
		printf("%-4d", ptr->data);
	}

	return 0;
}

在这里插入图片描述

73、题目:反向输出一个链表。

  • 分析:前插法
  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>

// 定义一个节点node
// typedef重新定义类型名称
typedef struct node{
	int data; //数据域
	struct node* next; // 指针域
}linklist; //struct node是旧名字,linklist是新的名字

int main(void)
{
	int n=0;
	printf("元素个数:");
	scanf_s("%d", &n);

	// 定义一个头指针h和尾指针r并让他们指向头结点
	linklist* r;
	linklist* h;
	h = r = (linklist*)malloc(sizeof(node)); //分配一个node大小的内存给头结点

	int i;
	linklist* p; // 定义一个指针,指向节点
	r->next = NULL;
	for (i = 1; i <= n; i++) {
		p = (linklist*)malloc(sizeof(node)); //分配一个node大小的内存给节点
		printf("输入第%d个元素的值:", i);
		scanf_s("%d", &(p->data)); // 给数据域赋值
		p->next = r->next; // 新节点指向尾结点
		r->next = p; // 头指针指向新节点
	}
	linklist* ptr;
	for (ptr = h->next; ptr != NULL;ptr=ptr->next) {
		printf("%-4d", ptr->data);
	}

	return 0;
}

在这里插入图片描述

75、题目:输入一个整数,并将其反转后输出。

  • 分析:利用 % 和 / 求数
  • 代码:
#include <stdio.h>

int main(void)
{
    int n, reversedNumber = 0, remainder;

    printf("输入一个整数: ");
    scanf_s("%d", &n);

    while (n != 0)
    {
        /* 
            例如:234 
            -> 4    4       23
            -> 3    43      2     
            -> 2    432     0
        */
        remainder = n % 10; 
        reversedNumber = reversedNumber * 10 + remainder; 
        n /= 10;
    }

    printf("反转后的整数: %d", reversedNumber);

	return 0;
}

在这里插入图片描述

76、题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n(利用指针函数)

  • 分析:
    • 指针函数:本质是一个函数,不过它的返回值是一个指针。void *malloc(size)
    • 函数指针:本质是一个指针,该指针的地址指向了一个函数。所以它是指向函数的指针。定义如下: typedef int (*fun_ptr)(int,int)
  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

// 奇数
double fun1(int n) {
	double k,sum = 0;
	for (int i = 1; i <= n; i += 2) {
		k = (double)1 / i;
		sum += k;
	}
	return sum;
}
// 偶数
double fun2(int n) {
	double k, sum = 0;
	for (int i = 2; i <= n; i += 2) {
		k = (double)1 / i;
		sum += k;
	}
	return sum;
}

int main(void)
{
	double fun1(int n);
	double fun2(int n);

	// 函数指针 (*p)->指针名 (int)->传入参数类型
	double (*p)(int); 

	int n = 5;

	if (n % 2 == 0) {
		// 偶数
		// 函数指针,执行哪个调用哪个
		p = fun2;
	}else {
		// 奇数
		p = fun1;
	}

	double result = p(n);

	printf("结果为:%f\n", result);
	return 0;
}

在这里插入图片描述

77、题目:填空练习(指向指针的指针)

  • 1.二级指针:指向指针的指针
    在这里插入图片描述

  • 代码:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int a = 100;
	int* p1 = &a; //一级指针,指向a的地址
	int** p2 = &p1; //二级指针,指针p1的地址

	printf("&a = %x\n", &a);
	printf("*p2 = %x\n", *p2);

	printf("a = %d\n", a);
	printf("**p2 = %d\n", **p2);
	return 0;
}

在这里插入图片描述

  • 2.二维数组+指针
  • 代码:
#include <stdio.h>
int main(void)
{
	int a[3][4] = { {0,1,2,3},{4,5,6,7},{8,9,10,11} };
	// 定义整型指针,分别指向4个元素 将二维数组的地址赋给它
	int(*p)[4] = a; 
	//第1个*表示一行数 第2个*表示一行数里的某一个数 后面的+1表示当前行里第几个数
	printf("%d\n", *(*(p + 2) + 1)); 

	return 0;
}

在这里插入图片描述

  • 3.指针的数组:数组中所有的元素,保存的都是指针
  • 代码:
#include <stdio.h>
int main(void)
{
	int a = 1;
	int b = 2;
	int c = 3;
	int* array[3] = { &a,&b,&c };
	int** p = array;
	printf("%d,%d,%d\n", *array[0], *array[1], *array[2]);
	printf("%d,%d,%d", **(p+0), **(p + 1), **(p + 2));

	return 0;
}

在这里插入图片描述

  • 4.指针+字符串
  • 代码:
#include <stdio.h>
int main(void)
{
	const char* s1 = "1111111";
	const char* s2 = "asdf";
	const char* s3 = "zxcv";
	// 存储的是三个字符串的首地址,就是字符串名
	const char* s[3] = { s1,s2,s3 };
	printf("%s\n%s\n%s\n", s[0], s[1], s[2]);

	return 0;
}

在这里插入图片描述

78、题目:找到年龄最大的人,并输出。

  • 分析:
  • 代码:
#include <stdio.h>
#include<stdlib.h>
//struct man
//{
//	char name[20];
//	int age;
//}person1 = {"even",23};
struct man
{
	char name[20];
	int age;
}
person[3] = { "li",18,"wang",19,"zhang",20,};

int main(void)
{
	// 结构类型指针
	struct man* p;
	p = person; //指针指向定义的person
	int m = 0;
	struct man* q = NULL;
	for (int i = 0; i < 3; i++)
	{
		// 找最大年龄
		if (p->age > m) {
			m = p->age; // 保存最大年龄
			q = p; // 保存最大年龄的人
		}
		p++;
	}
	printf("%s,%d\n", q->name, q->age);

	return 0;
}

在这里插入图片描述

79、题目:字符串排序。

  • 代码:
#include <stdio.h>
#include<string.h>

void swap(char* str1, char* str2) {
	char temp[20];
	strcpy(temp, str1);
	strcpy(str1, str2);
	strcpy(str2, temp);
}
int main(void)
{
	char str1[20] = "";
	char str2[20] = "";
	char str3[20] = "";

	// 第1个参数;把字符串存给谁
	// 第2个参数;存储空间有多长
	// 第3个参数;标准输出
	printf("请输入第1个字符串:\n");
	fgets(str1, 20, stdin);
	printf("请输入第2个字符串:\n");
	fgets(str2, 20, stdin); 
	printf("请输入第3个字符串:\n");
	fgets(str3, 20, stdin);
	if (strcmp(str1, str2) > 0) swap(str1, str2);
	if (strcmp(str1, str3) > 0) swap(str1, str3);
	if (strcmp(str2, str3) > 0) swap(str2, str3);

	printf("%s,%s,%s\n", str1, str2, str3);


	return 0;
}

80、题目:海滩上有一堆桃子,五只猴子来分。

  • 第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。
  • 第二只猴子把剩下的桃子又平均分成五份,又多了一个,
  • 它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
  • 问海滩上原来最少有多少个桃子?
  • 分析:
    在这里插入图片描述
  • 代码:
#include <stdio.h>
int main(void)
{
	int i, m, j, k, count; //j代表第五天的桃子数,m暂存j的值,当前j不符合条件时再从m开始遍历
	for (i = 4; i < 10000; i += 4)
	{
		count = 0;
		m = i;
		for (k = 0; k < 5; k++) //循环求前四天的桃子数
		{
			j = i / 4 * 5 + 1;
			i = j;
			if (j % 4 == 0)
				count++;
			else
				break; //如果中间结果不能整除4,直接跳出循环
		}
		i = m;
		if (count == 4) //此时count为第一天的桃子数
		{
			printf("%d\n", count);
			break;
		}
	}


	return 0;
}

在这里插入图片描述

81、题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。

  • 代码:
#include <stdio.h>


int main(void)
{
	int i = 0;
	for (i = 10; i < 100; i++) {
		if (809 * i >= 1000 && 809 * i < 10000 && 8 * i < 100 && 9 * i >= 100) {
			printf("i = %d \t", i);
			printf("%d = %d * %d\n", 809 * i, 800 * i, 9 * i);
		}
	}


	return 0;
}

在这里插入图片描述

82、题目:八进制转换为十进制。

  • 分析:(123) = 1 * 8 ^ 2 + 2 * 8 ^ 1 + 3 * 8 ^0
  • 代码:字符0的ASCII码是48,一个数的整型与字符型相差一个0
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	char a[20];
	int i = 0, n = 0;
	printf("请输入一个8进制数:\n");
	gets_s(a);
	while (a[i] != '\0') {
		n = n * 8 + a[i] - '0'; // 不要忘记 -'0' 这样才能转成整数型
		i++;
	}
	printf("它的十进制为:\n%d", n);

	return 0;
}

在这里插入图片描述

83、题目:求0—7所能组成的奇数个数。

  • 分析:这个问题其实是一个排列组合的问题,当一个数的最后一位为奇数时,那么这个数一定为奇数,不管前面几位是什么数字。
  • 设这个数为 sun=a1a2a3a4a5a6a7a8,a1-a8 (a1-a8可以取 0-7 这个八个数字,首位数字不为 0)
  • 从该数为一位数到该数为8位数开始统计奇数的个数:
    • 1.当只有一位数时也就是该数的最后一位,奇数个数为4
    • 2.当该数为两位数时,奇数个数为4*7=28
    • 3.当该数为三位数时,奇数个数为:487=224
    • …8.当该数为八位数时,奇数个数为:4888888*7(依次为最后一位到第一位)
  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
	int n = 0;
	int sum = 4; //sum的初始值为4表示,只有一位数字组成的奇数个数为4个
	for (n = 1; n <= 8; n++) {
		if (n == 1) { // 1 3 5 7
			printf("一共有%d位数,奇数个数为%d\n", n, 4);
		}
		else if (n == 2) {// 个位4种可能  十位:除去首位不能取0,剩下7个数都可取
			sum += 7 * 4;
			printf("一共有%d位数,奇数个数为%d\n", n, 7 * 4);
		}
		else {
			sum += 7 * (int)pow(8, n - 2) * 4;
			// pow(8,n-2)表示一共有n-2种,每种8个可能性 然后转成int类型
			printf("一共有%d位数,奇数个数为%d\n", n, 7 * (int)pow(8, n - 2) * 4);
		}
	}

	printf("奇数总数为:%d\n", sum);
	

	return 0;
}

在这里插入图片描述

84、题目:一个偶数总能表示为两个素数之和。

  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int isprime(int n) {
	int i;
	if (n < 4) {
		return 1;
	}
	else if (n % 2 == 0) {
		return 0;
	}
	else {
		for (i = 3; i < sqrt(n) + 1; i++) {
			if (n % i == 0) {
				return 0;
			}
		}
	}
	return 1;
}

int main(void)
{
	int n = 0;
	do {
		printf("请输入一个偶数:");
		scanf_s("%d", &n);
	} while (n % 2 != 0);
	int isprime(int n);
	int i;
	for (i = 1; i < n; i++) {
		if (isprime(i) && isprime(n - i)) {
			break;
		}
	}
	printf("偶数%d可以分解成%d和%d两个素数的和\n", n, i, n - i);
	return 0;
}

在这里插入图片描述

85、题目:判断一个素数能被几个9整除。

  • 分析:意思是判断一个素数能整除几个9组成的数,素数是不 能被除1和自身之外的数整除的。
  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int isprime(int n) {
	int i;
	if (n < 4) {
		return 1;
	}
	else if (n % 2 == 0) {
		return 0;
	}
	else {
		for (i = 3; i < sqrt(n) + 1; i++) {
			if (n % i == 0) {
				return 0;
			}
		}
	}
	return 1;
}

int main(void)
{
	int isprime(int n);
	int n = 0;
	do {
		printf("请输入一个素数:");
		scanf_s("%d", &n);
	} while (!isprime(n));

	int num = 9;
	int i;
	for (i = 1;; i++) {
		if (num % n == 0) {
			break;
		}
		else {
			num = num * 10 + 9;
		}
	}
	printf("素数%d能整除%d个9组成的数%d\n", n,i,num);

	return 0;
}

在这里插入图片描述

87、题目:回答结果(结构体变量传递)

  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student
{
    int x;
    char c;
}a;
void f(struct student b)
{
    b.x = 20;
    b.c = 'y';
}
void h(struct student *b)
{
    b->x = 30;
    b->c = 'w';
}
int main()
{
    void f(struct student b);
    a.x = 3;
    a.c = 'a';
    printf("%d,%c\n", a.x, a.c);
    // 通过函数改变 变量的值是做不到的,函数是单方向传值 
    // 改完之后是在新申请的一块空间里进行修改的 没有办法去影响main主空间里的值
    f(a); 
    printf("改变后:\n");
    printf("%d,%c\n", a.x, a.c);
    // 那么去传变量的地址 传指针
    void h(struct student* b);
    struct student* p;
    p = &a;
    h(p);
    printf("改变后:\n");
    printf("%d,%c\n", a.x, a.c);

    return 0;
}

在这里插入图片描述

88、题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。

  • 分析:
  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
    int n, i, j;
    for (i = 1; i <= 7; i++) {
        printf("第%d次输入一个数字(1-50):\n", i);
        scanf_s("%d", &n);
        for (j = 0; j < n; j++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

在这里插入图片描述

89、题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:

  • 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
    int a, i, s[4], t;
    printf("请输入4位数字:");
    scanf_s("%d", &a);
    s[0] = a % 10;
    s[1] = a % 100 / 10;
    s[2] = a % 1000 / 100;
    s[3] = a / 1000;

    for (i = 0; i < 4; i++) {
        s[i] += 5;
        s[i] %= 10;
    }
    for (i = 0; i < 4; i++) {
        t = s[i];
        s[i] = s[3 - i];
        s[3 - i] = t;
    }
    printf("加密后的数字:");
    for (i = 0; i < 4; i++) {
        printf("%d", s[i]);
    }
       
    return 0;
}

在这里插入图片描述

90、题目:数组对应位置交换结果

  • 代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define M 5
int main()
{
    int a[M] = { 1,2,3,4,5 };
    int i, j, t;
    for (i = 0; i < M; i++) {
        printf("%-4d", *(a + i));
    }
    printf("\n");
  
    i = 0;
    j = M - 1;  
    while (i < j) {
        t = *(a + i);
        *(a + i) = *(a + j);
        *(a + j) = t;
        i++;
        j--;
    }
    for (i = 0; i < M; i++) {
        printf("%-4d", *(a + i));
    }
    return 0;
}

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐