C语言常考编程题

更新时间:2023-06-10 14:26:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

下面这些题包含了C中常考的编程题,每道题都很经典,亲自手写测试通过的。

1:输入一个数组,然后放到两个数组中,偶数一个数组,奇数一个数组

int main()

{

int a[5],b[5],c[5];

int counta = 0; //这个程序最关键的就是这连个变量,可以知道数组的大小 int countb = 0;

for(int i = 0;i<5;i++)

{

scanf("%d",&a[i]);

if(a[i] % 2 == 0)

{

b[counta] = a[i];

counta++;

}

if(a[i] % 2 != 0)

{

c[countb] = a[i];

countb++;

}

}

for(int i = 0;i< counta;i++)

{

printf("%d",b[i]);

}

printf("\n");

for(int i = 0;i< countb;i++)

{

printf("%d",c[i]);

}

return 0;}

2:只输入数组中的奇数

int main()

{

int a[5];

for(int i = 0;i<5;i++)

{

scanf("%d",&a[i]);

}

for(int i = 0;i< 5;i++)

{

if(a[i] % 2 != 0)

{

printf("%d ",a[i]);

}

else

{

continue;

}

}

return 0;

}

3:输入一个数,然后把这个数放到一个数组中

int main()

{

unsigned int a;

printf("input a number less than 65536\n");

scanf("%d",&a);//

int b[5];

b[0] = a / 10000;

printf("第一位为:%d\n",b[0]);

b[1] = (a - b[0] * 10000) / 1000;

printf("第二位为:%d\n",b[1]);

b[2] = (a - b[0] * 10000 - b[1] * 1000) / 100;

printf("第三位为:%d\n",b[2]);

b[3] = (a - b[0] * 10000 - b[1] * 1000 - b[2] * 100) / 10;

printf("第四位为:%d\n",b[3]);

b[4] = a - b[0] * 10000 - b[1] * 1000 - b[2] * 100 - b[3] * 10;

printf("第五位为:%d\n",b[4]);

return 0;

}

4:输入一个字符串,然后返回一个整数,就是返回所有的ascll码

#include <string.h>

#include <stdio.h>

int main()

{

char* p = "abcd";

int b = strlen(p);

printf("the length is:%d\n",b);

int a[20];

int i = 0;

while(*p != '\0')

{

a[i] = (int)*p;

i++;

p++;

}

for(int i = 0;i< b;i++)

{

printf("%d",a[i]);

}

return 0;

}

注意:strcat,strcmp,strlen,strcpy 都是在#include <string.h>这个包中,而且参数为char的指针或者数组都可以。

5:文件读写实验

#include<stdlib.h>

#include <stdio.h>

int main()

{

char* ch1 = "china";

FILE* fp;

fp= fopen("file1.txt", "w");

fprintf(fp, "%s", ch1);//比如fprintf(fp, "%s %d %f\n", s, a, f);

fclose(fp);

fp = fopen("file1.txt", "r");

char ch = fgetc(fp);

while (ch != EOF)

{

putchar(ch);

ch = fgetc(fp);

}

return 0;

}

注意:FILE在#include<stdlib.h>这个头文件之中

4:随机数

#include <stdlib.h>

#include <time.h>

int main()

{

srand(time(NULL));

int a = random(100);

printf("%d",a);

return 0;

}

注意:time(NULL)在time.h中。random(100)在<stdlib.h>中,所以这两个头文件一个都不能少

5:数组做形参

void swap(int a[],int n)//数组做形参是,对数组的任何操作都会是永久性的。引文a[]可以看做是一个指针

{

a[0] = 3;

a[1] = 4;

}

int main()

{

int a[] = {1,2};

swap(a,2);

printf("%d,%d",a[0],a[1]);

return 0;

}

6: 第1题 m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指定的函数中。

答案:

int fun(int score[],int m,int below[])//对数组的修改是永久性的,因为传递个数据过来,就是传递了个指针过来!

{

int i,k=0,aver=0;

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

aver+=score[i];

aver/=m;

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

if(score[i]<aver)

{

below[k]=score[i];

k++;//这里的k用的很巧妙。

}

return k;

}

7:找出数组中能被2整除的数,并放到另外一个数组中,并显示出所有的这些数

void fun(int *a, int *n,int *b)

{

int i,j=0;

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

{

if (*a%2==0)

{

*b = *a;//把数组当做指针来处理

j++;

b++;

}

a++;

}

*n = j;//通过行参返回数组b的大小而已

}

int main()

{

int a[10] = {1,2,3,4,5,6,7,8,9,10};

int b[10] = {0};

int n = 10;

fun(a,&n,b);//这里返回的是n,即数组b的大小;

//其实调用的函数是指针的话,我们可以向里边传入数组的。

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

{

printf("%d ",b[i]);

}

return 0;

}

