首页 > 其他分享 >第四次实验

第四次实验

时间:2023-11-16 20:24:52浏览次数:20  
标签:int void char 实验 数组 printf include 第四次

任务1-1

#include<stdio.h>
#define N 4
void test1()
{
	int a[N] = {1,9,8,4};
	int i;
	
	//输出数组a占用的内存字节数
	printf("sizeof(a) = %d\n",sizeof(a));
	
	//输出int类型数组a的每一个元素的地址、值;
	
	for(i = 0;i<N;i++)
		printf("%p:%d\n",&a[i],a[i]);	
	
	//输出数组名a对应的值
	printf("a = %p\n",a);
}

void test2(){
	char b[N] = {'1','9','8','4'};
	int i;
	
	//输出数组b占用的内存字节数
	printf("sizeof(b) = %d\n",sizeof(b));
	
	//输出char类型数组b的每个元素的地址,值;
	for(i = 0;i<N;i++)
		printf("%p:%c\n",&b[i],b[i]);
	
	//输出数组名数b对应的值
	printf("b = %p\n",b);	
}

int main()
{
	printf("测试1:int类型一维数组\n");
	test1();
	
	printf("\n测试2:char类型的一维数组\n");
	test2();
	
	return 0;
} 

  

问题:1、int型数组在内存中是连续存放的,每个元素占4个内存单元,数组名a和&a[0]是一样的

   2、char型数组b在内存中是连续存放的,每个元素占用一个内存单元,数组名b和&b[0]是一样的

任务1-2

#include <stdio.h>
#define N 2
#define M 4

void test1() {
    int a[N][M] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
    int i, j;

    // 输出int类型二维数组a占用的内存字节数
    printf("sizeof(a) = %d\n", sizeof(a));

    // 输出int类型二维数组a中每个元素的地址、值
    for (i = 0; i < N; ++i)
        for (j = 0; j < M; ++j)
            printf("%p: %d\n", &a[i][j], a[i][j]);
    printf("\n");

    // 输出int类型二维数组名a, 以及,a[0], a[1]的值
    printf("a = %p\n", a);
    printf("a[0] = %p\n", a[0]);
    printf("a[1] = %p\n", a[1]);
    printf("\n");
}

void test2() {
    char b[N][M] = {{'1', '9', '8', '4'}, {'2', '0', '4', '9'}};
    int i, j;

    // 输出char类型二维数组b占用的内存字节数
    printf("sizeof(b) = %d\n", sizeof(b));

    // 输出char类型二维数组b中每个元素的地址、值
    for (i = 0; i < N; ++i)
        for (j = 0; j < M; ++j)
            printf("%p: %c\n", &b[i][j], b[i][j]);
    printf("\n");

    // 输出char类型二维数组名b, 以及,b[0], b[1]的值
    printf("b = %p\n", b);
    printf("b[0] = %p\n", b[0]);
    printf("b[1] = %p\n", b[1]);
}

int main() {
    printf("测试1: int型两维数组");
    test1();

    printf("\n测试2: char型两维数组");
    test2();

    return 0;
}

  

 

 

问题:1、int型数组a,在内存中是按行存放的,每个元素占用4个内存字节单元,数组名a,a[0],&a[0][0]在数字字面值上是一致的

   2、char型数组b,在内存中是按行存放的,每个元素占用1个内存字节单元,数组名b,b[0],&b[0][0]在数字字面值上是一致的

任务2

#include<stdio.h>
#include<string.h>

#define N 80

void swap_str(char s1[N],char s2[N]);
void test1();
void test2();
int  main()
{
	printf("测试1:用两个一维char数组实现两个字符串交换\n");
	test1();
	
	printf("\n测试2:用二维char数组,实现两个字符串的交换\n");
	test2();
	
	return 0;
}
 
void test1()
{
	char views1[N] = "hey,C,I hate u.";
	char views2[N] = "hey,C,I love u.";
	
	printf("交换前:\n");
	puts(views1);
	puts(views2);
	
	swap_str(views1,views2);
	
	printf("交换后:\n");
	puts(views1);
	puts(views2);
}
 
void test2()
{
	char views[2][N] = {"hey,C,I hate u.","hey,C,I love u."};
	
	printf("交换前:\n");
	puts(views[0]);
	puts(views[1]);
	
	swap_str(views[0],views[1]);
	
	printf("交换后:\n");
	puts(views[0]);
	puts(views[1]);
}

void swap_str(char s1[N],char s2[N])
{
	char tmp[N];
	
	strcpy(tmp,s1);
	strcpy(s1,s2);
	strcpy(s2,tmp);
}

  

