首页 >> 大全

C语言程序相关练习题

2023-12-17 大全 26 作者:考证青年

选择结构 输入一行字符,分别统计出其中中英文字母、空格、数字和其他字符的个数:

#include 
int main () {char c;int letter = 0,space = 0,num = 0,other = 0;while ((c = getchar()) != '\n'){if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'){letter++;/* code */}else if (c == ' '){space++;/* code */}else if (c >= '0' && c <= '9'){num++;/* code */}else {other++;}}printf("字母:%d,数字:%d,空格:%d,其他:%d",letter,num,space,other);return 0;
}

任意输入 3 个整数,编程实现对这 3 个整数由小到大进行排序。

#include   int main()  
{  int a,b,c,t;  printf("请输入三个数:");  scanf("%d%d%d",&a,&b,&c);  if(a > b)  {  t = a;  a = b;  b = t;  }  if(a > c)  {  t = a;  a = c;  c = t;  }  if(b > c)  {  t = b;  b = c;  c = t;  }  printf("从小到大的顺序是:%d  %d  %d\n",a,b,c);  return 0;  
}

3.输入三个整数a,b,c,输出最大的数

#include   int main()  
{  int a,b,c,max;  printf("请输入三个数:");  scanf("%d%d%d",&a,&b,&c);  max = a;if (b > max){max = b;}if (c > max){max = c;}printf("%d",max);  return 0;  
}

循环结构 输入两个正整数m、n,求最大公约数和最小公倍数

#include 
int main () {int i,m,n;int t;printf("输入m:");scanf("%d",&m);printf("输入n:");scanf("%d",&n);if (m < n)  //把大数给m,小数给n{t = m;m = n;n = t;}for ( i = n; i > 0 ; i--)   //不超过n,从n开始往下找{if (m % i == 0 && n % i == 0){printf("最大公约数为:%d\n",i);             //公约数:可以同时整除m n的最大值printf("最小公倍数为:%d",(m * n) / i);     //公倍数:(两数乘积)/公约数break;}}return 0;
}

求S = a+aa+aaa+…+aaaaa的值,其中a是一个数字,n是a的位数,例如:n=3——a+aa+aaa,n由键盘输入:

#include 
int main () {int a = 2,n,i;printf("输入n:");scanf("%d",&n);int sum = 0,num = a;    //sum累计num的和,num记录每一次a增加一个单位的值for ( i = 0; i < n; i++){sum += num;		//总和num = num*10+a;    //num每次自乘10再加上个位数a}printf("%d",sum);return 0;
}

20以内的阶乘(1!+2!+3!+····+20!)的和,阶乘(5! = ),其他题目:求n的阶乘,n由键盘输入(解法类似):

#include 
int main () {int i;long long sum = 1,end = 0;  //int、long会溢出,存不了for ( i = 1; i <= 20; i++){sum *= i;   //计算单个的阶乘end += sum; //计算总和/* code */}printf("%lld",end);	//2561327494111820313return 0;
}

求(1+2+3+···+100)+(1平方+2的平方+····+50的平方)+(1/1+1/2+1/3+···+1/10)的值:

#include 
int main () {int i;int sum1 = 0, sum2 = 0;float sum3 = 0;for ( i = 1; i <= 100; i++){sum1 += i;                  //1-100求和if (i <= 50){sum2 += i * i;          //1-50求平方/* code */}if (i <= 10){sum3 += 1.0 / i;        //1-10求 1/i 的和/* code */}/* code */}printf("%f",sum1 + sum2 + sum3);	//47977.929688return 0;
}

输出1000以内所有水仙花数:

153是一个水仙花数,因为153=1x1x1+5x5x5+3x3x3

#include 
int main () {int i, a, b, c;for ( i = 100; i < 1000; i++){a = i / 100;            //求百位b = (i / 10) % 10;      //十位c = i % 10;             //个位if (a*a*a + b*b*b + c*c*c == i){printf("%d\t",i);   //153     370     371     407/* code */}/* code */}return 0;
}

找出1000以内所有完数:

完数:一个数等于它的因子之和,例如:6的因子为:1,2,3,而1+2+3=6,所以6是完数

#include 
int main () {int i, j, sum;for ( i = 2; i <= 1000; i++){sum = 0;                        //每次判断完重制sumfor ( j = 1; j < i; j++)        //从1开始找 i 的因子{if (i % j == 0)             //如果能被整除,代表是因子,则叠加到sum中{sum += j;}}if (sum == i)                   //如果因子的和与这个数一致,它就是完数{printf("%d\t",i);           //6       28      496}}return 0;
}

求此分数序列(2/1,3/2,5/3,8/5···)前20项的和:

#include 
int main () {int i;float a = 2, b = 1, sum = 0, t;for ( i = 0; i < 20; i++){sum += a / b;   //是分子 a / 分母 b 的累加和,而下一项的分子 a 是此项 a+b 的和,分母是此项的 分子at = a;          //将分子 a 提取出来a = a + b;      //下一项分母为此项的 a+bb = t;          //赋值给分母/* code */}printf("%f",sum);   //32.660263return 0;
}

一个球从100m高度落下,落地后反弹回原高度的一半,再落下再反弹,第10次落地时,共经过了多少米?第10次反弹多高?

 #include 
int main () {int i;float sum = 0, a = 100;for ( i = 1; i <= 10; i++){sum += a;       //总计1-10次落下的距离a = a / 2;      //弹起距离 = 上次落下距离 / 2if (i <= 9){sum += a;   //总计1-9次弹起的距离,在弹起的距离等于下一次落下的距离,持续循环累加到下一次sum里}}printf("共经过:%f米\n",sum);   //共经过:299.609375米printf("第十次反弹%f米",a);     //第十次反弹0.097656米return 0;
}
---------写法2---------------
int main()
{int i;float sum = 100, drop, jump;for ( i = 0; i < 10; i++){drop += sum;	//10次落下的总和sum = sum/2;	//每次落下后弹起距离减半jump += sum;	//10次弹起的总和(包括第10次落下后弹起)}printf("%f %f",drop+jump-sum,sum);	//10次落下的总和不包括第10次弹起,所以减去sum,sum为每次弹起/落下的距离return 0;
}

猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。编写程序求猴子第一天摘了多少个桃子

#include 
int main () {int i, sum, rest;rest = 1;                      //第10天余剩的个数for ( i = 9; i > 0; i--)       //执行9次{sum = (rest + 1) * 2;      //推算前一天桃子的总数是(今日余剩个数 + 1) * 2 个rest = sum;                //前一天的余剩个数/* code */}printf("%d",sum);//1534return 0;
}

_程序语言基础知识_程序设计语言题目

输出星星菱形

#include 
int main () {int i, j, k, xx = 1;    //初始星星 = 1for ( i = 0; i < 7; i++){for ( j = 0; j < (7 - xx) / 2; j++)     //空格数量 = (最宽/长的星星数 - 当前星数)/ 2{printf(" ");}for ( k = 0; k < xx; k++)   //输出星星{printf("*");}printf("\n");   if (i < 3)                  //当x < 3时,前3行(i = 2)为每次星星数递增 2;第4行时(i = 3)每次递减 2{xx += 2;}else {xx -= 2;}}return 0;
}

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

#include 
int main()  
{  char i,j,k;for ( i = 'x'; i <= 'z'; i++){for ( j = 'x'; j <= 'z'; j++){for ( k = 'x'; k <= 'z'; k++){if (i != j && i != k && j != k){if (i != 'x'&& k != 'x' && k != 'z'){printf("a--%c,b--%c,c--%c",i,j,k); 	//a--z,b--x,c--y}}}}}return 0;
} 

求100-200之间全部素数(类似题:输入一个大于3的整数n,判断它是否为素数)

素数:只能被1和它本身整除的数

#include 
int main () {int i, j, mark;for ( i = 100; i <= 200; i++){mark = 1;   //进入循环时全部打上标记for ( j = 2; j < i; j++)    //从2 - i-1的范围循环{if (i % j == 0)     //如果能被任意j整除的数就不是素数,标记变为0{mark = 0;}}if (mark == 1)      //经过循环后标记还是1的就是素数{printf("%d\t",i);}}return 0;
}

数组 用数组求数列前20项(每行显示5个):

(斐波那契):第1,2项的值为1,往后每一项的值的都是前两项相加的和,例如:1,1,2,3,5····

#include   
int main()  
{  int a[20], i;a[0] = 1,a[1] = 1;  //第一二项为1for ( i = 2; i < 20; i++)   //从第3三项开始{a[i] = a[i-1] + a[i-2];}for ( i = 0; i < 20; i++){if (i % 5 == 0)     //到第五个换行{printf("\n");}printf("d",a[i]);}return 0;  
}

输入10个数的数组,从小到大使用冒泡排序:

#include   int main()  
{  int a[10], i ,j ,t;for ( i = 0; i < 10; i++){scanf("%d",&a[i]);}for ( i = 0; i < 9; i++)            //从第一个元素到最后一位走9趟{for ( j = 0; j < 9 - i; j++)    //比较9-j次,已比较的不需要再比较{if (a[j] > a[j+1])          //如果第j项大于第j+1项,则互换位置{t = a[j];a[j] = a[j+1];a[j+1] = t;}}}for ( i = 0; i < 10; i++){printf("%d\t",a[i]);}return 0;  
}

输入一行字符,统计一共有多少个单词,单词间用空格隔开

#include   
#include 
int main()  
{  char str[100];char c;int i, num = 0, word = 0;gets(str);for ( i = 0; (c = str[i]) != '\0'; i++)     //获取str的每一个字符{if (c == ' ')               //当字符是空格时word记为0{word = 0;}else if (word == 0)        //当字符不是空格并且前一个字符是空格时表示新单词出现,word标记1,num累加{word = 1;num++;}}printf("共:%d个单词",num);
------------------一行秒杀写法---------------char str[100];char c;gets(str);int num = 0;for (int i = 0; (c = str[i]) != '\0'; i++){   if (str[i] == ' ' && str[i-1] != ' ') num++;//若本字符是空格且前一个字符不为空格则代表新单词}printf("%d", num);return 0;
}

利用筛选法求100以内的素数

#include   
#include 
int main()  
{  int a[100];int i, j;for ( i = 0; i < 100; i++)      //写入数组{a[i] = i + 1;               //从1开始}a[0] = 0;       //1不是素数所以直接为0for ( i = 1; i < 100; i++)      //从2开始往后遍历{for ( j = i + 1; j < 100; j++)  //如果2往后的数能被2整除,则不是素数,设为0{if (a[i] != 0 && a[j] != 0){    //排除往后已经被设为0的数if (a[j] % a[i] == 0){a[j] = 0;}}}}for ( i = 0; i < 100; i++){if (a[i] != 0)      //剩下不是0的数就是素数{printf("%d ",a[i]);}}return 0;
}

用选择法对10个整数排序

#include 
int main()  
{  int a[11];int i, j, t;for ( i = 0; i < 10; i++) {scanf("%d",&a[i]); }for ( i = 0; i < 9; i++)    //从第1项到第9项遍历{for ( j = i + 1; j < 10; j++)       //从第2项到第10项遍历{if (a[i] > a[j]){       //如果i大于j(i+1)的值则互换位置,然后用现在的i(原j的值)与下一个j(i+1的再下一项)对比t = a[i];           //用第一项与余剩全部项比较,找到最小的值放在数组第一位,再继续第二项比较a[i] = a[j];a[j] = t;}}}for ( i = 0; i < 10; i++){printf("%d ",a[i]);}return 0;
}

输入一个数,按照排序规律将他插入到一个已排好序的数组中:

#include 
int main()  
{  int arr[11]={1,4,6,9,13,16,19,28,40,100};int i, j, a;scanf("%d",&a);if (a > arr[9])     //如果a大于数组的最大值就直接插到尾部{arr[10] = a;}else {for ( i = 0; i < 10; i++)    {if (arr[i] > a){        //遍历数组找到第一项大于a的值,从那一项到数组最后一项往后挪一位,再把a插入到那一项的位置中并退出循环for ( j = 9; j >= i; j--)     {arr[j + 1] = arr[j];}arr[i] = a;break;			//插入完一定要结束循环!!}}}for ( i = 0; i < 11; i++){printf("%d ",arr[i]);}return 0;
}

将一个数组中的值按逆序重新存放,例如原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。(没说不能用新数组吧):

#include 
int main()
{int i, arr[9] = {5,9,6,2,4,61,71,6,81};int newArr[9];	//新数组int k = 8;		//数组长度for ( i = 0; i < 9; i++){newArr[i] = arr[k];		//把旧数组最后一项[k]赋值给新数组第一项[i]k--;	//k随i增加减少}for ( i = 0; i < 9; i++){printf("%d ",newArr[i]);}return 0;/*-----------正常同一个数组翻转--------------*/int i, arr[9] = {15,61,71,6,81,45,138,44,8};int t, arrlen = 8;		int a = arrlen % 2 == 0 ? arrlen/2 : arrlen/2+1;	//如果数组长度为单数则多执行一次for ( i = 0; i < a; i++)	//只执行数组长度的一半次数{t = arr[i];arr[i] = arr[arrlen-i];arr[arrlen-i] = t;		//与数组对应位置的元素交换}for ( i = 0; i < 9; i++){printf("%d ",arr[i]);}return 0;
}/*考试建议用这个*/ /*考试建议用这个*/ /*考试建议用这个*/
#include 
void exChange(int *x,int n) {	//n为数组长度int *i, *j, *p, t, m = (n-1)/2;i = x, j = x+n-1, p = x+m;      //i指向数组第一个值,j指向数组最后一个值,p指向数组中间的值(向下取整)for ( ; i <= p; i++,j--)        //交换 i 和 j 的值,同时向中间p ++和--{t = *i;*i = *j;*j = t;}
}
int main()
{int a[10] = {15,61,71,6,81,45,138,44,8,99};exChange(a,10);for (int i = 0; i < 10; i++){printf("%d ",a[i]);}return 0;
}

杨辉三角

程序设计语言题目__程序语言基础知识

#include 
int main()  
{  int len;scanf("%d",&len);int i, j;int arr[len][len];	//建立一个等宽二维数组for ( i = 0; i < len; i++){arr[i][0] = 1;	//每一行的第一项和最后一项都为1arr[i][i] = 1;for ( j = 1; j < i; j++)	//从第二项开始循环{arr[i][j] = arr[i-1][j-1] + arr[i-1][j];//第J项等于上一行的J-1和J项的和}}for ( i = 0; i < len; i++){for ( j = 0; j < len-i-1; j++)	//等腰三角形,直角可去{printf("  ");/* code */}for ( j = 0; j <= i; j++)	//输出每一项的值{printf("%4d",arr[i][j]);}printf("\n");}return 0;
}

函数 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,整数在键盘输入:

#include 
int big(int n1,int n2) {int i, t;if (n1 < n2){t = n2;n2 = n1;n1 = t;}for ( i = n2; i > 0; i--){if (n1 % i == 0 && n2 % i == 0){return i;}}
} 
int small(int n1,int n2,int n3) {return (n1 * n2) / n3;
}int main()  
{  int n1,n2;scanf("%d%d",&n1,&n2);int num = big(n1,n2);printf("最大公约数为:%d\n",num);printf("最小公倍数为:%d",small(n1,n2,num));return 0;
}

写一个判断素数的函数,输入一个素数,输出是否素数的信息:

#include int prime(int n) {int i, j;for ( i = 2; i < n; i++){if (n % i == 0){printf("不是素数");return 0;}}printf("%d是素数",n);
}int main()  
{  int n;scanf("%d",&n);prime(n);return 0;
}

写一个函数,翻转输入的字符串:

#include 
#include 
void reveStr(char str[]) {int i, len = strlen(str), n = len - 1;char newStr[len];for ( i = 0; i <= len; i++)		//i <= len因为要把'\0'也拿过来{newStr[i] = str[i + n];		//最后一项给新字符串第一项赋值,依次到倒数第二项···n -= 2;}puts(newStr);-------------与数组翻转相同--------------------int i, len, a, t;len = strlen(str)-1;a = len%2==0 ? len/2 : len/2+1;for ( i = 0; i < a; i++){t = str[i]; str[i] = str[len-i]; str[len-i] = t;}puts(str);
}int main()  
{  char str[100];gets(str);reveStr(str);return 0;
}

一个连接两个字符串的函数:

#include 
#include 
void strCat(char str[],char str2[]) {int len = strlen(str);int len2 = strlen(str2);char newStr[len + len2];int i;for ( i = 0; i < len+len2; i++){if (i < len){newStr[i] = str[i];}else if(i >= len){newStr[i] = str2[i-len];}}newStr[i] = '\0';puts(newStr);
}
int main()  
{  char str[100];gets(str);char str2[100];gets(str2);strCat(str,str2);return 0;
} 
//------------------老赖做法
#include 
#include 
void connect(char str1[],char str2[]) {strcat(str1,str2);puts(str1);
}int main()  
{  char str1[100];char str2[100];gets(str1);gets(str2);connect(str1,str2);return 0;
}

写一个函数,输入一个4位数字,要求每两个数字中间有一个空格,例如输入1234,输出1 2 3 4。

#include 
#include 
void space(char str[]) 
{int i;for(i=strlen(str);i>0;i--)      //从数组最后一个元素开始,到第二个元素结束,也就是'\0'- 输入的第一个数{str[2*i]=str[i];            //因为加每个数中加空格 = 数组长度*2是最后一项,把数组最后一项'\0'放在数组长度*2 位置上str[2*i-1]=' ';             //并在前一个位置加空格,继续循环倒数第二项,然后加空格····}printf("\nOutput:\n%s",str);
}int main()  
{  char str[100];gets(str);space(str);return 0;
}
//-----------------------老赖做法
#include 
#include 
#define MaxSize 100
void space(char str[]){int i;for ( i = 0; i < strlen(str); i++){printf("%c ",str[i]);}}
int main()
{char str[MaxSize];gets(str);space(str);return 0;
}

写一个函数,传入一个字符串,统计其中字母、数字、空格和其他字符的个数:

#include 
#include 
void Statistics(char str[]) {int len = strlen(str);int i, letter = 0, num = 0, space = 0, other = 0;for ( i = 0; i < len; i++){if (str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z'){letter++;}else if (str[i] >= '0' && str[i] <= '9'){num++;}else if (str[i] == ' '){space++;}else {other++;}}printf("字母:%d,数字:%d,空格:%d,其他:%d",letter,num,space,other);}int main()  
{  char str[100];gets(str);Statistics(str);return 0;
}

写一个函数,用冒泡排序对输入的10个字符排序:

#include 
int maopao(int num[]) {int i, j, t = 0;for ( i = 0; i < 9; i++){for ( j = 0; j < 9 - i; j++){   if (num[j] > num[j+1]){t = num[j];num[j] = num[j+1];num[j+1] = t;}}}for ( i = 0; i < 10; i++){printf("%d ",num[i]);}
}int main()  
{  int num[100];int i;for ( i = 0; i < 10; i++){scanf("%d",&num[i]);}maopao(num);return 0;
}

输入一个整数n,求斐波那契数列的第n项:

斐波那契数列:每一项等于前二项的和,例如1,1,2,3,5,8,13·····

#include 
long Fibonacci(int n) {long s;if (n == 1 || n == 2){return 1;}else {s = Fibonacci(n-1) + Fibonacci(n-2);}return s;
}
int main()  
{  int n;scanf("%d",&n);if (n < 0){printf("不能为0");}else {printf("第%d项的值为:%ld",n,Fibonacci(n));}return 0;
} 

输入10个整数,将最小的数与第一个数对换,最大的数与最后一个对换

#include 
void change(int a[10]) {int max = a[0],min = a[0],t,i,imax = 0,imin = 0;for ( i = 0; i < 10; i++){if (a[i] > max){max = a[i];imax = i;}if (a[i] < min){min = a[i];imin = i;}}t = a[0];a[0] = a[imin];a[imin] = t;t = a[9];a[9] = a[imax];a[imax] = t;
}
int main()  
{  int a[10],i;for ( i = 0; i < 10; i++){scanf("%d",&a[i]);}change(a);for ( i = 0; i < 10; i++){printf("%d ",a[i]);}return 0;
} 

指针 输入三个整数,要求从大到小排序输出,用函数实现:

#include 
void swap(int *pt,int *pt1) {int t;t = *pt;*pt = *pt1;*pt1 = t;
}
void Big(int *q,int *q1,int *q2) {if (*q < *q1){swap(q,q1);} if (*q < *q2){swap(q,q2);}if (*q1 < *q2){swap(q1,q2);}
}
int main()  
{  int a, b, c, *p, *p1, *p2;scanf("%d%d%d",&a,&b,&c);p = &a;p1 = &b;p2 = &c;Big(p,p1,p2);printf("%d %d %d",a,b,c);return 0;
}

输入三个字符串,从小到大排序:

#include 
#include 
void change(char *q,char *q1) {char str[20];strcpy(str,q);strcpy(q,q1);strcpy(q1,str);
}
void Big(char *pt,char *pt1,char *pt2) {if (strcmp(pt,pt1) > 0){change(pt,pt1);}if (strcmp(pt,pt2) > 0){change(pt,pt2);}if (strcmp(pt1,pt2) > 0){change(pt1,pt2);}
}
int main()  
{  char a[100], b[100], c[100];gets(a);gets(b);gets(c);char *p ,*p1 ,*p2;p = a;p1 = b;p2 = c;Big(p,p1,p2);printf("%s %s %s",a,b,c);return 0;
} 

输入10个整数,将最小的数与第一个数对换,最大的数与最后一个对换:

#include 
#include 
void change(int a[10]) {int i ,t;int *p,*max,*min;p = max = min = a;for ( i = 0; i < 10; i++,p++){if (*p > *max){max = p;}  if (*p < *min){min = p;}}t = a[0];a[0] = *min;*min = t;t = a[9];a[9] = *max;*max = a[9];}
int prin(int a[10]) {int i;for ( i = 0; i < 10; i++){printf("%d ",a[i]);}  
}
int main()  
{  int i, a[10];for ( i = 0; i < 10; i++){scanf("%d",&a[i]);}  change(a); prin(a);return 0;
} 

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了