请问怎么写这几个,请求各位帮帮我

img


不会啊,请各位帮看看,一点思路没有,是不是只有我这种头脑简单的笨蛋才不会

供参考:

//(1)

#include <stdio.h>
#define N 100
int main()
{
    int   i = 0, k;
    float a[N];
    while (scanf("%f", &a[i++]) == 1 && (getchar()) != '\n');
    for (k = i, i = 0; i < k; i++)
        printf(i ? ",%g" : "%g", a[i]);
    printf("\n%d", k);
    return 0;
}



//(2)
#include <stdio.h>
#include <string.h>
#define N 50
struct student {
    char id[10];
    char name[16];
    char sex[8];
    int  age;
}stu[N];
int main()
{
    int  i = 0, k;
    while (1) {
        scanf("%s", stu[i].id);
        if (!strcmp(stu[i].id, "##")) break;
        scanf("%s%s%d", stu[i].name, stu[i].sex, &stu[i].age);
        i++;
    }
    printf("%d\n", i);
    for (k = i, i = 0; i < k; i++)
        printf("%s,%s,%s,%d\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].age);
    return 0;
}


//(3)

#include <stdio.h>
#define N 100
int main()
{
    int   i = 0, k, a[N];
    while (scanf("%d", &a[i++]) == 1 && (getchar()) != '\n');
    for (k = i, i = 0; i < k; i++)
        printf(i ? ",%d" : "%d", a[i]);
    return 0;
}

float f[100];
int n=0;
float a;
scanf("%f",&f[n++]);
while(getchar() != '\n')
    scanf("%f",&f[n++]);
for(int i=0;i<n;i++)
{
    if(i==0)
        printf("%g",f[i]);
    else
        printf(",%g",f[i]);
    printf("\n%d",n);
}

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/924506
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:变量名错误;变量还没有定义,就直接使用;变量的输入与使用顺序不当;数据输入时,数据的类型不匹配
  • 除此之外, 这篇博客: 浮点型如何在内存中进行存储呢?中的 ,那么,最终的结果会是什么样呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •  我们发现,代码跑出来的答案和我们自己想的有很大的差距:

    我们观察第一个结果,,n以整型的形式放进去,然后再以整型%d的形式取出来,结果是9,这是合理的,,第二个结果是,n以整型的形式存进去,然后以%f,浮点型的形式取出来,,

    int整型占4byte,float类型也占4byte,float*类型的指针变量pFloat,解引用就会访问4byte,跳过一个float类型,而拿出来的结果是不一样的,不是9.000000,这就说明,浮点型和整型在

    内存中的存储方式是不一样的,如果一样的话,拿出来的结果应该是一样的,对于第三个结果,,以浮点型的形式存进去,再以%d整型的形式取出来,结果不是9,这又说明了,浮点型和

    整型在内存中的存储方式是不一样的,对于第四个结果,以浮点型的形式存进去,然后以%f浮点型的形式取出来,结果是9.000000,这是合理的;

    整形的视角放进去,再以整型的视角拿出来,,结果是对的,,以浮点型的视角放进去,再以浮点型的视角拿出来,,结果也是对的,,但是混淆放拿结果就是乱的;

    *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大? 要理解这个结果,一定要搞懂浮点数在计算机内部的表示方法。
  • 您还可以看一下 王剑老师的站长必修课:网站是怎样做出来的?课程中的 互联网行业是草根最有机会逆袭的领域小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我能够提供一些有关问题2和问题3的指导。

    问题2:给定一个数组,找出只出现一次的两个数字。

    该问题可以使用位运算的异或操作来解决。因为每个数字都出现了两次,所以异或所有数字将得到那两个只出现一次的数字的异或值。

    接下来,我们需要从异或值中提取两个数字。我们可以找到异或值中第一个为1的位,并将数组分成两部分:该位为1的数字和该位为0的数字。再次使用异或操作就可以在每个子数组中找到一个只出现一次的数字。

    下面是伪代码:

    function find_two_appear_once(arr): xor_val = 0 // 存放所有数字的异或值 for num in arr: xor_val = xor_val ^ num // 找到第一个不同位,并用它来分割数组 diff_bit = find_first_bit(xor_val) num1 = 0 // 第一个只出现一次的数字 num2 = 0 // 第二个只出现一次的数字 for num in arr: if get_bit(num, diff_bit) == 1: num1 = num1 ^ num else: num2 = num2 ^ num return (num1, num2)

    代码示例可以参考题目中提供的段落2。

    问题3:给定一个数组,找出只出现一次的两个数字。

    该问题同样可以使用位运算中的异或操作解决。与问题2不同的是,数组中只有一个数字出现了一次,其他数字都出现了两次。因此,我们首先将所有数字进行异或操作,这会得出那个出现了一次的数字。

    接下来,我们要想办法将那个数字找出来。我们可以找到异或值中第一个为1的位,因为那个出现了一次的数字在该位上一定是1。然后将数组分成两部分:该位为1的数字和该位为0的数字。对于每个子数组,我们可以使用问题2中的方法来找出单独的数字。

    下面是伪代码:

    function find_appear_once(arr): xor_val = 0 // 存放所有数字的异或值 for num in arr: xor_val = xor_val ^ num // 找到第一个不同位,并用它来分割数组 diff_bit = find_first_bit(xor_val) num = 0 // 那个只出现一次的数字 for num in arr: if get_bit(num, diff_bit) == 1: num1 = num1 ^ num else: num2 = num2 ^ num return num

    代码示例可以参考题目中提供的段落3。

#include <stdio.h>

#define MAX_SIZE 100

int main() {
    int array[MAX_SIZE];
    int count = 0;
    int num;

    while (scanf("%d", &num) == 1) {
        array[count] = num;
        count++;
    }
    
    // 用逗号输出数组
    for (int i = 0; i < count; i++) {
        printf("%d", array[i]);
        if (i != count - 1) {
            printf(", ");
        }
    }
    
    printf("\n");
    printf(": %d", count);
    
    return 0;
}