C语言题目,求大神解答

作者&投稿:老悦 (若有异议请与网页底部的电邮联系)
~ 根据要求,可以编写如下结构数组数据处理程序:
#include <stdio.h>
#include <string.h>
//定义结构类型
typedef struct
{
long id; //学号
char name[10]; //姓名
char sex[2]; //性别
}PS;
//删除函数
int delete(PS *p1, int m, PS *p2, int n)
{
int i, j;
//遍历p1数组
for (i = 0; i < m; i++)
{
//遍历p2数组
for (j = 0; j < n; j++)
{
//如果p1数组中的元素在p2数组中重复出现
if (p1[i].id == p2[j].id)
{
//从p1数组中删除该元素
memmove(&p1[i], &p1[i + 1], (m - i - 1) * sizeof(PS));
//计数器减一
m--;
}
}
}
//返回执行删除操作后p1数组中保存的元素数量
return m;
}
int main(void)
{
PS p1[10] = { {1, "a", "m"}, {2, "b", "f"}, {3, "c", "m"}, {4, "d", "f"}, {5, "e", "m"} };
PS p2[5] = { {1, "a", "m"}, {3, "c", "m"}, {5, "e", "m"}, {6, "f", "f"}, {7, "g", "m"} };
//执行删除操作
int num = delete(p1, 10, p2, 5);
//输出p1数组中的所有元素
printf("p1数组中的元素:\n");
int i;
for (i = 0; i < num; i++)
{
printf("%ld %s %s\n", p1[i].id, p1[i].name, p1[i].sex);
}
return 0;
}
在上面的程序中,定义了一个结构类型PS,用于存储联系人信息。然后,定义了一个删除函数delete,用于从p1数组中删除在p2数组中重复出现的联系人信息。该函数的参数分别是p1数组、p1数组中保存的联系人信息的数量、p2数组、p2数组中保存的联系人信息的数量。删除操作时,遍历p1数组中的每个元素,并在p2数组中查找是否有重复出现的元素,如果有,则从p1数组中删除该元素。最后,函数返回执行删除操作后p1数组中保存的元素数量。
在main函数中,创建了两个PS类型的数组p1和p2,并分别赋值。然后,调用删除函数,执行删除操作,并输出p1数组中的所有元素。
这段程序的运行结果如下:
p1数组中的元素:
2 b f
4 d f
此外,如果要添加更多功能,还可以在程序中添加更多函数。例如,可以添加一个查询函数,用于查询p1数组中指定的联系人信息。可以添加一个添加函数,用于向p1数组中添加新的联系人信息。可以添加一个修改函数,用于修改p1数组中指定的联系人信息。
例如,可以添加如下代码:
//查询函数
void query(PS *p1, int n, long id)
{
//遍历p1数组
int i;
for (i = 0; i < n; i++)
{
//如果找到指定的联系人信息
if (p1[i].id == id)
{
//输出该联系人信息
printf("%ld %s %s\n", p1[i].id, p1[i].name, p1[i].sex);
break;
}
}
}
//添加函数
int add(PS *p1, int n, long id, char *name, char *sex)
{
//向p1数组中添加新的联系人信息
p1[n].id = id;
strcpy(p1[n].name, name);
strcpy(p1[n].sex, sex);
//计数器加一
n++;
//返回添加后p1数组中保存的联系人信息的数量
return n;
}
//修改函数
void modify(PS *p1, int n, long id, char *name, char *sex)
{
//遍历p1数组
int i;
for (i = 0; i < n; i++)
{
//如果找到指定的联系人信息
if (p1[i].id == id)
{
//修改
该联系人信息
p1[i].id = id;
strcpy(p1[i].name, name);
strcpy(p1[i].sex, sex);
break;
}
}
}
int main(void)
{
PS p1[10] = { {1, "a", "m"}, {2, "b", "f"}, {3, "c", "m"}, {4, "d", "f"}, {5, "e", "m"} };
PS p2[5] = { {1, "a", "m"}, {3, "c", "m"}, {5, "e", "m"}, {6, "f", "f"}, {7, "g", "m"} };
//执行删除操作
int num = delete(p1, 10, p2, 5);
//查询p1数组中id为3的联系人信息
query(p1, num, 3);
//添加新的联系人信息
num = add(p1, num, 8, "h", "m");
//修改p1数组中id为8的联系人信息
modify(p1, num, 8, "i", "f");
//输出p1数组中的所有元素
printf("p1数组中的元素:\n");
int i;
for (i = 0; i < num; i++)
{
printf("%ld %s %s\n", p1[i].id, p1[i].name, p1[i].sex);
}
return 0;
}
上面的程序中,除了删除函数外,还添加了查询函数、添加函数和修改函数。查询函数可以查询p1数组中指定的联系人信息,并输出该联系人信息。添加函数可以向p1数组中添加新的联系人信息,并返回添加后p1数组中保存的联系人信息的数量。修改函数可以修改p1数组中指定的联系人信息。

