脚本宝典收集整理的这篇文章主要介绍了C语言程序设计常见题目,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
本文总结了从入门c语言中的常见题目,目前更新到循环结构;
接下来的数组,函数,指针,还有字符串的相关题型后续更新;
日后还会更新,在编程过程中常见的易错点。喜欢的留波关注!!
有意见的可以私信我滴!建议我大多数会采取的,^_^
目录
写在前面:
注:vs2019中scanf不可用,固下列有些函数是scanf_s;
1程序设计
1.1鸡兔同笼*
2有关于常量
2.1计算圆的面积(define常量)
2.2计算本利和(const常量)
3.数据的运算处理
三,运算
1.条件运算:表达式1成立,输出2,不成立,输出3;
2.类型转换
3.1疯狂赛车(if的单判断)(逻辑控制语句)
4.程序的顺序结构
4.0整数的逆序(复合语句)
四(1),分支结构的嵌套
4.1x,y,z排序(if的嵌套)(逻辑控制语句)
4.2水仙花数(if循环)(逻辑控制语句)
4.3百分制转化为等级制(Switch)(算数值控制的选择结构)
4.4某年某月有多少天(switch进阶)
四,循环结构
1.while循环(当型循环):可以一次循环都不进行;例:
2.do while循环(直到型循环):必须执行一次;(注意do—while中while后加' ; '。
3.for循环:已知循环初始值,循环次数,循环递进数;
4.循环结构的嵌套
5.break语句
6.continue语句
4.5偶数和(for循环)
4.6整数的数位(do-while循环)
4.6(2)整数的数位(while循环)
4.7欧几里得算法(while循环)
4.8百元买百鸡(for的嵌套循环)
4.9素数的判定(break语句)
4.9(2)素数的判断(外加判断数)
4.10哥德巴赫猜想(各语句的综合使用)
程序设计是有魅力的,她的魅力在与我们如何将抽象
问题利用最简洁实用的程序解决出来,我就是深深迷恋上这种感觉。
程序设计更重要的是如何利用自己的逻辑思维将现实应用类问题与程序语言相匹配,更重要的是:
最后:学习非一日之功,戒骄戒躁,耐心学习才是正道,不勾于学习形式,而求得知识于脑中,希望大家能踏实设计,有了思路与方向再写程序,避免思维混乱。
希望共同进步,未来可期!
第一步:设出普通方程,M个头,N个脚,设鸡有x只,兔有y只;
第二步:找出相应的方程关系:x + y = M; 2x + 4y = N;(if型判断);
条件:0<x,y<M(for型循环)(if型判断);
编程思维:
1,利用条件构成循环,2,关系式做判断输出,3,然后用条件作为判断依据,符合的话,输出答案,不符合的话输出无解 4,两个变量用一个变量表示。
#include <stdio.h> /*运算过程中全是英文字母,别出现中文字符*/
int main()
{
int M,N;
int chicken,rabbit; /*变量名尽量取得有意义*/
printf("请输入头的个数和脚的个数:")
scanf("%d%d"),&a,&b; /*scanf中间可以用 tab enter 还有空格,不能是,*/
for(chicken = 0;chicken <= M;chicken++)/*把两个所求变量用一个所求变量表示,有利于求解*/
{
rabbit = M - chicken;
if (2 * chicken + 4 * rabbit == N) break; /*循环语句中的if后面一般加break;方便跳出*/
}
if(chicken <= M) /*判断语句后面不加;*/
printf("鸡有%d只,兔子有%d只n",chicken,rabbit); /*普通语句后面必须加;*/
else
printf("输入的数据不合理,无解n"); /*else 必须要和 if 对齐*/
return 0; /*缩进要对齐*/
}
符号常量define const常量
#include <stdio.h>
#define PI 3.14 //定义符号常量define 常用于复杂数字的频繁使用
int main()
{
int radius;
double area;
radius = 10; //变量一定要有定义
area = PI * radius * radius; //注意自动转换
printf("radius = %d, area =%6.2f",radius,area); //6代表占据的长度,2代表小数位
return 0;
}
const常量使用条件
使用定义常量时,注意基类型:
#include <stdiio.h>
const double RATE = 0.03; //全局变量,const定义的常量 一般全局变量加G rate
//常用于定义数字比较复杂且使用频繁
int main()
{
double interest, foundMoney, sumMoney;
foundMoney = 1000;
interest = foundMoney * RATE;
sumMoney = foundMoney + interest * 0.8; //逆向思维 税为20% 则计算利息*80%
printf("存入人民币%8.2f元n",foundMoney);
printf("一年后的本息和为%8.2f元n",sumMoney);
return 0;
}
表达式1?表达式2:表达式3
int i =2, j = 3,k;
k = i > j ? i : j; //i>j不成立,k = j;
k = ( i > 1 ? 5 : 8) + j //加上()为条件表达式,k = 5,然后进行相加;
(1)自动类型转换:char→short→int→long→float→double(从低到高)
(2)强制类型转换:高转低如:double i = 3.14;(int)i 强制转换double为int;
一般有精度损失;
例: 由于存储都是低地址向高地址,所有容易直接截取低地址的值,然后值就错误
double x = 3.6, y = 3.8;
int a;
a = x+ y;
a = (int)(x + y); //强制转换(x+y)
a = (int)x + y; //强制转换x
通过判断符,化抽象为具体。再判断符合赢得标准,得出答案。
#include <stdio.h>
int main()
{
char thisCar = '2';
int count;
count = (thisCar == '2') + (thisCar =='4') + (thisCar =='3') + (thisCar != '4');
if (count == 1) //通过判断符转化赢的可能为数字
printf("2号赛车能够赢得胜利!n")
else
printf("2号赛车不能赢得胜利!n") //判断赢时的数字是否正确
return 0;
}
整数的逆序就整数求余翻倍加和的结果;
当遇到比较大的整数求逆序可以使用变量y存储商或者使用循环语句;(如4.1)
#include <stdio.h>
int main()
{
int num,x,y,numN;
printf("请输入一个两位数的整数:n")
scanf("%d",&sum)
x = num % 10; //x存个位
y = num / 10; //y存十位
numN = x * 10 + y;
printf("这个整数的逆序是%d",numN);
return 0;
}
if的嵌套
if (x + y) if (y > z) x = 0; else x =1;
//上下等价
if (x + y)
if (y > z) x = 0;
else x = 1;
if(x > 0) sign = 1;
else if (x < 0) sign = -1; //else与最前面没配对的if配对
else sign
if(x > 0)
{
sign = 1;
if (x > 10)
{
sign = 10; //最好多个if时,上下加上{}
}
else
sigen = 5;
}
else
sign = 0;
int x =0,y = 0,z=0,temp = 0;
temp = x; x = y; y = z; z = temp;
#include <stdio.h>
int main()
{
int x , y , z ;
int temp = 0;
printf("请输入x,y,z的值:");
scanf_s("%d %d %d", &x, &y, &z);
if (x > y)
{
temp = x; x = y; y = temp; //1 2
if (x <= z && z < y) //上下的if中x与y重叠了,所以输入不对 还有不能连比大小
{
temp = z; z = y; y = temp;
}
if (z <= x)
{
temp = z; z = y; y = x; x = temp;
}
}
else
if (x <= z && z < y)
{
temp = z; z = y; y = temp;
}
if (z <= x)
{
temp = z; z = y; y = x; x = temp;
}
printf("输出的大小顺序为%d<%d<%d", x, y, z);
return 0;
}
问题:三位数整数,各位立方的和等于本身。
想法:1.分离整数('/'和'%'的使用)2.判断是否符合(if)
3.int x1,x2,x3,sum;scanf(sum) ;(如果变量尚未定义不能被计算;
4.因为sum会被连用所以再加入一个变量y来介入sum的商;
程序:(单个if不加{},当多个if和else连用的时候最好加上{})
#include <stdio.h>
int main()
{
int x1, x2, x3, y;
int sum; //输入三总值
printf("请输入一个三位数整数:n");
scanf_s("%d", &sum);
x1 = sum % 10; //x1是个位数,以此类推
y = sum / 10;
x2 = y % 10;
x3 = y / 10;
if (sum == x1 * x1 * x1 + x2 * x2 * x2 + x3 * x3 * x3)
printf("%d是水仙花数n", sum);
else
printf("%d不是水仙花数n", sum);
return 0;
}
switch(表达式) //算数表达式
{
case 常量表达式1: 语句1 ;break;
case 常量表达式2: 语句2 ;break;
case 常量表达式3: 语句3 ;break;
case 常量表达式n: 语句n ;break;//语句可以为任何语句(包含复合语句等)
default:语句n+1;break;其他项,可选写,如果有一定放在最后,相当于else
}
通俗表示就是:
就是switch数字等于case数字,jint完成后面语句,然后跳出;
#include <stdio.h>
int main()
{
float score;
char grade;
printf("请输入学生成绩分数:");
scanf_s("%f", &score);
switch ((int)score / 10)
{
case 10: //case10 与case9共用一个程序段,Switch一般为int类型
case 9:grade = 'A'; break;
case 8:grade = 'B'; break;
case 7:grade = 'C'; break; //单语句
case 6:grade = 'D'; break;
default: grade = 'E'; break;
}
printf("该学生的成绩等级为%c", grade);
return 0;
}
break为跳出循环,不再测试下面的,提高运行速率;
#include <stdio.h>
int main()
{
int yy, mm, days;
printf("请输入日期(年 月):");
scanf("%d%d", &yy, &mm);
switch (mm)
{
case 1:case 3: case 5: case 7: case 8: case 10: case 12: days = 31;
break;
case 4: case 6: case 9: case 11: days = 30;
break;
case 2: if ((yy % 4 == 0 && yy % 100 != 0) || (yy % 400 == 0)) days = 29;
else days = 28;
break; //多语句
}
printf("%d年%d月有%d天n", yy, mm, days);
return 0;
}
要点:case2独立出来,在一个判断语句中单独使用;
while (表达式) //逻辑表达式
语句 //一般加括号
result = 1; i = 1;
while (i <= n)
{
result *= i; //result = result * i;
i++;
}
do
语句;
while(表达式)
result = 1; i = 1; //result为阶乘结果,i为循环变量
do
{
result *= i; //result = result * i;
i++;
}while (i <= n);
int i;
for ( i = 0; i < 100; i ++) //完整
for ( i = 0; ; i ++) //可以无循环条件
int i = 0;
for (); i < 100; i ++) //无表达式1
九九乘法表
for (i = 1; i <= 9; i++) //i行
{
for (j = 1; j <= i; j++) //j列 j<=i正好是循环行的限制
printf("%dX%d = %2d ", j,i,j*i);
printf("n"); //第一行打印完毕换行
}
要点:内循环小于外循环;
含义是直接跳出循环。只跳出本层循环。
for (flag = 0, i = 1; i < 10; i++) //for开始可以多定义其他的变量
{
scanf("%d",&x);
if ( x < 0)
{
flag = 1; break; //直接跳出循环
}
}
if (flag == 1)
printf("输入的整数中有负数n");
else
printf("输入的整数中没有负数n");
含义:跳过下面的循环,从头重新开始循环。
for( count = 0;, i = 1; i <= 10; i++)
{
scanf("%d",&x);
if (x >= 0) continue;
printf("%4d",x);
count ++;
}
printf("n负数出现%d次n",count);
#include <stdio.h>
int main()
{
int i = 0,sum = 0; //sum是累加,i是循环变量
for (i = 2; i < 100; i += 2) //i = i + 2相同
{
sum += i; //sum = sum + i;
}
printf("100以内所有偶数的和为:%dn",sum);
return 0;
}
问题:计算整数所含数字的位数。
想法:连除以10(循环)计数器++计次。
#include <stdio.h>
int main()
{
int x,tempx,digits = 0;
printf("请输入一个整数:");
scanf("%d",&x);
tempx = x;
do
{
digits++; //计数加一
x = x / 10; //将x缩小10倍
} while (x != 0); //x不为0继续循环
printf("%d有%d位数字n",tempx,digits);
return 0;
}
要点:提前记值tempx = x;
#include <stdio.h>
int main()
{
int x,i = 0,tempx = 0;
printf("请输入判断的值:");
scanf("%d",&x);
tempx = x;
while (x != 0)
{
i++;
x = x / 10;
}
printf("%d有%d位数字",tempx,i);
return 0;
}
1.求两个自然数的最大公约数;
两个数相除求余,以此叠加,使余数为0,最后一个除数就是最大公约数。
#include <stdio.h>
int main()
{
int m,n,r;
printf("请输入两个正整数:");
scanf("%d %d",&m,&n);
r = m % n;
while(r != 0)
{
m = n;
n = r;
r = m % n;
}
printf("这两个整数的最大公约数是:%dn",n);
return 0;
}
要点:连续相除,变量的替换。
1,公鸡5元一只,母鸡3元一只,小鸡1元三只,一百元买一百只鸡,问公鸡,母鸡,小鸡,各买多少只?
想法:设公鸡x,母鸡y,小鸡z,限制范围,100元买一种鸡需要多少只(循环条件)
方程可能有多解,输出所有条件的解。
#include <stdio.h>
int main()
{
int x, y, z;
int count = 0; //解的个数初始化为0
for (x = 0; x <= 20; x++)
{
for (y = 0; y <= 33; y++)
{
z = 100 - x -y;
if ((z % 3 == 0) && (5 * x + 3 * y + z / 3 == 100))
{
count++;
printf("公鸡有%d只,母鸡有%d只,小鸡%d只n",x,y,z) ;
}
}
}
if(count == 0)
printf("问题无解n");
return 0;
}
要点:
#include <stdio.h>
int main()
{
int x, i; //i为循环变量
printf("请输入一个整数:");
scanf_s("%d",&x);
for(i = 2; i < x; i++)
{
if (x % i == 0) break; //break在这里是跳出循环,一般用于if之后,或者switch
}
if (i < x) //通过i判断
printf("%d不是素数n", x);
else if (x > 1)
printf("%d是素数n", x);
else
printf("%d不是素数n", x); //排除小于2的情况
return 0;
}
要点:判断i是正常输出,还是非正常输出。
注意:当输出为小于2值,需要排除(一般特殊排除,在细分的条件判断下排除)
#include <stdio.h>
int main()
{
int i = 0, count = 0;
int n = 0;
printf("请输入需要判断的数:");
scanf_s("%d", &n);
for (i = 2; i < n; i++)
{
if (n / i == 0)
count++; break;
}
if (count == 1)
printf("%d不是素数n", n);
else if (n > 1)
printf("%d是素数n", n);
else
printf("%d不是素数n",n);
return 0;
}
要点:判断count为1还是0,剔除其他不符合的条件
同上:要注意的是n小于2的情况。
任意大于2的偶数可以分解为两个素数之和。
想法:重点:此题为验证猜想,则默认条件都成立,无需添加不成立的情况。
#include <stdio.h>
int main()
{
int n, n1, n2, i;
printf("请输入一个偶数:");
scanf_s("%d", &n);
for (n1 = 2; n1 <= n / 2; n1++) //n1最小为2,最大为n/2
{
for (i = 2; i < n1; i++) //判断n1是否为素数
{
if (n1 % i == 0) break; //n1不是素数,跳出循环
}
if (i < n1) //n1不是素数,不用判断n2
continue; //跳过for余下语句
n2 = n - n1;
for (i = 2; i < n2; i++)
{
if (n2 % i == 0) break; //n2不是素数,跳出循环
}
if (i == n2) break; //n2是素数,跳出循环,等同于if( i >= n2)
}
printf("%d可分解为%d+%dn", n, n1, n2);
return 0;
}
要点:
写代码时要注意题目类型,在看懂题目类型的同时明确是判断,还是验证,还是等等。准确把握题目意思,可以高效且准确的写出代码,在此同时,看清题目要求,避免细节出错,同时思考是否可省略某步。
以上是脚本宝典为你收集整理的C语言程序设计常见题目全部内容,希望文章能够帮你解决C语言程序设计常见题目所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。