第1题 (10.0分) 题号:664
题目:已知有结构体类型定义:
struct node
{ int data;
struct node *nextPtr;
};
编写函数void printList(struct node * head),对head指向
的单向链表,出data成员值为正数的所有结点,输出这些结
点在链表中的序号(第1个结点序号为1)和data成员值。
答案:
void printList(struct node * head)
{
struct node *p;
int i=1;
p=head;
while(p!=NULL)
{
if(p->data > 0) cout<<"\n数据:"<<p->data<<" 序号:"<<i;
i++;
p=p->nextPtr;
}
}
第2题 (10.0分) 题号:693
题目:编写一段程序,计算输入流input中第一个$之前的
字符数目,存入count变量。
答案:while ((ch) && ch != '$')
count++;
第3题 (10.0分) 题号:592
题目: 用“辗转相除方法”计算两个数 x,y 的最大公约
数
答案:
n=x%y;
while(n!=0)
{x=y;y=n;n=x%y;}
第4题 (10.0分) 题号:708
题目:从文件中读入n个字符串,将其中以字母A开头的字符串复制
到二维字符数组str1中。
答案:for(i=0;i<n;i++)
{
if((strcmp(str[i],"A")>=0)&&(strcmp(str[i],"B")<0))
{ strcpy(str1[j],str[i]);
j++;
}
}
第5题 (10.0分) 题号:639
题目:从键盘输入一个正整数n,该正整数可以分解成两个正整数k1
和k2之和(允许k1和k2相等)。请编写一个函数求使两个正
整数的乘积最大的分解方案,并返回乘积max。
答案:
int i,max;
max = 1*(n-1);
for(i=2;i<n;i++)
if(i*(n-i)>max)
{
max = i*(n-i);
}
第6题 (10.0分) 题号:686
题目:写一个函数统计字符串中,大写字母和小写字母
的个数,并分别保存在全局变量Supper和Low中。
答案: int i=0;
while (input[i]!='\0')
{
if(input[i]<='Z' &&input[i] >='A')
Supper++;
if (input[i]<='z' &&input[i] >='a')
Low++;
i++;
}
第7题 (10.0分) 题号:628
题目:求100以内(不含100)能被3整除且个位数为6的所有整数,
答案:
int i,count=0;
for(i=0;i<100;i++)
if(i%3==0 && i%10==6)
{
a[count++]=i;
cout<<i<<" ";
}
第8题 (10.0分) 题号:647
题目:下面程序中的函数void ins(int a[], int len,int n);
将n插入到一个包含len个从小到大排好序的整数数组a中,插入
后保证数组的有序性。完成该函数的编写。例如:
a) 调用ins(a, 0,3)后,数组a中为3
b) 调用ins(a, 1,2)后,数组a中为2,3
c) 调用ins(a, 2,6)后,数组a中为2,3,6
答案: int i;
for (i=len;i>0;i--)
{
if (i>0 && a[i-1]>n)
a[i] = a[i-1];
else
break;
}
a[i] = n;
第9题 (10.0分) 题号:704
题目:编写函数,把一个数字字符组成的字符串转换为相应的整数(如"1234"转换为1234)。
答案:int a2i(char ds[])
{
int v = 0;
for(int i=0; ds[i] != '\0'; i++)
{
v = v*10 + ds[i]-'0';
}
return v;
}
第10题 (10.0分) 题号:728
题目:求400之内的一对亲密对数。
所谓亲密对数A和B,即A不等于B,且A的所有因子(如,6的因子是1、2、3)
之和等于B,B的所有因子之和等于A。
求出的亲密对数存放在A和B中,且A<B。
答案: for(int n=1;n<400;n++)
{ int sum_a=0,sum_b=0;
int a=n,b;
for(int i=1;i<=a/2;i++)
{
if(a%i==0)
sum_a+=i;
}
b=sum_a;
if(b<=400)
{
for(int j=1;j<=b/2;j++)
{
if(b%j==0)
sum_b+=j;
}
if(sum_b==a && a!=b)
{
A=a;
B=b;
break;
}
}
}
第11题 (10.0分) 题号:696
题目:请输出个、十、百位数字各不相同的所有三位数,
结果写入f2.txt中,一个数一行。
要求:输出时按从小到大的顺序输出。
令数组全部的值为0答案:for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
for(k = 1; k < 10; k++)
{
if(i != j && j != k && i != k)
{
output << k << j << i;
count++;
if(count == 60)
{
count = 0;
output << endl;
}
else
output << " ";
}
}
第12题 (10.0分) 题号:635
题目:3025这个数具有一种独特的性质:将它平分为二段,即30和25,
使之相加后求平方,即(30+25)*(30+25),恰好等于3025本身。
请求出具有abcd=(ab+cd)*(ab+cd)这样性质的全部四位数并使用变
量num记录满足条件的数的总个数。
要求:调用output()函数将求出的数写入文件f2.txt中,例如output(3025)。
答案:
int n,a,b;
for(n=1000;n<10000;n++)
{
a=n/100;
b=n%100;
if((a+b)*(a+b)==n)
{
cout<<n<<' ';
output(n);
num++;
}
}
第13题 (10.0分) 题号:621
题目: 假设文件 "f1.txt" 和 "f2.txt" 以文本方式分别
存放着两个长度相同的实数向量,但是具体长度未知 。
请编写函数
double prod(char* s1, char* s2)
求二向量的内积。
其中,s1 和s2 分别是存放两个向量的文件名。
(向量的内积公式如图)
答案:ifstream inf1(s1,ios::in);
ifstream inf2(s2,ios::in);
double m, n;
double s=0;
while(inf1>>m && inf2>>n)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论