c语言程序设计试题

1、任意输入100个整数,分别统计其中的正数、负数和零的个数。
2、 编程对N个整数进行从大到小顺序排列。
3、编写函数change使输入的字符串按反序存放,在主函数中输入和输出字符串。例如输入是:abcdefg,则输出为:gfedcba
谢谢,请速回,急需,今天急需。

第一题:
#include<stdio.h>
int main()
{
int a[100];
for(int i=0;i<100;i++)
scanf("%d",&a[i]);
int x=0,y=0,z=0;//分别是正数、负数、零的个数
for(int i=0;i<100;i++){
if(a[i]==0)
z++;
if(a[i]>0)
x++;
if(a[i]<0)
y++;
}
printf("正数个数: ");printf("%d\n",x);
printf("负数个数: ");printf("%d\n",y);
printf("零的个数: ");printf("%d\n",z);
return 0;
}

第二题:
#include<stdio.h>
int main()
{
int N;
printf("输入N: ");scanf("%d",&N);
printf("输入这N个数: ");
int *a;
a=new int [N];//由于N本来未定,所以设置动态数组存储,当然来如果N本来是定的话,譬如100,你可以在main函数前面写一个#define N 100(注意没有分号;)
//然后该项直接是int a[N];即可
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
int k=0,temp=a[0];//我这里使用的是第i次查找的时候找出第i大的数字,放在数组的第i个位置,k是存放最大数原本的位置的下标,temp是它的值。
for(int i=0;i<N;i++){//这里的i跟上面所说的i有点出入,这里的i是指的下标,与上面的相差1;
int j;
for(j=i+1;j<N;j++){
if(a[j]>temp){
k=j;temp=a[k];
}//如果a【j】的值比temp大的话,temp换成a【j】;
}
a[k]=a[i];a[i]=temp;//比完一次后,将最大的数放在前面去。
k=i+1;temp=a[k];//为下一轮准备
}
for(int i=0;i<N;i++)
printf("%d\t",a[i]);
printf("\n");
delete []a;a=NULL;//如果不是动态数组的话,这两句不需要
return 0;
}
第三题:
//第三个函数我帮你设定在输入字符串前先确定字符串的长度,不然很麻烦……
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int N;
printf("字符串长度: ");scanf("%d",&N);
printf("输入字符串: ");
char *a;
a=new char [N];
for(int i=0;i<N;i++){
cin>>a[i];//抱歉,我对c语言真的不熟悉,这里用了c++的,这里的意思是输入字符串,你看一下能不能自己改吧
}
char temp;
for(int i=0;i<N/2;i++){//这里是交换
temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;
}
for(int i=0;i<N;i++)
cout<<a[i];//这里是输出
printf("\n");
delete []a;a=NULL;;
return 0;
}
//你看一下谁能帮忙把那两句c++变成c语言吧。我尽力了……
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-16
我就来回答一下第三题吧:(非递归写法)

#include<stdio.h>
#include<stdlib.h>
#define N 20
#define M 5
int main(void)
{
int i=0,count;
char *pBase,*pNewBase,ch;
pBase=(char *)malloc(N*sizeof(char));
if(pBase==NULL)
{
printf("Out of space!");
exit(1);
}
printf("please put into the datas:\n");
count=N;
ch=getchar();
while(ch!='\n')
{
*(pBase+i)=ch;
ch=getchar();
i++;
if(i==count-1)
{
count=count+M;
pNewBase=(char *)realloc(pBase,count*sizeof(char));
if(pNewBase==NULL)
{
printf("Out of space!");
exit(1);
}
pBase=pNewBase;
}
}
for(count=i-1;count>=0;count--)
printf("%c",*(pBase+count));
return EXIT_SUCCESS;
}
如果是递归写法的话,那更简单了:
#include<stdio.h>
#include<stdlib.h>
void change();
int main(void)
{
printf("please put into the datas:\n");
change();
return EXIT_SUCCESS;
}
void change()
{
char ch;
ch=getchar();
if(ch!='\n')
change();
printf("%c",ch);
}
比较一下两者吧,前者用的空间用的再好但也要最多浪费4个空间的长度(当然可以克服这个缺点,不过本人认为没必要了,设M为1),不过很好理解;而对于后者,空间利用就更完美了,不过有点难想以及运行速度上有缺陷。
相似回答