c语言上机实验四__答案(转自刘老师)

上机实验四 选择结构程序设计(答案)

学号: 姓名:

一.目的要求

1. 掌握6个关系运算符、3个逻辑运算符的基本概念、基本属性、运算规则。

2. 掌握if语句的3种形式及对应的语法规则、执行流程,switch语句的语法规则、执行流程。

3. 按题目要求,完成上机实验报告。

二.实验内容

思考问题:相等比较运算符与赋值运算符的区别?如何表示复杂条件?逻辑表达式的求值规则?怎样比较实数的相等与不等?

第1题:有一函数

x (x<1)

y= 2x-1 (1<=x<10)

3x-11 (x>=10)

用scanf函输入x的值,求y值。

算法提示:

1) 定义实变量x,y

2)

3)

4)

5)

#include <stdio.h>

void main() {

float x, y; // 定义实变量x,y

}

注:上面的if语句也可改写成如下:

if (x<1) y = x;

else if (x>=10) y = 3*x - 11; printf("Please enter x:\n"); // 提示输入"Please enter x:" scanf("%f", &x); // 读入x, 注意x前面必须有& //下面判断x所在的区间 if (x<1) y = x; else if (x <10) y = 2*x -1; //注意不能写成1<=x<10,可以分开写“x>=1 && x<10” else y = 3*x - 11; printf("y=%f\n", y); // 打印结果。 提示输入"Please enter x:" 读入x 判断x所在的区间,对应出y的计算公式并求值(进一步细化) 打印结果。 编写程序:

else y =2*x -1;

第2题:编程判断输入的正整数是否既是5又是7的整数倍。若是,则输出yes;否则输出no。

#include <stdio.h>

void main() {

int x; // 定义整数变量x

scanf("%d", &x); // 读入整数x, 注意x前面必须有&

//下面进行判断x if (x%5==0 && x%7==0) //注意是==,而不是=;&&是“并且”的意思 printf("Yes\n"); else printf("No\n");

}

注:上面的if语句也可改写成如下:

if (x%35==0) printf("Yes\n"); else printf("No\n");

第3题:给出一个百分制成绩,要求输出成绩等级“A”、“B”、“C”、“D”、“E”。90分以上为“A”,80~89分为“B”,70~79为“C”,60~69为“D”,60分以下为“E”。(用switch语句和if语句两种)

算法提示:

1) 定义百分制成绩(实变量)score

2)

3) 提示输入"Please enter score:" 读入score

4) 判断score所在的区间,对应出score的等级并打印相应等级(进一步细化)。

编写程序:

//if 语句实现

#include <stdio.h>

void main(){

float score; // 定义百分制成绩(实变量)score

printf("Please enter score:\n"); // 提示输入"Please enter score:"

scanf("%f", &score); // 读入score // 下面是判断score所在的区间,对应出score的等级并打印相应等级

if (score>=90) { printf("A\n"); } else { if (score>=80) { //这里不需要写成score>=80 && score<90, 因为score<90是多余的判断 printf("B\n"); } else { if (score>=70) { //同样,这里不需要写score<80 } printf("C\n"); } else { } if (score>=60) { printf("D\n"); } else { } printf("E\n");

}

}

注:上面的if语句也可改为如下形式

if (score>=90) printf("A\n"); else if (score>=80) printf("B\n");

else if (score>=70) printf("C\n");

else if (score>=60) printf("D\n");

else printf("E\n");

//switch 语句实现

#include <stdio.h>

void main(){

float score; // 定义百分制成绩(实变量)score

printf("Please enter score:\n"); // 提示输入"Please enter score:"

scanf("%f", &score); // 读入score // 下面是判断score所在的区间,对应出score的等级并打印相应等级 int s = (int) score/10; // 先将score转换为整数,然后再整除 switch (s) { case 10: case 9: printf("A\n"); break; //break不能少 case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default: printf("E\n");

}

}

第4题:输入三个数据,如果这三个数据能够构成三角形,计算并输出三角形的面积。 算法提示:

1)构成三角形的条件是:任意两边之和大于第三边。

2)开根号的函数是sqrt,比如求a+b的平方根是sqrt(a+b),该函数在头文件math.h中

