C语言学习作业

这篇博客回顾了黑马程序员C语言课程的作业,涉及栈上和堆上开辟二维数组的方法,以及argc和argv在main函数中的含义。还讲解了如何在字符串数组中查找和排序字符串,以及链表结构的基础知识,包括链表结构体的编译原理和链表操作函数的实现。最后,提出了配置文件读写功能的实现挑战,强调了对文件读写综合运用的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🐷这些题都是黑马程序员C语言课程的作业,看完视频可以来看看这个回味一下挺好的。兄弟们求求点赞了。

  1. 如何在栈上开辟一个二维数组,如何在堆上开辟一个二维数组?
    char a[10][20]
char ** a=NULL;
 a=(char**)malloc(sizeof(char*)*10);
for (int i=0;i <10;i++)
{
   
	a[i]=(char*)malloc(sizeof(char)*20);
}
  1. int main(int argc, char *argv[]);
    argc, argv分别代表什么?

argc 为参数个数 ,默认有一个,这个就是程序名!
argv 就是指针数组,由于数组作为参数传递会退化为指针,因此写为 char** argv
同样正确。

  1. 找到数组中指定字符串的位置
    #define NUM(a) (sizeof(a)/sizeof(*a))

char* keywords[] = {
“while”,
“case”,
“static”,
“do”
};

int searcheKeyTable(const char* table[], const int size,
const char* key, int *pos);

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





#define NUM(a) (sizeof(a)/sizeof(*a))

const char* keywords[] = {
   
	"while", 
	"case",
	"static",
	"do"
};

int searcheKeyTable(const char* table[], const int size, 
			  const char* key, int *pos){
   
			  int ret=0;
			  int flag=-1;
				if(table==NULL||key==NULL)
				{
   
					ret=-1;
					printf("searcheKeyTable err: %d",ret);
				}
				/*依次遍历指针数组,找到对应的字符串*/
				for(int i=0;i<size;i++)
				{
   
					ret=strcmp(table[i],key);
					if(ret==0)
					{
   	*pos=i+1;
						flag=0;
						break;
					}
					else
						continue;
				}
				if(flag==-1)
				{
   
					printf("didn't find !\n");
					return -2;
				}
				printf("successful!\n");
				return 0;
			  }


int main(){
   
	int pos;
	int ret=0;
	ret=searcheKeyTable(keywords,NUM(keywords),"static",&pos);
	printf("position=%d\n",pos);
	printf("ret=%d\n",ret);
	
	return 0;
}

  1. 将字符串数组进行排序

int sort(char **array1, int num1,
char (*array2)[30], int num2,
char ***myp3 /out/, int *num3);

int main()
{
int ret = 0;
char *p1[] = {“aa”, “ccccccc”, “bbbbbb”};
char buf2[10][30] = {“111111”, “3333333”, “222222”};
char **p3 = NULL;
int len1, len2, len3, i = 0;
len1 = sizeof(p1)/sizeof(*p1);
len2 = 3;
ret = sort(p1, len1, buf2, len2, &p3, &len3);
return 0;
}

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


void printA(char **p,int n);
int sort(char **array1, int num1,
         char (*array2)[30], int num2, 
         char ***myp3 /*out*/, int *num3)

{
   
	if(array1==NULL||array2==NULL||myp3==NULL||num3==NULL)
		return -1;
	int i=0,j=0;
	int len;
	char buf[100]={
   0};
	char ** temp=NULL;

	len=num1+num2;
	//为myp3开辟对堆空间
	temp=(char**)malloc(len*sizeof(char*));
	for(i=0;i<len;i++)
	{
   
		temp[i]=(char*)malloc(100*sizeof(char));
		memset(temp[i],0,100);
	}	

	for(i=0;i<num1;i++)
	{
   
		strncpy(temp[i],array1[i],strlen(array1[i]));
	}
	for(j=0;j<num2;j++)
	{
   
		strncpy(temp[i+j],array2[j],strlen(array2[j]));
	}
//排序前
	printA(temp,len);
	putchar('\n');
	for(i=0;i<len-1;i++)
	{
   
		for(j=i+1;j<len;j++)
		{
   
			if(strcmp(temp[i],temp[j])>0)
			{
   
				strcpy(buf,temp[i]);
				strcpy(temp[i],temp[j]);
				strcpy(temp[j],buf);
			}
		}
	}
	
	*num3=len;
	*myp3=temp;
	return 0;

}
void printA(char **p,int n)
{
   
	for(int i=0;i<n;i++)
	{
   
		printf("%s\n",p[i]);
	}
	return ;
}
int  main()
{
   
    int ret = 0; 
    char *p1[] = {
   "aa", "ccccccc", "bbbbbb"};
    char buf2[10][30] = {
   "111111", "3333333", "222222"};
    char **p3 = NULL;   
    int len1, len2, len3, i = 0;
                            
    len1 = sizeof(p1)/sizeof(*p1);
    len2 = 3;
    ret = sort(p1, len1, buf2, len2, &p3, &len3);
	printA(p3,len3);

    return 0;
}

4. 重写结构体嵌套一级指针老师和二级指针学生的代码
	
    //结构体类型,每个导师有三个学生
	typedef struct Teacher
	{
   
		char *tName; //导师
		char **stu;  //三个学生
		int age;
	}Teacher;
	
	//在createTeacher中分配空间
	int createTeacher(Teacher **p/*out*/, int n1,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱小李的小潘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值