C程式設計題2
阿新 • • 發佈:2019-01-23
1.寫一個用矩陣法求定積分的通用函式,求
#include<stdio.h> #include<math.h> float integral(float a,float b,int n){ int i; float x,h,s; h=(b-1)/n; x=a;s=0; for(i=1;i<=n;i++) { x=x+h; s=s+sin(x)*h; } return s; } int main(){ float a1=1,b1=0,c; int n=20; c=integral(a1,b1,n); printf("sin:%f",c); return 0; }
2.輸入一個字串,內有數字和非數字字元,將其中連續的數字作為一個整數,依次存放在陣列a中,輸出
#include<stdio.h> int Digit(int i,int k,char b[]){ int p; int e=1,sum=0,n=0; //k找到連續的最後一個數字的後一位 for(p=k-2;p>=i;p--){//個位除外 n=b[p]-48;//轉換為數字 e=e*10;//位 sum=sum+n*e; } sum=sum+b[k-1]-48;//加上個位 return sum; } int main(){ char b[]="ab1234cdef56gh78ijk";//字串 int a[2];int i,j,k;//迴圈變數 int sum; for(i=0,j=0;b[i]!='\0';i++){ printf("b[i]:%c\n",b[i]); if(b[i]>='0'&&b[i]<='9'){ for(k=i+1;b[k]>='0'&&b[k]<='9';k++); sum=Digit(i,k,b); printf("\nsum:%d\n",sum); a[j++]=sum; i=k-1;//從k開始繼續從查詢 } } printf("陣列a中數字:\n"); for(i=0;i<j;i++)//j中記錄了有幾個數字 printf("%d ",a[i]); return 0; }
3.寫一個函式,實現兩個字串的比較。即自己寫一個strcmp函式,函式原型為:int strcmp(char *p1,char *p2);
當字串相等時,返回值為0,不相等時,返回第一個不同字元的ASCII碼差值
#include<stdio.h> int strcmp(char *p1,char *p2){ int i;//n,m分別記錄p1,p2字串長度 char *p=p1,*r=p2; while(*p==*r){//兩個字元相等 if(*p =='\0')//如果p1指向結束符,說明相等 return 0; //比較之後的兩個字元 p++;r++; } printf("p:%c,r:%c\n",*p,*r); return *p-*r; } int main(){ char a[]="abcdefg"; char b[]="abcdkfg"; int c; c=strcmp(a,b); printf("返回值為:%d",c); return 0; }
4.定義一個結構體變數(年、月、日),計算該日在本年中是第幾天。
#include<stdio.h>
typedef struct{
int year;
int month;
int day;
}Dates;
int leapyear(Dates a){
if(a.year%4==0&&a.year%100==0||a.year%400==0)
return 1;
else
return 0;
}
int days(Dates year){
int sum=0,i;
int b[12]={31,28,31,30,31,31,31,30,31,30,30,31};//一年中每個月的天數
for(i=0;i<year.month-1;i++)
sum=sum+b[i];//計算月份天數
if(leapyear(year))//判斷閏年
sum=sum+year.day+1;//閏年2月份多1天
else
sum=sum+year.day;
return sum;
}
int main(){
Dates y;
int n;
printf("請輸入是年月日:");
scanf("%d%d%d",&y.year,&y.month,&y.day);
n=days(y);
printf("計算該日在%d年中是第%d天",y.year,n);
return 0;
}
5.輸出乘法九九表1 2 3 4 5 6 7 8 9
2 4 8 16 32...
3 6 9 12 ...
4 ...
5
6
7
8
9
void DispMult(){
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
if(j==1)
printf("%d\t",i);
else
printf("%d\t",i*j);
}
printf("\n");
}
}
6.求555555的約數中最大的三位數是多少?
void MaxThree(int n){
int i=999;
while(i>100){//窮舉三位數
if(n%i==0)
break;
i--;
}
printf("%d的約數中最大的三位數是%d\n",n,i);
}
7.列印數字金字塔1
121
12321
1234321,至9層
void DispPyramid(){
int i,j,k,l;
for(i=1;i<9;i++){//9也就是9行
for(j=1;j<=9-i;j++)//負責輸出空格
printf(" ");
for(k=1;k<=i;k++)//負責輸出前面的數字
printf("%d",k);
for(l=i-1;l>0;l--)//負責輸出後面的數字
printf("%d",l);
printf("\n");
}
}
8.程式設計輸出下列高度為n的圖形1 3 6 10 15 21
2 5 9 14 20
4 8 13 19
7 12 18
11 17
16
當n=6時
void DispDraw(){
int i,j;
int k=1,m;
for(i=0;i<6;i++){
printf("%d\t",i+k);
k=k+i;
m=k;
j=i+1;
while(j<6){//列
printf("%d\t",m+j+1);
m=m+j+1;
j++;
}
printf("\n");
}
}