#include <stdio.h>

#include <math.h> // 这个文件包含了平方根函数sqrt

void main(){

float a, b, c, p, s; // 定义三条边(实变量)

}

注:如果严格点,那么边长必须都大于0,因此上面的if语句改为如下形式

if (a>0 && b>0 && c>0 && a+b>c && a+c>b && b+c>a)

第5题:给一个不多于5位的正整数,要求:

(1)求出它是几位数;

(2)分别打印出每一位数字;

(3)按逆序打印出各位数字,例如输入数为321,应输出123。

#include <stdio.h>

void main() {

// 定义6个变量,其中x为整数,a1到a5分别为万位到个位

int x, y, a1, a2, a3, a4, a5; scanf("%5d", &x); // 读入不超过5位的整数 y = x; a5 = x%10; // a5为x的个位数 x = x/10; // x的长度减1 a4 = x%10; // a4为x最初值的十位数 x = x/10; // x的长度减1 a3 = x%10; // a3为x最初值的百位数 x = x/10; // x的长度减1 a2 = x%10; // a2为x最初值的千位数 x = x/10; // x的长度减1 scanf("%f%f%f", &a, &b, &c); // 读入三条边,同样&不能少 // 下面是判断是否能构成三角形 if (a+b>c && a+c>b && b+c>a) { // 注意“{”不能少写,因为下面包含多条语句 p = (a+b+c)/2 ; // 计算周长的一半 s = sqrt(p*(p-a)*(p-b)*(p-c)); printf("三角形的面积为:%.2f\n", s); } else printf("不能构成三角形\n");

} a1 = x; // a1为x最初值的万位数 //下面进行判断 if (a1!=0) {//表示是5位数 printf("%d是五位数,", y); printf("其中每一位数分别为%d,%d,%d,%d,%d,", a1, a2, a3, a4, a5); printf("逆序为%d%d%d%d%d。\n", a5, a4, a3, a2, a1); } else if (a2!=0) {//表示是4位数 printf("%d是四位数,", y); printf("其中每一位数分别为%d,%d,%d,%d,", a2, a3, a4, a5); printf("逆序为%d%d%d%d。\n", a5, a4, a3, a2); printf("%d是三位数,", y); printf("其中每一位数分别为%d,%d,%d,", a3, a4, a5); } else if (a3!=0) {//表示是3位数 printf("逆序为%d%d%d。\n", a5, a4, a3); } else if (a4!=0) {//表示是2位数 printf("%d是两位数,", y); printf("其中每一位数分别为%d,%d,", a4, a5); printf("逆序为%d%d。\n", a5, a4); } else if (a5!=0) {//表示是1位数 printf("%d是一位数,", y); } printf("其中每一位数分别为%d,", a5); printf("逆序为%d。\n", a5);

第6题:输入一公元年号,判断是否是闰年。

闰年的条件是:年号能被4整除但不能被100整除,或者能被400整除。

#include <stdio.h>

void main() {

int year; // 定义整数变量year

printf("请输入年份:\n"); // 这个提示可以不需要

} scanf("%d", &year); // 读入年份year, 注意year前面必须有& //下面进行判断x if (year%4==0 && year%100 !=0 || year%400==0) //注意&&、||分别是“并且”和“或者”的意思 printf("%d是闰年!\n", year); else printf("%d不是闰年!\n", year);

 

第二篇:C语言上机预测答案(20xx下 )

注意:

1、题库中只有填空题的题目,找到题目后,改错题及编程题(无题目)的答案对应在填空题答案的后面。

2、输入填空题三道题目的答案时,要先依次删除题目中的­­   1      2      3   ,再依次输入答案。

3、改错题,根据答案找到和答案相近原题目,在原题目中把错误的改为答案上的内容。

4、编程题,根据答案中的内容,完整输入(格式按答案,包括回车,各类符号等),包括所有的分号(;)。

5、填空题和改错题一定要保存,编程题做完之后一定要运行!

6、请认真阅读上机教案。

7.题库在下面共四页(打印后四页)
1、程序填空题

 给定的程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制中。

