< 是指 little-endian 。
> 是指big-endian 。
L 是指long,字节数为4 。
struct.unpack返回的是tuple,那么[0]则是指tuple里的第一个元素。
按照你的要求,都用一维数组。不过学生信息建议使用结构体来定义。
题目要求函数参数用到数组和指针,而数组传参本来就可用数组和指针两种方式。
下面是代码:
#include <stdio.h>。
#define MJ 5//课程最大数量。
#define MT 30//学生最大人数。
#define FM 100//满分。
#define PS 60//及格。
int init(int ss[],int sid[],int *p_slen);//通过初始化数组。成功返回总分,失败返回0。
int contFStudents(int ss[],int sid[],int slen);//统计不及格人数并打印名单,返回人数。
int contAAvg(int ss[],int sid[],int slen,float avg);//avg表示平均分数,如未知传-1 返回人数。
int contMax(int ss[],int slen,int *sid);//统计最高分及学号。
int main()
int ss[MT],sid[MT],sum;。
int slen=0;// 实际输入的学生人数。
int fn,an;
sum=init(ss,sid,&slen);。
fn=contFStudents(ss,sid,slen);。
an=contAAvg(ss,sid,slen,(sum*1.0)/slen);。
printf("不及格占比%.0f%%\n",(fn*1.0)/slen*100);。
printf("高于等于平均分占比%.0f%%\n",(an*1.0)/slen*100);。
contMax(ss,slen,sid);。
return 0;
int init(int ss[],int sid[],int *p_slen)。
int i=0,n,sum=0;。
if(!p_slen) return 0;。
*p_slen=0;
printf("该班级所有学生某课程成绩(人数不超过%d):\n",MT);。
for(i=0;i<MT;i++)sid[i]=1000+i;//学号没有特殊要求,直接用数字代替。
i=0;
while(*p_slen<=MT)。
{
printf("请输入学号%d的成绩:",sid[i]),scanf("%d",&n);。
if(n>FM)。
{
printf("%d输入无效,不能大于满分上限%d\n",n,FM);。
continue;。
}
if(n<0) break;。
ss[i++]=n;。
sum+=n;
}
*p_slen=i;
return sum;
int contFStudents(int ss[],int sid[],int slen)。
int i,cnt=0;。
for(i=0;i<slen;i++)。
if(ss[i]<PS)cnt++,printf("学号%d,分数:%d,不及格!\n",sid[i],ss[i]);。
printf("不及格人数共:%d人\n",cnt);。
return cnt;
int contAAvg(int ss[],int sid[],int slen,float avg)。
int i,cnt=0,sum=0;。
if(avg==-1)
{
for(i=0;i<slen;i++) sum+=ss[i];。
avg=(sum*1.0)/slen;。
}
for(i=0,printf("平均分(%f)及平均分以上的学生有:\n",avg);i<slen;i++)。
if(ss[i]>=avg)cnt++,printf("学号%d,分数:%d\n",sid[i],ss[i]);。
printf("平均分及平均分以上人数共:%d人\n",cnt);。
return cnt;
int contMax(int ss[],int slen,int *sid)。
int i,max=ss[0];。
if(!sid) return 0;。
for(i=0;i<slen;i++)。
if(ss[i]>max) max=ss[i];。
for(i=0,printf("最高分(%d)的学生学号有:\n",max);i<slen;i++)。
if(ss[i]==max) printf("%d\n",sid[i]);。
return 1;
#include<stdio.h>。
#include<string.h>。
#include<stdlib.h>。
#defineN100
voidInsert(char*s);。
intmain()
charstr[N];
printf("Inputastring:");。
gets(str);
Insert(str);
printf("Insertresults:%s\n",str);。
return0;
voidInsert(char*s)。
charstr[N];
char*t=str;
strcpy(t,s);
for(;*t!='\0';s++,t++)。
*s=*t;
s++;
*s='';
*s='\0';/*在字符串s的末尾添加字符串结束标志*/。
扩展资料
C语言通过定义一个char类型的二维数组实现,通过二维数组的行索引可得到数组中的每个字符串,列的大小限定了每个字符串所能包含的最大字符个数,所以采用这种定义方式时,列的大小必须不能小于数组所有字符串的最大长度。
C语言编程定义一个字符串的数组:
str={
“IloveC.”,
“IloveC++.”,
“IloveJAVA.”,
“IlovePython.”,。
“IloveLabVIEW.”
写一个算法,都是先理清思路,分析清楚了,就基本上算可以初步完成了。分析:这里的题意是有字符串s和t,所以可以考虑一下临界条件,比如s或t是否为空串等,这里忽略吧,因为不影响思路。t在s的尾部出现,前提最起码是s不比t短。要t在s尾部出现,可以先求出两个串的长度ls和lt,然后strcmp(&s[ls-lt],t),该表达式的返回值就是最终函数的返回值。综合以上分析写出代码:
#include </usr/include/stdio.h>。
#include </usr/include/string.h>。
int strend(char*, char* );。
int main() {
char* a = "zbjxb";。
char* b = "h";。
printf("%d\n",strend(a,b));。
//printf("test window() function!\n");。
exit(0);
/*
* s==t , strend(s,t) returns 1。
* s != t, strend(s,t) returns 0。
*/
int strend(char* s, char* t) {。
int nLengthS = strlen(s);。
int nLengthT = strlen(t);。
if (nLengthT == 0)。
return 1;。
if (nLengthS < nLengthT)。
return 0;。
/*when s1 == s2 ,strcmp(s1,s2) returns zero*/。
return !strcmp(&s[nLengthS-nLengthT],t);。
当然,这里的返回值和库函数中的规定可能有些出入。
其中用到的strcmp,strlen等基础库函数也可以经过一番分析后写出来。
最后还有重要的一步就是测试写出的算法。我已测过了,还可以,哈哈。
#include <stdio.h>。
#include <string.h>。
#include <time.h>。
#include <stdlib.h>。
#include <malloc.h>。
void f(char* s,char* s1,char* s2)。
int slen=strlen(s);。
char* ts=(char*)malloc(slen*sizeof(char)+1);。
int l1;
int i,j,t,ti;
if (slen<=1)。
{
strcpy(s1,s);。
*s2=0;
free(ts);
return;
}
strcpy(ts,s);
l1=rand()%(slen-1)+1;。
for(i=0;i<l1;i++)。
{
while(1)
{
ti=rand()%slen;。
t=ts[ti];
if(t)
{
ts[ti]=0;。
break;
}
}
s1[i]=t;
}
s1[i]=0;
for(i=0,j=0;i<slen;i++)。
{
if(ts[i])
s2[j++]=ts[i];。
}
s2[j]=0;
free(ts);
}
int main()
char str0[200];。
char str1[200];。
char str2[200];。
srand(time(0));。
gets(str0);
f(str0,str1,str2);。
printf("%s\n%s\n",str1,str2); 。
return 0;