【GZIST】C语言程序设计 智造涵

文章概述了C语言实验中涉及的多个主题,包括数组操作(数制转换、排序)、函数编程(栈帧、选择排序、幂运算等)、指针概念(基本理解与运算)、以及结构体和共用体的使用,还有数据文件操作。实验内容逐步提升,从基础到提高任务,涉及算法、数据处理和高级特性。
摘要由CSDN通过智能技术生成

【GZIST】C语言程序设计

实验六 数组类型程序设计【-8】

1.数制转换【X】
3.排序【X】

任务3:编写程序,实现题目要求
1.打渔还是晒网【X】
2.对称矩阵
3.比较字符串大小【X】

6.2提高实验任务【X】
1.字符统计
2.数字方阵

6.1基本实验任务

任务1:阅读程序【H】

1.
#include <stdio.h>
int main()
{
	int a[] = { 1,2,3,4,5 }, i, j, s = 0;
	j = 1;
	for (i = 4; i >= 0; i--)
	{
		s = s + a[i] * j;
		j = j * 10;
	}
	printf("s=%d\n", s);
	return 0;
}

在这里插入图片描述

2.
#include <stdio.h>
int main()
{
	char ch[7] = { "65ab21" };
	int i, s = 0;
	for (i = 0; ch[i] >= '0' && ch[i] <= '9'; i += 2)
		s = 10 * s + ch[i] - '0';
	printf("%d\n", s);
	return 0;
}

在这里插入图片描述

3.
#include <stdio.h>
int main()
{
	int i, j, x = 0, y = 0, m;
	int a[3][3] = { 1,-2,0,4,-5,6,2,4 };
	m = a[0][0];
	for (i = 0; i < 3; i++)
	{
		for(j=0;j<3;j++)
			if (a[i][j] > m)
			{
				m = a[i][j];
				x = i;
				y = j;
			}
		printf("(%d,%d)=%d\n", x, y, m);
	}
	return 0;
}

在这里插入图片描述

4.
#include <stdio.h>
int main()
{
	int i;
	char str[10], temp[10];
	gets(temp);
	for (i = 0; i < 4; i++)
	{
		gets(str);
		if (strcmp(temp, str) < 0)
			strcpy(temp, str);
	}
	printf("%s\n", temp);
	return 0;
}

在这里插入图片描述

任务2:完成程序

1.数制转换【X】
2.矩阵运算【硬核】
#include <stdio.h>
#define M 10
int main()
{
	int x[M][M];
	int n, i, j;
	long s = 1;
	printf("输入矩阵行列数(<=10):\n");
	scanf("%d", &n);
	printf("按行输入矩阵数据:\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            scanf("%d", &x[i][j]);
    }
		
    for (i = 0; i < n; i++)
    {
        for (j = i; j < n; j++)
            s *= x[i][j];
    }
			;
    printf("%d\n", s);
	return 0;
}

在这里插入图片描述

3.排序【X】

任务3:编写程序,实现题目要求

1.打渔还是晒网【X】
2.对称矩阵
#include <stdio.h>
#define M 10
int main ( )
{
	int x[M][M];
	int n, i, j;

	printf("输入矩阵行列数(<=10):\n");
	scanf("%d", &n);
	printf("按行输入矩阵数据:\n");
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            scanf("%d", &x[i][j]);
    }
    int flag = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            if (x[i][j] == x[j][i])
                flag = 1;
    }
    if(1==flag)
    printf("矩阵是对称的\n");
	return 0;
}
3.比较字符串大小【X】

6.2提高实验任务【X】

1.字符统计

2.数字方阵

实验七 函数程序设计

7.1基本实验任务

任务1:阅读程序

01-函数栈帧的创建与销毁
#include <stdio.h>
int fun(int x, int y, int z)
{
	z = x * x + y * y;
	return z;
}
int main()
{
	int a = 38;
	fun(7, 3, a);
	printf("%d\n", a);
	return 0;
}

在这里插入图片描述

02-选择排序
#include <stdio.h>
sort(int a[], int n)
{
	int i, j, t, p;
	for (j = 0; j < n - 1; j++)
	{
		p = j;
		for (i = j; i <= n - 1; i++)
			if (a[i] < a[p])
				p = i;
		t = a[p];
		a[p] = a[j];
		a[j] = t;
	}
}
int main()
{
	int a[6] = { 9,6,8,7,11,12 }, i, j, t, p;
	sort(a, 6);
	for (i = 0; i < 6; i++)
		printf("%3d", a[i]);
	return 0;
}

在这里插入图片描述

3.
#include <stdio.h>
#include <stdio.h>
fun(int k)
{
	if (k > 0)
		fun(k - 1);
	printf("%d", k);
}
int main()
{
	int a = 5;
	fun(a);
	return 0;
}

在这里插入图片描述

4.
#include <stdio.h>
int a = 1;
fun(int b)
{
	static int a = 5;
	a += b;
	printf("%d,a");
	return(a);
}
int main()
{
	int d = 3;
	printf("%d\n", fun(d * fun(a + d)));
	return 0;
}

在这里插入图片描述

任务2:完成程序【补】

1.幂运算
2.求平均分
3.数组元素累加和

任务3:编写程序,实现题目要求【补】

1.大小写转换函数
2.十进制到任意进制转换
3.商和余数

7.2提高实验任务【补】

1.素数的平方根之和

2.米字号转移

实验八 指针程序设计

8.1基本实验任务

任务1:阅读程序