填空:(1)STYPE   (2)FILE   (3)fp

改错: (1) for(i=0;i<=sl;i++)  (2) t[2*sl]='\0'或t[sl+sl]='\0'

编程:

*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10);

2、程序填空题

 给定程序的功能是:从键盘输入若干文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输出输入的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和Writetext实现。

填空:(1)  *fw  (2)  str (3) str

改错:(1) void fun(long s,long *t)(2) s1=s1*10;

编程:int i,j=0,min=a[0].s;

for(i=0;i<N;i++)

{

if(a[i].s<min)

{

j=0;b[j++]=a[i];min=a[i].s;

}

else if(min==a[i].s)

b[j++]=a[i];

}

return j;

3、程序填空题

 给定程序中,函数fun的功能是:讲自然数1~10以及它们的平方根写到名为myfile3.txt的文本中,然后再按顺序读出显示在屏幕上。

填空:(1)fp(2)fclose(fp)(3)myfile3.txt

改错:(1)for(i=j+1;i<n;i++) (2)p=i;

编程:

*c=(b%10)*1000+(a%10)*100+(b/10)*10+a/10;

4、程序填空题

给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。

填空:(1) "r"  (2)fs  (3)ft

改错:(1)if (d%2==0) (2)s/=10;

编程:int i = 0, j = 0;

while(s[i])

{

if(i % 2 == 0 && s[i] % 2 == 0)

t[j++] = s[i];

i++;

}

t[j] = 0;

5、程序填空题

给定程序中已经建立一个带有头结点的单向链表,链表中的各结点数据域中的数据递增有序链接,函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。

填空:(1)x  (2)p   (3)s

改错:(1)long k=1;  (2)num/=10;

编程:int i;

float aver=0.0;

for(i=0;i<n;i++)aver+=a[i];

aver=aver/n;

return aver;

6、程序填空题

 给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部节点中的数据,并释放该节点,使链表缩短。

填空:(1)  next  (2) t->data  (3) t

改错:(1) void fun(char *a) (2) print("%c",*a);

编程:int i;

char *p=s,*q=t;

int n=0,m=0;

while(*p)

{

n++;

p++;

}

while(*q)

{

m++;

q++;

}

if(n>=m)

p=s;

else

p=t;

return p;

7、程序填空题

给定程序中建立一个带有头结点的单向链表,链表中的各节点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的节点,使之只保留一个。

填空:(1) q   (2) next   (3) next

改错:(1) 缺分号   (2) p = i;

编程:*n=0; int i;

for(i=1;i<=m;i++)

if(i%7==0||i%11==0)

a[*n++]=i;

8、程序填空题

给定的程序中,函数fun的功能是:在带有头结点的单向链表中,

查找数据域中值为ch的结点。找到后通过函数值返回该结点在

链表所处的顺序号;如不存在值为ch的结点,函数返回0值。

填空:(1)0或NULL   (2)n (3)head,ch

改错: (1) for(i=0,t=0;p[i];i++)  (2) c[t]='\0';

编程:

int i;

for(i=1;i<strlen(ss);i+=2)

{

 if(ss[i]>='a'&&ss[i]<='z')  ss[i]-=32;

}

9、程序填空题

给定程序中,函数fun的功能是:统计出带有头结点的单向链表中节点的个数,存放在形参n所指的存储单元中。

填空:(1) *n   (2) next   (3) head

改错:(1) a=NULL;   (2) if(*r==*p)

编程:

int i,j=0;

for(i=0;i<strlen(s);i+=2)

if(s[i]%2==0) t[j++]=s[i];

t[j]='\0';

10、程序填空题

 给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各节点数据域中值之和作为函数值返回。

填空:(1)  data  (2) next  (3) head

改错:(1) while(*r) (2) *a=*r;a++;r++;

编程:int i,j=0;