问题:一维数组就只有一行,每个元素都按照自己的地址存储,二维数组在存储的时候是按照每一行的的元素进行存储,在两个实参中,第一个实参是直接用一维数组的地址代表首元素的地址,而第二个实参是用二维数组第一行的地址表示首地址,来作为指针。

用法:当使用一维数组传参时,直接用一维数组的数组名作为参数传过去,当二维数组传参时,传入二维数组第一行的地址

任务3-1

#include<stdio.h>
#define N 80

int count(char x[]);

int main()
{
	char words[N+1];
	int n;
	
	while(gets(words)!=NULL)
	{
		n = count(words);
		printf("单词数:%d\n\n",n);
	}
	return 0;
}

int count(char x[]) 
{
	int i;
	int word_flag = 0;//用作单词的标志,一个新单词的开始,值为1;单词结束值为0;
	int number = 0;//统计单词个数 
	
	for(i = 0;x[i]!= '\0';i++)
	{
		if(x[i]==' ')
			word_flag = 0;
		else if(word_flag==0)
		{
			word_flag = 1;
			number++;
		}
	}
	return number;
	 
}

  

任务3-2

#include<stdio.h>
#define N 1000
int main()
{
	char line[N];
	int  word_len;
	int max_len;
	int end;
	int i;
	
	while(gets(line)!=NULL)
	{
		word_len = 0;
		max_len = 0;
		end = 0;
		
		i = 0;
		while(1)
		{
			//跳过连续空格 
			while(line[i]==' ')
			{
				word_len = 0;
				i++; 
			}
			
			//在一个单词中统计当前单词的长度 
			while(line[i]!=' '&&line[i]!='\0')
			{
				word_len++;
				i++;
			}
			
			if(max_len<word_len) 
			{
				max_len = word_len;
				end = i;
			}
			
			if(line[i]=='\0')
			break;
			}
			//输出最长单词
			printf("最长单词:");
			for(i=end-max_len;i<end;i++) 
				printf("%c",line[i]);
			printf("\n");
	}
	return 0;
} 

 

任务4

#include<stdio.h>
#define N 100
void dec_to_n(int x,int n);//函数声明

int main()
{
	int x;
	printf("输入一个十进制整数:");
	while(scanf("%d",&x)!=EOF)
	{
		dec_to_n(x,2);//函数调用,把x转换为2进制输出 
		dec_to_n(x,8);//函数调用,把x转换为8进制输出 
		dec_to_n(x,16);//函数调用,把x转换为16进制输出 
		
		printf("\n输入一个十进制整数:"); 
	} 
	return 0;
 } 
 
void dec_to_n(int x,int n)
{
	char a[17] = "0123456789ABCDEF";
	int z[100];
	int i = 0;
	int j;
	while(x!=0)
	{
		z[i] = x%n;
		x/=n;
		i++;
	}
	
	for(j=i-1;j>=0;j--)
	{
		printf("%c",a[z[j]]);
	}
	printf("\n");
		
}

  

任务5

#include<stdio.h>
#define N 5

//函数声明
void input(int x[],int n);
void output(int x[],int n);
double average(int x[],int n);
void bubble_sort(int x[],int n);

int main()
{
	int scores[N];
	double ave;
	
	printf("录入%d个分数:\n",N);
	input(scores,N);
	
	printf("\n输出课程分数:\n");
	output(scores,N);
	
	printf("\n课程分数处理:计算平均分,排序...\n");
	ave = average(scores,N);
	bubble_sort(scores,N);
	
	printf("\n输出课程均分:%.2f\n",ave);
	printf("\n输出课程分数(高->低):\n");
	output(scores,N);
	
	return 0;
} 
 
//函数定义
//输入n个整数保存在整形数组x中
void input(int x[],int n)
{
	int i;
	for(i = 0;i<n;i++)
		scanf("%d",&x[i]);
	
}

void output(int x[],int n)
{
	int i;
	for(i = 0;i<n;i++)
		printf("%d ",x[i]);
	printf("\n"); 
	
} 

//计算整型数组x中n个元素的均值,并返回
double average(int x[],int n)
{
	int sum = 0;
	double a;
	int i;
	for(i=0;i<n;i++)
	{
		sum+=x[i];
	}
	a = 1.0*sum/n;
	return a; 
} 

//对整形数组x中的n个元素进行降序排列 
void bubble_sort(int x[],int n)
{
	int i;
	int j;
	int tmp;
	for(i=0;i<n-1;i++)//趟 
	{
		for(j=0;j<n-1-i;j++)
		{
			if(x[j]<x[j+1])
			{
				tmp = x[j];
				x[j] = x[j+1];
				x[j+1] = tmp; 
			}
		}
	}
}

  

任务6

#include<stdio.h>
#include<string.h>

#define N 5
#define M 20
 
void output(char str[][M],int n);
void bubble_sort(char str[][M],int n);
  
