C语言程序设计

单选题以下选项中,不能对主函数中变量i和j的值进行交换的程序是(  )。A #include <stdio.h>void swap(int *p, int *q){ int *t; *t = *p; *p = *q; *q = *t;}main(){ int i=10, j=20,*a=&i,*b=&j; swap(a,b); printf(i=%d j=%d,i,j);}B #include <stdio.h>void swap(int *p, int *q){ int t; t = *p; *p =

题目
单选题
以下选项中,不能对主函数中变量i和j的值进行交换的程序是(  )。
A



#include <stdio.h>
void swap(int *p, int *q)
{
 int *t;
 *t = *p;
 *p = *q;
 *q = *t;
}
main()
{
 int i=10, j=20,*a=&i,*b=&j;
 swap(a,b);
 printf(i=%d j=%d,i,j);
}

B



#include <stdio.h>
void swap(int *p, int *q)
{
 int t;
 t = *p;
 *p = *q;
 *q = t;
}
main()
{
 int i=10,j=20,*a=&i,*b=&j;
 swap(a,b);
 printf(i=%d j=%d,i,j);
}

C



#include <stdio.h>
#include <stdlib.h>
void swap(int *p, int *q)
{
 int *t;
 t = (int *)malloc(sizeof(int));
 *t = *p;
 *p = *q;
 *q = *t;
 free(t);
}
main()
{
 int i=10,j=20;
 swap(&i,&j);
 printf(i=%d j=%d,i,j);
}

D



