国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解

這篇具有很好參考價(jià)值的文章主要介紹了譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解


1.定義一個(gè)結(jié)構(gòu)體變量(包括年、月、日)。計(jì)算該日在本年中是第幾天,注意閏年問題。

#include <stdio.h>

struct date
{
	int year;
	int month;
	int day;
}d;

int main()
{
	int day[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	printf("請(qǐng)輸入年 月 日:\n");
	scanf("%d%d%d", &d.year, &d.month, &d.day);
	int days = 0;
	for (int i = 1; i < d.month; i++)
	{
		days += day[i];
	}
	days += d.day;
	if (d.year % 4 == 0 && d.year % 100 != 0 || d.year % 400 == 0)
	{
		if (d.month > 2)
		{
			days++;
		}
	}
	printf("該日在%d年%d月%d日是第%d天。\n", d.year, d.month, d.day, days);

	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

2.寫一個(gè)函數(shù)days,實(shí)現(xiàn)第1題的計(jì)算。由主函數(shù)將年、月、日傳遞給 days函數(shù),計(jì)算后將日子數(shù)傳回主函數(shù)輸出。

#include <stdio.h>

struct date
{
	int year;
	int month;
	int day;
}d;

int days(int year, int month, int day)
{
	int day_tab[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	int day_sum = 0;
	for (int i = 1; i < d.month; i++)
	{
		day_sum += day_tab[i];
	}
	day_sum += d.day;
	if (d.year % 4 == 0 && d.year % 100 != 0 || d.year % 400 == 0)
	{
		if (d.month > 2)
		{
			day_sum++;
		}
	}
	return day_sum;
}

int main()
{
	printf("請(qǐng)輸入年 月 日:\n");
	scanf("%d%d%d", &d.year, &d.month, &d.day);
	int day_sum = days(d.year, d.month, d.day);
	printf("該日在%d年%d月%d日是第%d天。\n", d.year, d.month, d.day, day_sum);

	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

3.編寫一個(gè)函數(shù) print,打印一個(gè)學(xué)生的成績(jī)數(shù)組,該數(shù)組中有5個(gè)學(xué)生的數(shù)據(jù)記錄,每個(gè)記錄包括 num, name, score[3],用主函數(shù)輸入這些記錄,用 print函數(shù)輸出這些記錄。

#include <stdio.h>
#define N 5

struct student
{
	char num[6];
	char name[8];
	int score[3];
}stu[N];

void print(struct student stu[6])
{
	printf("\n num   name   score1  score2  score3\n");
	for (int i = 0; i < N; i++)
	{
		printf("%4s%6s", stu[i].num, stu[i].name);
		for (int j = 0; j < 3; j++)
		{
			printf("%8d", stu[i].score[j]);
		}
		printf("\n");
	}

}

int main()
{
	for (int i = 0; i < N; i++)
	{
		printf("請(qǐng)輸入第%d個(gè)學(xué)生的的成績(jī):>\n", i + 1);
		printf("num:");
		scanf("%s", stu[i].num);
		printf("name:");
		scanf("%s", stu[i].name);
		for (int j = 0; j < 3; j++)
		{
			printf("score %d:", j + 1);
			scanf("%d", &stu[i].score[j]);
		}
		printf("\n");
	}

	print(stu);
	
	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

4.在第3題的基礎(chǔ)上,編寫一個(gè)函數(shù) input,用來輸入5個(gè)學(xué)生的數(shù)據(jù)記錄。

#include <stdio.h>
#define N 5

struct student
{
	char num[6];
	char name[8];
	int score[3];
}stu[N];

void print(struct student stu[6])
{
	printf("\n num   name   score1  score2  score3\n");
	for (int i = 0; i < N; i++)
	{
		printf("%4s%6s", stu[i].num, stu[i].name);
		for (int j = 0; j < 3; j++)
		{
			printf("%8d", stu[i].score[j]);
		}
		printf("\n");
	}

}

void input(struct student stu[])
{
	for (int i = 0; i < N; i++)
	{
		printf("請(qǐng)輸入第%d個(gè)學(xué)生的的成績(jī):>\n", i + 1);
		printf("num:");
		scanf("%s", stu[i].num);
		printf("name:");
		scanf("%s", stu[i].name);
		for (int j = 0; j < 3; j++)
		{
			printf("score %d:", j + 1);
			scanf("%d", &stu[i].score[j]);
		}
		printf("\n");
	}
}

int main()
{
	input(stu);
	print(stu);
	
	return 0;
}

5.有10個(gè)學(xué)生,每個(gè)學(xué)生的數(shù)據(jù)包括學(xué)號(hào)、姓名、3門課程的成績(jī),從鍵盤輸入10個(gè)學(xué)生數(shù)據(jù),要求輸出3門課程總平均成績(jī),以及最高分的學(xué)生的數(shù)據(jù)(包括學(xué)號(hào)、姓名、3門課程成績(jī)、平均分?jǐn)?shù))。

#include <stdio.h>
#define N 3

struct student
{
	char num[6];
	char name[8];
	float score[3];
	float avg;
}stu[N];

int main()
{
	for (int i = 0; i < N; i++)
	{
		printf("請(qǐng)輸入第%d個(gè)學(xué)生的的數(shù)據(jù):>\n", i + 1);
		printf("num:");
		scanf("%s", stu[i].num);
		printf("name:");
		scanf("%s", stu[i].name);
		for (int j = 0; j < 3; j++)
		{
			printf("score %d:", j + 1);
			scanf("%f", &stu[i].score[j]);
		}
	}
	//計(jì)算
	float average = 0, max = 0;
	int maxi = 0;
	float sum = 0;
	for (int i = 0; i < N; i++)
	{
		sum = 0;
		for (int j = 0; j < 3; j++)
		{
			sum += stu[i].score[j];//計(jì)算第i個(gè)學(xué)生總分
		}
		stu[i].avg = sum / 3.0;//計(jì)算第i個(gè)學(xué)生平均分
		average += stu[i].avg;
		if (sum > max)//找分?jǐn)?shù)最高者
		{
			max = sum;
			maxi = i;//將此學(xué)生的下標(biāo)保存在maxi
		}
	}
	average /= N;//計(jì)算總平均分?jǐn)?shù)
	printf("\n num  name  score1 score2 score3  average\n");
	for (int i = 0; i < N; i++)
	{
		printf("%3.2s%6.2s", stu[i].num, stu[i].name);
		for (int j = 0; j < 3; j++)
		{
			printf("%8.2f", stu[i].score[j]);
		}
		printf("%8.2f\n", stu[i].avg);

	}
	printf("\naverage=%5.2f\n", average);
	printf("最高成績(jī)是:student %s, %s\n", stu[maxi].num, stu[maxi].name);
	printf("他的成績(jī)是:%6.2f,%6.2f,%6.2f,average:%5.2f\n", stu[maxi].score[0], stu[maxi].score[1], stu[maxi].score[2], stu[maxi].avg);
	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

6.13個(gè)人圍成一圈,從第1個(gè)人開始順序報(bào)號(hào)1,2,3。凡報(bào)到3者退出圈子。找出最后留在圈子中的人原來的序號(hào)。要求用鏈表實(shí)現(xiàn)。

#include <stdio.h>
#define NUM 13

//定義節(jié)點(diǎn)
typedef struct people
{
	int num;
	struct people* next;
}people;

int main()
{
	//定義包含13個(gè)人的數(shù)據(jù)
	people arr[NUM];

	//建立環(huán)狀鏈表
	people* head = arr;
	for (int i = 0; i < NUM; i++)
	{
		head->num = i + 1;
		head->next = &arr[i + 1];
		head = head->next;
	}
	//構(gòu)成環(huán)狀鏈表
	arr[NUM - 1].next = arr;

	//開始報(bào)數(shù)
	int count = NUM;
	//從1開始報(bào)數(shù)
	int i = 1;
	head = arr;
	while (count > 1)
	{
		//1.判斷是否已經(jīng)退出
		if (head->next == 0)
		{
			//跳過此人
			head = head->next;
			continue;
		}
		if (i == 3)
		{
			//當(dāng)前此人需要退出
			printf("第%d個(gè)人退出\n", head->num);
			head->num = 0;
			count--;
		}
		//繼續(xù)報(bào)號(hào)
		i++;
		head = head->next;

		//判斷報(bào)號(hào)是否大于3
		if (i > 3)
		{
			i = 1;
		}
	}
	//找出編號(hào)不為0的人
	while (head->num == 0)
	{
		//找下一個(gè)人
		head = head->next;
		if (head->num != 0)
		{
			printf("沒有退出的人為:%d\n", head->num);
		}
	}
	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

7. 在第9章例9.9和例9.10的基礎(chǔ)上,寫一個(gè)函數(shù)del,用來刪除動(dòng)態(tài)鏈表中指定的結(jié)點(diǎn)。

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

typedef struct node
{
	int num;
	struct node* next;
}node;

//創(chuàng)建鏈表:創(chuàng)建一個(gè)含有n個(gè)節(jié)點(diǎn)的鏈表,返回頭節(jié)點(diǎn)的指針
node* creat(int n)
{
	//創(chuàng)建一個(gè)頭節(jié)點(diǎn)
	node* head = (node*)malloc(sizeof(node));
	head->num = 0;
	head->next = NULL;
	node* p = head;

	//創(chuàng)建數(shù)據(jù)為1~n的節(jié)點(diǎn)
	for (int i = 1; i <= n; i++)
	{
		node* newNode = (node*)malloc(sizeof(node));
		newNode->num = i;
		newNode->next = NULL;

		p->next = newNode;
		p = p->next;
	}
	return head;
}

//打印鏈表數(shù)據(jù)
void printNode(node* head)
{
	//第一個(gè)數(shù)據(jù)為head->next
	node* p = head->next;
	while (p != NULL)
	{
		printf("node %d\n", p->num);
		p = p->next;
	}
}

void del(node* head, int val)
{
	node* prev = head;
	node* p = head;
	//遍歷鏈表,找到需要?jiǎng)h除的節(jié)點(diǎn)
	while (p != NULL)
	{
		if (p->num == val)
		{
			prev->next = p->next;
			free(p);
			break;
		}
		else
		{
			prev = p;
			p = p->next;
		}
	}
}

int main()
{
	node* head = creat(10);
	int n;
	printf("當(dāng)前鏈表的所有節(jié)點(diǎn):\n");
	printNode(head);
	printf("請(qǐng)輸入需要?jiǎng)h除的節(jié)點(diǎn)編號(hào):\n");
	scanf("%d", &n);
	del(head, n);
	//刪除之后鏈表的節(jié)點(diǎn)
	printf("刪除之后鏈表的節(jié)點(diǎn):\n");
	printNode(head);

	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

8. 寫一個(gè)函數(shù) insert,用來向一個(gè)動(dòng)態(tài)鏈表插入結(jié)點(diǎn)。

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

typedef struct node
{
	int num;
	struct node* next;
}node;

void insert(node* p, int n)
{
	//創(chuàng)建節(jié)點(diǎn)
	node* newNode = (node*)malloc(sizeof(node));
	newNode->num = n;

	//鏈接
	newNode->next = p->next;
	p->next = newNode;
}

node* creat(int n)
{
	//創(chuàng)建含有n個(gè)有效數(shù)據(jù)的節(jié)點(diǎn)
	//創(chuàng)建一個(gè)帶頭的鏈表
	node* head = (node*)malloc(sizeof(node));
	head->num = 0;
	head->next = NULL;
	node* p = head;

	//創(chuàng)建有效數(shù)據(jù)的節(jié)點(diǎn)
	for (int i = 1; i <= n; i++)
	{
		node* newNode = (node*)malloc(sizeof(node));
		newNode->num = i;
		newNode->next = NULL;

		p->next = newNode;
		p = p->next;
	}
	return head;
}

void printNode(node* head)
{
	//從第一個(gè)有效數(shù)據(jù)開始打印
	node* p = head->next;
	while (p != NULL)
	{
		printf("node %d\n", p->num);
		p = p->next;
	}
}

int main()
{
	int n;
	node* head = creat(10);
	printf("未插入數(shù)據(jù)之前的原始列表:\n");
	printNode(head);
	printf("請(qǐng)輸入需要插入的數(shù)據(jù):\n");
	scanf("%d", &n);
	insert(head, n);
	printf("插入數(shù)據(jù)之后的鏈表:\n");
	printNode(head);
	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

9.綜合本章例9.9(建立鏈表的函數(shù) creat)、例9.10(輸出鏈表的函數(shù) print)和本章習(xí)題第7題(刪除鏈表中結(jié)點(diǎn)的函數(shù)dei)、第8題(插入結(jié)點(diǎn)的函數(shù) insert),再編寫一個(gè)主函數(shù),先后調(diào)用這些函數(shù)。用以上5個(gè)函數(shù)組成一個(gè)程序,實(shí)現(xiàn)鏈表的建立、輸出、刪除和插入,在主函數(shù)中指定需要?jiǎng)h除和插入的結(jié)點(diǎn)的數(shù)據(jù)。

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

#define CNT 3

//定義節(jié)點(diǎn)
typedef struct node
{
	int num;
	struct node* next;
}node;

//創(chuàng)建鏈表:從控制臺(tái)輸入數(shù)據(jù)
node* creat()
{
	//首先創(chuàng)建一個(gè)頭節(jié)點(diǎn),不存放有效數(shù)據(jù)
	node* head = (node*)malloc(sizeof(node));
	head->next = NULL;
	head->num = 0;
	node* p = head;
	printf("創(chuàng)建一個(gè)含有%d個(gè)數(shù)據(jù)的單鏈表\n", CNT);
	printf("請(qǐng)輸入%d個(gè)數(shù)據(jù):", CNT);
	for (int i = 0; i < CNT; i++)
	{
		int n;
		scanf("%d", &n);
		node* newNode = (node*)malloc(sizeof(node));
		newNode->num = n;
		newNode->next = NULL;

		//鏈接
		p->next = newNode;
		p = p->next;
	}
	return head;
}

//打印鏈表
void printNode(node* head)
{
	node* p = head->next;
	while (p != NULL)
	{
		printf("node: %d\n", p->num);
		p = p->next;
	}
}

//刪除節(jié)點(diǎn)
void del(node* head, int val)
{
	//遍歷鏈表,找到待刪除的位置
	node* p = head->next;
	node* prev = head;
	while (p != NULL)
	{
		if (p->num == val)
		{
			prev->next = p->next;
			free(p);
			break;
		}
		else
		{
			prev = p;
			p = p->next;
		}
	}
}

//插入節(jié)點(diǎn)
void insert(node* p, int val)
{
	//給p節(jié)點(diǎn)的后面插入新的數(shù)據(jù)
	node* newNode = (node*)malloc(sizeof(node));
	newNode->num = val;
	newNode->next = NULL;

	newNode->next = p->next;
	p->next = newNode;
}

int main()
{
	printf("創(chuàng)建鏈表:\n");
	node* head = creat();
	printf("創(chuàng)建鏈表結(jié)束:\n");
	printf("初始鏈表:\n");
	printNode(head);
	printf("請(qǐng)輸入需要插入的數(shù)據(jù):\n");
	int n;
	scanf("%d", &n);
	insert(head, n);
	printf("插入數(shù)據(jù): %d之后,鏈表的所有數(shù)據(jù):\n",n);
	printNode(head);
	printf("請(qǐng)輸入需要?jiǎng)h除的數(shù)據(jù):\n");
	scanf("%d", &n);
	del(head, n);
	printf("刪除數(shù)據(jù):%d之后,鏈表的所有數(shù)據(jù):\n", n);
	printNode(head);

	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

10.已有 a,b兩個(gè)鏈表,每個(gè)鏈表中的結(jié)點(diǎn)包括學(xué)號(hào)、成績(jī)。要求把兩個(gè)鏈表合并,按學(xué)號(hào)升序排列。

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

#define NUM 5

typedef struct node
{
	int num;
	float score;
	struct node* next;
}node;

node* creat()
{
	printf("請(qǐng)輸入%d個(gè)數(shù)據(jù):學(xué)號(hào) 成績(jī)\n", NUM);
	node* head = NULL;
	//鏈表的表尾
	node* tail = NULL;
	for (int i = 0; i < NUM; i++)
	{
		int num;
		float score;
		scanf("%d%f", &num, &score);
		//創(chuàng)建節(jié)點(diǎn)
		node* newNode = (node*)malloc(sizeof(node));
		newNode->num = num;
		newNode->score = score;
		newNode->next = NULL;
		//插入到已有鏈表
		//判斷當(dāng)前鏈表是否為空
		if (head == NULL)
		{
			head = tail = newNode;
		}
		else
		{
			//把新的節(jié)點(diǎn)插入到尾節(jié)點(diǎn)后面
			tail->next = newNode;
			tail = newNode;
		}
	}
	return head;
}

//合并,排序兩個(gè)鏈表
node* mergeList(node* a, node* b)
{
	//合并
	node* head = a;
	while (head->next != NULL)
	{
		head = head->next;
	}
	head->next = b;

	head = a;
	//prev:未排序的第一個(gè)節(jié)點(diǎn)
	node* prev = a;
	//排序,選擇排序
	while (prev->next != NULL)
	{
		//每次從未排序的節(jié)點(diǎn)中選擇一個(gè)學(xué)號(hào)最小的
		//放在第一個(gè)未排序節(jié)點(diǎn)的位置
		node* cur = prev->next;
		while (cur)
		{
			if (prev->num > cur->num)
			{
				//把學(xué)號(hào)最小的數(shù)據(jù)往前移動(dòng)
				int num = prev->num;
				float score = prev->score;

				prev->num = cur->num;
				prev->score = cur->score;

				cur->num = num;
				cur->score = score;
			}
			cur = cur->next;
		}
		prev = prev->next;
	}
	return head;
}

void printNode(node* a)
{
	while (a != NULL)
	{
		printf("學(xué)號(hào):%d 成績(jī):%f\n", a->num, a->score);
		a = a->next;
	}
}

int main()
{
	node* a = creat();
	node* b = creat();
	printf("鏈表a的數(shù)據(jù):\n");
	printNode(a);
	printf("鏈表b的數(shù)據(jù):\n");
	printNode(b);
	printf("合并a和b\n");
	a = mergeList(a, b);
	printNode(a);

	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

11.有兩個(gè)鏈表 a和b,設(shè)結(jié)點(diǎn)中包含學(xué)號(hào)、姓名。從a鏈表中刪去與b鏈表中有相同學(xué)號(hào)的那些結(jié)點(diǎn)。

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

#define LEN 20

typedef struct node
{
	int num;
	char name[LEN];
	struct node* next;
}node;

//返回新鏈表的表頭
node* del(node* a, node* b)
{
	node* head = a;
	//遍歷b中的每一個(gè)節(jié)點(diǎn)
	while (b)
	{
		//從a的表頭開始遍歷
		node* prev = a;
		node* cur = prev->next;
		//用頭節(jié)點(diǎn)和b當(dāng)前指向的節(jié)點(diǎn)進(jìn)行比較
		if (prev->num == b->num)
		{
			prev->next = NULL;
			//更新表頭
			head = cur;
		}
		//用非頭節(jié)點(diǎn)和b當(dāng)前指向的節(jié)點(diǎn)進(jìn)行比較
		else
		{
			while (cur)
			{
				if (cur->num == b->num)
				{
					//刪除當(dāng)前節(jié)點(diǎn)
					prev->next = cur->next;
					cur->next = NULL;
					break;
				}
				else
				{
					//繼續(xù)向后遍歷
					prev = cur;
					cur = cur->next;
				}
			}
		}
		//處理b的下一個(gè)節(jié)點(diǎn)
		b = b->next;
	}
	return head;
}

void printNode(node* head)
{
	while (head)
	{
		printf("%d-->%s\n", head->num, head->name);
		head = head->next;
	}
}

int main()
{
	//建立鏈表
	node a[5] = { {3, "zhang"}, {1, "wang"},{15, "li"},{10, "zhou"},{8, "ren"} };
	node b[3] = { {8, "ren"}, {3, "zhang"}, {10, "zhou"}};
	for (int i = 0; i < 5; i++)
	{
		a[i].next = &a[i + 1];
	}
	a[4].next = NULL;
	
	for (int i = 0; i < 3; i++)
	{
		b[i].next = &b[i + 1];
	}
	b[2].next = NULL;
	printf("鏈表a:\n");
	printNode(a);
	printf("鏈表b:\n");
	printNode(b);

	node* head = del(a, b);
	printf("刪除之后的鏈表:\n");
	printNode(head);

	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解

12.建立一個(gè)鏈表,每個(gè)結(jié)點(diǎn)包括:學(xué)號(hào)、姓名、性別、年齡。輸入一個(gè)年齡,如果鏈表中的結(jié)點(diǎn)所包含的年齡等于此年齡,則將此結(jié)點(diǎn)刪去。

#include <stdio.h>
#define LEN 20

typedef struct node
{
	int num;
	char name[LEN];
	char gender[LEN];
	int age;
	struct node* next;
}node;

node* del(node* a)
{
	int age;
	printf("請(qǐng)輸入需要?jiǎng)h除的年齡:\n");
	scanf("%d", &age);
	//遍歷刪除
	node* prev = NULL;
	node* cur = a;
	node* head = a;
	while (cur)
	{
		if (cur->age == age)
		{
			//當(dāng)前節(jié)點(diǎn)需要?jiǎng)h除
			//頭節(jié)點(diǎn)
			if (prev == NULL)
			{
				//更新頭節(jié)點(diǎn)
				head = cur->next;
			}
			//非頭節(jié)點(diǎn)
			else
			{
				prev->next = cur->next;
			}
			//查看下一個(gè)節(jié)點(diǎn)
			cur = cur->next;
		}
		else
		{
			//當(dāng)前節(jié)點(diǎn)不需要?jiǎng)h除
			prev = cur;
			cur = cur->next;
		}
	}
	return head;
} 

void printNode(node* head)
{
	while (head)
	{
		printf("%d %s %s %d\n", head->num, head->name, head->gender, head->age);
		head = head->next;
	}
}

int main()
{
	node arr[] = { {1, "wang", "male", 20}, {2, "li", "female", 30}, 
		{3, "zhang", "male", 20}, {4, "li", "female", 18}, {5, "cheng", "male", 20} };
	//建立鏈表
	for (int i = 0; i < 5; i++)
	{
		arr[i].next = &arr[i + 1];
	}
	arr[4].next = NULL;

	printf("鏈表的所有數(shù)據(jù):\n");
	printNode(arr);
	node* head = del(arr);
	printf("刪除之后鏈表的剩余數(shù)據(jù):\n");
	printNode(head);

	return 0;
}

譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解,譚浩強(qiáng)【C程序設(shè)計(jì)】習(xí)題詳解,c語(yǔ)言,開發(fā)語(yǔ)言,譚浩強(qiáng)C語(yǔ)言程序設(shè)計(jì),第九章習(xí)題詳解文章來源地址http://www.zghlxwxcb.cn/news/detail-825362.html

到了這里,關(guān)于譚浩強(qiáng)【C語(yǔ)言程序設(shè)計(jì)】第九章習(xí)題詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python語(yǔ)言程序設(shè)計(jì) 習(xí)題1

    Python語(yǔ)言程序設(shè)計(jì) 習(xí)題1

    一、選擇題 1.python語(yǔ)言屬于(C) A.機(jī)器語(yǔ)言? ? B.匯編語(yǔ)言? ?C.高級(jí)語(yǔ)言? ?D.科學(xué)計(jì)算語(yǔ)言 2.下列選項(xiàng)中,不屬于python特點(diǎn)的是(B) A.面向?qū)ο? ?B.運(yùn)行效率高? ?C.可讀性好? ?D.開源 3.python程序文件的擴(kuò)展名是(D) A.? .python? ?B.? .pyt? ? C.? ?.pt? ? D.? ?.py 4.以下敘述

    2024年02月08日
    瀏覽(92)
  • 編譯原理1.6習(xí)題 程序設(shè)計(jì)語(yǔ)言基礎(chǔ)

    編譯原理1.6習(xí)題 程序設(shè)計(jì)語(yǔ)言基礎(chǔ)

    圖源:文心一言 編譯原理習(xí)題整理~???? 作為初學(xué)者的我,這些習(xí)題主要用于自我鞏固。由于是自學(xué),答案難免有誤,非常歡迎各位小伙伴指正與討論!???? 第1版:自己的解題,與AI老師的判卷~???? 編輯: 梅頭腦??? 審核: 文心一言 題源: 龍書《編譯原理》 Alfre

    2024年01月19日
    瀏覽(94)
  • C++語(yǔ)言程序設(shè)計(jì)第五版 - 鄭莉(第六章課后習(xí)題)

    C++語(yǔ)言程序設(shè)計(jì)第五版 - 鄭莉(第六章課后習(xí)題)

    6-20 實(shí)現(xiàn)一個(gè)名為 SimpleCircle 的簡(jiǎn)單圓類。其數(shù)據(jù)成員 int* itsRadius 為一個(gè)指向其半徑值的指針,存放其半徑值。設(shè)計(jì)對(duì)數(shù)據(jù)成員的各種操作,給出這個(gè)類的完整實(shí)現(xiàn)并測(cè)試這個(gè)類。 6-21 編寫一個(gè)函數(shù),統(tǒng)計(jì)一條英文句子中字母的個(gè)數(shù),在主程序中實(shí)現(xiàn)輸入輸出。 6-22 編寫函數(shù)

    2023年04月25日
    瀏覽(21)
  • 《python語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》(第二版)第六章課后習(xí)題參考答案

    第六章 組合數(shù)據(jù)類型 6.1 隨機(jī)密碼生成 6.2 重復(fù)元素判定 6.3 重復(fù)元素判定續(xù) 6.4 文本字符分析 6.5 生日悖論分析 6.6 《紅樓夢(mèng)》人物統(tǒng)計(jì) 注:上述代碼僅供參考,若有問題可在評(píng)論區(qū)留言! 《紅樓夢(mèng)》及人物名單TXT (百度云鏈接失效可在評(píng)論區(qū)留言) 鏈接:https://pan.baidu.c

    2024年02月05日
    瀏覽(24)
  • 《python語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》(第二版)第五章課后習(xí)題參考答案

    第五章 函數(shù)和代碼的復(fù)用 5.1 改造練習(xí)題3.5,輸出更大的田字格 5.2 實(shí)現(xiàn)isOdd函數(shù) 5.3 實(shí)現(xiàn)isNum函數(shù) 5.4 實(shí)現(xiàn)multi函數(shù) 5.5 實(shí)現(xiàn)isPrime函數(shù) 5.6 輸出10種生日日期格式 代碼一: 代碼二: 5.7 漢諾塔 注:上述代碼僅供參考,若有問題可在評(píng)論區(qū)留言!

    2024年02月01日
    瀏覽(23)
  • 《python語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》(第二版)第二章課后習(xí)題參考答案

    第二章 Python程序?qū)嵗馕?2.1 溫度轉(zhuǎn)換 2.2 匯率兌換 優(yōu)化: 優(yōu)化的主要改動(dòng): 將貨幣符號(hào)和金額分離出來,使代碼更加清晰易讀。 將條件判斷改為根據(jù)貨幣符號(hào)進(jìn)行判斷,避免重復(fù)判斷。 2.3 繪制彩色蟒蛇 2.4 等邊三角形的繪制 代碼一: 代碼二: 2.5 疊加等邊三角形的繪制

    2024年03月19日
    瀏覽(36)
  • 浙大版《C語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)與習(xí)題指導(dǎo)(第3版)》題目集

    本題要求編寫程序,輸出整數(shù)152的個(gè)位數(shù)字、十位數(shù)字和百位數(shù)字的值。 輸入格式:本題無輸入。 輸出格式:按照以下格式輸出:

    2023年04月17日
    瀏覽(22)
  • 浙大版《C語(yǔ)言程序設(shè)計(jì)》第四版(何欽銘顏暉) 第7章 數(shù)組 課后習(xí)題答案

    浙大版《C語(yǔ)言程序設(shè)計(jì)》第四版(何欽銘顏暉) 第7章 數(shù)組 課后習(xí)題答案

    你也可以上程序咖(https://meta.chengxuka.com),打開大學(xué)幕題板塊,不但有答案,講解,還可以在線答題。 一、選擇題 1.假定 int 類型變量占用兩個(gè)字節(jié),則以下定義的數(shù)組 a 在內(nèi)存中所占字節(jié)數(shù)是( )。 A. 20 B.10 C.6 D.3 答:A 解析:題目中,根據(jù) int a[10] ,表示定義了數(shù)組的長(zhǎng)度

    2023年04月18日
    瀏覽(24)
  • C++ Primer第五版_第九章習(xí)題答案(51~52)

    練習(xí)9.51 設(shè)計(jì)一個(gè)類,它有三個(gè)unsigned成員,分別表示年、月和日。為其編寫構(gòu)造函數(shù),接受一個(gè)表示日期的string參數(shù)。你的構(gòu)造函數(shù)應(yīng)該能處理不同的數(shù)據(jù)格式,如January 1,1900、1/1/1990、Jan 1 1900 等。

    2023年04月11日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包