哪位大佬能帮看看这道c语言?

2024-05-12 03:43

1. 哪位大佬能帮看看这道c语言?

按题意,既利用指针将b中每个元素按照升序插入到a数组对应位置。
思路:
a,b都是默认输入升序的数(题目没要求验证,我的代码也不验证,请按升序输入,如需验证升序输入,只需定义一个变量记录输入的数字,并在下次循环输入时比大小。)
所以,定义2个指针分别指向a,b最后一个输入的元素地址,嵌套循环,分别往前移动,同时比较两数组元素,每次找到对应位置就将a移位并插入b的位置。
ps:由于存在b小于a的所有元素这种特殊情况,循环外还有a数组全部后移的情况。故位移写成单独函数,符合编程习惯。
下面是代码:

#include 
void move1(int *bp,int a[],int len)//从bp开始往后移动1位
{
    int *ep=&a[len-1];
    if(bp>=a && bp<=ep)
        while(ep>bp)//a当前元素之后的元素向后移1位
        {
            *ep=*(ep-1);
            ep--;
        }
}
int main()
{
    int i=0,m=50,a[50],b[3],*pa=NULL,*pb=&b[2],flag;
    while(m>47) printf("请输入m值(>=47):"),scanf("%d",&m);
    printf("请给a数组输入%d个整数(确保升序排列,输入无验证!):\n",m);
    i=m;
    while(i--) scanf("%d",&a[m-i-1]);
    printf("请给b数组输入3个整数(确保升序排列,输入无验证!):\n"),scanf("%d%d%d",&b[0],&b[1],&b[2]);
    while(pb>=b)//从b最大数开始
    {
        pa=&a[m-1];//初始指向a最大数
        while(pa>=a)//从a最大数开始
        {
            flag=0;
            if(*pa<=*pb)//找到第一个a小于等于b,就把b元素插入到a元素后面(a移位)
            {
                flag=1;
                move1(pa+1,a,50);//a当前元素之后的元素向后移1位
                 *(pa+1)=*pb;
                break;
            }
            pa--;
        }
        if(!flag)//如未发生位移,说明该b元素小于所有a元素,插入再a数组开始位置,a所有元素后移1位
            move1(a,a,50),a[0]=*pb;
        pb--;
    }
    pa=a;
    printf("合并后的a数组为:\n");
    while(pa<=&a[m+3-1]) printf("%d ",*pa++);
    return 0;
}

哪位大佬能帮看看这道c语言?

2. 这道c语言怎么写?

根据题意:
要验证学号输入,应该有一个学生名单。
所以我定义了init函数来初始化一个学生名单,只是测试用数据,你想要手动输入学生名单,请修改该函数。
由于实现动态刷新信息,用到getch来暂停刷新,这个函数头文件conio在windows下有效,你要是使用的其他操作系统,可以自定义类似函数来替换,或者直接删除所有getch()和system("cls")语句。
命令符的输入验证按照题目要求。




#include 
#include 
#include 
#include 
#include 
#define STUN 5//学生最大人数
#define CN 100//输入命令符号字符串最大个数
typedef struct stu//学生个人信息,如想添加比如班级、年级等,自行添加
{
    char id[20];//学号
    char name[10];//姓名
    float score;//成绩
}STU;
STU *init();//初始化一组学生信息
void showStus(STU *stus);//打印学生信息
void cmdA(STU *);//录入学生成绩,判断等级
void cmdH();
void cmdQ();
int cmdGet();//识别命令A、H、Q分别返回1、2、3。输入无效命令时返回0