在main函数中,除了删除操作外,还添加了查询、添加和修改操作。例如,执行查询操作时,调用查询函数,并传入p1数组、p1数组中保存的联系人信息的数量和要查询的联系人的id,函数会在p1数组中查找id为3的联系人信息,并输出该联系人信息。执行添加操作时,调用添加函数,并传入p1数组、p1数组中保存的联系人信息的数量、要添加的联系人的id、姓名和性别,函数会向p1数组中添加新的联系人信息,并返回添加后p1数组中保存的联系人信息的数量。执行修改操作时,调用修改函数,并传入p1数组、p1数组中保存的联系人信息的数量、要修改的联系人的id、姓名和性别,函数会在p1数组中查找id为8的联系人信息,并修改该联系人信息。
这段程序的运行结果如下:
p1数组中的元素:
2 b f
4 d f
3 c m
8 i f
p1数组中id为3的联系人信息:
3 c m
p1数组中的元素:
2 b f
4 d f
3 c m
8 i f
以上是一个简单的结构数组数据处理程序的例子,它可以演示结构数组在数据处理方面的应用。通过添加更多函数,可以实现更为丰富的功能,并且可以应用于更多场景。

下面是一个实现所需功能的C语言代码:
cCopy code#include <stdio.h>#include <string.h>typedef struct {
long id; char name[10]; char sex[2];
} PS;int delete(PS *p1, int m, PS *p2, int n) { int count = 0;
for (int i = 0; i < m; i++) { int isDuplicate = 0;
for (int j = 0; j < n; j++) { if (p1[i].id == p2[j].id) {
isDuplicate = 1; break;
}
}
if (!isDuplicate) { if (i != count) { // 将非重复的联系人信息移到数组的前面
memcpy(&p1[count], &p1[i], sizeof(PS));
}
count++;
}
}
return count;
}int main() {
PS p1[5] = {
{123, "Alice", "f"},
{456, "Bob", "m"},
{789, "Charlie", "m"},
{234, "David", "m"},
{567, "Eve", "f"}
};

PS p2[3] = {
{456, "Bob", "m"},
{789, "Charlie", "m"},
{987, "Frank", "m"}
};
int m = sizeof(p1) / sizeof(p1[0]); int n = sizeof(p2) / sizeof(p2[0]);
int numContacts = delete(p1, m, p2, n);
printf("删除重复联系人后,p1数组中保存的联系人信息数量为:%d\n", numContacts);
return 0;
}

在这个代码中,我们首先定义了PS结构体类型,用于存储联系人信息。然后,我们实现了delete函数,该函数用于从p1数组中删除在p2数组中重复出现的联系人信息。最后,我们在main函数中创建了一些示例联系人信息,并调用delete函数进行测试。运行结果将输出删除重复联系人后p1数组中保存的联系人信息数量。

题目说详细点呀,别人才好解答。