int main()
{
	char name[][M] = {"Bob","Bill","Joseph","Taylor","George"};
	int i;
	
	printf("输出初始名单:\n");
	output(name,N);
	
	printf("\n排序中\n");
	bubble_sort(name,N);
	
	printf("\n按字典序输出名单:\n");
	output(name,N);
	
	return 0;
}

//功能:按行输出二维数组中的字符串 
void output(char str[][M],int n)
{
	int i;
	
	for(i = 0;i<n;++i)
	printf("%s\n",str[i]);
} 

//功能:使用冒泡排序法对二维数组str中的n个字符串按字典序排序
void bubble_sort(char str[][M],int n)
{
	int i;
	int j; 
	char tmp[100];
	for(i = 0;i<n-1;i++)//趟 
	{
		for(j=0;j<n-1-i;j++)
		{
			if(strcmp(str[j],str[j+1])>0)
			{
				strcpy(tmp,str[j]);
				strcpy(str[j],str[j+1]);
				strcpy(str[j+1],tmp);		
			}
		}
	}
}

  

任务7

#include<stdio.h>
#include<string.h> 
int main()
{
	char n[100] = {'\0'};
	while(gets(n)!=NULL)
	{
		int k;
		k = strlen(n);
		int i,j;
		int co = 0;
		for(i=0;i<k-1;i++)
		{
			for(j=i+1;j<k;j++)
			{
				if(n[j]==n[i])
				{
					co = 1;
					break;
				}
				
			}
		}
		if(co==1)
		printf("YES\n");
		else
		printf("NO\n");
		char n[100] = {'\0'};
	} 
	return 0;	
}

  

任务8

#include<stdio.h>
#define N 100
#define M 4
void output(int x[][N],int n);
void rotate_to_right(int x[][N],int n);

int main()
{
	int t[][N] = {{21,12,13,24},{25,16,47,38},{29,11,32,54},{42,21,33,10}};
	
	printf("原始矩阵:\n");
	output(t,M);//函数调用
	
	rotate_to_right(t,M);//函数调用
	
	printf("变换后的矩阵:\n");
	output(t,M);
	
	return 0; 
}

//函数的定义
//功能:输出一个n*n的矩阵x
void output(int x[][N],int n)
{
	int i,j;
	for(i = 0;i<n;i++)
	{
		for(j = 0;j<n;j++) 
		{
			printf("%4d",x[i][j]);
		}
		
		printf("\n");
	}		
} 

//功能:把一个n*n的矩阵x,的每一列右移,最右边被移出的一列绕回左边
void rotate_to_right(int x[][N],int n)
{
	int arr[n][1];
	int i,j;
	for(i=0;i<n;i++)
	arr[i][0] = x[i][n-1];
	
	for(i = 0;i<n;i++)//行 
	{
		for(j=n-1;j>0;j--)//列 
		{
			x[i][j] = x[i][j-1];
		}
	} 
	for(i=0;i<n;i++)
	x[i][0] = arr[i][0];	
}
 

  

任务9

#include<stdio.h>
#define N 100
void yanzheng(int a[][N],int n);
int main(){
    int arr[N][N];
    int n;
    while(scanf("%d",&n)!=EOF){
		int i,j;
		//附初值 
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)
			{
				arr[i][j] = 0;
			}
		}
		
		//赋值
		int k = 3;
		arr[0][n/2] = 1;
		arr[n-1][n/2+1] = 2;
		for(i=n-1,j=n/2+1;i<=n,j<=n;i--,j++)
		{
		
			//正常情况
			if(i-1!=-1&&j+1!=n)
			{
				//未占用 
				if(arr[i-1][j+1] == 0)
				{
					arr[i-1][j+1] = k;
					k++;
					continue; 
				}
				//已占用
				else if(arr[i-1][j+1]!=0)
				{
					arr[i+1][j] = k;
					k++;
					j = j-1;
					i = i+2;
					continue;
				}
					
			}
				
			//特殊情况:达到上限
			else if(i-1==-1&&j+1!=n) 
			{
				if(arr[n-1][j+1]==0)
				{
					arr[n-1][j+1] = k;
					k++;
					i = n;
					continue;
				}
			} 
			
			//特殊情况:达到右限
			else if(i-1!=-1&&j+1==n) 
			{
				if(arr[i-1][0] == 0)
				{
					arr[i-1][0] = k;
					k++;
					j = -1;
					continue;
				}
			}
			
			//更特殊情况:既达到右限又达到上限
			else
			{
				arr[i+1][j] = k; 
				k++;
				i+=2;
				j-=1; 
				continue;
			}	
		}
		
		//输出结果 
		for(i=0;i<n;i++)
		{
			for(j=0;j<n;j++)
			{
				printf("%4d",arr[i][j]);
			}
			printf("\n");
		}
        yanzheng(arr,n);
    }
    return 0;
}