01-对存取的基本理解
#include <stdio.h>
int main()
{
	//&向下取地址;*向上解引用;
	//表层是变量,底层是内存;
	//变量从内存进行存(&)和取(*)操作;
	int*p, a = 15, b = 5;
	p = &a;//将a的地址存入指针变量p
	a = *p + b;//*p为解引用,即从地址中取出a
	printf("a=%d, %d", a, *p);
	return 0;
	//注意:指针变量p存放的是a的地址,a运算后,地址中的值也会相对应改变
}

运行结果

02-【疑难点】指针的运算
#include <stdio.h>
int main()
{
	int a[] = { 1,2,3,4,5,6 };
	int* p, i;
	p = a;//将数组存入指针变量
	//数组名就是数组首元素的地址

    //*p表示变量,已经解引用!!!
	*(p + 4) += 3;//须加深理解,指针的运算
    //这行代码将数组的第五个元素(由于数组索引从 0 开始,p + 4 指向第 5 个元素)增加了 3。
    // 因此,数组 a 现在变为 {1, 2, 3, 4, 8, 6}。
	printf("n1=%d,n2=%d\n", *p, *(p + 3));
    //这会打印数组的第一个元素(*p,值为 1)和第四个元素(*(p + 3),值为 4)。
	return 0;
}

在这里插入图片描述

03-大小写分离
#include <stdio.h>
int main()
{
	char a[80], b[80], * p = "aAbcdDefgGH";
	int i = 0, j = 0;
	while (*p != '\0')
	{
		if (*p >= 'a' && *p <= 'z')
		{
			a[i] = *p;
			i++;
		}
		else
		{
			b[j] = *p;
			j++;
		}
        p++;
	}
	a[i] = b[j] = '\0';
	puts(a);
	puts(b);
	return 0;
}

在这里插入图片描述

任务2:完成程序

01-数组元素求和
#include <stdio.h>
int main()
{
	int a[6] = { 2,4,6,8,10,12 };
	int s, i, * p;
	s = 0;
	p = a;
    for (i = 0; i < 6; i++)
    {
        s += *(p + i);
    }
    printf("s=%d\n", s);
	return 0;
}

在这里插入图片描述

02-字符串输入输出
#include <stdio.h>
int main()
{
    char str[61], *p;

    int i;
    for (i = 0; i < 60; i++)
    {
        str[i] = getchar();
        if (str[i] == '\n')
            break;
    }
    str[i] = '\0';
    p = str;//指针初始化
    while (*p)
    {
        putchar(*p);
        p++;//遍历字符数组
    }
    return 0;
}

在这里插入图片描述

任务3:编写程序,实现题目要求

01-简单排序:比较和交换操作是排序的核心。

记得回来看看,懵懵懂懂,变量与指针的空间想象???及交换过程的具象化

#include <stdio.h>
int main()
{
    int a = 0, b = 0, c = 0;
    int* pa = &a;
    int* pb = &b;
    int* pc = &c;
    scanf("%d %d %d", &a, &b, &c);
    if (*pa > *pb)
    {
        int t = *pa;
        *pa = *pb;
        *pb = t;
    }
    if (*pa > *pc)
    {
        int t = *pa;
        *pa = *pc;
        *pc = t;
    }
    if (*pb > *pc)
    {
        int t = *pb;
        *pb = *pc;
        *pc = t;
    }
    printf("%d %d %d", *pa, *pb, *pc);
    return 0;
}

在这里插入图片描述

02-逆序输出【补】

8.2提高实验任务

01-冒泡法排序

冒泡排序的核心思想就是:两两相邻的元素进行比较

#include <stdio.h>
#define MAX_LENGTH 10
void Scanf(int*arr, int sz)
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		scanf("%d", arr + i);//记得取地址
		//scanf("%d", &arr[i]);

	}
}

int count = 0;
void Bubble_Sort(int* arr, int sz)
{
	//1 2 3 4 5 6
	//趟数sz-1
	int i = 0;
	for (i = 0; i < sz - 1; i++)//趟数就是冒泡的个数,最后一个不用冒泡,已经暴漏了,所以是sz-1
	{
		int flag = 1;//假设是有序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)//为什么是sz-1-i,思想是两两相比较,已经冒泡的不用比较,所以要-i,对剩下的进行比较
		{
			count++;
			if (arr[j] > arr[j + 1])//升序
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				flag = 0;
			}
		}
		if (1 == flag)
		{
			break;
		}
	}
}

void Printf(int* arr, int sz)//参数写成指针形式,接收数组首元素的地址
{
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", *(arr+i));//记得解引用
		//printf("%d ", arr[i]);
	}
}

int main()
{
	int arr[MAX_LENGTH] = { 0 };
	int sz = sizeof(arr) / sizeof(arr[0]);

	printf("请输入10个数据进行排序:\n");
	Scanf(arr, sz);

	Bubble_Sort(arr, sz);

	printf("10个数据的顺序为:\n");
	Printf(arr, sz);

	printf("\n count = %d \n", count);

	return 0;
}

2.矩阵的转置【补】

实验九 结构体和共用体程序设计【补】

9.1基本实验任务

任务1:阅读程序

任务2:完成程序

任务3:编写程序,实现题目要求

9.2提高实验任务

实验十 数据文件【补】

10.1基本实验任务

任务1:阅读程序

任务2:完成程序

任务3:编写程序,实现题目要求

10.2提高实验任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

悟空阿瞒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值