for((i=0;i<strlen(s);i+=2)

t[j++]=s[i];

t[j]='\0';

11、程序填空题

给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数数值返回,并把其串长放在形参n所指变量中。Ss所指字符串数组中共有M个字符串,且串长<N.

填空:(1)M  (2)<   (3)k

改错:

(1)if(('a'<=tt[i])&&(tt[i]<='z'))   (2)tt[i]-=32;

编程:int i,j;

int t=0;

for(i=2;i<m;i++)

{j=2;

while(j<i)

{if(i%j==0)

{xx[t]=i;

t++;

break;

}

j++;

}

*k=t;

12、程序填空题

给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如:形参s所指的字符串为:def35adh3kjsdf7。

执行结果为:defadhkjsdf3537

填空:(1) j++   (2) s[i]=t1[i]   (3) j

改错:(1) for(j = i + 1; j < 6; j++)      (2) *(pstr + i) =*( pstr + j);

编程:

int cnt=0;

char *p=ss;

while(*p)

{if(*p==c)

cnt++;

p++;}

return cnt;

13、程序填空题

给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7.执行结果为:def3*5adh3*kjsdf7*。

填空:

(1)&&  (2)0          (3)s[j]

改错(1)for(i=2;i<=m;i++)

(2)y+=1.0/(i*i);

编程题:int c[3][3];

for(i=0,i<3;i++)

for(j=0;j<3;j++)

{c[i][j]=a[j][i];

b[i][j]=a[i][j]+c[i][j];}

14、程序填空题

给定的程序中,函数fun的功能是:统计形参s所指字符串中数字字

符出现的次数,并存放在形参t所指的变量中,最后在主函数中

输出,例如,形参s所指的字符串为abcdef35adgh3kjsdf7。输出

结果为:4。

填空:(1)s[i]   (2)'9' (3) *t=n;

改错: (1) t=*x;*x=y;  (2) return (t);

编程:

int i;

*n=0;

for(i=7;i<1000;i++)

 if (((i%7)==0)||((i%11)==0)&&((i%77)!=0) 

a[(*n)++]=i;

15、程序填空题

给定的程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数的位置,最右边被移出的字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)

例如:形参s所指字符串为:abcdefgh,执行结果为:

ahcbedgf

填空:(1) 1   (2) s[k]   (3) c

改错:(1) long s = 0,t = 0;  (2) t = t / 10;

编程:

char *p=tt;

int i;

for(i=0;i<26;i++)

pp[i]=0;

while(*p)

{if(*p>='a' &&p<='z')

pp[*p-'a']+=1;

p++;

}

16、程序填空题

 在给定程序中,函数fun的功能是:对形参s所指字符串下标喂奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中形成一个新串。

例如,形参s所指的字符串为baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。

填空:(1) t=i   (2) i  (3) 0

改错:(1) while(fabs(t)>=num) (2) t=s/n;

编程: int p,m=0;

for(p=0;p<LEN;p++)

if(p!=n)

{b[m]=a[p];m++;}

b[m]='\0';

17、程序填空题

 给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则函数不做任何处理。

例如:s所指字符字符串为:baacda,c中得字符为:a,执行后所指字符串为:baaaacdaa。

填空:(1) 0或'\0'   (2) 0  (3) c

改错:(1) double sum=0.0; (2) sum/=c;

编程:int k;

float str=1.0,sum=1.0;

for(k=2;k<=n;k++)

{

sum=sum+k;

str=str+1/sum;

}

return str;

18、程序填空题

 给定程序中,函数fun的功能是:N×N矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m个位置,左边值为0.例如,N=3,m=2,有下列矩阵

1    2    3

4    5    6

7    8    9

程序执行结果为

0    0    1

0    0    4

0    0    7

填空:(1)  i++  (2) m   (3)  m 

改错:(1)  while((high>=2)&&(n<10))  (2) 缺分号  

编程: float x1=0.0,x0;

do

{

x0=x1;

x1=cos(x0);

}while(fabs(x0-x1)>0.000001);

return x1;

19、程序填空题

给定程序中,函数fun的功能是:将N*N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵

1  2  3

4  5  6

7  8  9

计算结果为

3  1  2

6  4  5

9  7  8

填空:(1)N  (2)N-1  (3)0

改错:(1)s=s+(n+1.0)/n;    (2)return t;

编程:int f0=0,f1=1,f;

do

{f=f0+f1;

f0=f1;

f1=f;

}while(f<t);

return f;

20、程序填空题

给定程序中,函数fun的功能是:由NxN矩阵,将矩阵的外围元素顺时针旋转。

操作顺序是:首先将第一行元素的值存入临时数组r, 然后使第一列成为第一行,

最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列

列。例如:而N=3,有以下矩阵:

1   2   3

4   5   6

7   8   9

计算结果为

7   4   1

8   5   2

9   6   3

填空:(1)0    (2)j--  (3)j

改错: (1)double f(double x)

       (2)缺分号

编程:  double s=0.0;

int i;

for(i=1;i<=m;i++)

s=s+log(1.0*i);

s=sqrt(s);

return s;

21、程序填空题

 给定程序中,函数fun功能是:找出100至x(x想<999)之间各位上的数字之和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。

例如,当n值为500时,个各位数字之和为15的整数有

159,168,177,186,195,249,258,267,276,285,294,339,348,357,366,375,384,393,429,438,447,456,465,474,483,492,共有26个。

填空:(1)   0  (2)   x  (3)   t++  

改错:(1)   int i,s1;  (2)  t[i]=s[s1-1-i]; 

编程: *c=(b/10)*1000+(a/10)*100+(b%10)*10+a%10;

22、程序填空题

 给定的程序中,函数fun的功能是:找出100~999之间(含有100和999)所有整数各位上的数字之和为x(x为以正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。

例如:当x值为5时,100~999之间各位上数字之和为5的整数有:104,113,122,131,140,203,212,230,302,311,320,401,410,500.共有15个。当x的值为27时,各位数字之和为27的整数是:999。只有1个。

填空:(1)999   (2)t/10  (3)x

改错:(1) void fun(long s,long *t)  (2)while(s>0)

编程:STREC tmp;

int i,j;

for (i=0;i<N;i++)

for (j=i+1;j<N;j++)

if(a[i],s<a[j],s)

{tmp=a[i];

 a[i]=a[j];

 a[j]=tmp;

23、程序填空题

给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原位从高位到低位的顺序组成一个新的数,并作为函数值返回。

例如,从主函数输入一个整数:27638496,函数返回值为:26845.

填空:(1)1   (2)s   (3)i*10

改错:(1)int fun(int n,int xx[][M])   (2)printf("%d",xx[i][j]);

编程:*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);

24、程序填空题

给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数返回.

例如,输入一个整数:27638496,函数返回值为:64862.

填空: (1) 0       (2) 10*x       (3) n/10

改错: (1) *t=0;    (2) if (d%2!=0)

编程: char *p=p1;

while (*p)

p++;

while(*p2)

{*p++=*p2++;

*p=0;

}

25、程序填空(与教材18题对应))

给定的程序中,函数fun的功能是:将形参n所指变量中,各位上为

偶数的数去除..剩下的数按原来从高位的顺序组成一个新的数,并

通过形参兆时指针n传回所指变量.

例如:输入一个数:27638496,新的数:739.

填空(1) 10     (2) 0   (3) x

改错(1) if (n = = 0)

(2)缺分号

编程:    long s=0, t;

int i=0,j,n=strlen(p),k,s1;

if (p[0]==' -')

i++;

for (j=i;j<=n-1;j++)

{t=p[j]-'0';

s1=10;

for (k=j;k<n-1;k++)

t*=s1;

s+=t;}

if (p[0]=='-')

return –s;

else return s;

26、程序填空题

给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。

S=(1*3)/(2*2)+(3*5)/(4*4)+(5*7)/(6*6)+……+(2n-1)(2n+1)/(2n*2n)

例如:当形参n的值为10时,函数返回9.612558.

填空:(1)0    (2)n    (3)  (t*t)

改错:(1)for(i=0;str[i];i++)

      (2)  for(i=0;  str[i];i++)

编程:double s;

float  n,t,pi;

t=1;pi=0;n=1.0;s=1.0;

while((fabs(s))>=eps)

{pi+=s;

 t=n/(2*n+1);

 s*=t;

  n++;}

 pi=pi*2;

  return pi;

27、程序填空题

给定程序中,函数fun的功能是:计算下式前n项的和

S=(1*3)/(2*2)-(3*5)/(4*4)+(5*7)/(6*6)-…+(-1)^(n-1)*(2n-1)(2n+1)/(2n*2n)

作为函数植返回。

例如,当形参n的值为10时,函数返回:-0.204491

填空:(1)1   (2) 2*i    (3)  (-1)

改错:(1) 缺分号     (2) if (m= =k)

编程:int i;

*max=a[0];

*d=0;

for(i=0;i<n;i++)

if(*max<a[i]);

{*max=a[i];

*d=i;}

28、程序填空题

给定程序中,函数fun的功能是计算下式

s=3/(2*2)-5/(4*4)+7/(6*6)-…+(-1) ^ (n-1)(2n+1)/(2n*2n)

直到|(2n+1)/(2n*2n)|<10*e(-3)

并把计算结果作为函数值返回。

例如:若形参e的值为1e-3,函数的返回值为0.551690。

填空:(1)3.0    (2)>    (3)  (2*i+1)

改错:(1)double  fun (int  n)

      (2) s=s+(double)a/b;

编程:  int i,j,max=a[0][0];

       for(i=0;i<2;i++)

       for (j=0;j<M;j++)

       if (max<a[i][j])

       max=a[i][j];

       return max;

29、程序填空题

给定程序中,函数fun的功能是计算下式

s=1/(2*2)+3/(4*4)+5/(6*6)+....(2n-1)/(2n*2n)

直到|(2n-1)/(2n*2n)|<=10e-3,并把计算结果作为函数值返回。

例如,若形参e的值为1e-3,函数的返回值2.985678.

填空:(1)0(2)i++(3)2.0*i

改错:(1)void fun (char *s,char *t)(2)t[2*d]='\0';

编程:int i,j=o;

for(i=1;i<strlen(s);i+=2)

if (i%2==0&&s[i]%2)t[j++]=s[i];

t[j]='\0';

30、程序填空题

给定程序中,函数fun的功能是,将形参s所指字符串的所有字母

字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作

为函数值返回。

 例如,s所指字符串为:asd123fgh543df处理后新字符串为

asdfghdf123543.

填空:(1)s[i]    (2)k     (3)0

改错:(1)while (*w)    (2)if(*r==*p)

编程:int i,j=0;

for(i=1;i<strlen(s);i+=2)

if(s[i]%2)t[j++]=s[i];

t[j]='\0';

31、程序填空题

 给定程序中,函数fun的功能是:将a所指4×3矩阵中第k行的元素与第0行元素交换。

例如。有下列矩阵:

1   2    3

4   5    6

7   8    9

10  11   12

若k为2,程序执行结果为:

7   8    9

4   5    6

1   2    3

10  11   12

填空:(1) k   (2) N  (3) a[k][i]

改错:(1) for(i=strlen(t)-1;i;i--) (2) if(t[j]>t[j+1])

编程:char *p=ss

int i=0;

while(*p)

{

if((i%2)&&(*p>='a'&&*p<='z'))

*p-=32;

p++;

i++;

}

32、程序填空题

  给定程序中,函数fun的功能是:将a所指3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕道右边。

例如,有以下矩阵:

1   2   3   4   5

1   2   3   4   5

1   2   3   4   5

若结果为,程序执行结果为:

3   4   5   1   2

3   4   5   1   2

3   4   5   1   2

填空:(1)k (2)N-1 (3)temp

改错:(1)void fun(int a[][M],int m)(2)a[j][k]=(k+1)*(j+1);

编程:

*c=(a%10)*1000+(b%10)*100+(a/10)*10+b/10;

33、程序填空题

给定程序中,函数fun的功能是:在3*4的矩阵中代出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。

例如:有下列矩阵

1  2  13  4

7  8  10  6

3  5  9   7

程序执行的结果为:find:a[2][2]=9

填空:(1)j   (2)0   (3)i++

改错:(1)for(i=2;i<=m;i++)  (2)y-=1.0/(i*i);

编程:float av=0.0;

int i,j=0;

for(i=0;i<m;i++)

av+=score[i];

av/=m;

for(i=0;i<m;i++)

if(av>score[i])below[j++]=score[i];

return j;

34、程序填空题

    给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。

例如,形参s所指的字符串味:abcdefgh,n的值为5,程序执行后t所指字符串数组中的字符串为:defgh.

 填空:(1)t,s(2)s[i](3)0

 改错:(1)if (i%k==0)(2)if(k>=i)

 编程:int i=0;

 *n=0;

 for (i=1;i<=x;i++)

if((x%i==0)&&(i%2))

pp[(*n)++]=i;

35、给定程序中,函数fun的功能是:在形参s所指字符串是否是“回文”(Palindrome),若是,函数返回值为1;不是,函数返回值为0。“回文”是正读和反读都一样的字符串(不区分大小写字母)。

例如,LEVEL和Level是“回文”,而LEVLEV不是“回文”。

填空:(1)s  (2)—  (3) return 0

改错:(1)double fun (int n)

      (2)c=a;a+=b;b=c;

编程: int r=0,temp,p,sign=1;

      for(temp=m+1;temp<m*m;temp++)

{for(p=2;p<temp;p++)

 {if(temp%p!=0)

   sign=1;

   else

{sign=0;

break;

}

}

if(sign= =1&&p>=temp)

{if(k>=0)

{xx[r++]=temp;

k- -;}

else break;

}

  }

36、程序填空题

给定程序中,函数fun的功能是:计算出形参s所指定字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。

例如,形参s所指的字符串为:This is a C languge program,函数的返回值为6。

填空:(1)n++  (2)0    (3)s++

改错:(1)t+=s[k];  (2)*aver=ave;

编程:int i,pos=0,max=*s;

for(i=1;i<t;i++)

{if(max<*(s+i))

{max=*(s+i);

 pos=i;

}

}

*k=pos;

37、程序填空题

给定程序中,函数fun的功能是:将形参s所指字符串中所有的ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。

例如:形参s所指的字符串为:Abc@156*,程序执行后t所指字符串数组中的字符串为:A@156*。

填空:(1) *s   (2) s++   (3) n

改错:(1) int j,c=0; double xa=0.0;   (2) if(x[j] >= xa)

编程:float result,temp=1.0;

int i;

for(i=1; i<=m; i++)

temp=temp*i;

result=temp;

for(temp=1.0,i=1;i<=n;i++)

temp=temp*i;

result=result/temp;

for(temp=1.0,i=1;i<=m-n;i++)

temp=temp*i;

result=result/temp;

return result;

38、程序填空题

  给定程序中,函数fun的功能是:将形象s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。

例如,形参s所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。

填空:(1)48    (2)s++   (3)sum

改错:(1)if ((k%13= =0) || (k%17= =0))    (2) ]      

int i;

for(i=21;i<=n;i++)

if((i%3= =0)&&(i%7 = =0))

sum=sum+i;

return sprt(sum);

39、程序填空题

 给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。

例如,形参s所指字符串为:abcAbsmaxless,程序执行后的输出结果为:

letter  ‘a’:3 times

letter  ‘s’:3 times

填空:(1)  *s  (2) 1  (3) k[n]

改错:(1) double fun(int k) (2) return s;

编程:double s=0.0;

int i;

for(i=1;i<=n;i++)

s=s+1.0/(i*(i+1));

return s;

40、程序填空题

 给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果,ss所指字符串数组中共有N个字符串,且串长小于M。

填空:(1) i   (2) ps[j]  (3) tp

改错:(1) double fun(int n) (2) return sum;

编程:int i;

double a=1,b=1,s=1;

for(i=1;i<=n;i++)

41、程序填空题

给定程序中,函数fun的功能是用函数指针指向要调用的函数,并进行调用,规定在2处使f指向函数f1,在3处使f指向函数f2。当调用正确时,程序输出:

x1=5.000000,x2=3.000000,

x1*x1+x1*x2=40.000000

填空:(1)double  (2)f1  (3) f2

改错:(1)p=h->next;  (2)p=p->next;

编程:

int i,n=0,fg=1;

char *p=str;

while(*p)

{n++;p++;}

for(i=0;i<n/2;i++)

if(str[i]==str[n-1-i]);

else

{fg=0;

break;}

return fg;

42、程序填空题

给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序,即若原链表结点数据从头至尾的数据为:10,4,2,8,6,排序后链表结点数据域从头至尾的数据为:2,4,6,8,10。

填空:(1)h->next  (2)p->next (3)>=

改错:(1)p=h->next;  (2)p=p->next;

编程:int i,j;

for(i=0;i<mm;i++)

for(j=0;j<nn;j++)

{b[*n]=*(*(s+i)+j);

*n=*n+1;}

43、程序填空题

给定程序中,函数fun的功能是将不带头结点的单向链表逆置,即若链表中从头至尾结点数据域依次为:2,4,6,8,10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。

填空:(1) NODE *   (2) q   (3) r

改错:(1) if(i%2 || s[i]%2==0)   (2) t[j]='\0'

编程:

for(j=0;j<nn;j++)

for(i=0;i<mm;i++)

b[np++]=s[i][j];

44、程序填空题

给定程序中,函数fun功能是将不带头结点的单向链表逆置,即若原链表从头到尾结点数据域依次为:2 4 6 8 10 逆置后,从头到尾结点数据域依次为:10 8 6 4 2

填空:(1)next  (2)0  (3)r

改错:(1)r=t; (2)if(*r= =0)

编程:int i,j,k=0;

for(i=0;i<M;i++)

{for(j=0;j<N;j++)

if*(*(a+i)+j)

{b[k]=*(*(a+i)+j};

k++;}

else

break;

b[k]=’\0’;}

45、程序填空题

给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序,即若原链表结点数据域从头到尾的数据为:10,4,2,8,6,排序后链表结点数据域从头到尾的数据为:2,4,6,8,10。

填空:(1)p->next  (2)q  (3)p->next

改错:(1)while(*s!='\0')  (2)s++;

编程:int b[N],i,j=0;

for(i=p+1;i<n;i++)

{b[j]=w[i];j++;}

for(i=0;i<=p;i++)

{b[j]=w[i];j++;}

for(i=0;i<n;i++) w[i]=b[i];

46、程序填空题

给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时,程序输出:

X1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000

填空:(1) double   (2) f1   (3) f2

改错:(1) char *fun(char *s,  char *t)   (2) ss++;   (3) tt++;

编程:

char a[N];

int i;

for(i=0;i<m;i++) a[i]=w[i];

while(w[i]) {w[i-m]=w[i];i++;}

i--;m--;

for(;m>=0;m--;i--) w[i]=a[m];

47、程序填空题

给定的程序中,函数fun的功能是将形参给定的字符串,整数、浮点数写到文本文件中,再用字符的方式从此文本文件中逐个读入并显示在终端屏幕上。

填空:(1) FILE *   (2)  fp  (3)ch

改错:(1)s[j++]=s[i];

   (2) s[j]= '\0';

编程: for(j=0;j<M;j++)

       b[n]=s[j][i];

48、程序填空题

给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi 和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。

填空;   (1)File *   (2) fclose(fp)   (3) fp

改错;   (1)t=(STU*)calloc(sizeof(STU),m);

(2)  t[k]=b[j];

编程;   int i,t,j=0,*p=a;

t=p[0];

for(i=0;i<=n;i++)

if(t==p[i]);

else

{a[j]=t;

t=p[i];

j++;

}

if(i>=n)

a[j]=t;

return j;

49、程序填空题

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。

填空:(1)"rb"   (2)>   (3)fwrite

改错:(1)p=s;   (2)  ; (缺分号)

编程:int i;

for(i=0;j<M;i++) b[i]=0;

for(i=0;i<N;i++)

if(a[i]>=100)b[10]++;

else b[a[i]/10]++;

50、程序填空题

程序通过定义学生结构变量,储存了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指的文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据,其他学生的数据不变。

填空:(1)filename  (2 ) fp  (3) fp

改错:

(1)p=(NODE*)malloc(sizeof(NODE));

(2)return h;

编程: int i,n=0;

for(i=0;i<strlen(s);i++)

{if(s[i]>=’ a’&&s[i]<=’ z’&&s[i+1]=’  ’||s[i+1]==’\0’)

n++;}

相关推荐