void yanzheng(int arr[][N],int b)
{
    int i;
	int j;
	int h[b];
	int y[b];
	int c=0;
	for(i=0;i<b;i++)
	{
		h[i]=0;
		y[i]=0;
	}

	//列和	 
	for(i=0;i<b;i++)
	{
		for(j=0;j<b;j++)
		{
			h[i]+=arr[i][j];
		}
	}
	//行和 
	for(i=0;i<b;i++)
	{
		for(j=0;j<b;j++)
		{
			y[i] += arr[j][i];
		}
	}
	//斜和 
	for(i=0,j=0;i<b,j<b;j++,i++)
	{
		c += arr[i][j];
	}

	int a=0;
	for(i=0;i<b;i++)
	{
		if(h[i]!=y[i]||y[i]!=c)
		a = 1;
	}
	if(a == 0)
	printf("每行,每列,每对角线元素之和为:%d\n",c);
	else
	{
		printf("1\n");
	} 
}

  

 

标签:int,void,char,实验,数组,printf,include,第四次
From: https://www.cnblogs.com/hychychyc/p/17837166.html

相关文章

  • 实验4 C语言数组应用编程
    1实验任务1task1_1源代码1#include<stdio.h>2#defineN43voidtest1(){4inta[N]={1,9,8,4};5inti;6//输出数组a占用的内存字节数7printf("sizeof(a)=%d\n",sizeof(a));8//输出int类型数组a中每个元素的地址、值9for(i=0;i<N;......
  • 【操作系统MIT 6.1810(2022版)笔记】Lab实验:环境搭建——以Ubuntu20.04为例
    感觉环境搭建没有别人说的那么难。我是双系统用户(Win+Ubuntu20.04),所以直接在Ubuntu上搭建了。听别人说不要用Ubuntu18.04搭建,不知道为什么参考链接:官网环境搭建教程环境搭建打开终端,输入以下命令并回车运行sudoapt-getinstallgitbuild-essentialgdb-multiarchqemu-s......
  • 实验4
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<math.h>#include<stdio.h>#defineN4voidtest1(){inta[N]={1,9,8,4};inti;//输出数组a占用的内存字节数printf("sizeof(a)=%d\n",sizeof(a));/......
  • 实验四
    作业①要求熟练掌握Selenium查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。候选网站东方财富网输出信息:MYSQL数据库存储和输出格式如下,表头应......
  • 渗透测试第二次实验
    网络空间引擎:白帽汇的fofa,知道创宇的ZoomEye,360的Quake,奇安信的hunter以及shodan和censys等等利用ZoomEye实现信息收集过程:搜索在CN的windows操作系统,运行为Apache的服务器:实时资产更新:可以看到最后更新i时间是2023-11-1508:01点击右上角数据更新即可获取实......
  • F5负载均衡系列教程三【SSL卸载实验,给定场景判断需要添加哪些profile】
    实验拓扑如下,实验环境搭建参考https://www.cnblogs.com/romin/p/17825779.html实验前提条件:1、拥有类似拓扑一样的实验环境;2、搭建简单的web服务器,比如上图的172.16.128.0、172.16.128.1、172.16.128.2三台服务器可以对外提供http和https服务实验初始配置:1、新建如下的pool......
  • 实验4
    实验任务1.1①连续存放,每个元素占用4个内存字节单元,a对应的值和&a[0]一样②连续存放,每个元素占用1个内存字节单元,b对应的值和&b[0]一样实验任务1.2①按行连续存放,每个元素占用4个内存字节单元,a的值和a[0],&a[0][0]的值在数字字面值上一样②按行连续存放,每个元素占用1个内......
  • 【开源】基于Vue.js的高校实验室管理系统
    一、摘要1.1项目介绍基于JAVA+Vue+SpringBoot+MySQL的高校实验室管理系统包含实验室类型模块、实验室档案模块、实验模块、实验设备模块、实验订单模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,高校实验室......
  • 【开源】基于Vue.js的高校实验室管理系统
    一、摘要1.1项目介绍开放实验室管理系统包含实验室类型模块、实验室档案模块、实验模块、实验设备模块、实验订单模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,开放实验室管理系统基于角色的访问控制,给学生......
  • 02_实验二_线程状态及转换
    实验二线程状态及转换实验目的调试线程在各种状态间的转换过程,熟悉线程的状态和转换。通过为线程增加挂起状态,加深对线程状态的理解。预备知识线程都有哪些状态就绪运行阻塞结束EOS是如何定义这些状态线程在其整个生命周期中(从创建到终止)会在多个不同的状态间进......