第2题
A.f3执行结束后返回f2继续执行,f2结束后返回f1继续执行
B.f3执行结束后返回f1继续执行,f1结束后返回f2继续执行
C.f2执行结束后返回f3继续执行,f3结束后返回f1继续执行
D.f2执行结束后返回f1继续执行,f1结束后返回f3继续执行
第3题
【程序说明】
该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。
【程序】
include<stdio.h>
void strmerge(char,a,char *b,char *c) //将字符串a,b合并到字符串c中
{
char t,*w;
w=c;
while((1))
{//找到字符串a,b当前字符中较小的字符
if(*a< *b)
{
t= *a;
(2);
{
else if (*a>*b)
{
t= *b;
(3);
}
else //字符串a,b当前字符相等
{
t= *a;
a++;
b++;
}
if((4)) //开始,可直接赋值
*w=t;
else if(t!=*w)
//如果a,b中较小的当前字符与c中当前字符不相等,才赋值(5);
}
if(*a!=\'\0') //如果字符串a还没有结束,则将a的剩余部分赋给C
while(*a!='\0')
if(*a!=*w)
{
*(++w)=*a;
a++;
}
else
(6);
if(*6!='\0') //如果字符串b还没有结束,则将b的剩余部分赋给c
while(*b!='\0')
if(*b! = *w)
{
*(++w)=*b;
b++;
}
else
b++;
(7);
}
void strsort(char*s) //将字符串S中的字符排序
{
int i,j,n;
char t,*w;
W=S;
for(n=0;*w!='\0';n++) //得到字符串长度n
w++;
for(i=0;i<n-1;i++) //对字符串s进行排序,按字母先后顺序
for(j=i+1;j<n;j++)
if((8))
{
t=s[i];
s[i]=s[j];
(9);
}
}
void main()
{
char s1[100],s2[100],s3[100];
printf("\nPlease,input the first string:");
scanf("%s",s1);
printf("\nPlease input the second string:");
scanf("%s",s2);
strsort(s1); //将字符串s1排序
strsort(s2); //将字符串s2排序
printf("%s\n",s1);
printf("%s\n",s2);
s3[0]='\0'; //字符串s3的第一个字符先置'\0'结束标志
(10) //将s1和s2合并,按照字母顺序排列,
//且要删去相同字符,存入s3中
printf("%s",s3);
}
第4题
问题:若分别采用函数定义方式1、2和调用方式1、2,请分析程序的运行情况,填充下面的空(1)~(3)。若采用定义方式1和调用方式1,则输出为"00000000"。若采用定义方式1和调用方式2,则__(1)__。若采用定义方式2和调用方式1,则__(2)__。若采用定义方式2和调用方式2,则__(3)__。
第6题
【说明】
某大学征询学生意见,从各学院预选的n(n≤60)位优秀大学生中,评选出“十佳大学生”。以下【C程序】对各位学生选票进行相关的统计、排序等处理。
(1)各学院预选的优秀大学生按1,2,…顺序连续编号,每个编号用两个字符表示,即01,02,…。
(2)所回收的选票按以下格式存于文件source中,每行字符串对应一张选票。其中,姓名占10个字符,学院名称占30个字符,大学生编号占20个字符。
(3)对应名次的大学生编号可以有空缺,但必须用00表示。
(4)若编号超出规定范围,或编号重复出现,按照废票处理。
(5)按选票中所列“十佳大学生”顺序给出各名大学生的得分。评分标准如下:
一 二 三 四 五 六 七 八 九 十
15 12 9 7 6 5 4 3 2 1
(6)按各位大学生得分数由高到低顺序排队,并按以下格式列出“十佳大学生”排行表。
名次 大学生编号 合计得分 合计得票数
若得分相同,则得票数多的在前;若得分和得票数都相同,则编号小的在前。
以下【C程序】中所应用到的函数fopen、fclose和fgets都是I/O程序库中的函数。
【C程序】
include <stdio. h>
define n 60
long int tn[n], td[n], score[n+1][10], order[n];
char s[80];
int mark[]=(15,12,9,7,6,5,4,3,2,1);
FILE *fp, *fopen();
Main()
{ int c, g, k, I, j, b[10];
long int e, d, t, tt, dd;
char * p;
for(i=0; i<=n; i++)
for(j=0; j<10; j++)
score[i][j]=0;
fP=fopen("source", "r"); /*以读方式打开文件source*/
p=fgets(s, 80, fp); /*读fp所指文件的下一行字符串于s*/
while(*p){
g=l; k=0; p+=40;
while(k<10){
c=((*p++)-'0')*10+((*p++)-'0');
b[k++]=c)
if(c<=n){
if(c)
{ i=0;
While( (1) );
If( (2) ){g=0; break;}
}
else{g=0; break;}
}
If(g)
For(i=0; i<k; i++)
If(b[i])
(3);
p=fgets(s, 80, fP);
}
Fclose(fp); /*关闭fp所指文件*/
For(i=1; i<n; i++){
For(t=0, d=0, j=0; j<10; j++){
t +=(e=score[i][j]);
d +=e * mark[j];
}
tn[i-1]=t; td[i-1]=d; order[i-1]=i;
}
For(i=0; i<n-1; i++){
k=i;
for(j=i+1; j<n; j++)
if(
第7题
实验十一 C程序的指针(二) 一、实验目的 1. 掌握指针和指针变量的概念。 2. 掌握简单指针变量的定义和基本使用方法。 3. 熟悉指针和一维数组的关系,掌握指向一维数组的指针变量的定义方法,熟练使用指针变量访问一维数组元素。 4. 了解指针和二维数组的关系,掌握用指针表示二维数组元素的方法。 5. 了解指针与字符串的关系,能熟练使用指针处理字符串。 二、实验内容及实验步骤 1. 调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求: ⑴ 2个数的和, ⑵ 2个数交换值. 要求用函数指针调用这两个函数,结果在主函数中输出. main() { int a,b,c,(*p)(); scanf("%d,%d",&a,&b); p=sum; *p(a,b,c); p=swap; *p(a,b); printf("sum=%d\n",c); printf("a=%d,b=%d\n",a,b); } sum(int a,int b,int c) { c=a+b; } swap(int a;int b) { int t; t=a; a=b; b=t; } 调试程序时注意参数传递的是数值还是地址. 2. 测试、运行自己编写的程序。 (1)写一个函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为 int strcmp(char * p1,char * p2); 设p1指向字符串s2,要求当s1=s2时,函数返回值为0;如果s1<>s2,则返回它们二者第一个不相同的ASCII码值(如“BOY”与“BAD”的第二个字母不相同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如果s1<s2,则输出负值。 两个字符串s1、s2由main函数输入,strcmp函数的返回值也由main函数输出。 (2)用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。n和各整数在主函数中输入,最后在主函数中输出。 (3)有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 三、实验报告要求 写明: 1. 实验目的 2. 实验内容与步骤 3. 编写的程序(题目,经调试、运行后正确的程序) 4. 思考题的解决方法。 5.>
第8题
【说明】
已知1900年1月1日是星期一,下面的函数count_5_13(int year)用于计算给定的年份year中有几个“黑色星期五”。“黑色星期五”指既是13日又是星期五的日期。
函数count_5_13(int year)首先算出年份year的1月13日是星期几,然后依次计算每个月的13日是星期几,若是星期五,则计数。
程序中使用了函数isLeapYear(int year),其功能是判断给定年份是否为闰年,返回值为1(或0)表示year是(或不是)闰年。
【C语言函数】
int count_5_13(int year)
{
int date; /*date为0表示星期日,为1~6分别表示星期一至星期六*/
long days=0; /*days记录天数*/
int m,y,c=0; /*c用于表示黑色星期五的个数*/
if (year<1900) return-1;
/*计算从1900年1月1日起至给定年份year的1月13日间隔的天数*/
days=12;
for (y= 1900; y < year; y++) {
days +=365;
if (isLeapYear(y))(1);
}
date=((days%7) +1) %7; /*算出给定年份year的1月13日是星期几*/
c=((2)) ?1:0;
for(m=1;(3);m++) {
switch (m) {
case 1:case 3: case 5: case 7:case 8:case 10:case 12:
days=31; break;
case 4: case 6: case 9: case 11:
days=30; break;
case 2:days=28;
if((4)) days=29;
break;
}/*end of switch*/
date=((days%7)+ (5) )%7;
if (date==5) c++;
} /*end of for*/
return c;
}
第9题
1. 在Visual Basic应用程序中,下列正确的描述是 。 A) 过程的定义可以嵌套,但过程的调用不能嵌套 B) 过程的定义不可以嵌套,但过程的调用可以嵌套 C) 过程的定义和过程的调用均可以嵌套 D) 过程的定义和过程的调用均不能嵌套 2. 下列说法错误的是 。 A) 函数过程没有返回值 B) 子过程没有返回值 C) 函数过程可以带参数 D) 子过程可以带参数 3. 以下叙述不正确的是 。 A) 在Sub过程中可以调用Function过程 B) 在用Call调用Sub过程时必须把参数放在括号里 C) 在Sub过程中可以嵌套定义Function D) 用Static声明的过程中的局部变量都是Static类型 4. Sub过程与Function过程最根本的区别是 。 A) Sub过程可使用Call语句或直接使用过程名调用,而Function过程不可以 B) Function过程可以有参数,Sub过程不可以 C) 两种过程参数的传递方式不同 D) Sub过程的过程名不能返回值,而Function过程能通过过程名返回值 5. 下列关于过程及过程参数的描述中,错误的是 。 A) 过程的参数可以是控件名称 B) 用数组作为过程的参数时,使用的是“传地址”方式 C) 只有函数过程能够将过程中处理的信息传回到调用的程序中 D) 窗体可以作为过程的参数
第10题
在下面的主程序中,实参a与形参x以引用调用(Call by reference)的方式传递信息,实参b与形参y以传值调用(Call by value)的方式传递信息,那么,从过程"compute"
A.值
B.名
C.地址
D.地址和值
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!