算法题练习
- 若有以下定义和语句,且0<=i<10,则对数组元素的错误引用是__C___
A、(a+i) B、 a[p-a] C、 p+i D、(&a[i]) - 若有以下说明:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;,则数值为6的表达式是___C___
A、p+6 B 、(p+6) C、*p+=5 D、p+5 - 若已定义int a[9],*p=a;并在以后的语句中未改变p的值,则不能表示a[1]地址的表达式的是___C____
A、p+1 B、a+1 C、a++ D、++p - 若有以下说明语句int a[10],*p1,*p2; p1=a; p2=&a[5],则p2-p1的值为___A____
A、5 B、6 C、10 D、以上均不对 - 以下程序的输出结果是__B___
#include<stdio.h>
int main(void)
{
int a[]={1,2,3,4,5,6},*p;
p=a;
printf(“%d,%d”,p,(p+4));
}
A.0,5 B. 1,5 C、0, 6 D、1,6
- 输出所有的“水仙花数”,所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 1^3 + 5^3 + 3^3。
#include <stdio.h>
#include <math.h>
int main(void)
{
int sum;
for(int i=100; i<1000; i++){
sum = 0;
for(int k=i; k>0; k/=10){
sum += pow(k%10, 3);
}
if(sum == i){
printf("%d ", i);
}
}
return 0;
}
- 已知一个数组int a[10]={1,2,3,4,5,6,7,8,9,10},编程将数组元素逆置并输出。
#include <stdio.h>
int main(void)
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
for(int i=0; i<5; i++){
int temp = a[i];
a[i] = a[10-i-1];
a[10-i-1] = temp;
}
for(int i=0; i<10; i++){
printf("%d ", a[i]);
}
}
- 已知两数组a[5]={1,3,5,7,9}; b[5]={2,4,6,8,10};将其合并为一个有序的升序数组。
#include <stdio.h>
int main(void)
{
int a[5]={1,3,5,7,9};
int b[5]={2,4,6,8,10};
int c[10];
int j=0, k=0, p=0;
for(int i=0; i<10; i++){
if(a[j]<b[k] && j<5){
c[p++] = a[j++];
}
else{
c[p++] = b[k++];
}
}
for(int i=0; i<10; i++){
printf("%d ", c[i]);
}
}