一道C语言的题目,求大神解答
include<stdio.h> include<math.h> intmain(){ float x,y,z;\/\/定义三个浮点数 scanf("%f %f",&x,&y);\/\/输入两个数字 z=x\/y;\/\/Z的值为X除Y while(1){ if(fabs(z)>1.0)\/\/如果Z的绝对值大于1 { x=y;\/\/Y的值赋给X y=z;\/\/Z的值赋给Y z=x\/y;\/\/Z的值为新的X,Y...

C语言题目,求大神解释
执行(j++||k++)时,由于j++为真,所以k++不会执行(因为1||任意都为真),所以输出k的值还是2

求大神解答3道c语言的题目!急急急
9.20 *(ptr+y)就是a[y] 就是a[y]与8的比较,a[y]始终小于8,所以就是6 9.22 s[0]~s[5]分别为0(s[0]未初始化,初始值要看编译器对未初始局部变量处理方式而定),C,D,E,F,G,fun函数就是从G开始往前找到E,取E的下标 5.5 就如上面所说,sum是一个未初始化局部变量,...

C语言题目 求大神解答最好详细一点非常感谢
内部运算应该是加法.include <stdio.h>#include <math.h>int main(){ double r=0; int n; scanf("%d",&n); while(n) { r+=log(n); n--; } printf("%lf\\n",sqrt(r)); return 0;}

三道C语言题目,求大神(用指针的方法)。
(1)include "stdio.h"int main(int argv,char *argc[]){int n,i,k;printf("Input n(n must be a natural number less than 10000)): ");if(scanf("%d",&n)!=1 || n<1 || n>9999){printf("%d is out of range of valid values.\\n",n);return 0;}k=0; for(i=1;i<...

求大神解答c语言题目: 1,已知函数外面有int a=[][4]={1,1};则下面叙 ...
已经给两个元素赋值了,所以A错;由于在赋值的时候没有用到{},故B对,假如为int a[][4] = {{1},{1}};则第一维就为2;C:起始地址为0是对的;D:只有他俩得到的初值为1,其他元素为0;第二个输出abBcd,因为\\102属于\\后跟三位8进制表示一个字符的,(102)8的十进制为66,故输出B,...

C语言 题目如下 求大神解答
include <stdio.h> int main(){ int bjt = 0;int utc = 0;printf("请输入BJT时间:");scanf("%d", &bjt);if(bjt > 2359 || bjt < 0||bjt%100>=60){ printf("时间格式不合法\\n");} else { \/\/北京时间8点以内 if( bjt\/100 < 8){ utc = 2400 + bjt - 8*100;printf("...

一道c语言函数题目,求大神解答
void my_strcpcy(char *destination,char *source){ int i=0; while(source[i]!=' ') { destination[j]=source[i]; i++; }}while里判断,遇到空格就停止了

大学c语言题目 求大神解答
include <stdio.h>int main(){float a[10],sum=0;for(int i=0;i<10&&scanf("%f",&a[i]);i++)sum+=a[i];printf("总成绩:%.2f 平均成绩:%.2f\\n",sum,sum\/10);}有疑问请追问哦。

C语言题目,求大神解答
include <stdio.h>#include <stdlib.h>int main(void){int a[10000];int b[10000] = { 0 };int n, k;int i,j,t;int count = 0;scanf("%d%d", &n, &k);for (i = 0; i < n; i++){scanf("%d", &a[i]);b[a[i]]++;}for (j = 0; j < 10000; j++){if (b...

娄底市19695548900: 请教一道简单的C语言题目,求大神解答 -
坚态固本: 你没考虑到相邻两个数相等你情况.你看样例第四组数开头有两个7,输出是-1,说明严格递增是a[i+1]>=a[i],严格递减是a[i]>=a[i+1].

娄底市19695548900: C语言题,求大神帮忙啊C语言作业要求 1.从键盘输入3个字符串,要求找出其中最大者 . 2.写一程序,判断一字符串是否是回文,若是输出YES,否则输出... -
坚态固本:[答案] 具体代码如下: #include int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%d\n",(a=a>b?a:b)> c?a:c); } #include #include int main() { char s[50]; char *p,*q; p = s; gets(s); q = &s[strlen(s)-1]; while(p++ = 0; i--) { if('a'

娄底市19695548900: c语言问题,求大神解答!给一个不多于5位的正整数.①求出它是几位数.②分别输出每一位数字.③按逆序输出各位数字.例如原数位465,应输出5 6 4.... -
坚态固本:[答案] #include#include#includeint main(){int num,tmp,i,j;int n[5]={0};//用于存储num分解后的每位上的数字,由于num不超过5位,所以数组有5个单元就可以了 int *sq_ls_num;printf("请输入一个不多于5位的正整数: ");sc...

娄底市19695548900: 急!!!C语言编程题求大神帮忙解答 -
坚态固本: 1 2 3 4 5 6 7 8 9 10 11#include <stdio.h> voidmain(){ inti,m,n,num=0,a[1000]; scanf("%d%d",&m,&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); if(m>a[i]) num++; } printf("诸葛亮最多可以战胜%d个对手",num); }

娄底市19695548900: 谁会这道C语言题目?求高手解答.有1000元人民币100元面值,50元面值,20元面值,10元面值,模拟有多少种组合.最后用printf("一百元有%d张,五... -
坚态固本:[答案] 可以给你思路 用for循环嵌套定义4个变量int i,j,k,l,分别用来表示100,50,20,10的张数,然后嵌套 for(i=0,i

娄底市19695548900: C语言大神求答案~1.从键盘输入两个运算数(datal和data2),做加法运算,并输出计算结果.2. 判断一个数n能否同时被3和5整除3. 求1+2+3+……+100 -
坚态固本:[答案] 第一题: #include void main() { int data1,data2; printf("请输入第一个数:"); scanf("%d",&data1); printf("请输入第二个数:"); scanf("%d",&data2); printf("两个数的和为%d",data1+data2); } 第二题: #include void main() { int ...

娄底市19695548900: 一道C语言题目,请高手给详细解答: -
坚态固本: 1、从main()主函数开始从上往下执行函数2、执行到调用函数fun()后,结果是a=3,b=4,即px=3,py=43、由于是px、py是指针,px和 x指向同一个地址, py 和y也是一样的4、所以输出...

娄底市19695548900: C语言的题目?求大神解答了~~~~~~~~~~~~~~题目如下 -
坚态固本: 楼主题目没问题,当输入2 4时,确实和为15.希望楼主采纳.#include<stdio.h>#define MAX 210 int Int[MAX]={2}; int is_prime(int x) { for (int i= 2; i*i <= x; i++) if (x % i == 0) return -1; return x; } int main() { int m,n; scanf("%d %d",&m,&n); int ...

娄底市19695548900: 一道C语言题目!求大神帮忙啊! -
坚态固本: 前面没看 不过下面这里不对for (i = 0; i < y; i++) if (*(x + i) = 1) ////这里应该是 == 不是= 判断相等使用== printf("这个剩下的人的原号码是%d号...

娄底市19695548900: C程序题目,求高手解答.
坚态固本: 用C语言实现如下: /*统计函数*/ void check(char *str) { int i,number=0,space=0,other=0; char *p=str; for(i=0;i<strlen(str);i++) { if(*(p+i)>='0' && *(p+i)<='9') /*数字*/ number++; else if(*(p+i) == 32) /*空格*/ space++; else other++; /*其它字符*/ } printf(...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网