求大神帮忙用C语言写一个程序。 要求:定义两个线性表(内容由用户输入),合并这两个线性表,并按顺序
有很多方法可以实现的哦。仔细想一下么。、
我把几种思路,然后优劣及改进跟你说一下。
一开始的思路:把A、B都丢进C里,然后对C排序。人们一开始想到的总是最懒的办法,往往是最没效率的。
改进:由于A、B是排好序的,先把A丢进C里,再拿B元素一个个往里查找插入。这么做要频繁移动元素,如果线性表不是链表的话,开销很大。
再改进:从A、B中各拿一个元素出来,比较后把小的放进C里,再从刚才拿出元素的那个表里再拿个元素出来,再比较,把小的放进C里,重复这样的操作,直到A、B其中一个中的元素拿完为止,再把还有剩的元素全丢进C里。其中重复操作的部分大致是这样:
while(i<m&&j<n)
{
if(A[i]>B[j])
{
C[k]=B[j];
j=j+1;
}
else
{
C[k]=A[i];
i=i+1;
}
k=k+1;
}
思考:能不能从头部和尾部一起开始上述过程呢?这样一来的话,虽然比较次数没减少,但是循环次数却能减少很多哦。
利用C语言编写一个求两数相加的和的编程思想和方法如下:
1.首先需要定义三个变量a,b,c,两个为相加的数,第三个为相加后得到的和。
2.然后使用scanf()语句接收从键盘输入的两个数,为变量a,b赋值。
3.接着进行a和b的加法运算,将结果赋值给变量c。
4.最后使用printf()语句将计算结果显示在屏幕上。
5.代码编写完毕后,点击运行后即可在调试窗口看到程序的运行结果。
#include <stdlib.h>
#include<string.h>
#include <stdbool.h>
typedef struct{
int *data;
int length; // 线性表的长度
int top; // 线性表的当前元素个数
}List;
// 初始化线性表
void list_init(List *li,int length){
li->length = length;
li->top = 0;
li->data = (int*) malloc(li->length * sizeof(int));
}
// 向线性表插入元素
bool add_list(List* li, int data){
if(li->top >= li->length){
return false;
}
li->data[li->top++] = data;
return false;
}
// 将两个线性表合并并对元素进行排序
void merge_list(List *dest, List *li1, List *li2){
list_init(dest, li1->top+li2->top+1);
// 把线性表li1,li2的所有元素添加到线性表dest中
int i = 0;
while(i < li1->top){
add_list(dest, li1->data[i]);
i++;
}
i = 0;
while(i < li2->top){
add_list(dest, li2->data[i]);
i++;
}
// 把线性表dest元素进行排序(由大到小)
for(i=0; i<dest->top; i++){
int j;
for(j=i; j<dest->top; j++){
if(dest->data[i] < dest->data[j]){
int t = dest->data[i];
dest->data[i] = dest->data[j];
dest->data[j] = t;
}
}
}
}
// 显示线性表
void show_list(List *li){
int i;
for(i=0; i<li->top; i++){
printf("%3d",li->data[i]);
if((i+1)%10 == 0){
printf("\n");
}
}
printf("\n");
}
int main(void)
{
int arr1[7]={11,4,7,2,9,15,10};
int arr2[5]={2,1,5,1,19};
List li1;
list_init(&li1, 50);
int i;
for(i=0; i<7; i++){
add_list(&li1,arr1[i]);
}
show_list(&li1);
List li2;
list_init(&li2, 50);
for(i=0; i<5; i++){
add_list(&li2,arr2[i]);
}
show_list(&li2);
List dest;
merge_list(&dest, &li1, &li2);
show_list(&dest);
return 0;
}
求C语言大神帮忙编写一个程序,按要求写出来。
include <stdio.h> define MAX 20\/* userCode(<100字符): 自定义函数之原型声明 *\/ void rotate( int (*arrA)[MAX], int (*arrB)[MAX], int m, int n);int main(void){ int arrA[MAX][MAX], arrB[MAX][MAX], i, j, m, n;printf("请输入 m n: ");scanf("%d %d", &...
求大神帮忙,我想用编写一个C语言程序,要求使用for循环语句,不用while...
如果用for循环需要你给到一个终止值给i就可以了,程序如下:include<stdio.h> int main(int argc,char *argv[]){ int i;for(i=1;i<=1000;i++){ if(i%2==1&&i%3==2&&i%5==4&&i%6==5&&i%7==0){ printf("%d\\n",i);} } return 0;} 如果是1000以内的话呢,有这几个答...
求大神帮忙,帮我编一个C语言程序
include int sum(int a,int b){return a+b;} int main(){int a,b,c;srand(time(0));a = rand()%100+1;b = rand()%100+1;printf("%d+%d=",a,b);scanf("%d",&c);while(c-sum(a,b)){printf("Not correct! Try againt!\\n");printf("%d+%d=",a,b);scanf("%d",...
求C语言大神来编个程序呀。。。
设白皮有x块,则黑皮有(32-x)块,每块白皮是六边形,共6x条边,因每块白皮有三条边和黑皮连在一起,故黑皮共有3x条边,可得方程3x=5(32-x);所以:include"stdio.h"main(){ int x; for(x=1;x<32;x++) if(3*x==5*(32-x)) printf("黑皮块有%d块,白皮块有%d块!
求c语言大神帮忙编一下程序,自己c语言真的一窍不通
main(){ int x[100][100]={0,1,1,0,0,……}\/\/此处写够100个0或1 int i,j,k;for(i=1;i<100;i++){ x[i][99]=(1-x[i-1][0]);for(j=0;j<99;j++)x[i][j]=(1-x[i-1][j+1]);} for(i=0;i<100;i++){ printf(“i=%d:”,i);for(j=0;j<100;j++)...
跪求编程大神~用c语言编个程序
题目描述输入二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列。输入第一行输入二叉树的先序遍历序列;第二行输入二叉树的中序遍历序列。输出输出该二叉树的后序遍历序列。示例输入ABDCEFBDAECF示例输出DBEFCA include <iostream>#include <cstring>#define MAX 50+3using namespace std;...
用c语言编一个程序,要求输入一个四位数,求其各个位数之和。如输入3456...
sum+= n\/10%10;\/\/十 sum+= n\/100%10;\/\/百 sum+= n\/1000;\/\/千 return sum;} int main(){ int n;printf("请输入一个四位数:");scanf("%d", &n);printf("%d:各个位数之和:%d\\n\\n", n, sum4(n));printf("请输入一个数:");scanf("%d", &n);if(n >= 0){ pr...
麻烦各位大神帮忙用C语言或C++编下这个程序,要源代码...
回答:少年,作业是用来回顾完善所学的知识的,而不是用来抄的。。。下面给出这个作业的核心代码,仅供参考 # include <stdio.h> # include <stdlib.h> # include <string.h> typedef struct student { char name[50]; int mathScore; int englishScore; }STU; void inputScore(STU * ...
c语言简单程序编写?
int main(){ double num1, num2, result, re;char sign, euq;printf("Enter an expression: ");while(scanf("%lf%c%lf%c%lf", &num1,&sign,&num2,&euq,&result) == 5){ switch(sign){ case '+':re = num1 + num2;break;case '-':re = num1 - num2;break;case '*'...
请哪位帮忙用c语言写一个求x的3次方的程序,谢谢。
include<stdio.h> void main(){ int f(int x);int a;printf("请输入一个数:");scanf("%d",&a);f(a);printf("%d\\n",f(a));} int f(int x){ return x*x*x;}