#include <stdio.h>
void swap( int *p, int *q)
{
 int t;
 t = *p;
 *p = *q;
 *q = t;
}
main()
{
 int i=10,j=20,*x=&i,*y=&j;
 swap(x,y);
 printf(i=%d j=%d,i,j);
}

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下程序:includevoid f(char p[][10],int n)/* 字符串从小到大排序*/{char t[10];

有以下程序: #include<string.h> void f(char p[][10],int n) /* 字符串从小到大排序 */ {char t[10];int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(p[i],p[j])>0{strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy([i],t);} } main() {char p[5][10]={"abc","aabdfg","abbd","dcdbe","cd"; f(p,5); printf("%d\n",strlen(p[0])); } 程序运行后的输出结果( )。

A.2

B.4

C.6

D.3


正确答案:D
解析:strcmp(str1,str2)是比较字符串str1和str2,若str1>str2,返回值为正数;f()函数的功能就是将字符串按照从小到大的顺序进行排列,需要注意的是比较的足字符串中每个字符的ASCII值的大小,所以元素p[0]是“abc”,它的长度为3。

第2题:

下列给定程序中fun()函数的功能是:将n个无序整数从小到大排序。

请改正程序中的错误,使它能得出正确的结果。

注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include <conio.h>

include <stdio.h>

include <stdlib.h>

fun(int n, int *a)

{ int i,j,p,t;

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

{ P=j;

/***************found*******************/

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

if (a[p]>a[i])

/***************found*******************/

t=i;

if (p!=j)

{t=a[j];a[j]=a[p];a[p]=t;}

}

}

putarr( iht n,int *z)

{int i;

for (i=l;i<=n;i++,z++)

{ printf("%4d",*z);

if (!(i%10)) printf("\n");

} printf ("\n");

}

main ()

{int aa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;

clrscr();

printf("\n\nBefore sorting %d numbers:\n",n); putarr(n,aa);

fun(n,aa);

printf("\nAfter sorting %d numbers:\n",n);putarr(n,aa);

}


正确答案:(1)错误:for(i=j+1;in-1;i++) 正确:for(i=j+1;in;i++) (2)错误:t=i; 正确:p=i;
(1)错误:for(i=j+1;in-1;i++) 正确:for(i=j+1;in;i++) (2)错误:t=i; 正确:p=i; 解析:该程序是对n个数实现从小到大的排序,该题中先是找小输入整数的最小项,置于指针第1个元素的位置:再找出第2个元素至尾元素的最小项,置于第2个元素的位置;之后顺次处理后读元素。

第3题:

以下程序的输出结果是 【 11 】 。

#include <stdio.h>

void swap(int *a,int *b)

{ int *t;

t=a; a=b; b=t;

}

main()

{ int i=3,j=5,*p=&i,*q=&j;

swap(p,q); printf("%d %d\n",*p,*q);

}


正确答案:

第4题:

以下程序的输出结果是______。include void swap(int *a, int *b){ int *t;}{ int i=3,j

以下程序的输出结果是______。

include <stdio.h>

void swap(int *a, int *b)

{ int *t;

}

{ int i=3,j=5,*p=&i,*q=&j;

swap(p,q); printf("%d %d\n",*p,*q);


正确答案:

第5题:

下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从大到小的顺序进行排序。请改正程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include<stdio.h>

define N 20

void fun(int a[ ],int n)

{

int i,j,t,p;

/*************found*************/

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

{

p=j;

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

if(a[i)>a[p])

p=i;

t=a[p];

a[p]=a[i];

/*************found**************/

a[p]=t;

}

}

main()

{

int a[N]={11,32,-5,2,14},i,m=5;

printf(“排序前的数据:”);

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

printf(“%d”,a[i]);

printf(“\n”);

fun(a,m);

printf(“排序后的顺序:”);

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

printf(“%d”,a[i]);

printf(“\n”);

}


正确答案:(1)错误:for(j=0;jn-1;j++); 正确:for(j=0;jn-1;j++) (2) 错误:a[p]=t 正确:a[j]=t;
(1)错误:for(j=0;jn-1;j++); 正确:for(j=0;jn-1;j++) (2) 错误:a[p]=t 正确:a[j]=t; 解析:错误1:根据C语言语法,for循环中循环条件后不加分号,除非做空操作。错误2:将两数进行交换的常用语句,借助第三个变量。

第6题:

下面程序应能对两个整型变量的值进行交换。以下正确的说法是

main()

{int a=10,b=20;

printf("(1)a=%d,b=%d\n",a,b);

swap(&a,&b);

printf("(2)a=%d,b=%d\n",a,b);

}

swap(int p,int q)

{int t;

t=p;p=q;q=t;

}

A.该程序完全正确

B.该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可

C.该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可

D.以上说法都不对


正确答案:D

第7题:

下列程序的输出结果是【 】。include void swap(int *a, int *B) { int *t; t=a;a=b;b=t;

下列程序的输出结果是【 】。

include <stdio.h>

void swap(int *a, int *B)

{

int *t;

t=a;a=b;b=t;

}

main()

{

int i=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d %d\n",*p,*q);

}


正确答案:3 5
3 5 解析:本题考查函数中实参和形参的传递,在C语言函数中实参和形参传递具有不可逆性,参数只能由实参传向形参,而不能由形参传向实参,虽然swap函数的功能是实现两个数的交换,但没有返回值,故最终的输出结果为3 5。

第8题:

有以下程序 include void f(char p[][10],int n)/*字符串从小到大排序*/ {

有以下程序 #include<string.h> void f(char p[][10],int n)/*字符串从小到大排序*/ { char t[10];int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(p[i],p[j])>0) {strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} } main() { char p[5][10]={"abc","aabdfg:,"abbd","dcdbe","cd"}; f(p,5); printf("%d\n",strlen(p[0])); } 程序运行后的输出结果是

A.2

B.4

C.6

D.3


正确答案:C
解析:本题中函数f()利用选择法对字符串数组p中的字符中按从小到大排序,字符串比较的方法是:依次对S1和S2所指字符串对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符(ASCII码值)决定所在串的大小,因此最后在 p[0]中存储的是最小的字符串是“aabdfg”。最后用 strlen()函数求得该字符串的长度为6。

第9题:

下列给定的程序中,函数fun()的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include<stdio.h>

define N 20

void fun(int a[],int n)

{int i,j,t,p;

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

/*************found**************/

{p=j

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

if(a[i]<a[p])

/*************found**************/

p=j;

t=a[p]; a[p]=a[j]; a[j]=t;

}

}

main()

{int a[N]={9.6,8,3,-1},i,m=5;

printf("排序前的数据: ");

for(i=0;i<m;i++) printf("%d",a[i]);

printf("\n");

fun(a,m);

printf("排序后的顺序: ");

for(i=0;i<m;i++) printf("%d",a[i]);

printf("\n");

}


正确答案:(1)错误:p=j 正确:p=j; (2) 错误:p=j; 正确:p=i;
(1)错误:p=j 正确:p=j; (2) 错误:p=j; 正确:p=i; 解析:题中所提到的“从小到大”的顺序。这类题都可以利用选择法,即从后N个比较过程中,选择一个最小的与第一个元素交换,依次类推,即用第二个元素与后N-1个进行比较,并进行交换。该题也是与我们常见的C语言排序题类似,当然也是改错和编程题中的重点,请看同类试题,以便达到举一反三的目的。

第10题:

有以下程序: include usingnamespacestd; intmain() { intnum[2][3],*p; intt,i,j,k=

有以下程序: #include <iostream> using namespace std; int main() { int num[2][3],*p; int t,i,j,k=10; p=num[0]; for(i=0;i<2;i++) { for(j=0;j<3;j++) { k++; *p=k; for(t=2;t<*p;t++) { if(!(*p%t)) { j--; *p--; break; } *p++; } } cout<<*(p-1)<<end1; return 0; } 程序运行后的输出结果是( )。

A.19

B.11

C.29

D.23


正确答案:C
解析:本题考核数组与指针的关系。程序首先初始化指针p,让其指向二维数组num的首元素,即num[0][0]。程序中,第1个for循环是为二维数组的每行元素赋值而设置的循环,第2个for循环是为二维数组的每列元素赋值而设定的,第3个for循环是为判断数组元素是否是素数而设置的。在第3个for循环中,如果*p的值能被小于它的数整除(即不是素数),则执行“j--;*p--;”,然后跳出第3个for循环。j--的含义是让其前面的赋值语句重新赋值,而*p--的含义是使指针指向前一个单元。语句“*p++;”将指针移到下一个单元,在下一次循环时,k加1,并k赋给*p,看*p是否为素数,这样一直到满足条件为止,即数组num[2][3]中的数都为素数。最后数组num中各元素的值分别为大于10的素数,即分别为:11,13;17,19,23,29。程序最后要求输出*p的值,由于此时指针已指向数组num的最后一个元素,即num[1][2]。所以输出的值是29。

更多相关问题