统计在ch字符中"a"到"z"26各字母各自出现的次数,并依次放在a所指的数组中。

void fun(char *ch, int a[])

{

while(*ch != '\0')

{

switch(*ch)

{

case 'a': //a是字符,所以要用‘’符号,而且冒号必须在最后面

a[0] ++;

break;//千万别忘记了,这里的break。

case 'b':

a[1] ++;

break;

case 'c':

a[2] ++;

break;

case 'd':

a[3] ++;

break;

a[4] ++;

break;

case 'f':

a[5] ++;

break;

case'g':

a[6] ++;

break;

case 'h':

a[7] ++;

break;

case 'i':

a[8] ++;

break;

case 'k':

a[10] ++;

break;

case 'l':

a[11] ++;

break;

case 'm':

a[12] ++;

break;

case 'n':

a[13] ++;

break;

case 'o':

a[14] ++;

break;

case 'p':

a[15] ++;

break;

case 'q':

a[16] ++;

break;

case 's':

a[18] ++;

break;

case 't':

a[19] ++;

break;

a[20] ++;

break;

case 'v':

a[21] ++;

break;

case 'w':

a[22] ++;

break;

case 'x':

a[23] ++;

break;

case 'y':

a[24] ++;

break;

case 'z':

a[25] ++;

break;

}

ch++;

}

}

int main()

{

int a[26] = {0};

char ch[] = "i love you china!";

fun(ch,a);

for(int i = 0;i<25;i++)

{

printf("a[%d] = %d ",i,a[i]);

}

return 0;

}

7: 第7题 请编写一个函数int fun(int *s,int t,int *k),用来求除数组的最大元素在数组中的下标并存放在k所指的储存单元中。

答案:

void fun (int *s, int t, int *k)

{

int i, max;

max=*s;

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

if (*s>max)

{

max = *s;

s++;

*k = i; //*k是用来记录最大值得下表的

}

}

13: 第13题 请编写一个函数void fun(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中赋予。 答案:

void fun(int tt[M][N], int pp[N])

{

int i,j,min;

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

{

min = pp[0][j];//把每个列的第一个数默认为是最小的

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

{

if (tt[i][j]<min)

min=tt[i][j];

}

pp[j]=min;//把最下放到一个一维数组中。不用在用k表示数组的大小,这里已经知道了有j列,则肯定有k个最小的数

}

}

11:其实指针可以像和数组一样去访问它。

int main()

{

char *p = "china";

//fun(p);

printf("%c",p[2]);

return 0;

}

12:把一个字符串前后调换顺序

#include<string.h>

void fun(char * p)

{

int len = strlen(p);

printf("%d\n",len);

int i = len/2;

printf("%d\n",i);

for(int j = 0; j < i; j++)

{

int a = 0;

a = p[j]; //指针也可以像数组一样的去访问它。

p[j] = p[len-j-1];

p[len-j-1] = a;

//printf("p[%d] = %c",j,p[j]);

}

}

int main()

{

char *p = "china";

fun(p);

printf("%s",p); //%s可以一次性的把所有字符串输出

return 0;

}

13:删除字符串中的指定字符

void delete(char s[],char c)

{

//一定要牢记,数组和指针是可以相互转化的;

char *p;

p = s; //把数组转化为指针

int i = 0;

while(*p != '\0' )

{

if(*p != c)

{

s[i] = *p;

i++;

}

p++;//其实也就是当遇到c时,把c后面的一个字符复制到c这里来。

}

s[i] = '\0'; //最后一个地方为结束符,也许该结束符后来还有字符,但是printf遇到'\0'就不在输出

// printf("%s",s);

}

int main()

{

char * p = "chiiiiina";

delete(p,'i');

printf("%s",p);//其实此时数组中为 chna\0na.但是由于'\0'时不再输出,所以只显示chna return 0;

}

14:遍历形参中的数组的方法有两种

方法一:

void shuzu1(char s[])

{

char *p;

p = s; //把数组转化为指针

while(*p != '\0' )

{

p++;

}

}

方法二:

void shuzu2(char s[])

{

int len = strlen(s);

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

{

}

}

15:请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。

这道题是一个返回指针的题

char *fun(char *s,char *t)

{

char *p,*t1=t,*s1=s;

int n=0;m=0;

while (*s1)

{

n++;

s1++;

}

while(*t1)

{

m++;

t1++;

}

if(n>=m)

p=s;

else

p=t;

return p;

}

本文来源:https://www.bwwdw.com/article/ro51.html

Top