int main()
{
    int n=0;
    STU *stus=NULL;
    system("cls");
    stus=init();
    while(!n)
    {
        printf("[StuSc3]\n");
        n=cmdGet();
        if(!n)
        {
            printf("命令必须以A、H、Q开头,不区分大小写,忽略空格和tab字符\n");
            printf("按任意键返重新输入命令符。。。\n");
            getch();
        }
        switch(n)
        {
            case 1:showStus(stus);cmdA(stus);break;
            case 2:cmdH();break;
            case 3:cmdQ();return 0;
        }
        n=0;
        system("cls");
    }
    return 0;
}
STU *init()
{
    int i;
    char nstr[25];
    static STU stus[STUN];
    for(i=0;i<STUN;i++)
    {
        strcpy(stus[i].id,"S00");
        itoa(i+1,nstr,10);
        strcat(stus[i].id,nstr);
        strcpy(stus[i].name,"学生");
        strcat(stus[i].name,nstr);
        stus[i].score=0;
    }
    return stus;
}
void showStus(STU *stus)//打印学生信息
{
    int i;
    printf("当前学生信息:\n");
    for(i=0;i<STUN;i++){
        printf("学号:%s 姓名:%s 成绩:%.1f ",stus[i].id,stus[i].name,stus[i].score);
        printf("%s%s%s\n",stus[i].score>=85?"优秀":"",stus[i].score=60?"合格":"",stus[i].score<60?"不合格":"");
    }
    printf("\n");
}
void cmdA(STU *stus)
{
    STU *stuSave=NULL;
    int i,flag;
    char id[20];//学号
    float score;//成绩
    while(1)
    {
        printf("请输入学号及成绩:(输入END结束输入)\n");
        scanf("%s",id);
        if(strcmp(id,"END")==0)
            break;
        flag=0;
        stuSave=NULL;
        for(i=0;i<STUN;i++)
            if(strcmp(stus[i].id,id)==0)
            {
                flag=1;
                stuSave=&stus[i];
                break;
            }
        if(!flag)
        {
            printf("该学生不存在!\n任意键重新输入。。。\n");
            getch();
            continue;
        }
        scanf("%f",&score);
        if(score<0){
            printf("成绩不能为负数!\n任意键重新输入。。。\n");
            getch();
            continue;
        }
        stuSave->score=score;
        system("cls");
        showStus(stus);
    }

}
void cmdH()
{
    printf("使用帮助:\n");
    printf("输入命令符A、H、Q,不区分大小写,忽略开头的空格及tab字符,忽略之后所有字符\n");
    printf("命令A:录入学生成绩,判断成绩等级\n");
    printf("命令H:帮助文档\n");
    printf("命令Q:退出程序\n");
    printf("按任意键返回命令符输入。。。\n");
    getch();
}
void cmdQ()
{
    printf("再见!\n");
    printf("按任意键结束程序。。。\n");
    getch();
}
int cmdGet()
{
    char inStr[CN],*p=inStr;
    printf("ST3>\n");
    scanf("%s",inStr);
    while(*p!=0)
    {
        if(*p=='A' || *p=='a')
            return 1;
        if(*p=='H' || *p=='h')
            return 2;
        if(*p=='Q' || *p=='q')
            return 3;
        if(*p!=' ' && *p!='\t')//跳过空格和tab
        {
            printf("无效命令\n");
            return 0;
        }
        p++;
    }
    return 0;
}

3. c语言求教

for(x=-10;x++)是一错误的表达式,我想应该是 for(x=-10;x;x++);才对
 
解释:
while(1){x++;}
是一个条件循环,即当括号内的表达式不为0时进入循环体内,这里的表达式是1,即条件永远不为0,所以循环就一直继续下去,也就成了“死循环”
do{i++;}while(1)意义同上,只不过前者是先判断条件,再循环,而后者是先进入循环,再判断条件。由于判断条件始终为1,所以都产生“死循环”现象
 
至于for(x=-10;x;x++);
当中间那个表达式x为零时退出循环,而这里x的初始值为-10,现将它依次加1,则x的值将从-10,依次变为-9,-8,...一直到0,即退出循环

c语言求教

4. c语言求教


5. 这个C语言


这个C语言

6. c语言这个怎么做谢谢

1.j=(n/10)%10
2.i+j+k==12 && i*j*k==42

7. 这道C语言怎么做?

这是道考察C语言宏定义的题目,
c=f(a)/f(b)可以替换为a*a/b*b,即6×6/2×2=6*3*2=36

这道C语言怎么做?

8. 这道c语言该如何做?